Hey liebes Forum,
Ich habe das Tutorial auf dieser Seite verfolgt und stecke gerade beim
Thema Uart fest.
Da es bei meinem Conrad dummerweise keinen Atmega8 gab, habe ich zum
Atmega8535 gegriffen.
Bisher gab es keine Probleme, doch der in meinem Fall Usart will nicht
richtig.
Daten senden klappt einwandfrei, doch wenn ich Daten empfangen will,
kommen keine im uC an. Ich habe den Quelltext zum initialisieren aus dem
Datenblatt(http://www.atmel.com/dyn/resources/prod_documents/doc2502.pdf)
kopiert, als der aus dem Tutorial nicht funktionierte:
1 | [...]
|
2 | #define F_CPU 4000000UL
|
3 |
|
4 | #define BAUD 9600UL // Baudrate
|
5 |
|
6 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
|
7 | #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
|
8 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
|
9 |
|
10 | #if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
|
11 | #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
|
12 | #endif
|
13 |
|
14 | void main( void )
|
15 | {
|
16 | [...]
|
17 | USART_INIT ( BAUD_REAL );
|
18 | [...]
|
19 | }
|
20 | void USART_Init( unsigned int baud )
|
21 | {
|
22 | /* Set baud rate */
|
23 | UBRRH = (unsigned char)(baud>>8);
|
24 | UBRRL = (unsigned char)baud;
|
25 | /* Enable receiver and transmitter */
|
26 | UCSRB = (1<<RXEN)|(1<<TXEN);
|
27 | /* Set frame format: 8data, 2stop bit */
|
28 | UCSRC = (1<<USBS)|(3<<UCSZ0);
|
29 | }
|
Anschließend warte ich per
1 | unsigned char USART_Receive( void )
|
2 | {
|
3 | /* Wait for data to be received */
|
4 | while ( !(UCSRA & (1<<RXC)) )
|
5 | ;
|
6 | /* Get and return received data from buffer */
|
7 | return UDR;
|
8 | }
|
auf ein Zeichen, welches ich per hTerm versende, doch der uC kommt nicht
aus der Whileschleife.
Theoretisch müsste doch die Verkabelung richtig sein, wenn ich auch
Daten senden kann, oder?
[Edit]
Mir ist gerade aufgefallen, dass mit der oben genannten init-Funktion
auch keine Zeichen gesendet werden, mit der aus dem Tutorial klappt
wenigstens das.
Ich hoffe, ihr könnt mir helfen:)