Hallo, Ich versuche mit einem USB zu seriell Chip (FTDI232RL) meinen Controller anzusprechen. Das Programm funktioniert einwandfrei wenn ich direkt über seriell auf den Controller gehe. Ich verschicke im Programm ein "test". Im Terminalprogramm erhalte ich aber immer € Zeichen (in einem anderen Terminal Programm immer '\0'. Wenn ich ein Zeichen reinschick empfängt der Controller immer den Wert 255 als integer. Rein Hardwaremäßig müsste eigentlich alles passen, wenn ich mit dem Terminalprogramm ein Zeichen sende wird im Controller der entsprechende Interrupt ausgelöst. Fällt jemand dazu was ein?
>Im Terminalprogramm erhalte ich aber immer € Zeichen (in einem anderen >Terminal Programm immer '\0'. nimm ein anderes Terminalporgramm das Übertragungsfehler kennzeichnet z.B. H-Term >Wenn ich ein Zeichen reinschick empfängt der Controller immer den Wert >255 als integer. das glaube ich nicht, solange deine Integer nicht 8Bit gross sind. >Rein Hardwaremäßig müsste eigentlich alles passen, wenn ich mit dem >Terminalprogramm ein Zeichen sende wird im Controller der entsprechende >Interrupt ausgelöst. weisst du das oder vermutest du es? Anders gefragt benutzt du JTAG? >Fällt jemand dazu was ein? 1.Der FTDI Chip oder die verdrahtung haben probleme. 2.Du benutzt ein Terminalprogramm das nicht mit hohen Portnummern zurechtkommt. 3.Du benutzt eine Taktfrequenz für den Mikrocontroller die sich nicht auf die Baudratenfrequenz ganzzahlig teilen läßt und deine serielle ist toleranter als der FTDI Chip. Ich würde auf 1. tippen
Also, Baudrate müsste korrekt eingestellt sein. Habs mit zwei Varianten versucht, einmal im Code berechnet und einmal direkt aus dem Datenblatt rausgelesen und eingetragen. Bei 16Mhz und einer Baudrate von 9600 hab ich einen Fehler von 0,2%, das sollte eigtl gar nichts machen. 1. Also verdrahtung ist nach Vorgabe von FTDI und alles auf einer professionell verarbeiteten PLatine, sollte gehen. Auf den Chip selber kann ich zugreifen und er wird auch erkannt wenn ich ihn an einen USB Port anschließe. 2. Ich habe H-Term und ZOC probiert. Ich benutze COM3, also keinen hohen 3. siehe oben Warum sollte der Wert nicht 255 sein? Ein Zeichen besteht doch aus 8 bit oder nicht? Achja, ich benutz JTAG. Kann im Augenblick leider nichts ausprobieren da ich wieder Probleme mit dem Portzugriff habe. Da werd ich noch wahnsinnig ;) Ich meld mich wenns Fortschritte gibt. Auf jedefall erstmal Danke für die Antworten!
So wie es aussieht benutzt du den virtuellen COM-Treiber. Solltest dich mal mit nem Oszi dazwischen hängen und die Timings kontrollieren ... Schon mal probiert über die FTD2XX.dll Zugriffe zu machen ? Hier hast du jeden Zugriff wirklich selbst in der Hand ... Funktioniert bei mir einwandfrei und sogar unter Visual Basic :-) Ausserdem kannst du hier auch mehrere Devices an einen Compi anschliessen und diese über zB Seriennummern detectieren ... Anbei ... If FT_SetBaudRate(lngHandle, 9600) <> FT_OK Then ... If FT_SetDataCharacteristics(lngHandle, FT_BITS_8, FT_STOP_BITS_1, FT_PARITY_NONE) <> FT_OK Then ... If FT_SetFlowControl(lngHandle, FT_FLOW_NONE, 0, 0) <> FT_OK Then .... If FT_SetRts(lngHandle) <> FT_OK Then .... RS232_Outstr = " USB" & vbCrLf & " LOOPBACK" & vbCrLf & " OK" ftStatus = FT_Write(lngHandle, RS232_Outstr, Len(RS232_Outstr), RS232_BytesWritten) lg gio
Ok, Problem gefunden! Hab das Program zuerst auf einen Atmega16 getestet und bin dann mit dem FTDI auf einen AT90CAN128 gegangen. Die UART Ini hab ich zwar angepasst, aber das Problem war das der AT90 eine Fuse hat die der Atmega16 nicht hat. Nämlich "Divide Clock by 8 internally". Dadurch hat natürlich die Baudrate nicht gestimmt ;) Vielen Dank für die Antworten!
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.