Hallo!!
Ich bin totaler neu Anfänger im Bereich µC. Arbeite momentan mit dem
STK500 und einem ATmega16 an einer UART-Verbindung, programmieren tu ich
das ganze mit AVR-Studio. Habe das folgende Programm aus dem Tutorial
AVR-GCC verwendet.
1 | #include <avr/io.h>
|
2 |
|
3 | #ifndef F_CPU
|
4 | #warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
|
5 | #define F_CPU 4000000L // Systemtakt in Hz, das L am Ende ist wichtig, NICHT UL verwenden!
|
6 | #endif
|
7 |
|
8 | #define BAUD 9600L // Baudrate, das L am Ende ist wichtig, NICHT UL verwenden!
|
9 |
|
10 | // Berechnungen
|
11 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
|
12 | #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
|
13 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille
|
14 |
|
15 | #if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))
|
16 | #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
|
17 | #endif
|
18 |
|
19 | int main(void)
|
20 | {
|
21 | UCSRB |= (1<<TXEN); // UART TX einschalten
|
22 | UCSRC |= (1<<URSEL)|(3<<UCSZ0); // Asynchron 8N1
|
23 |
|
24 | UBRRH = UBRR_VAL >> 8;
|
25 | UBRRL = UBRR_VAL & 0xFF;
|
26 | while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */
|
27 | {
|
28 | }
|
29 |
|
30 | UDR = 'x'; /* schreibt das Zeichen x auf die Schnittstelle */
|
31 | }
|
Als erstes bekomme ich beim compilieren im Studio bei folgender
Anweisung
1 | #if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))
|
2 | #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
|
3 | #endif
|
eine Fehlermeldung "../main.c:16:4: error: #error Systematischer Fehler
der Baudrate grösser 1% und damit zu hoch!". Weiss jemand, was dies
bedeutet??? Ist meine Baudrate evtl. zu hoch?? Wenn ich es über die
Formel UBRR_VAL berechne komme ich auf -1,5.
Habe diese if-Definition mit dem #error mal deaktiviert um dann das
Programm zu testen. Allerdings ohne Erfolg, es wurde keine Zeichen im
Hyperterminal angezeigt.
Wäre echt super, wenn mir jemand weiterhelfen könnte, wo mein Problem
ist. Spiele schon seit mehreren Tagen daran herum.
Grüße
Thomas