Disini kita akan menjalin komunikasi antara mikrokontroler ATmega8 dan Arduino Uno. Komunikasi yang dibangun di sini adalah jenis UART (Universal Asynchronous Receiver Transmitter). Ini komunikasi serial. Dengan komunikasi serial ini data dapat dibagi antara dua pengontrol, yang diperlukan dalam berbagai aplikasi sistem tertanam.
Dalam sistem tertanam kita harus memiliki pengetahuan dasar tentang komunikasi sistem, jadi untuk ini kami melakukan proyek ini. Dalam proyek ini kami akan membahas sistem komunikasi dasar dan kami akan mengirimkan beberapa data dari pemancar ke penerima secara serial.
Dalam proyek ini ATMEGA8 bertindak sebagai TRANSMITTER dan ARDUINO UNO bertindak sebagai RECECIVER. Dalam komunikasi serial kami akan mengirimkan data BIT BY BIT, hingga BYTE data ditransfer sepenuhnya. Data dapat berukuran 10bit tetapi kami akan menyimpan hingga 8BITS untuk saat ini.
Komponen Diperlukan
Perangkat keras: ATMEGA8, ARDUINO UNO, power supply (5v), AVR-ISP PROGRAMMER, kapasitor 100uF (terhubung melalui catu daya), resistor 1KΩ (dua buah), LED, Tombol.
Perangkat lunak: Atmel studio 6.1, progisp atau flash magic, ARDUINO NIGHTLY.
Diagram Sirkuit dan Penjelasannya
Sebelum kita membahas diagram rangkaian dan pemrograman untuk pemancar dan penerima, kita perlu memahami tentang komunikasi serial. ATMEGA disini mengirimkan data ke UNO secara berseri seperti yang telah dibahas sebelumnya.
Ini memiliki mode komunikasi lain seperti komunikasi MASTER SLAVE, komunikasi JTAG tetapi untuk komunikasi mudah kami memilih RS232. Di sini kami akan menghubungkan PIN TXD (Transmitter) ATMEGA8 ke RXD (Penerima) PIN ARDUINO UNO
Komunikasi data yang dibangun diprogram untuk memiliki:
- Delapan bit data
- Dua bit stop
- Tidak ada bit pemeriksaan paritas
- Tingkat Baud 9600 BPS (Bits Per Second)
- Komunikasi asinkron (Tidak ada pembagian jam antara ATMEGA8 dan UNO (keduanya memiliki unit jam yang berbeda))
Untuk membangun UART antara Arduino Uno dan ATMEGA8 kita perlu memprogram pengaturan secara akurat. Untuk ini kita perlu menjaga parameter yang disebutkan di atas tetap sama di kedua ujungnya. Dalam hal ini bertindak sebagai TRANSMITTER dan tindakan lainnya sebagai RECEIVER. Kami akan membahas setiap pengaturan sisi di bawah ini.
Sekarang untuk antarmuka RS232, fitur berikut harus dipenuhi untuk sisi TRANSMITTER (ATMEGA8):
1. Pin TXD (fitur penerimaan data) dari pengontrol pertama harus diaktifkan untuk TRANSMITTER.
2. Karena komunikasi serial kita perlu mengetahui kapan data bye diterima, sehingga kita dapat menghentikan program sampai byte lengkap diterima. Ini dilakukan dengan memungkinkan data menerima interupsi lengkap.
3. DATA dikirim dan diterima ke pengontrol dalam mode 8bit. Jadi dua karakter akan dikirim ke pengontrol sekaligus.
4. Tidak ada bit paritas, satu bit stop dalam data yang dikirim oleh modul.
Fitur-fitur di atas diatur dalam register pengontrol; kita akan membahasnya secara singkat:
DARK GREY (UDRE): Bit ini tidak disetel selama penyalaan tetapi digunakan selama bekerja untuk memeriksa apakah pemancar siap untuk mengirim atau tidak. Lihat program di SISI PEMECAH untuk lebih jelasnya.
VOILET (TXEN): Bit ini diset untuk mengaktifkan pin pemancar pada TRASMITTER SIDE.
KUNING (UCSZ0, UCSZ1, dan UCSZ2): Ketiga bit ini digunakan untuk memilih jumlah bit data yang kami terima atau kirim dalam sekali jalan.
Komunikasi antara dua SISI dibentuk sebagai komunikasi delapan bit. Dengan mencocokkan komunikasi dengan tabel yang kami miliki, UCSZ0, UCSZ1 menjadi satu dan UCSZ2 menjadi nol.
ORANGE (UMSEL): Bit ini diatur berdasarkan apakah sistem berkomunikasi secara asinkron (keduanya menggunakan jam yang berbeda) atau secara sinkron (keduanya menggunakan jam yang sama).
Kedua SYTEM tidak berbagi jam apa pun. Karena keduanya menggunakan jam internal masing-masing. Jadi kita perlu menyetel UMSEL ke 0 di kedua pengontrol.
HIJAU (UPM1, UPM0): Kedua bit ini disesuaikan berdasarkan paritas bit yang kami gunakan dalam komunikasi.
ATMEGA data di sini diprogram untuk mengirim data tanpa paritas, karena panjang transmisi datanya kecil, kita dapat dengan jelas mengharapkan tidak ada kehilangan atau kesalahan data. Jadi kami tidak menyetel paritas apa pun di sini. Jadi kami menetapkan UPM1, UPM0 ke nol atau dibiarkan, karena semua bit adalah 0 secara default.
BLUE (USBS): Bit ini digunakan untuk memilih jumlah stop bits yang kita gunakan selama komunikasi.
Komunikasi yang dibangunnya adalah jenis asynchronous, jadi untuk mendapatkan transmisi dan penerimaan data yang lebih akurat, kita perlu menggunakan dua stop bits, maka kita setel USBS ke '1' di sisi TRANSMITTER..
Tingkat baud diatur dalam pengontrol dengan memilih UBRRH yang sesuai:
Nilai UBRRH dipilih dengan referensi silang baud rate dan frekuensi kristal CPU:
Jadi dengan referensi silang nilai UBRR dilihat sebagai '6', dan baud rate ditetapkan.
Dengan ini kami telah menetapkan pengaturan di SISI TRANSMITTER; kita akan berbicara tentang MENERIMA SISI sekarang.
Komunikasi serial yang memungkinkan di UNO dapat dilakukan dengan menggunakan satu perintah.
|
Komunikasi yang kami asumsikan untuk membangun dilakukan dengan tingkat BAUD 9600 bit per detik. Jadi untuk UNO untuk membuat baud rate dan untuk memulai komunikasi serial kita menggunakan perintah "Serial.begin (9600);". Di sini 9600 adalah baud rate dan dapat diubah.
Sekarang semua dibiarkan jika menerima data, satu data diterima oleh UNO, itu akan tersedia untuk diambil. Data ini diambil dengan perintah “acceptdata = Serial.read ();”. Dengan perintah ini, data serial dibawa ke 'acceptdata' bernama integer.
Seperti yang ditunjukkan pada rangkaian sebuah tombol yang terhubung pada sisi pemancar, ketika tombol ini di tekan maka data delapan bit dikirim oleh TRANSMITTER (ATMEGA8) dan data ini diterima oleh RECEIVER (ARDUINO UNO). Saat menerima data ini dengan sukses, itu akan mematikan LED yang terhubung ke ON dan OFF, untuk menunjukkan transfer data yang berhasil antara dua pengontrol.
Dengan ini komunikasi UART antara pengontrol ATMEGA8 dan ARDUINO UNO berhasil dibuat.