Kann nix Empfangen - UART

Gast #2563575
Hey,

ich probiere grad meine UART aus. Habe ein ATmega8 auf dem Pollin-Board.
Das senden von Zeichen und Strings funktioniert klasse.
Nur ich empfange einfach nix.

Jemand ne Ahnung was falsch ist?
PD5&PD6 sind LED's zur Anzeige ob das Programm weiter läuft (und PD6 
bleibt aus).


/*
 * UART_IN.c
 *
 * Created: 23.02.2012 19:53:10
 *  Author: Cris
 */

#include <avr/io.h>
#define F_CPU 16000000UL
#define BAUD 9600UL
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)

void uart_init(void);
int uart_putc(unsigned char c);
uint8_t uart_getc(void);


int main(void)
{
  uart_init();
  DDRD = 0b11100000;
  uint8_t c;

    while(1)
    {
    PORTD |= (1 << PD5);
    c = uart_getc();
    PORTD |= (1<< PD6);
    while (!(UCSRA & (1<<UDRE)))  // warten bis Senden moeglich
    {
    }
    uart_putc(c + '0');
    }
}

void uart_init(void)
{
  UBRRH = UBRR_VAL >> 8;
  UBRRL = UBRR_VAL & 0xFF;

  UCSRB |= (1<<TXEN) | (1<<RXEN);
  // Frame Format: Asynchron 8N1
  UCSRC = (1<<URSEL)|(1 << UCSZ1)|(1 << UCSZ0); // Asynchron 8N1
}

int uart_putc(unsigned char c)
{
    while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich */
    {
    }

    UDR = c;                      /* sende Zeichen */
    return 0;
}

uint8_t uart_getc(void)
{
    while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
        ;
    return UDR;                   // Zeichen aus UDR an Aufrufer 
zurueckgeben
}
Hallo Cris,

warum schreibt ihr immer wieder selbst Code der nicht funktioniert ?

Verwende doch bitte eine Bibliothek von einem fertigen Projekt.

Z.B.:
* Software UART mit FIFO von Peter Dannegger:
Beitrag "Software UART mit FIFO"

ODER

* UART Library von Peter Fleury:
http://homepage.hispeed.ch/peterfleury/avr-software.html
http://homepage.hispeed.ch/peterfleury/group__pfleury__uart.html

.
Gast
An deinem Programm liegt es nicht. Das läuft bei mir.

Überprüfe die Hardware d.h. die Leitung TX die vom PC kommt und auf RXD 
am Atmega8 endet.

Im einfachsten Fall besteht der Test darin: AVR aus der IC-Fassung 
ziehen und eine Drahtbrücke zwischen RXD und TXD stecken. Dann auf dem 
PC was senden. Alles was du sendest muss als Echo auf den PC zurück 
kommen. Wenn nicht ist was iauf der Verbindung faul. Wenn das Echo 
zuverlässig kommt, dann den AVR mal tauschen. Vielleicht ist die 
Eingangsstufe an RXD zerschossen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.