www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mini-USB zu UART Konverter


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

Bewertung
0 lesenswert
nicht lesenswert
Moin.
Ich habe mir den USB zu Uart Konverter von Silicon Labs zugelegt 
(Vertrieb: Conrad) Ich bekomme einfach keine vernünftige Verbindung.
Aufbau:
 UART-USB-Bridge (mit CP2102), Treiber: USBXpress + entsprechende API
 Atmega8 mit Quarz
Testprogramm:
 Host: siehe 'Unit_USB.cpp' (Initialisierung, paar Daten übertragen)
 µC: 'main.asm', 'USART.asm'
  Timer0-Interrupt für Abarbeiten des Hauptprogrammes (im Moment nur LED 
blinken an PINB3, damit ich sehe, dass nichts hängt)
  RXC-USART-Interrupt für Empfang

Sende ich jetzt Daten vom PC, sieht es so aus, als würde jeder 
Bitwechsel einen Interrupt auslösen (LED am PINB0 wird eingeschaltet). 
Also: sende ich 8x 0xFF blitzt die LED 8x auf. Sende ich eine Folge von 
Zahlen, in denen nur 1 Bit gesetzt ist (0x01, 0x02, .. 0x80) dann blinkt 
die LED 16x, wobei die Pausen immer länger werden. Bei anderen Zeichen 
entsprechend unregelmäßig. Im Register URD steht immer 0x00.

Ich häng' fest. Hilfe!

Autor: RALF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... ist wohl nicht so einfach?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zur Fehlersuche ist es sinnvoll, die Fehlerquellen zu reduzieren. 
Verwende nicht Dein eigenes Programm auf dem PC, sondern nutze entweder 
ein normales Terminalprogramm wie Hyperterminal oder ein 
Schnittstellentestprogramm wie hTerm von Tobi.

Dann lass den µC weg und verbinde RxD und TxD der USB-Seriell-Bridge.

Starte das Terminalprogramm, sende ein paar Zeichen (bei Hyperterminal: 
Einfach auf der Tastatur herumtippen).

Wenn diese Zeichen wieder beim PC ankommen, dann scheint die 
USB-Seriell-Bridge korrekt zu funktionieren.

Jetzt schließe den µC an die USB-Seriell-Bridge an und verwende das 
Terminalprogramm, um dem µC Daten zu senden.

Wenn er sich dann immer noch so seltsam verhält wie von Dir beschrieben, 
liegt das Problem in Deinem Programm auf dem µC. Wenn er korrekt 
funktioniert, dann wird das Problem in Deinem PC-Programm liegen.

Warum nutzt das "USBXpress + entsprechende API" und nicht einfach die 
Funktionen für die Ansteuerung serieller Schnittstellen?

Autor: RALF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, für den Tipp.

Zur Fehlersuche ... hätt' ich auch selber drauf kommen können -> der 
Konverter funktioniert erstmal, allerdings sind die Ergebnisse noch die 
gleichen.
Also müsste es am Code im µC liegen. Eigentlich kann man da doch gar 
nichts falsch machen ... ISR aufrufen (lassen), Register lesen, 
speichern fertig.

'USBXpress' fand ich gut, weil man sich da so einfach den (selbst 
vergebenen) Namen aus einer Liste raussuchen kann um die entsprechende 
Schnittstelle aufzurufen. Und es ist eben nur USB. Aber wahrscheinlich 
etwas viel auf einmal.

Autor: RALF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also: Hyperterminal sendet an mein Programm -> der gleiche Effekt.
Meine weiteren Versuche:
 Die Senderoutine aus dem Tutorial aufgespielt -> da kommt nur 
'~~~~~~~~~' usw. zurück.
 Die Empfangsroutine aus dem Tutorial und zusätzlich 'Senden' am Ende -> 
nichts kommt zurück.

Geht jetzt, glaube ich so in die Richtung Zitat: 'UART-seltsamer 
Empfang' oder 'UART sendet nur wirres zeug' oder so ähnlich...

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

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mit gerade mal einen Sekundenblinker 'gebastelt'.
Ich habe den Eindruck, der Quarz ist zu langsam! Kann das sein?? Ich 
hoffe, die Rechnung ist richtig:
 1s=6144000  1024  250/ 24
 6144000: Quarzfrequenz
    1024: Teiler in TCCR0
     250: Startwert für den Timer = 6
      24: Schleifendurchläufe = 23 (bei '0' LED an, sonst aus)

