UART geht mal wieder nicht

Gast #1760287
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:

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

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

16
int main(void)
17
{
18

19
uart_init();
20

21
    while (1)
22
    {
23

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

27
        // Daten in den Puffer schreiben und damit senden
28
        UDR0 = 'H';
29
   }
30
}


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
Gast #1760332
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
#1760403
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_Checkliste#UART.2FUSART

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

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