Uart Problem mit ATMega8a

OP #4663567
Lesenswert?

Hallo Community,
ich arbeite zur Zeit an einem Projekt, bei dem ein Teil des Programmes 
über UART Zahlen dynamisch einlesen soll und die Zahlenwerte in Array 
speichert. Am Anfang hat alles super geklappt (Communication über UART), 
als ich das Programm dann nach einer Änderung auf den uC geladen habe, 
hat nichts mehr geklappt. Seitdem kann ich nicht mehr über UART 
kommunizieren, das terminal empfängt entweder garnichts oder komische 
Zeichen die ich nicht gesendet habe. Der USB-TTL Converter wurde 
überprüft und der uC auch einmal gegen einen anderen vom selben Typ 
ausgetauscht. Es hat sich leider nichts getan.
Ich bin mit meinem Latein am Ende, vllt könnt ihr mir weiterhelfen.
Freue mich auf eure Antworten.
Angehängte Dateien:
(Firma: Vescomp) #4663686
Lesenswert?

S. Landolt schrieb:
> Ich sehe kein Setzen von USE_2X, und bezüglich 9600 Bd bei einem
> Systemtakt von 1 MHz ohne U2X mal ins Datenblatt schauen unter
> "Examples of Baud Rate Setting".

Tobias K. schrieb:
> Ich habe den Code für die Initialisierung hier von der Seite und bisher
> hat das senden und empfangen prima geklappt. Es wird auserdem eine
> fertige Libery verwendet, wesshalb ich mir das Datenblatt disbezüglich
> nucht angesehn habe.

 Sollte man aber trotzdem tun.
 Ohne U2X in UCSRA ist dein Fehler bei 1MHz und 9600B satte -7%.
 Da deine Mega mit internem Quarz arbeitet, kann das noch bedeutend
 schlimmer ausfallen.
 Probiere es mit USE_2X.
Gast #4663724
Lesenswert?

Da Tobias K. wohl keine Lust, einfach mal diese simple Massnahme zu 
ergreifen, und sich sonst nichts tut, ein Gedicht von Franz Werfel, für 
alle Alten hier, zu denen wohl Paul Baumann und ich auch gehören:

Auf den alten Stationen

Auf den kleinen alten Stationen,
Die mein eigner Zug schon längst verlassen,
Ahn ich das Gedränge von Personen,
Die am Bahntrakt auf die Abfahrt passen.

Und ich möchte fast mich überheben
Über sie, die warten am Geleise,
Dass ich schon so weit auf meiner Reise
Vorgedrungen bin im Rüttel-Leben,

Dass ich kenne Brücken und Tunnelle,
Meer- und See- und Fels- und Stadtkulissen,
Dass mir gellen Aug und Ohr von Wissen,
Jenen unbekannt an ihrer Stelle,

Dass sie werden noch im Zeit-Zug sitzen,
Stumpf am Fenster schauend Funkenspiele
Und der tragischen Signale Blitzen,
Wenn ich ausgestiegen längst am Ziele.
OP #4663751
Lesenswert?

Tut mir Leid, dass ich mich erst jetzt melde. Ich habe, dass mit dem U2X 
auf 1 setzten probiert, dies hat jedoch am Ergebnis nichts geändert. 
Hoffe Ich habe es richtig gemacht:

void init_uart(void)
{
  UBRRH = UBRRH_VALUE;
  UBRRL = UBRRL_VALUE;    // evtl. verkuerzt falls Register 
aufeinanderfolgen (vgl. Datenblatt) UBRR = UBRR_VALUE;
  #if USE_2X
    UCSRA |= (1 << U2X);  // U2X-Modus erforderlich
  #else
    UCSRA &= ~(1 << U2X);  // U2X-Modus nicht erforderlich
  #endif

        UCSRA |= (1 << U2X);

  UCSRB = (1<<TXEN)|(1<<RXEN);  // UART TX/RX einschalten
  UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1
}


Was mich halt verwundert ist, dass das Programm schon geloffen ist und 
sinnvolles über UART ausgegeben hat. Ich habe eigendlich immer nur etwas 
an der Funktion uart_getdata, die mir die Zahlen auslesen soll, was 
geändert. Nachdem ich das Programm dann nach einer weiteren Änderung neu 
geladen habe (was ich geändert habe weiß ich nicht mehr), hat nichts 
mehr funktioniert.
Woran kann das bloß liegen?
OP #4663778
Lesenswert?

S. Landolt schrieb:
> Das war vermutlich nicht richtig, Sie sollten USE_2X setzen, sonst
> wird
> UBRR falsch berechnet.

Wären Sie vllt so freundlich mir zu sagen wie ich es zu setzen habe, da 
ich dazu keine Infortmationen gefunden habe. Muss ich des im define 
machen da es ja ein Makro ist?
Also #define USE_2X 1
Ich frage, weil ich es so ausprobiert habe und es wiederum nicht 
funktioniert. Vllt hilft es, wenn ich den uC abstecke und neu anstecke 
erhalte ich "[00]" im Terminalprogramm.
#4663872
Lesenswert?

