Forum: Mikrocontroller und Digitale Elektronik UART und Hyperterminal


von Andi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

da man hier schon so gut mit meinem ADC Problem helfen konnte,
denk ich das mir vielleicht auch beim nächsten Problem geholfen werden 
kann:

ATmega168, 16 MHz externer Quarz.

Ich möchte mit angehängtem Code eine "Echo" funktion Testen
und damit auch meinen MAX3225.

Am MAX selber messe ich V+ = 6.97V und V- = -5.36V.
TXD µC => MAX: 0V
RXD µC => MAX: 5V

TXD MAX => D SUB: ohne KABEL zum PC 0V mit KABEL zum PC -9.9V
RXD MAX => D SUB: -5.5V

Die Pegel am D-SUB wundern mich.

Wenn ich das Hyperterminal starte kommt nichts an, bzw. die Echo 
Funktion geht nicht.
Habe sowohl mit CLKDIV8 Fuse und ohne getestet beides ohne erfolg.
Die SW ist angelehnt an ein Beispiel im Buch, Mikrocomputertechnik mit 
Controllern der Atmel AVR Risc Familie.

Danke schonmal & Gruß Andi

von Karl H. (kbuchegg)


Lesenswert?

Andi schrieb:

> TXD MAX => D SUB: ohne KABEL zum PC 0V mit KABEL zum PC -9.9V
> RXD MAX => D SUB: -5.5V
>
> Die Pegel am D-SUB wundern mich.

Kreuze im Kabel die Adern 2 und 3

