In diesem Tutorial stellen wir eine serielle Kommunikation zwischen zwei ATMEGA8-Mikrocontrollern her. Die hier hergestellte Kommunikation ist vom Typ UART (Universal Asynchronous Receiver Transmitter). Auf diese Weise können serielle Kommunikationsdaten zwischen zwei Mikrocontrollern geteilt werden, was in verschiedenen eingebetteten Systemen erforderlich ist.
Erforderliche Komponenten
Hardware: ATMEGA8 (2 Stück), Netzteil (5 V), AVR-ISP-PROGRAMMER, 100 uF Kondensator (über das Netzteil angeschlossen), 1 kΩ Widerstand (zwei Stück), LED, Taste.
Software: Atmel Studio 6.1, Progisp oder Flash Magic.
Schaltplan & Erklärung
Lassen Sie uns die serielle Kommunikation in AVR-Mikrocontrollern verstehen. Hier sendet ATMEGA Daten seriell an das andere ATMEGA. Es hat eine andere Art der Kommunikation, aber für eine einfache Kommunikation wählen wir RS232. Der RS232-Pin des ersten ATMEGA8 ist mit dem RXD-Pin des zweiten ATMEGA8 verbunden.
Die hergestellte Datenkommunikation ist so programmiert, dass sie:
- Acht Datenbits
- Zwei Stoppbits
- Kein Paritätsprüfbit
- Baudrate von 2400 BPS (Bits pro Sekunde)
- Asynchrone Kommunikation (Keine Taktfreigabe zwischen zwei ATMEGA8)
Wir haben also zwei Register für zwei ATMEGA8 unterschiedlich eingestellt, wobei eines als SENDER und das andere als EMPFÄNGER fungiert.
Für die RS232-Schnittstelle zwischen zwei ATmega-Mikrocontrollern müssen nun die folgenden Funktionen für SENDER und EMPFÄNGER erfüllt sein:
1. Der TXD-Pin (Datenempfangsfunktion) des ersten Controllers muss für den SENDER aktiviert sein, und der RXD-Pin des zweiten Controllers muss für den EMPFÄNGER aktiviert sein.
2. Da die Kommunikation seriell ist, müssen wir wissen, wann immer das Datenbyte empfangen wird, damit wir das Programm stoppen können, bis das vollständige Byte empfangen wurde. 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 besprechen,
DARK GREY (UDRE): (TRASMITTER SIDE) Dieses Bit wird beim Start nicht gesetzt, aber während der Arbeit wird verwendet, um zu überprüfen, ob der Sender zur Übertragung bereit ist oder nicht. Weitere Informationen finden Sie im Programm auf der SENDERSEITE.
LIGHT GREY (RXC): (RECEIVING SIDE) Dieses Bit wird beim Start nicht gesetzt, wird jedoch während der Arbeit verwendet, um zu überprüfen, ob der Empfänger bereit ist, Daten zu empfangen oder nicht. Weitere Informationen finden Sie im Programm auf RECEIVING SIDE.
VOILET (TXEN): (TRASMITTER SIDE) Dieses Bit wird gesetzt, um den Senderstift auf der TRASMITTER SIDE zu aktivieren.
ROT (RXEN): (EMPFANGSSEITE) Dieses Bit stellt die Empfangsdatenfunktion dar. Dieses Bit muss gesetzt sein, damit die Daten vom Modul vom Controller empfangen werden können. Außerdem wird der RXD-Pin des Controllers aktiviert.
BROWN (RXCIE): Dieses Bit muss gesetzt sein, um nach erfolgreichem Datenempfang einen Interrupt zu erhalten. Durch Aktivieren dieses Bits lernen wir gleich nach dem 8-Bit-Datenempfang kennen. Wir werden dieses Bit hier nicht verwenden, daher wird es in Ruhe gelassen.
PINK (URSEL): Dieses Bit muss gesetzt werden, bevor andere Bits in UCSRC aktiviert werden, nachdem andere benötigte Bits in UCSRC gesetzt wurden. URSEL muss deaktiviert oder auf Null gesetzt werden. Wir werden dieses Bit hier nicht verwenden, daher wird es in Ruhe gelassen.
GELB (UCSZ0, UCSZ1, UCSZ2): (EMPFANGSSEITE UND SENDERSEITE) Diese drei Bits werden zur Auswahl der Anzahl der Datenbits verwendet, die wir in einem Durchgang empfangen oder senden.
Die Kommunikation zwischen zwei ATMEGA wird als 8-Bit-Kommunikation hergestellt. Durch die Übereinstimmung der Kommunikation mit der Tabelle haben wir UCSZ0, UCSZ1 auf Eins und UCSZ2 auf Null.
Wir müssen diese sowohl auf der Empfangs- als auch auf der Sendeseite einstellen.
ORANGE (UMSEL): (EMPFANGSSEITE UND SENDERSEITE) Dieses Bit wird basierend darauf gesetzt, ob das System asynchron (beide verwenden unterschiedliche Uhr) oder synchron (beide verwenden dieselbe Uhr) kommuniziert.
Beide Controller 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): (EMPFANGSSEITE UND SENDERSEITE) Diese beiden Bits werden basierend auf der Bitparität angepasst, die wir in der Kommunikation verwenden.
Das ATMEGA ist 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): (EMPFANGSSEITE UND SENDERSEITE) Dieses Bit wird zur Auswahl der Anzahl der Stoppbits verwendet, die wir während der Kommunikation verwenden.
Die hier hergestellte Kommunikation 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 in beiden Controllern 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 '25' angesehen, und so wird die Baudrate eingestellt.
Wie in der Schaltung gezeigt, ist eine Taste auf der Senderseite angeschlossen. Wenn diese Taste gedrückt wird, sendet der SENDER 8-Bit-Daten und diese Daten werden vom EMPFÄNGER empfangen. Bei erfolgreichem Empfang dieser Daten schaltet es die daran angeschlossene LED ein und aus, was eine erfolgreiche Datenübertragung zwischen zwei Controllern anzeigt.