Forum: Mikrocontroller und Digitale Elektronik UART und ENC28J60


von thommy (Gast)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

>  Ich sende aber nur Müll

In 99% aller Fälle stimmt dann die hier angegebene Taktfrequenz
> #define F_CPU 8000000UL
nicht mit der Realität überein.

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

du weißt schon das du damit UCSR0C = (1<<UCSZ01) auf 7-Bit-Betrieb 
schaltest!?

Den internen RC solltest du zumindest kalibieren damit er für den UART 
taugt. Wenn du die Möglichkeit hast die Frequenz zu messen, dann einfach 
mal mit der Clockout FUSE den Takt auf PB1 zum messen ausgeben.
Und warum willst du den Takt vom ENC nicht nehmen?

Sascha

von thommy (Gast)


Lesenswert?

Sascha Weber schrieb:
> Hallo,
>
> du weißt schon das du damit UCSR0C = (1<<UCSZ01) auf 7-Bit-Betrieb
> schaltest!?
ich hatte mit verschiedenen Framegrößen herumprobiert. Das war der 
letzte Zustand.

>
> Den internen RC solltest du zumindest kalibieren damit er für den UART
> taugt. Wenn du die Möglichkeit hast die Frequenz zu messen, dann einfach
> mal mit der Clockout FUSE den Takt auf PB1 zum messen ausgeben.

Den Fuse kannte ich nicht. Danke. Oszi spuckt etwa 8,02MHz aus, schwankt 
etwas auf der 2. Nachkommastelle.

> Und warum willst du den Takt vom ENC nicht nehmen?

hatte ein wenig Bammel mich aus meinem Chip auszusperren ;-). Werd ich 
aber wohl als nächstes mal versuchen. Die Leitung ist immerhin da auf 
der Platine.

Gruß

von thommy (Gast)


Lesenswert?

Bevor ich Mist baue:

Ext. Clock; Start-up time: 6 CK + 65 ms; [CKSEL=0000 SUT=10]

wäre das die korrekte Fuse-Einstellung?

von thommy (Gast)


Lesenswert?

Enc als External Clock und 12,5MHz. That solved it! Danke für die Hilfe!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.