von Andi (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Andi schrieb:
>
>
>
>> TXD MAX => D SUB: ohne KABEL zum PC 0V mit KABEL zum PC -9.9V
>
>> RXD MAX => D SUB: -5.5V
>
>>
>
>> Die Pegel am D-SUB wundern mich.
>
>
>
> Kreuze im Kabel die Adern 2 und 3

Sorry ich hab mich bei meiner der Angabe vertan:

RXD MAX => D SUB: ohne KABEL zum PC 0V mit KABEL zum PC -9.9V

TXD MAX => D SUB: -5.5V

von Karl H. (kbuchegg)


Lesenswert?

Andi schrieb:

>> Kreuze im Kabel die Adern 2 und 3
>
> Sorry ich hab mich bei meiner der Angabe vertan:
>
> RXD MAX => D SUB: ohne KABEL zum PC 0V mit KABEL zum PC -9.9V
> TXD MAX => D SUB: -5.5V

Sieht schon besser aus.

Hardwaretest:

µC aus dem Sockel rausnehmen.
Dann mit einer Drahtbrücke im Sockel die 'µC-Pins' für RxD und TxD 
brücken.
Am Hyperterminal klimpern (Stein auf eine Taste legen).
Siehst du im Hyperterminal die gesendeten (und von der Brücke 
zurückgeschickten) Zeichen?

Gegentest: Brücke entfernen. Das 'Echo' muss ausbleiben. Wenn nicht, ist 
am PC das lokale Echo aktiviert -> abschalten und Test wiederholen

Wenn kein Echo kommt:
Led mit Vorwiderstand ausrüsten. Das eine Ende an Masse. Mit dem anderen 
Ende der 'Messschaltung' das Signal vom D-Sub Stecker zum Sockel und 
wieder zurück verfolgen, wo es verloren geht.
Insbesondere bei kleinen Baudraten (300 Baud) sieht man die LED deutlich 
flackern, wenn Datenverkehr auf der Leitung stattfindet (daher auch der 
Stein auf der Tastatur)

von Karl H. (kbuchegg)


Lesenswert?


von Andi (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> µC aus dem Sockel rausnehmen.
>
> Dann mit einer Drahtbrücke im Sockel die 'µC-Pins' für RxD und TxD
> brücken.
> Am Hyperterminal klimpern (Stein auf eine Taste legen).
> Siehst du im Hyperterminal die gesendeten (und von der Brücke
> zurückgeschickten) Zeichen?
>
>
>
> Gegentest: Brücke entfernen. Das 'Echo' muss ausbleiben. Wenn nicht, ist
> am PC das lokale Echo aktiviert -> abschalten und Test wiederholen

HW Funktioniert.
Wenn die Brücke drin ist kommt das Echo wenn ich sie entferne kommt 
nichts.
Also ists ein SW Fehler. Die hab ich aber sehr nahe dem Beispiel aus
dem Buch gemacht.

von Karl H. (kbuchegg)


Lesenswert?

Andi schrieb:

> Also ists ein SW Fehler. Die hab ich aber sehr nahe dem Beispiel aus
> dem Buch gemacht.


Geh die Checkliste durch.
Fang damit an, die Taktfrequenz deines µC zu kontrollieren.

von Karl H. (kbuchegg)


Lesenswert?

Aus deinem Code
1
// Synchron, 8 Bit, keine Parität, ein Stoppbit
2
UCSR0C |= (1<<UMSEL00);            // Synchron, Standart auf Asynchron

Ähm. BIst du dir sicher, dass du weißt, was du hier tust?

Lass das UCSR0C Register erst mal in Ruhe. Der von Atmel beim Power-On 
eingestellte Default ist vernünftig.

von Andi (Gast)


Lesenswert?

Ok hab das UCSR0C Register in ruhe gelassen:

Das '>' Zeichen empfängt der pc nicht.
Die Echo schleife hat erst nicht Funktioniert danach hat es kurz ein
Echo gegeben auf meine Eingaben und dann wieder nicht.


Ein kommisches verhalten...aber schonmal besser als am anfang ;)

von Karl H. (kbuchegg)


Lesenswert?

Andi schrieb:
> Ok hab das UCSR0C Register in ruhe gelassen:
>
> Das '>' Zeichen empfängt der pc nicht.
> Die Echo schleife hat erst nicht Funktioniert danach hat es kurz ein
> Echo gegeben auf meine Eingaben und dann wieder nicht.

Klingt nach Wackelkontakt.

Dein erstes Programm sollte sein:

µC schickt in einer Endlosschleife ständig ein 'X'

Das lässt du laufen und dann rüttelst du an allen Kabeln, bzw. gehst mit 
der Mess-LED den Signalverlauf vom µC ausgehend durch. Wieder: das 
Blinken der LED zeigt dir, wo die Zeichen noch vorhanden sind.

Um es klar und deutlich anzusprechen:
Ein Echo-Programm ist als erstes Testprogramm völlig ungeeignet.
Du hast 2 Komponenten die funktionieren müssen:
  den Empfangscode
  den Sendecode

nur wenn in beiden kein Fehler ist, funktioniert das Echo.
Wenn das Echo aber nicht funktioniert, weißt du erst mal nicht, wo das 
Problem liegt - beim Empfänger oder beim Sender.
Daher ist ein Echo als erstes Testprogramm ungeeignet.

Fehlersuche macht man immer mit so wenig ungetesten Komponenten wie 
möglich.

von Andi (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Klingt nach Wackelkontakt.

dachte ich auch erst aber wie ich die Brücke im Sockel drin hatte
gab es keine Störungen. Von daher müsste die Verbindungen ja passen.
Aber ich such jetzt auch erstmal nach einem Wackler.

Da mit dem Testen stimmt schon, normal sollte ich erst nur senden.
Aber da das Echo ja manchmal geht hab ich ja Glück gehabt ;).
Aber da das '>' zeichen ganz am anfang nicht kommt denke ich am ehesten 
an einen Wackler in der TX Leitung.

Vielleicht ist auch die BAUD nicht in Ordnung jedoch sollte der
MAX 115.2 k locker schaffen genau so wie der ATmega mit 16 MHz externen 
Quarz...

von Karl H. (kbuchegg)


Lesenswert?

Andi schrieb:

> Aber da das Echo ja manchmal geht hab ich ja Glück gehabt ;).

Ich kann dir nur Tips geben.
Wie und was du umsetzt musst du selber entscheiden.

von Andi (Gast)


Lesenswert?

Also jetzt send ich seit einiger zeit ein x.
Kommt nicht an am HT.
Wenn ich mir mitm Osszi die TX Leitung vor dem D-Sub anschau seh ich
einen Sägezah mit ca. T = 1ms und 5.2 V auf 6 V steigt auf 5.2 V fällt 
usw. Hab die Baud auf 9600 reduziert.

Hab alle Drähte nach gelötet aber wie gesagt mit der Brücke gings ja 
auch. Hab ebenfalls das Serielle Kabel getauscht und den D-SUB 
Durchgemessen sowie die Leitungen µC <=> MAX <=> D-SUB. Der Quarz 
schwingt auch sauber seine 16 MHz.
CLKDIV8 ist nicht Programmiert.

