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!
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?
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.
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...
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)
... also ich meinte nur den Blinker. Den Rest gebe ich auf. Trotzdem schönen Dank.
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?
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
@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.(?)
... 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.
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" ...
@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????
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.