Autor: RALF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommando zurück, das scheint ordentlich zu funktionieren!

Autor: RALF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... also ich meinte nur den Blinker. Den Rest gebe ich auf.
Trotzdem schönen Dank.

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

Bewertung
0 lesenswert
nicht lesenswert
Ich hab's wieder vorgekramt. Es muss doch gehen!
Versuchsaufbau:
 Atmega8 sendet endlos (Beispielprogramm Tutorial) 
0xFF,0xFF,0xAA,0xAA,0x55,0x55 bei 110 Baud/ 8 Bit/ 2 Stoppbit/ keine 
Parität.

Wenn ich das richtig interpretiere, sind das dann 10 Zeichen pro 
Sekunde.(?)
Ich habe mal ein Oszi drangehängt (Anhang). Ich finde das alles in 
Ordnung. Aber Hyperterminal nicht, da kommen nur 'h's an. Konverter im 
A....? (Bei Verbindung von TxD und RxD am Konverter erhält man am 
Terminal allerdings ein korrektes Echo! bei 110 Baud relativ flüssig, 
bei höheren Raten mit mehr Verzögerung(???))

Kann mal jemand drüberschauen?

Autor: David .. (david1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne sich das Oszi Bild anzuschauen vermute ich eher das der Uartt am µC 
hinüber ist, hatte ich vor kurzem auch aus welchem Grund auch immer, 
einmal nen anderen µC reingesteckt und siehe da ...

Ansonsten wundern mich die 2 Stopbits, Sendest du die auch in hterm und 
hasts auch im µC so eingestellt.

Ich würd einfach mal die Standart config mit 8/1/none probieren und auch 
evtl mit der Baudrate bischen hoch gehen.

Gruß
David

Autor: RALF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@David S.
µC, anderes Format, höhere Baudrate alles schon probiert. Bei '9600 
8-n-1' kommen verschiedene Zeichen an, aber ohne System. Und, wie ich 
finde, sehr langsam (so max. 2 Zeichen/ Sekunde). Könnte auf völlig 
verschiedene Baudraten hindeuten. In Hyperterminal gibts unten so ein 
Feld, da steht 'Auto detect' drin, das wechselt nach einer Weile in, 
z.B., '9600 8-n-1'. Interpretiere ich so, dass HT diese Einstellungen 
erkannt hat.(?)

Autor: RALF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... 110 Baud und den 2 Stopp-Bits habe ich genommen, weil am Oszi ein 
Byte (nach meinen Berechnungen) dann genau die Breite von zwei Kästchen 
hat.

Autor: Michael L. (michaelx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bringt vlt. nix, aber weil es noch nicht gefragt wurde:

Passen Betriebsspannung deines atmega und der Signalpegel des Konverters 
zusammen und/oder sind Rx und Tx falsch verbunden? Evtl. Brücke X1-X2 am 
Konverter vergessen, sofern TTL-Siganlpegel verwendet?

Manchmal sind es nur "Kleinigkeiten" ...

Autor: RALF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Michael L.
Hab ich auch schon geprüft. Müsste aber egal sein, das gilt nur für TxD 
am Konverter (hab ich jedenfalls so gelesen). Im Moment versuche ich nur 
zu empfangen.

Von den vom µC gesendeten Zeichen kommen bei 110Baud nur genau die 
Hälfte am Terminal an. Naja, von Ankommen kann nicht die Rede sein, es 
werden am Terminal halb so viele Zeichen (=Datenmüll) dargestellt. Bei 
höheren Raten geht (meistens) gar nichts mehr.

Deshalb noch mal zum Funktionstest (Verbinden TxD - RxD):
mit 110Baud: sieht nicht schlecht aus, die Zeichen kommen mit etwas 
Verzögerung (rein rechnerisch 1/10s (?))
mit 9600Baud oder 921600Baud werden die eingegebenen Zeichen so etwa 
alle 1s dargestellt. kann das sein????

Autor: RALF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte noch mal nachhaken. Kann diese Verzögerung von rund einer 
Sekunde überhaupt sein? Also: Taste drücken - warten - 1s später ist das 
Zeichen auf dem Schirm. Bei 110Baud geht's doch ordentlich!

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.