Hier werden wir eine Kommunikation zwischen einem ATmega8-Mikrocontroller und Arduino Uno herstellen. Die hier hergestellte Kommunikation ist vom Typ UART (Universal Asynchronous Receiver Transmitter). Es ist serielle Kommunikation. Auf diese Weise können serielle Kommunikationsdaten zwischen zwei Controllern geteilt werden, was in verschiedenen eingebetteten Systemanwendungen erforderlich ist.
In eingebetteten Systemen müssen wir Grundkenntnisse über Systemkommunikation haben, deshalb führen wir dieses Projekt durch. In diesem Projekt werden wir das grundlegende Kommunikationssystem diskutieren und einige Daten seriell vom Sender zum Empfänger senden.
In diesem Projekt fungiert ATMEGA8 als SENDER und ARDUINO UNO als EMPFÄNGER. Bei der seriellen Kommunikation senden wir Daten BIT BY BIT, bis ein BYTE von Daten vollständig übertragen ist. Die Daten können eine Größe von 10 Bit haben, aber wir werden uns vorerst an 8 Bit halten.
Erforderliche Komponenten
Hardware: ATMEGA8, ARDUINO UNO, Netzteil (5 V), AVR-ISP-PROGRAMMER, 100 uF-Kondensator (über das Netzteil angeschlossen), 1 kΩ-Widerstand (zweiteilig), LED, Taste.
Software: Atmel Studio 6.1, Progisp oder Flash Magic, ARDUINO NIGHTLY.
Schaltplan und Erklärung
Bevor wir den Schaltplan und die Programmierung für Sender und Empfänger besprechen, müssen wir die serielle Kommunikation verstehen. Das ATMEGA sendet hier Daten seriell an die UNO, wie zuvor erläutert.
Es gibt andere Kommunikationsmodi wie MASTER SLAVE-Kommunikation und JTAG-Kommunikation. Für eine einfache Kommunikation wählen wir jedoch RS232. Hier verbinden wir die TXD (Sender) PIN von ATMEGA8 mit der RXD (Empfänger) PIN von ARDUINO UNO
Die hergestellte Datenkommunikation ist so programmiert, dass sie:
- Acht Datenbits
- Zwei Stoppbits
- Kein Paritätsprüfbit
- Baudrate von 9600 BPS (Bits pro Sekunde)
- Asynchrone Kommunikation (Keine Taktfreigabe zwischen ATMEGA8 und UNO (beide haben unterschiedliche Takteinheiten))
Um UART zwischen Arduino Uno und ATMEGA8 herzustellen, müssen wir die Einstellung genau programmieren. Dazu müssen wir die oben genannten Parameter an beiden Enden gleich halten. In diesem Fall fungiert einer als SENDER und der andere als EMPFÄNGER. Wir werden die einzelnen Seiteneinstellungen unten diskutieren.
Für die RS232-Schnittstelle müssen nun die folgenden Funktionen für die SENDERSeite (ATMEGA8) erfüllt sein:
1. Der TXD-Pin (Datenempfangsfunktion) des ersten Controllers muss für den SENDER aktiviert sein.
2. Da die Kommunikation seriell ist, müssen wir wissen, wann das Datenbye empfangen wird, damit wir das Programm stoppen können, bis das vollständige Byte empfangen wird. Dies erfolgt durch Aktivieren eines vollständigen Datenempfangsinterrupts.
3. DATEN werden im 8-Bit-Modus an den Controller gesendet und empfangen. Es werden also zwei Zeichen gleichzeitig an den Controller gesendet.
4. Es gibt keine Paritätsbits, ein Stoppbit in den vom Modul gesendeten Daten.
Die oben genannten Funktionen sind in den Controller-Registern festgelegt. wir werden sie kurz diskutieren:
DARK GREY (UDRE): Dieses Bit wird beim Start nicht gesetzt, aber während der Arbeit verwendet, um zu überprüfen, ob der Sender zur Übertragung bereit ist oder nicht. Weitere Informationen finden Sie im Programm auf der SENDERSEITE.
VOILET (TXEN): Dieses Bit wird gesetzt, um den Senderstift auf der SENDERSEITE zu aktivieren.
GELB (UCSZ0, UCSZ1 und UCSZ2): Diese drei Bits werden verwendet, um die Anzahl der Datenbits auszuwählen, die wir in einem Durchgang empfangen oder senden.
Die Kommunikation zwischen zwei SIDES wird als 8-Bit-Kommunikation hergestellt. Durch die Übereinstimmung der Kommunikation mit der Tabelle haben wir UCSZ0, UCSZ1 auf Eins und UCSZ2 auf Null.
ORANGE (UMSEL): Dieses Bit wird basierend darauf gesetzt, ob das System asynchron (beide verwenden unterschiedliche Uhr) oder synchron (beide verwenden dieselbe Uhr) kommuniziert.
Beide SYTEME teilen sich keine Uhr. Da beide eine eigene interne Uhr verwenden. Daher müssen wir UMSEL in beiden Controllern auf 0 setzen.
GRÜN (UPM1, UPM0): Diese beiden Bits werden basierend auf der Bitparität angepasst, die wir in der Kommunikation verwenden.
Das Daten-ATMEGA ist hier so programmiert, dass Daten ohne Parität gesendet werden. Da die Datenübertragungslänge gering ist, können wir eindeutig keinen Datenverlust oder -fehler erwarten. Wir setzen hier also keine Parität. Also setzen wir beide UPM1, UPM0 auf Null oder sie bleiben übrig, weil alle Bits standardmäßig 0 sind.
BLAU (USBS): Dieses Bit wird zur Auswahl der Anzahl der Stoppbits verwendet, die wir während der Kommunikation verwenden.
Die Kommunikation, die sie hergestellt hat, ist vom asynchronen Typ. Um eine genauere Datenübertragung und einen genaueren Datenempfang zu erhalten, müssen zwei Stoppbits verwendet werden. Daher setzen wir USBS auf der SENDERSeite auf '1'.
Die Baudrate wird im Controller durch Auswahl des entsprechenden UBRRH eingestellt:
Der UBRRH-Wert wird durch Querverweis der Baudrate und der CPU-Kristallfrequenz ausgewählt:
Durch Querverweis wird der UBRR-Wert als '6' angesehen, und so wird die Baudrate eingestellt.
Damit haben wir Einstellungen auf der SENDERSEITE vorgenommen; Wir werden jetzt über RECEIVING SIDE sprechen.
Die Aktivierung der seriellen Kommunikation in UNO kann mit einem einzigen Befehl erfolgen.
|
Die von uns angenommene Kommunikation erfolgt mit einer BAUD-Rate von 9600 Bit pro Sekunde. Damit UNO eine solche Baudrate festlegt und die serielle Kommunikation startet, verwenden wir den Befehl "Serial.begin (9600);". Hier ist 9600 Baudrate und ist veränderbar.
Wenn nun alle Daten empfangen werden sollen und Daten von der UNO empfangen werden, stehen sie zur Aufnahme zur Verfügung. Diese Daten werden mit dem Befehl "receivedata = Serial.read ();" erfasst. Mit diesem Befehl werden serielle Daten zu 'ReceivedData' mit dem Namen Integer übertragen.
Wie in der Schaltung gezeigt, wird eine Taste auf der Senderseite angeschlossen, wenn diese Taste gedrückt wird, werden 8-Bit-Daten vom SENDER (ATMEGA8) gesendet und diese Daten werden vom EMPFÄNGER (ARDUINO UNO) empfangen. Bei erfolgreichem Empfang dieser Daten wird die daran angeschlossene LED ein- und ausgeschaltet, um die erfolgreiche Datenübertragung zwischen zwei Controllern anzuzeigen.
Durch diese UART-Kommunikation zwischen ATMEGA8-Controller und ARDUINO UNO wird erfolgreich hergestellt.