Hallo Leute,
wie der eine oder andere ja vll noch weiß ist mein Team nach wie vor am
Projekt "autonomer Roboter" dabei und neigt sich langsam dem Ende.
Nächsten Donnerstag, also dem 19.03.2009, ist Abgabe Termin, somit
bleibt nur noch wenig Zeit.
Wir stehen allerdings erneut vor einem Problem - dem UART
Wenn wir versuchen ein einziges Zeichen zu senden und abzufangen, kommt
zwar etwas an, allerdings meist nicht das gewünschte Zeichen wie wir
eigentlich wollten.
Eigentlich von uns gewollt ist eine Standard-Übertragung
8 Datenbits, 1 Stopbit, Parity None, Asynchronous Modus, bei 9600 BAUD
Unser leider gescheitertes Vorgehen:
- ATmega644P-20PU
- Externer 16Mhz Quarz
- ISP-Schnittstelle nach RN Standard
- verwendeter UART#1
- MAX232 mit Kondensatoren
- NULL-Modem Kabel
- Stecker (RXD & TXD)
##### Initialisierung des UART #1
############
1 | unsigned int baud=9600;
|
2 |
|
3 | UBRR1H = (F_CPU / 16* (unsigned char)(baud>>8)-1)>>8;
|
4 | UBRR1L = (F_CPU / 16* (unsigned char)(baud>>8)-1);
|
5 | UBRR1 = 103;
|
6 |
|
7 | UBRR1 = (F_CPU / (BAUD * 8L) - 1);
|
8 | UCSR1A = (0<<U2X1);
|
9 | UCSR1B = (1<<TXEN1);
|
10 | UCSR1C = (0<<UMSEL10);
|
11 | UCSR1C = (0<<UPM11) | (0<<UPM10);
|
12 | UCSR1C = (0<<USBS1);
|
13 | UCSR1C = (0<<UCSZ12) | (1<<UCSZ11) | (1<<UCSZ10);
|
14 | UCSR1C = (0<<UCPOL1);
|
##### Senden eines Zeichens
############
1 | void USART_Transmit( unsigned char data )
|
2 | {
|
3 |
|
4 | while ( !( UCSR1A & (1<<UDRE1)) )
|
5 | ;
|
6 | UDR1 = data;
|
7 | }
|
8 |
|
9 | USART_Transmit(65);
|
Sämtliche Programmeinstellungen wurden kontrolliert, ebenfalls was die
Baudrate von 9600 betrifft etc. Im Datenblatt des ATmega644P wurden wir
unter anderem fündig was UBRR1 = 103; betrifft
Eigentlich sollte das ganze nun ein großes A übertragen.
Seit 2 Wochen probieren wir nun schon herum und kommen leider nicht
weiter.
Wir würden uns wirklich über jeden Tipp freuen.
Hoffe natürlich bei möglichen Fragen schnell Antworten geben zu können.