mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART geht mal wieder nicht


Autor: Christian Lienen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Kollegen,
ich weiß, dass diese Thema schon relativ häufig in diesem Forum 
diskutiert wurde. Ich habe mir auch schon ziemlich viele dieser Beträge 
durchgelesen, komme aber trotzdem nicht weiter.
Folgendes Problem:

Ich habe mir eine Platine gelötet mit einem Atmega48 und einem externen 
Quarz mit 14,7456MHz. Led's lassen sich damit auch prima ansteuern. Um 
sicherzustellen, dass der µC wirklich mit diesem Quarz läuft, habe ich 
ihn auch schon einmal abgelötet. Nach dem löten ließ er sich auch nicht 
mehr ansteuern.
Nun aber zu meinem eigentlichen Problem:

#include <inttypes.h>
#include <avr/io.h>
#define F_CPU 14745600UL
#define BAUD        9600
#define UBRR_BAUD   ((F_CPU/(16UL*BAUD))-1)

void uart_init(void)
{
    UBRR0H = (uint8_t) (UBRR_BAUD>>8);
    UBRR0L = (uint8_t) (UBRR_BAUD & 0x0ff);
    UCSR0B = (1<<RXEN0)|(1<<TXEN0);
    // Einstellen des Datenformats: 8 Datenbits, 2 Stoppbit
    UCSR0C = (1<<UCSZ01)|(1<<UCSZ00)|(1<<USBS0);
}

int main(void)
{

uart_init();

    while (1)
    {

        // Warten bis der Sendepuffer frei ist
        while ( !( UCSR0A & (1<<UDRE0)) );

        // Daten in den Puffer schreiben und damit senden
        UDR0 = 'H';
   }
}



Ich möchte den µC mit diesem kleinen Programm dazu bewegen, mir 
wenigstens schonmal den Buchstaben H auf die serielle Schnittstelle zu 
senden.
Leider tut er dies nicht.
Ich habe auch schon versucht, ein Oszi direkt an Rx des µC zu hängen. 
Dieses zeigt mir jedoch die ganze Zeit nur 5V an.
Könntet ihr mir vielleicht ein paar Anregungen liefern um dieses Problem 
zu beseitigen?

Mit freundlichen Grüßen
Christian Lienen

Autor: Michael B. (planlessmichi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich habe mir Dein Programm jetzt nicht angesehen, aber wenn Dein µC 
dem PC was senden soll, dann musst Du am Tx-Pin vom µC und nicht am Rx 
messen.

Autor: Lord Ziu (lordziu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian Lienen schrieb:
> ein Oszi direkt an Rx des µC zu hängen.

Rx ist der Empfänger. Wenn du sendest, solltest du was an Tx sehen 
können.


Erste Frage (wie immer): Ist die CKDIV8 Fuse gesetzt?

Autor: Christian Lienen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh sorry, ich habe auch an Tx gemessen, es hier nur leider falsch 
hingeschrieben :-[

Leider passiert immernoch nichts. Ich habe auch noch einmal nachgesehen, 
ob das CKDIV8 Bit gesetzt ist. Leider ist das gesetzt.
Was kann ich noch tun?

Mit freundlichen Grüßen
Christian Lienen

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian Lienen schrieb:

> Ich habe mir eine Platine gelötet mit einem Atmega48 und einem externen
> Quarz mit 14,7456MHz. Led's lassen sich damit auch prima ansteuern. Um
> sicherzustellen, dass der µC wirklich mit diesem Quarz läuft, habe ich
> ihn auch schon einmal abgelötet. Nach dem löten ließ er sich auch nicht
> mehr ansteuern.

OK.
Das heisst erst mal noch nicht allzuviel

Hast du irgendwo eine LED drann hängen? WEnn
ja, dann findest du hier ein Testprogramm

http://www.mikrocontroller.net/articles/AVR_Checkl...

passe dort die Taktfrequenz auf deine an, trage die LED ein und sieh 
nach, ob die Blinkzeiten stimmen. Optimizer vom Compiler einschalten 
nicht vergessen.

> ob das CKDIV8 Bit gesetzt ist. Leider ist das gesetzt.
> Was kann ich noch tun?

Kontrolliere erst mal, ob die aktiv ist.
Wenn ja, dann blinkt oben genanntes Testprogramm alle 8 Sekunden. WEnn 
nicht, dann alle 1 Sekunden.
Du brauchst 1 Sekunde.

Wenn die die CKDIV8 Fuse falsch steht, dann nimm dein Brennprogramm her 
und ändere sie auf die andere Seite.

Ziel: Die 1 Sekunde Blinkrate im Testprogramm

> Leider tut er dies nicht.

Tut sich sonst irgendetwas?

> Ich habe auch schon versucht, ein Oszi direkt an Rx des µC zu hängen.
> Dieses zeigt mir jedoch die ganze Zeit nur 5V an.

Ok. Tx anstelle von Rx.

Du kannst nicht einfach mit dem 5V Ausgang auf den PC gehen. Du brauchst 
einen Pegelwandler, der die 0V-5V auf +-12V umsetzt.

http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART


Ein Oszi ist zwar gut um die Signale auszumessen, wenn es aber nur darum 
geht festzustellen, ob der µC überhaupt sendet, finde ich eine 
stinknormale LED zur Fehlersuche besser geeignet. Schliesse sie mit 
einem 220 Ohm Widerstend (oder irgendwas in dieser Grössenordnung gegen 
Masse an). Wenn der µC sendet, dann flackert die LED, das kannst du kaum 
übersehen. Vor allen Dingen dann nicht, wenn du die Baudrate auf 300 
Baud zurücknimmst.

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.