www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART und Hyperterminal


Autor: Andi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

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

Bewertung
0 lesenswert
nicht 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

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Bewertung
0 lesenswert
nicht 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)

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

Bewertung
0 lesenswert
nicht lesenswert

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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

Bewertung
0 lesenswert
nicht 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.

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

Bewertung
0 lesenswert
nicht lesenswert
Aus deinem Code
// Synchron, 8 Bit, keine Parität, ein Stoppbit
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.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

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

Bewertung
0 lesenswert
nicht 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.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

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

Bewertung
0 lesenswert
nicht 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.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

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

Bewertung
0 lesenswert
nicht 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)

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

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

Bewertung
0 lesenswert
nicht 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.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

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.