>Zumindest eines wurde jetzt gelernt: funktionierende Programmversionen
>immer temporär speichern.

Eine einfache Versionsverwaltung KOSTET NICHTS, ist EINFACH AUFZUSETZEN 
und EINFACH IN DER ANWENDUNG.

Machst Du regelmäßig Sicherungen (ein einfacher Befehl und ein Kommentar 
zum aktuellen Status), so kannst Du auch jederzeit zu diesem - oder 
einem vorherigen - Punkt zurück.

GIT ist im Freeware Bereich DIE Versionsverwaltung.
Ich bevorzuge aber Mercurial.

Ich hoffe nur, dass ich mit diesem Kommentar nicht eine endlose 
Diskussion über die bessere Versionsverwaltung losgetreten habe.
(Firma: Vescomp) #4663885
Lesenswert?

Marc V. schrieb:
> Ich versuche irgendwo eine M8 auszugraben, um es zuerst hier
>  auszuprobieren.

 Ausgegraben, interner Oszillator, 1MHz und 9600B.
 Lock Fuse 0xFF, Low Fuse 0xE1, High Fuse 0xD9.

 Läuft wie es soll (ASCII 0x00 - 0xFF wird ausgegeben, mit 100ms Pause
 dazwischen).

 Sollte es bei dir mit selben Einstellungen nicht laufen, wurde ich als
 erstes USB-TTL Konverter in einen anderen Port umstecken und wenn es
 immer noch nicht läuft, auswecheln.

 Edit:
 Ich nehme an, dass die übrigen Verbindungen noch in Ordnung sind, da
 am Anfang doch irgendetwas ausgegeben wird.
OP #4664058
Lesenswert?

guest schrieb:
> Wie getestet? Verkraftet das Teil die 3.3V Deines ATmega oder will es
> tatsächlich 5V TTL-Pegel sehen?

Es arbeitet mit 3,3V jedoch erkennt der uC die auch als high, an den 
Eingang der Wandlers habe ich einen Spannangsteiler gebaut. Getestet 
habe ich den Wandler indem ich einfach eines meiner Bluetoothmodule 
angeschlossen habe und dann damit Testnachrichten gesendet habe. Diese 
wurden alle im Terminal angezeigt.
#4664255
Lesenswert?

Tobias K. schrieb:
> Also eine LED lässt sich zum Blinken bringen.
> Ich weiß jetzt wirklich nicht weiter.

Hast Du einen Oszi? Dann mess mal an der TxD-Leitung vom µC bis zum 
USB-TTL-Converter.
Vielleicht hast Du Kontaktprobleme/Leitungsunterbrechungen?

Auch eine fehlende oder schlechte GND-Verbindung µC <-> 
USB-TTL-Converter <-> PC (Leitungsbruch?) kann diese Wirkung haben.

Gruß Dietrich
OP #4664307
Lesenswert?

So TX Pin (PD1) mit Led überprüft => ok
an uC bluetoothmodul angeschlossen => keine Sinnvolle Ausgabe
uC an PC über TTL angeschlossen => keine sinnvolle ausgabe
Ausgabe: [00]ø8[0E]À8þÀ8[00]øø was nach Programm gesendet werden soll: 
test

Oszilloskop vorhanden, Logic Analyser nicht
(Firma: Vescomp) #4664345
Lesenswert?

Tobias K. schrieb:
> So TX Pin (PD1) mit Led überprüft => ok
 Sagt nicht viel über UART.

> an uC bluetoothmodul angeschlossen => keine Sinnvolle Ausgabe
 Sagt sehr viel über UART.

> uC an PC über TTL angeschlossen => keine sinnvolle ausgabe
 Mit 3V3 geht sowas bestimmt nicht, ich hoffe, dass du RxD nicht
 angeschlossen hast.

> Ausgabe: [00]ø8[0E]À8þÀ8[00]øø was nach Programm gesendet werden soll:
> test
 Dein uC sendet mit Baud / 2, probiere 4800B oder, falls du die
 Möglichkeit hast, Baudrate am PC in 500-er Schritten ändern.

> Oszilloskop vorhanden, Logic Analyser nicht

 Dann messe mal...
OP #4665493
Lesenswert?

So ich kann das Problem jetzt schon sehr einengen. Es kann eigendlich 
nur sein das mit der Software (Atmelstudio) etwas nicht stimmt oder der 
Programmer kaputt ist.
Ich habe den uC bei einem Freund mit demselben Programm bespielt und er 
funktioniert einwandfrei, bei ihm und bei mir am PC über UART.
Das einzig komische ist, dass ich zuhause zum Test ein LED blink 
programm daraufgespielt habe und das hat der uC richtig wiedergegeben.
Was kann ich noch machen?

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