Hallo zusammen, ich besitze jetzt das Pollin Evalutation Board und bin gerade dabei die RS232 Schnittstelle mit einem Atmega8 in Betrieb zu nehmen. Die Baudrate soll 9600 sein. Diese habe ich dann mittels der CPU Taktfrequenz für die Register UBRR umgerechnet (vgl. Code). Als Test schicke ich das ASCII Zeichen "B" und lese es am PC mit einem Terminal Programm aus. Das erstaunliche ist aber dass beim Auslesen mit 9600 Baud am Terminal kein "B" ankommt. Erst wenn ich am Terminal Programm eine Baudrate von 600 einstelle wird das Zeichen richtig übertragen. Wodrann kann das liegen? Verwendet der Mikrocontroller eine andere Taktfrequenz für die RS232 Schnittstelle? Wäre schon wenn ihr mir weiterhelfen könnt.
1 | #include <avr/io.h> |
2 | |
3 | |
4 | #define F_CPU 16000000UL
|
5 | #define BAUD 9600UL
|
6 | #define UBRR_BAUD ((F_CPU+(BAUD*16UL))/(BAUD*16UL))-1
|
7 | |
8 | |
9 | void init_uart(void) |
10 | {
|
11 | // Baudrate einstellen
|
12 | UBRRH = (uint8_t) (UBRR_BAUD>>8); |
13 | UBRRL = (uint8_t) (UBRR_BAUD); |
14 | |
15 | // Aktivieren von receiver und transmitter
|
16 | UCSRB = (1<<RXEN)|(1<<TXEN); |
17 | |
18 | // Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
|
19 | UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); |
20 | }
|
21 | |
22 | |
23 | |
24 | void transmit_uart(unsigned char data) |
25 | {
|
26 | while(!(UCSRA & (1<<UDRE))) |
27 | ;
|
28 | UDR = data; |
29 | }
|
30 | |
31 | |
32 | |
33 | int main(void) |
34 | {
|
35 | unsigned char data = 66; //entspricht einem "B" |
36 | init_uart(); |
37 | |
38 | while (1) |
39 | {
|
40 | transmit_uart(data); |
41 | delay_ms(1500); |
42 | }
|
43 | return 0; |
44 | }
|