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


von RALF (Gast)


Angehängte Dateien:

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!

von RALF (Gast)


Lesenswert?

... ist wohl nicht so einfach?

von Rufus Τ. F. (rufus) Benutzerseite


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?

von RALF (Gast)


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.

von RALF (Gast)


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...

von RALF (Gast)


Angehängte Dateien:

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)

von RALF (Gast)


Lesenswert?

Kommando zurück, das scheint ordentlich zu funktionieren!

von RALF (Gast)


Lesenswert?

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

von RALF (Gast)


Angehängte Dateien:

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?

von David .. (david1)


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

von RALF (Gast)


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.(?)

von RALF (Gast)


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.

von Michael L. (michaelx)


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" ...

von RALF (Gast)


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????

von RALF (Gast)


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!

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.