Forum: Mikrocontroller und Digitale Elektronik atmega8 uart rx Problem


von Luk (Gast)


Lesenswert?

Hi!

Hab da so ein Problem. Ich würde gerne ein Zeichen vom Terminal (PC) 
senden
und dieses dann auf einem LCD am atmega8 ausgeben. Nur leider 
funktioniert das nicht. Habe schon Zeichen vom yC zum Terminal gesendet, 
das funktioniert gut. Die Display Ausgabe habe ich auch getestet, diese 
funktioniert auch.

Hier mein Quellcode:

#include <stdlib.h>
#include <avr/io.h>                 // Einbindung der allgemeinen "io.h" 
Header-Datei
#include <avr/wdt.h>
#include "lcd.h"


long i=0 ;
double a=0;
double x=0;
char zzz[30];
unsigned char c;


/* Zusaetzlich zur Baudrateneinstellung und der weiteren 
Initialisierung: */
void Usart_EnableRX(void)
{
    UCSRB |= ( 1 << RXEN );
}


/* Zeichen empfangen */
unsigned char uart_getc(void)
{
    while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
        ;
    return UDR;                   // Zeichen aus UDR an Aufrufer 
zurueckgeben
}


void initUart()
{
  UBRRL = 11;
  UCSRB  = 8;
}


void putChar (char data)
{
  while (!(UCSRA &32));
  UDR=data;
}


void print (char buffer[])
{
  for (int f=0; buffer [f] != 0; f++)
  putChar (buffer[f]);
}


void main( void )                   // Die Funktion "main" wird 
aufgerufen,
{                                   // es wird kein Wert mitgegeben 
(void)
                                    // es wird kein Wert zurückgegeben 
("void" vor main)

  initUart();

  lcd_init();
  lcd_on();
  lcd_clear();

  while ( 1 )                      // Endlosschleife,
    {
    Usart_EnableRX();
    c=uart_getc();
    lcd_write_s(c);
  }


}

Vielleicht fällt euch ja der Fehler auf ...
Bin um jeden Tipp dankbar.
mfg Luk

von Florian (Gast)


Lesenswert?

Hallo Luk,

Du hast leider einige Angaben nicht gemacht. Es wäre z.B. wichtig zu 
wissen mit welchem Takt Dein µC läuft. Auch ob Du einen externen Quarz 
oder den internen Takt verwendest. Beim internen Takt kann es beim UART 
zu Problemen kommen, da er recht ungenau ist. Man kann ihn zwar 
kalibrieren, ich würde bei UART aber immer zu einem externen Quarz 
raten.

Kontrolliere mal ob Deine Baudrate passt (Seite 159 ff ).

Und ich, bzw. der µC, vermissen die Angaben über Datenbits, Parität und 
Stopbit.

Seite 139:
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);

(Ich verwende z.B. für 8DatenBits,KeineParität,1StopBit UCSRC=0x86)

Schau mal ob Dir das weiter hilft.

Gruß
Florian

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.