Forum: Mikrocontroller und Digitale Elektronik AVR AT90CAN128 uart


von Flo N. (teleflo)


Lesenswert?

Hallo

Ich bin an verzweifeln mit dem uart.
Es will einfach nicht.
µC at90can128
externer 8MHz Quartz
Mein code:
Led 1s an, dann 1s aus.
Also wird alle 2s ein Zeichen geschickt.
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include <avr/wdt.h>
4
5
void usart0_init(unsigned long baudrate) // Initialize USART0
6
{  
7
  UBRR0H  = 0;
8
  UBRR0L = baudrate; // set baud rate UBRRN sei 12 für 8 MHZ und 38400
9
  UCSR0B = (1<<RXEN) | (1<<TXEN); // enable receiver and transmitter
10
  UCSR0C = 0x06;// 8 Datenbit 1 Stoppbit no parity
11
}
12
13
14
void usart0_tx (char data) // transmit byte via usart0
15
{
16
  while (!(UCSR0A & (1 << UDRE0))); // wait for empty transmit buffer
17
  UDR0 = data; // put data to buffer = send data
18
}
19
20
21
void main()
22
{
23
  wdt_disable();
24
  usart0_init(12);
25
  
26
  while(1)
27
  {
28
    PORTC |= (1 << PINC6); //turn on led
29
    _delay_ms(1000);
30
    usart0_tx('i');
31
32
    PORTC &= ~(1 << PINC6);//turn off led
33
    _delay_ms(1000);
34
  }
35
}

Es kommt leider jede Sekunde nur K? an.
also 2 Byte anstatt von einem.
Hab mir auch schon die anderen uart Threads durchgelesen.
Ich find den Fehler einfach nicht...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Es kommt leider jede Sekunde nur K? an.
> also 2 Byte anstatt von einem.
Das deutet darauf hin, dass die Baudrate deines uC niedriger als die des 
PC ist. Hast du ein Oszilloskop zur Hand? Damit könntest du die Baudrate 
(Zeit für 1 Bit) ganz einfach ausmessen....

> externer 8MHz Quartz
> Led 1s an, dann 1s aus.
Das hast du kontrolliert? Diese Zeiten passen?

von Flo N. (teleflo)


Lesenswert?

Hi
Danke für deine Antwort.
Ja die Zeiten fürs Led passen.
Oszi hab ich leider keines.
Kanns sein das es da noch irgend nen teiler gibt der die baudrate 
verändert ?
Hab beim pc die baudrate von 38400 bis 1200 duchprobiert.
es kommt immer irgend ein müll an.

von spess53 (Gast)


Lesenswert?

Hi

CKDIV8-Fuse?

MfG Spess

von Flo N. (teleflo)


Angehängte Dateien:

Lesenswert?

Hi

Nein die fuse ist nicht gesetzt.
Leider ist das nicht der Fehler.
Verdammt, hätte nicht gedacht das es soo kompliziert sein kann so ein 
einfaches proggi zum laufen zu bringen. :-(

von TestX .. (xaos)


Lesenswert?

kann dir bei bedarf mal die uart sources von mir geben, vlt hilfts

von Flo N. (teleflo)


Lesenswert?

HI

Ja das wäre super.

von TestX .. (xaos)


Angehängte Dateien:

Lesenswert?

die header file spar ich mir mal, steht nichts weiter an definitionen 
drinnen. vlt hilfts dir ^^
generell sollte die konstruktor sowie der read/write teil für dich 
relevant sein

von Flo N. (teleflo)


Lesenswert?

Danke für deine Hilfe.
So hab mal deine settings ausprobiert.
Es kommt genau das selbe wie bei meinen settings an.
Also die clockeinstellungen müssten ja passen da die led 1 sekunde an 
bzw aus ist.
Irgendwie muss da was mit den baudratengenerator nicht stimmen.
verdammt...

von Flo N. (teleflo)


Lesenswert?

Nachtrag ins Logbuch:

Mein rs232 zu usb converter war der grund.
Das war einer mit TTL Pegel :-)
Tjo das sind Probleme auf die man ganz zum schluss kommt..

lg flo

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.