Hallo,
ich habe ein Ethernet-Board mit ENC28J60 und einem ATMEGA1284, von dem
aus ich gerne per UART Zeichen über TX0 senden würde. Ich sende aber nur
Müll und fürchte, dass ich die Baud-Rate nicht richtig eingestellt habe
oder der UART irgendwie mit dem Ethernet-Kram interferiert.
Ethernet selbst funktioniert soweit prima. Das Teil ist ein ganz simpler
Webserver und baut auf der tuxgraphics-lib auf
(http://tuxgraphics.org/electronics/200606/article06061.shtml).
Ich benutze den ungeteilten RC-Takt des AVR und nicht die 12,5MHz des
ENC. Ich hatte zunächst die Peter Fleury-UART-lib verwendet. Da kam aber
gar nichts raus. Dann hab ich mir den UART nach dem Wiki-Artikel und
nach dem Datenblatt des 1284 aufgebaut:
1 | #define F_CPU 8000000UL
|
2 | #define BAUD 9600UL
|
3 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
|
4 |
|
5 |
|
6 | void USART_Init() {
|
7 | UBRR0H = (unsigned char)(UBRR_VAL>>8);
|
8 | UBRR0L = (unsigned char)UBRR_VAL;
|
9 | UCSR0B |= (1 << TXEN0);
|
10 | UCSR0C = (1<<UCSZ01);
|
11 | }
|
12 |
|
13 | int uart_putc(unsigned char c) {
|
14 | while (!(UCSR0A & (1 << UDRE0)))
|
15 | ;
|
16 | UDR0 = c;
|
17 | return 0;
|
18 | }
|
Falls es von Interesse ist, ich benutze 'Moderate Optimizations'
Kann mir jemand damit helfen?