Kann nix Empfangen - UART

Gast #2563575
Lesenswert?

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
}
#2563750
Lesenswert?

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 #2563754
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren