www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik atmega8 uart rx Problem


Autor: Luk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.