Di sini kita akan menjalin komunikasi antara mikrokontroler ATmega8 dan Arduino Uno. Komunikasi yang dibuat di sini adalah jenis UART (Universal Asynchronous Receiver Transmitter). Ini komunikasi bersiri. Dengan data komunikasi bersiri ini dapat dibagi antara dua pengawal, yang diperlukan dalam berbagai aplikasi sistem tertanam.
Dalam sistem tertanam kita mesti mempunyai pengetahuan asas mengenai komunikasi sistem, jadi untuk ini kita melakukan projek ini. Dalam projek ini kami akan membincangkan sistem komunikasi asas dan kami akan menghantar beberapa data dari pemancar ke penerima secara bersiri.
Dalam projek ini ATMEGA8 bertindak sebagai PENGANGKUTAN dan ARDUINO UNO bertindak sebagai PENERIMA. Dalam komunikasi bersiri, kami akan menghantar data BIT BY BIT, sehingga data BYTE dipindahkan sepenuhnya. Data boleh berukuran 10bit tetapi kami akan mengekalkan 8BITS buat masa ini.
Komponen Diperlukan
Perkakasan: ATMEGA8, ARDUINO UNO, bekalan kuasa (5v), PROGRAMMER AVR-ISP, kapasitor 100uF (disambungkan merentasi bekalan kuasa), perintang 1KΩ (dua keping), LED, Butang.
Perisian: Atmel studio 6.1, sihir progisp atau flash, ARDUINO NIGHTLY.
Rajah dan Penjelasan Litar
Sebelum kita membincangkan rajah litar dan pengaturcaraan untuk pemancar dan penerima, kita perlu memahami mengenai komunikasi bersiri. ATMEGA di sini menghantar data ke UNO secara bersiri seperti yang dibincangkan sebelumnya.
Ia mempunyai mod komunikasi lain seperti komunikasi MASTER SLAVE, komunikasi JTAG tetapi untuk komunikasi yang mudah, kami memilih RS232. Di sini kita akan menyambungkan PIN TXD (Pemancar) ATMEGA8 ke RXD (Penerima) ARDUINO UNO
Komunikasi data yang dibuat diprogramkan untuk memiliki:
- Lapan bit data
- Dua bit berhenti
- Tidak ada sedikit pun semak pariti
- Kadar baud 9600 BPS (Bit Per Detik)
- Komunikasi tak segerak (Tiada bahagian jam antara ATMEGA8 dan UNO (kedua-duanya mempunyai unit jam yang berbeza))
Untuk mewujudkan UART antara Arduino Uno dan ATMEGA8 kita perlu memprogram tetapan dengan tepat. Untuk ini kita perlu memastikan parameter yang disebutkan di atas sama di kedua-dua hujungnya. Dalam satu ini bertindak sebagai PENGANGKUTAN dan tindakan lain sebagai PENERIMA. Kami akan membincangkan setiap tetapan sisi di bawah.
Sekarang untuk antara muka RS232, ciri-ciri berikut mesti dipenuhi untuk bahagian TRANSMITTER (ATMEGA8):
1. Pin TXD (ciri penerimaan data) pengawal pertama mesti diaktifkan untuk TRANSMITTER.
2. Oleh kerana komunikasi bersifat bersiri, kita perlu mengetahui setiap kali data selamat 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): 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.
VOILET (TXEN): Bit ini ditetapkan untuk mengaktifkan pin pemancar di Sisi TRASMITTER.
KUNING (UCSZ0, UCSZ1, dan UCSZ2): Ketiga bit ini digunakan untuk memilih bilangan bit data yang kami terima atau hantar dalam sekali jalan.
Komunikasi antara dua SIDES dijalin sebagai komunikasi lapan bit. Dengan memadankan komunikasi dengan jadual yang kita miliki, UCSZ0, UCSZ1 menjadi satu dan UCSZ2 menjadi sifar.
ORANGE (UMSEL): Bit ini ditetapkan berdasarkan sama ada sistem berkomunikasi secara tidak segerak (kedua-duanya menggunakan jam yang berbeza) atau secara serentak (kedua-duanya menggunakan jam yang sama).
Kedua-dua SISTEM 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): Kedua-dua bit ini disesuaikan berdasarkan pariti bit yang kita gunakan dalam komunikasi.
Data ATMEGA di sini diprogramkan 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): Bit ini digunakan untuk memilih bilangan bit berhenti yang kita gunakan semasa komunikasi.
Komunikasi menunjukkan bahawa ia adalah jenis tidak 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 sisi TRANSMITTER.
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 '6', dan kadar baud ditetapkan.
Dengan ini, kami telah menetapkan tetapan di TRANSMITTER SIDE; kita akan bercakap mengenai MENERIMA SISI sekarang.
Komunikasi bersiri yang diaktifkan di UNO dapat dilakukan dengan menggunakan satu perintah.
|
Komunikasi yang kami anggap dapat dilakukan dilakukan dengan kadar BAUD 9600 bit sesaat. Oleh itu, untuk UNO menetapkan kadar baud tersebut dan untuk memulakan komunikasi bersiri, kami menggunakan arahan "Serial.begin (9600);". Di sini 9600 adalah kadar baud dan boleh berubah.
Sekarang semua yang tersisa jika untuk menerima data, satu data diterima oleh UNO, ia akan tersedia untuk diambil. Data ini diambil dengan perintah "diterimadata = Serial.read ();". Dengan perintah ini data bersiri dibawa ke 'diterimadata' bernama integer.
Seperti yang ditunjukkan dalam litar, butang disambungkan di sisi pemancar, apabila butang ini ditekan data delapan bit dihantar oleh TRANSMITTER (ATMEGA8) dan data ini diterima oleh RECEIVER (ARDUINO UNO). Setelah berjaya menerima data ini, ia menukar LED yang disambungkan ke ON dan OFF, untuk menunjukkan pemindahan data yang berjaya antara dua pengawal.
Dengan ini komunikasi UART antara pengawal ATMEGA8 dan ARDUINO UNO berjaya dijalin.