Forum: Compiler & IDEs ATMega88, UART, Fleury bekomme ständig '#'


von Fittipaldi (Gast)


Lesenswert?

Hallo zusammen, hab hier ein kleines problem mit UART auf ATmega88 (bin 
neu bei UART, aber hab schon mit atmels gearbeitet). Das problem 
nämlich: will daten vom computer lesen, dafür zwichen den uC und den 
rechner gibts max3232 (wenn das wichtig ist). Ich starte das "gerät" und 
bekomme ständig auf dem lcd nur '#' oder sowas ähnliches. Aber das gerät 
ist überhaupt nicht mitm computer verbunden! Hier ist das source:
1
        // in der tabelle vom datasheet steht's error=0.0% für 8MHz und 250k baud
2
        uart_init(UART_BAUD_SELECT(250000,F_CPU)); // F_CPU is 8000000
3
        lcd_clrscr();
4
  lcd_puts("WAIT RCV\n");
5
  char data_rcvd = ' ';
6
  while(1) {
7
    data_rcvd = uart_getc();
8
    if(data_rcvd & UART_NO_DATA) {
9
      lcd_puts("NO DATA\n");
10
    }
11
    else if(data_rcvd & UART_FRAME_ERROR) {
12
      lcd_puts("FRAME ERROR\n");
13
    }
14
    else if(data_rcvd & UART_OVERRUN_ERROR) {
15
      lcd_puts("OVERRUN ERR\n");
16
    }
17
    else if(data_rcvd & UART_BUFFER_OVERFLOW) {
18
      lcd_puts("BUF OVERFLOW\n");
19
    }
20
    else { lcd_putc(data_rcvd); }
21
  }

Bin dankbar für jede hilfe :(

von Gast (Gast)


Lesenswert?

Tolles Gerät...
Ich würde sagen dein Gerät funktioniert nicht richtig.

von Johannes M. (johnny-m)


Lesenswert?

250 kBd? Welche PC-Schnittstelle kann das denn? Und wenn sie es 
tatsächlich können sollte, weiß der PC das auch, dass er mit 250 kBd 
senden soll?

Welche Taktquelle verwendet der Controller?

von Peter (Gast)


Lesenswert?

Ich bezweifle, dass der PC eine Baudrate von 250000 Baud unterstützt. 
Normalerweise ist das maximum 115200 Baud, versuch es aber zum Anfangen 
lieber mal mit 9600 Baud.

Was verwendest Du auf der PC-Seite um  Daten auf die RS232 zu senden? 
Hyperterminal? Welche Einstellungen?

Fehlt da nicht noch ein LCD-Init in deiner uC Software?

von Johannes M. (johnny-m)


Lesenswert?

Peter wrote:
> Ich bezweifle, dass der PC eine Baudrate von 250000 Baud unterstützt.
> Normalerweise ist das maximum 115200 Baud,
Und wenn höher, dann eher 230400 Bd, aber keine 250000...

Allerdings schreibt er ja, dass (noch) gar keine Verbindung zum 
"Rechner" besteht...

von Fittipaldi (Gast)


Lesenswert?

Jup, es gibt noch keine verbindung zw. max3232 und den computer. also 
nur zw uC und max3232 ... warum sollte der rechner 250k nicht 
unterstützen, es existiert die möglichkeit, wenigstens auf meinem 
lenovo, aber ok, das ist jetzt in dem fall kleinigkeit. aber i kann auch 
mit 9.6k oder 19.2k versuchen, in der tabelle steht für sie 0.2%. i 
benutze der interne oszillator

von Johannes M. (johnny-m)


Lesenswert?

Fittipaldi wrote:
> benutze der interne oszillator
Vergiss es! Der interne Oszillator ist für asynchrone Datenübertragung 
ungeeignet.

von Fittipaldi (Gast)


Lesenswert?

Ja, trotzdem, das ist kein grund ständig interrupts zu bekommen (soweit 
ich das lib von fleury verstehe, uart_getc() liefert ein char, nur wenn 
ein interrupt entstanden ist). und wenn ich ständig lesen kann -> 
ständig interrupts, oder?

von Stefan E. (sternst)


Lesenswert?

Es scheint nur so, als könntest du ständig was lesen, weil uart_getc 
einen 16-Bit-Wert zurück gibt und die Info "nichts empfangen" steckt in 
den oberen 8-Bit. Bei einer Zuweisung an ein char geht diese Info somit 
verloren.

von Fittipaldi (Gast)


Lesenswert?

Pff, das sollte ich selbst von der zeile:
1
return (UART_LastRxError << 8) + data;

erkennen können. Danke für das Tip, jetzt kann ich mich auf die 
computer<->ding verbindung konzentrieren.

lg

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.