Bin grad recht Ratlos...

von Andi (Gast)


Lesenswert?

Hallo zusammen,

also ich hab nach wie vor dieses problem.
Ich sende ein X und es kommt nicht an. HW Funktioniert nach wie
vor.
(RX, TX gebrückt am µC Sockel => Echo am HT; ohne Brücke => kein Echo)

Wenn ich die CLKDIV 8 Fuse Programmiert habe zieht meine Schaltung
ca 8 mA aus dem Netzteil bzw. wenn ich CLKDIV 8 Fuse nicht Programmiere 
braucht sie ca 18 mA.

Erklärt sich der anstieg des Stroms daraus das der Takt steigt
und damit auch der Verbrauch?
Hab ich vielleicht noch irgend einen fehler in meiner Sende Routine?
Oder gibt es noch eine Fuse die mir nen fehler reinbringt?
Wie gesagt die Echo routine ging abund zu für ein paar zeichen.
Aber wenn ich nur sende geht nichts...

von Karl H. (kbuchegg)


Lesenswert?

Andi schrieb:

> also ich hab nach wie vor dieses problem.
> Ich sende ein X und es kommt nicht an. HW Funktioniert nach wie
> vor.
> (RX, TX gebrückt am µC Sockel => Echo am HT; ohne Brücke => kein Echo)

Gut, das ist schon mal ein Hinweis, das Kabel richtig ist und der 
MAX3225 arbeiten dürfte.

Das allerdings

> Wenn ich mir mitm Osszi die TX Leitung vor dem D-Sub anschau seh ich
> einen Sägezah

klingt nicht gut.
Was genau verstehst du unter einem 'Sägezahn'. Einfach nur ein kleiner 
Einbruch oder richtig ausgeprägt?

Das Signal ist im Idealfall ein Rechteck. Kann man dein Signal durch 
Zudrücken von einem Auge noch als Rechteck bezeichnen?


Wenn du das Sendeprogramm laufen hast UND
mit dem Oszi am Tx Pin vom µC die Signale rauskommen siehst UND
hinter dem MAX das Signal aufs Kabel geht UND
auf PC Seite das Signal am Rx Pin ankommt UND
die Baudrate stimmt                       UND
die Taktfrequenz des µC mit der im Pgm verwendeten übereinstimmt UND
die Signalform einigermassen ein Rechteck ist          UND
Hypertermial am richigen COM Port lauscht


      DANN

funktioniert die UART auch.


(Ich denke, da sind jetzt alle Fehlermöglichkeiten enthalten. Mehr gibt 
es nicht)

von Andi (Gast)


Lesenswert?

Also:

Beim HW Test sind es durchaus Saubere Rechtecke.
Sowohl RX und TX (Controller <=> MAX) sind auch 5 V.

Wenn ich den Cotroller reinstecke (und damit sende)
ist die TX Leitung (µC => MAX)
0V. Das sollte nicht sein oder?

von Karl H. (kbuchegg)


Lesenswert?

Andi schrieb:
> Also:
>
> Beim HW Test sind es durchaus Saubere Rechtecke.
> Sowohl RX und TX (Controller <=> MAX) sind auch 5 V.
>
> Wenn ich den Cotroller reinstecke (und damit sende)
> ist die TX Leitung (µC => MAX)
> 0V. Das sollte nicht sein oder?

Nein. Das sollte nicht sein.

von Andi (Gast)


Lesenswert?

Hab jetzt einen neuen Controller (selber Typ)
drauf aber immer noch das selbe Problem:
Die TX Leitung hat zwischen µC und Max bleibt LOW.

von Andi (Gast)


Lesenswert?

És funktioniert entlich!

Voher:
Die BAUD wurde per Defines berechnet und stand in uart.c.
uart_init() war eine normale Funktion. In der Funktion wird das oben
angegebene Define BAUD in das Register geschoben.

Nacher:
Die BAUD wird per Defines berechnet und steht aber in main.c.
uart_init(BAUD) mit BAUD als übergabewert und schon geht alles.
In der Funktion wird der Übergabewert BAUD ins Register geschoben

Kanns mir aber ehrlich gesagt nicht ganz erklären...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.