Hallo Forum,
heute habe ich versucht eine USART Verbindung zwischen meinem Controller
und PC aufzubauen. Allerdings kommt nicht immer etwas an, es wird ein
einfaches "X" gesendet. Manchmal kommt ein "X" an, manchmal ein
Leerzeichen. Also muss wohl irgendwas noch nicht in Ordnung sein. Hier
meine Überlegungen:
Controller: Mega88
Frequenz: 7.3728MHz Quarz
19.200 Baudrate, 8 Datenbits, keine Parität, 1 Stoppbit, keine
Flußsteuerung
========================================================================
===
Initialisieren des USART:
UCSR0B:
TXEN0 => 1 auf Empfang
UCSZ02 => 0 8Datenbits
UCSR0C:
UMSEL01 => 0 Asynchronous Mode
UMSEL00 => 0
UPM01 => 0 Keine Parität
UPM00 => 0
USBS0 => 1 1Stoppbit
UCSZ01 => 1 8Datenbits
UCSZ00 => 1
UCPOL0 => 0 nur bei Synchron Mode
UCSR0A:
U2X0 => 0 Double Speed Mode OFF
UBRR0 = 23 // Wert aus dem Datenblatt für 19.200Baud bei 7.3728MHz
und U2X0 = 0
========================================================================
===
Code:
1 | #define F_CPU 7372800;
|
2 |
|
3 | #include <avr/io.h>
|
4 |
|
5 | int main( void ) {
|
6 |
|
7 | UCSR0B |= (1<<TXEN0) | (1<<UCSZ02);
|
8 | UCSR0C |= (1<<UCSZ01) | (1<<UCSZ00);
|
9 | UBRRH = 23 >> 8;
|
10 | UBRRL = 23 & 0xFF;
|
11 |
|
12 | while (!(UCSR0A & (1<<UDRE0))) // Warten bis Senden moeglich
|
13 | {
|
14 | }
|
15 |
|
16 | UDR0 = 'X'; //Ein- Ausgaberegister (R/W)
|
17 |
|
18 | return(0);
|
19 | }
|
Erstmal sind meine Überlegungen richtig?
Habe ich den Code dazu richtig geschrieben?
Danke schonmal,
Jan