Dalam tutorial ini kita akan mewujudkan komunikasi bersiri antara dua mikrokontroler ATMEGA8. Komunikasi yang dibuat di sini adalah jenis UART (Universal Asynchronous Receiver Transmitter). Dengan data komunikasi bersiri ini dapat dikongsi antara dua mikrokontroler, yang diperlukan dalam berbagai sistem tertanam.
Komponen Diperlukan
Perkakasan: ATMEGA8 (2 keping), bekalan kuasa (5v), PROGRAMMER AVR-ISP, kapasitor 100uF (disambungkan merentasi bekalan kuasa), perintang 1KΩ (dua keping), LED, Butang.
Perisian: Atmel studio 6.1, progisp atau flash magic.
Gambarajah & Penjelasan Litar
Marilah kita memahami komunikasi bersiri dalam mikrokontroler AVR. Di sini ATMEGA menghantar data ke ATMEGA yang lain secara bersiri. Ia mempunyai mod komunikasi yang lain tetapi untuk komunikasi yang mudah, kita memilih RS232. Pin RS232 ATMEGA8 pertama disambungkan ke pin RXD ATMEGA8 kedua.
Komunikasi data yang dibuat diprogramkan untuk memiliki:
- Lapan bit data
- Dua bit berhenti
- Tidak ada sedikit pun semak pariti
- Baud rate 2400 BPS (Bit Per Detik)
- Komunikasi tak segerak (Tiada bahagian jam antara dua ATMEGA8)
Oleh itu, kami mempunyai dua set daftar untuk dua ATMEGA8 secara berbeza, di mana satu bertindak sebagai PENGANGKUTAN dan yang lain bertindak sebagai PENERIMA.
Sekarang untuk penghubung RS232 antara dua mikrokontroler ATmega, ciri-ciri berikut mesti dipenuhi untuk PENGANGKUTAN dan PENERIMA:
1. Pin TXD (ciri penerimaan data) pengawal pertama mesti diaktifkan untuk TRANSMITTER dan pin RXD pengawal kedua mesti diaktifkan untuk PENERIMA.
2. Oleh kerana komunikasi bersifat bersiri, kita perlu mengetahui kapan bait data diterima, sehingga kita dapat menghentikan program sehingga bait lengkap diterima. Ini dilakukan dengan membolehkan data menerima gangguan sepenuhnya.
3. DATA dihantar dan diterima ke pengawal dalam mod 8bit. Oleh itu, dua watak akan dihantar ke pengawal pada satu masa.
4. Tidak ada bit pariti, satu bit berhenti dalam data yang dihantar oleh modul.
Ciri-ciri di atas ditetapkan dalam daftar pengawal; kita akan membincangkannya secara ringkas,
DARK GREY (UDRE): (TRASMITTER SIDE) Bit ini tidak ditetapkan semasa permulaan tetapi ia digunakan semasa bekerja untuk memeriksa sama ada pemancar sudah siap dihantar atau tidak. Lihat program di TRASMITTER SIDE untuk maklumat lebih lanjut.
LIGHT GREY (RXC): (MENERIMA SISI) Bit ini tidak ditetapkan semasa permulaan tetapi ia digunakan semasa bekerja untuk memeriksa sama ada penerima bersedia menerima data atau tidak. Lihat program di RECEIVING SIDE untuk keterangan lebih lanjut.
VOILET (TXEN): (TRASMITTER SIDE) Bit ini ditetapkan untuk mengaktifkan pin pemancar pada TRASMITTER SIDE.
MERAH (RXEN): (MENERIMA SISI) Bit ini mewakili ciri data penerimaan, bit ini mesti ditetapkan agar data dari modul diterima oleh pengawal, ia juga membolehkan pin pengawal RXD.
BROWN (RXCIE): Bit ini mesti ditetapkan untuk mendapat gangguan setelah penerimaan data berjaya. Dengan mengaktifkan bit ini kita dapat mengetahui, tepat setelah data 8 bit diterima. Kami tidak akan menggunakan bit ini di sini sehingga dibiarkan begitu sahaja.
PINK (URSEL): Bit ini mesti ditetapkan sebelum mengaktifkan bit lain di UCSRC, setelah menetapkan bit lain yang diperlukan di UCSRC; URSEL mesti dilumpuhkan atau dihentikan. Kami tidak akan menggunakan bit ini di sini sehingga dibiarkan begitu sahaja.
KUNING:
Komunikasi antara dua ATMEGA dijalin sebagai komunikasi lapan bit. Dengan memadankan komunikasi dengan jadual yang kita miliki, UCSZ0, UCSZ1 menjadi satu dan UCSZ2 menjadi sifar.
Kita harus menetapkan ini pada kedua sisi penerimaan dan penghantaran.
ORANGE (UMSEL): (MENERIMA SIDE & TRASMITTER SIDE) Bit ini ditetapkan berdasarkan sama ada sistem berkomunikasi secara tidak segerak (kedua-duanya menggunakan jam yang berbeza) atau segerak (kedua-duanya menggunakan jam yang sama).
Kedua-dua pengawal tidak berkongsi jam. Oleh kerana kedua-duanya menggunakan jam dalaman mereka sendiri. Oleh itu, kita perlu menetapkan UMSEL ke 0 di kedua-dua pengawal.
HIJAU (UPM1, UPM0): (MENERIMA SISI & SISI TRASMITTER) Kedua-dua bit ini disesuaikan berdasarkan keseimbangan bit yang kita gunakan dalam komunikasi.
ATMEGA diprogram untuk mengirim data tanpa paritas, kerana panjang penghantaran data kecil, kita dapat dengan jelas mengharapkan tidak ada kehilangan atau kesalahan data. Oleh itu, kita tidak menetapkan kesamaan di sini. Oleh itu, kami menetapkan kedua-dua UPM1, UPM0 ke sifar atau mereka dibiarkan, kerana semua bit adalah 0 secara lalai..
BLUE (USBS): (MENERIMA SIDE & TRASMITTER SIDE) Bit ini digunakan untuk memilih bilangan bit berhenti yang kita gunakan semasa komunikasi.
Komunikasi yang dibuat di sini adalah jenis tak segerak, jadi untuk mendapatkan penghantaran dan penerimaan data yang lebih tepat, kita perlu menggunakan dua bit berhenti, Oleh itu kita menetapkan USBS ke '1' di kedua-dua pengawal.
Kadar baud ditetapkan dalam pengawal dengan memilih UBRRH yang sesuai.
Nilai UBRRH dipilih dengan kadar baud silang dan frekuensi kristal CPU.
Oleh itu, nilai UBRR rujukan silang dilihat sebagai '25', dan kadar baud ditetapkan.
Seperti yang ditunjukkan dalam rangkaian, butang disambungkan di sisi pemancar. Apabila butang ini ditekan, data lapan bit dihantar oleh TRANSMITTER dan data ini diterima oleh RECEIVER. Setelah berjaya menerima data ini, ia menukar LED yang disambungkan ke ON dan OFF, yang menunjukkan pemindahan data yang berjaya antara dua pengawal.