Hallo, ich versuche gerade mit dem Atmega8 über uart auf meinen COM-Port zu senden. hab auch schon eine Beispiel programm gefunden. jedoch funktioniert dieses bei mir nicht. hab im Hyperterminal auch schon alles richtig eingestellt(9600,8,n,1). aber es kommt nichts an. sehe ich das richtig das dieses programm mir normalerweise ein X schicken müsste? ich sende mit dem myavr-board. dieses ist auch fehlerfrei da ich mit dem Testprogramm keine Fehler habe. danke
1 | |
2 | #ifndef F_CPU
|
3 | #warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
|
4 | #define F_CPU 4000000L // Systemtakt in Hz, das L am Ende ist wichtig, NICHT UL verwenden!
|
5 | #endif
|
6 | |
7 | #define BAUD 9600L // Baudrate, das L am Ende ist wichtig, NICHT UL verwenden!
|
8 | |
9 | // Berechnungen
|
10 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
|
11 | #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
|
12 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille
|
13 | |
14 | #if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))
|
15 | #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
|
16 | #endif
|
17 | /* USART-Init beim ATmega16 */
|
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 | // bei neueren AVRs steht der Status in UCSRA/UCSR0A/UCSR1A, hier z.B. fuer ATmega16:
|
27 | while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */ |
28 | {
|
29 | }
|
30 | |
31 | UDR = 'x'; |
32 | }
|