Mini-USB zu UART Konverter

Gast #1841222
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!
Angehängte Dateien:
Persönliche Seite #1841452
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?
Gast #1841562
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.
Gast #1842629
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...
Gast #1842687
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)
Angehängte Dateien:
Gast #1848004
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?
Angehängte Dateien:
#1848029
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
Gast #1848076
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.(?)
#1849393
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" ...
Gast #1849522
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????
Gast #1849682
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

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