Dalam tutorial ini kita akan membuat komunikasi serial antara dua mikrokontroler ATMEGA8. Komunikasi yang dibangun di sini adalah jenis UART (Universal Asynchronous Receiver Transmitter). Dengan komunikasi serial ini data dapat dibagi antara dua mikrokontroler, yang dibutuhkan dalam berbagai sistem tertanam.
Komponen Diperlukan
Perangkat Keras: ATMEGA8 (2 buah), catu daya (5v), AVR-ISP PROGRAMMER, kapasitor 100uF (terhubung melintasi catu daya), resistor 1KΩ (dua buah), LED, Tombol.
Perangkat lunak: Atmel studio 6.1, progisp atau flash magic.
Diagram Sirkuit & Penjelasan
Mari kita pahami komunikasi serial di mikrokontroler AVR. Disini ATMEGA mengirimkan data ke ATMEGA lainnya secara serial. Ini memiliki mode komunikasi lain tetapi untuk komunikasi mudah kami memilih RS232. Pin RS232 pada ATMEGA8 pertama dihubungkan ke pin RXD pada ATMEGA8 kedua.
Komunikasi data yang dibangun diprogram untuk memiliki:
- Delapan bit data
- Dua bit stop
- Tidak ada bit pemeriksaan paritas
- Tingkat Baud 2400 BPS (Bits Per Second)
- Komunikasi asinkron (Tidak ada pembagian jam antara dua ATMEGA8)
Jadi kami memiliki dua set register untuk dua ATMEGA8 yang berbeda, di mana satu bertindak sebagai TRANSMITTER dan yang lainnya bertindak sebagai RECEIVER.
Sekarang untuk RS232 antarmuka antara dua mikrokontroler ATmega, fitur berikut harus dipenuhi untuk TRANSMITTER dan RECEIVER:
1. Pin TXD (fitur penerimaan data) dari pengontrol pertama harus diaktifkan untuk TRANSMITTER dan pin RXD pengontrol kedua harus diaktifkan untuk RECEIVER.
2. Karena komunikasi serial kita perlu mengetahui kapan byte data 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): (TRASMITTER SIDE) 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.
LIGHT GREY (RXC): (RECEIVING SIDE) Bit ini tidak disetel selama penyalaan tetapi digunakan selama bekerja untuk memeriksa apakah receiver siap menerima data atau tidak. Lihat program di RECEIVING SIDE untuk lebih jelasnya.
VOILET (TXEN): (TRASMITTER SIDE) Bit ini diset untuk mengaktifkan pin transmitter pada TRASMITTER SIDE.
RED (RXEN): (RECEIVING SIDE) Bit ini merepresentasikan fitur penerimaan data, bit ini harus diset agar data dari modul dapat diterima oleh controller, juga mengaktifkan pin RXD controller.
BROWN (RXCIE): Bit ini harus disetel untuk mendapatkan interupsi setelah penerimaan data berhasil. Dengan mengaktifkan bit ini kita mengetahui, tepat setelah data 8 bit diterima. Kami tidak akan menggunakan bit ini di sini jadi dibiarkan begitu saja.
PINK (URSEL): Bit ini harus disetel sebelum mengaktifkan bit lain di UCSRC, setelah menyetel bit lain yang diperlukan di UCSRC; URSEL harus dinonaktifkan atau ditiadakan. Kami tidak akan menggunakan bit ini di sini jadi dibiarkan sendiri.
KUNING (UCSZ0, UCSZ1, UCSZ2): (RECEIVING SIDE & TRASMITTER SIDE) Ketiga bit ini digunakan untuk memilih jumlah bit data yang kami terima atau kirim dalam sekali jalan.
Komunikasi antara dua ATMEGA dibentuk sebagai komunikasi delapan bit. Dengan mencocokkan komunikasi dengan tabel yang kami miliki, UCSZ0, UCSZ1 menjadi satu dan UCSZ2 menjadi nol.
Kami harus mengatur ini pada sisi penerima dan pemancar.
ORANGE (UMSEL): (RECEIVING SIDE & TRASMITTER SIDE) Bit ini diset berdasarkan apakah sistem berkomunikasi secara asynchronous (keduanya menggunakan jam yang berbeda) atau sinkron (keduanya menggunakan jam yang sama).
Kedua pengontrol 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): (SISI PENERIMA & SISI PEMECAH) Kedua bit ini disesuaikan berdasarkan paritas bit yang kami gunakan dalam komunikasi.
ATMEGA diprogram untuk mengirim data tanpa paritas, karena panjang transmisi data 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): (RECEIVING SIDE & TRASMITTER SIDE) Bit ini digunakan untuk memilih jumlah stop bits yang kita gunakan selama komunikasi.
Komunikasi yang dibuat di sini adalah jenis asynchronous, jadi untuk mendapatkan transmisi dan penerimaan data yang lebih akurat, kita perlu menggunakan dua bit stop, Oleh karena itu kami menetapkan USBS ke '1' di kedua pengontrol.
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 '25', dan baud rate diatur.
Seperti yang ditunjukkan di sirkuit, sebuah tombol dihubungkan di sisi pemancar. Saat tombol ini di tekan maka data delapan bit dikirim oleh TRANSMITTER dan data ini diterima oleh RECEIVER. Saat menerima data ini berhasil, itu mematikan LED yang terhubung ke ON dan OFF, yang menunjukkan transfer data yang berhasil antara dua pengontrol.