Burada bir ATmega8 mikrodenetleyici ile Arduino Uno arasında bir iletişim kuracağız. Burada kurulan iletişim UART (Evrensel Asenkron Alıcı Verici) tipidir. Seri iletişim. Bu seri iletişim ile, çeşitli gömülü sistem uygulamalarında gerekli olan iki kontrolör arasında veri paylaşılabilir.
Gömülü sistemlerde sistem iletişimi hakkında temel bilgiye sahip olmamız gerekir, bu yüzden bunun için bu projeyi yapıyoruz. Bu projede temel iletişim sistemini tartışacağız ve vericiden alıcıya seri olarak bazı verileri göndereceğiz.
Bu projede ATMEGA8 bir VERİCİ, ARDUINO UNO bir ALICI görevi görür. Seri iletişimde, bir BYTE veri tamamen aktarılıncaya kadar, BIT BYTE veri göndereceğiz. Veriler 10bit boyutunda olabilir, ancak şimdilik 8BITS'de kalacağız.
Gerekli Bileşenler
Donanım: ATMEGA8, ARDUINO UNO, güç kaynağı (5v), AVR-ISP PROGRAMMER, 100uF kapasitör (güç kaynağına bağlı), 1KΩ direnç (iki parça), LED, Düğme.
Yazılım: Atmel studio 6.1, progisp veya flash magic, ARDUINO NIGHTLY.
Devre Şeması ve Açıklama
Verici ve alıcı için devre şemasını ve programlamayı tartışmadan önce , seri iletişimi anlamamız gerekir. ATMEGA burada daha önce tartışıldığı gibi verileri UNO'ya seri olarak gönderir.
MASTER SLAVE iletişimi, JTAG iletişimi gibi başka iletişim modlarına sahiptir, ancak kolay iletişim için RS232'yi seçiyoruz. Burada ATMEGA8'in TXD (Verici) PIN'ini ARDUINO UNO'nun RXD (Alıcı) PIN'ine bağlayacağız.
Oluşturulan veri iletişimi aşağıdakilere sahip olacak şekilde programlanmıştır:
- Sekiz veri biti
- İki durdurma biti
- Eşlik kontrol biti yok
- 9600 BPS (Saniyedeki Bit) Baud hızı
- Eşzamansız iletişim (ATMEGA8 ve UNO arasında saat paylaşımı yok (her ikisinin de farklı saat birimleri vardır)
Arduino Uno ve ATMEGA8 arasında UART kurmak için ayarı doğru bir şekilde programlamamız gerekir. Bunun için yukarıda belirtilen parametreleri her iki uçta da aynı tutmamız gerekiyor. Bunda bir VERİCİ, diğeri ALICI olarak hareket eder. Her bir tarafın ayarlarını aşağıda tartışacağız.
Şimdi RS232 arayüzü için, TRANSMITTER tarafı (ATMEGA8) için aşağıdaki özelliklerin karşılanması gerekir:
1. İLK kontrolörün TXD pini (veri alma özelliği) VERİCİ için etkinleştirilmelidir.
2. İletişim seri olduğundan, veri baytının ne zaman alındığını bilmemiz gerekir, böylece tam bayt alınana kadar programı durdurabiliriz. Bu, bir verinin tam bir kesinti almasını sağlayarak yapılır.
3. VERİ, 8 bit modunda kontrolöre iletilir ve alınır. Böylece kontrolöre bir seferde iki karakter gönderilecektir.
4. Modül tarafından gönderilen verilerde hiçbir eşlik biti, bir durak biti yoktur.
Yukarıdaki özellikler denetleyici kayıtlarında ayarlanır; bunları kısaca tartışacağız:
KOYU GRİ (UDRE): Bu bit, başlatma sırasında ayarlanmaz, ancak çalışma sırasında vericinin iletime hazır olup olmadığını kontrol etmek için kullanılır. Daha fazla ayrıntı için TRASMITTER SIDE programına bakın.
VOILET (TXEN): Bu bit, TRASMITTER SIDE üzerindeki verici pinini etkinleştirmek için ayarlanır.
SARI (UCSZ0, UCSZ1 ve UCSZ2): Bu üç bit, tek seferde aldığımız veya gönderdiğimiz veri bitlerinin sayısını seçmek için kullanılır.
İki SIDES arasındaki iletişim sekiz bitlik iletişim olarak kurulur. İletişimi tabloyla eşleştirerek, UCSZ0, UCSZ1'i bire ve UCSZ2'yi sıfıra indirdik.
TURUNCU (UMSEL): Bu bit, sistemin eşzamansız (her ikisi de farklı saat kullanır) veya eşzamanlı (her ikisi de aynı saati kullanır) iletişim kurup kurmadığına göre ayarlanır.
Her iki SYTEMS herhangi bir saati paylaşmaz. İkisi de kendi iç saatlerini kullandıkları için. Bu nedenle, her iki denetleyicide de UMSEL'i 0 olarak ayarlamamız gerekir.
YEŞİL (UPM1, UPM0): Bu iki bit, iletişimde kullandığımız bit eşliğine göre ayarlanır.
Buradaki ATMEGA verileri, veri aktarım uzunluğu küçük olduğu için veri kaybı veya hatası olmayacağından açıkça veri gönderecek şekilde programlanmıştır. Yani burada herhangi bir denklik belirlemiyoruz. Bu nedenle, hem UPM1 hem de UPM0'ı sıfıra ayarlıyoruz veya kalmıştır çünkü tüm bitler varsayılan olarak 0'dır.
MAVİ (USBS): Bu bit, iletişim sırasında kullandığımız durdurma bitlerinin sayısını seçmek için kullanılır.
Kurduğu iletişim asenkron tiptedir, bu nedenle daha doğru veri iletimi ve alımı için iki stop biti kullanmamız gerekir, bu nedenle VERİCİ tarafında USBS'yi '1' olarak ayarladık.
Baud hızı, uygun UBRRH seçilerek denetleyicide ayarlanır:
UBRRH değeri, baud hızı ve CPU kristal frekansı çapraz referans alınarak seçilir:
Dolayısıyla çapraz referansla UBRR değeri '6' olarak görülür ve böylece baud hızı ayarlanır.
Bununla birlikte VERİCİ TARAFINDA ayarlar oluşturduk; Şimdi RECEIVING SIDE hakkında konuşacağız.
UNO'da seri iletişim etkinleştirmesi tek bir komut kullanılarak yapılabilir.
|
Kurmayı düşündüğümüz iletişim saniyede 9600 bitlik bir BAUD hızıyla yapılıyor. Dolayısıyla, UNO'nun bu tür bir baud hızı oluşturması ve seri iletişimi başlatması için ”Serial.begin (9600);” komutunu kullanıyoruz. Burada 9600 baud hızıdır ve değiştirilebilir.
Şimdi hepsi veri almak için kaldı, biri UNO tarafından bir veri alınırsa, alınmaya hazır olacak. Bu veriler, "Receiveddata = Serial.read ();" komutu ile alınır. Bu komutla seri veriler, tamsayı olarak adlandırılan 'alınan verilere' alınır.
Devrede gösterildiği gibi, verici tarafında bağlı bir düğme, bu düğmeye basıldığında VERİCİ (ATMEGA8) tarafından sekiz bitlik bir veri gönderilir ve bu veriler, ALICI (ARDUINO UNO) tarafından alınır. Bu verileri başarıyla aldığında, iki denetleyici arasında başarılı veri aktarımını göstermek için kendisine bağlı LED'i AÇIK ve KAPALI duruma getirir.
ATMEGA8 kontrolörü ve ARDUINO UNO arasındaki bu UART iletişimi başarıyla kurulur.