Hallo Leute,
bin gerade dabei die USART Schnittstelle eines ATmega32 zum laufen zu
bekommen. Unter ASM gar kein Problem, läuft prima...aber man will sich
ja weiter bilden, von daher nun das ganze in C.
Der Code des Tutorials funktioniert nicht ein Stück,
Problem eins:
1 | #ifndef F_CPU
|
2 | #define F_CPU 4000000L
|
3 | #endif
|
4 |
|
5 | #define BAUD 9600L
|
6 |
|
7 | // Berechnungen
|
8 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
|
9 | #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
|
10 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille
|
11 |
|
12 | #if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))
|
13 | #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
|
14 | #endif
|
da wirft er mir schon den Fehler aus "Baudrate grösser..."
liegt offensichtlich an der Warning darüber:
../RS232_header.h:17:40: warning: the right operand of "<" changes sign
when promoted
Sprich er kommt wohl nicht mit der "-10" klar... keine Ahnung warum??
Ich hab dann die Berechnung nach guter alter ASM manier geändert auf:
1 | #define UBRR_VAL ((F_CPU/(BAUD*16L)-1)
|
wunderbar, kein Fehler mehr,... an der Stelle.
Jetzt sagt er bei:
1 | void USART_Init(void)
|
2 | {
|
3 | UCSRC |= (1<<URSEL)|(3<<UCSZ0); // Frame-Format: 8 Bit
|
4 |
|
5 | UBRRH = UBRR_VAL>>8;
|
6 |
|
7 | UBRRL = UBRR_VAL & 0xFF;
|
8 | }
|
../RS232_routines.c:9: error: expected ')' before ';' token
../RS232_routines.c:12: error: expected ';' before '}' token
Die erste Zeile (also UCSRC) setzt er mir noch, bei:
bzw.
1 | UBRRL = UBRR_VAL & 0xFF;
|
kommen dann die Fehler.
Irgendwie kommt er mit UBRRH/UBRRL nicht zurecht, oder so? Keine Ahnung.
Hab ich denn vergessen irgendwas zu includieren? Bisher hab ich
1 | #include <avr/io.h>
|
2 | #include <stdlib.h>
|
als includes mit drin...
Gruß
Ralf