Gibt es ein fertiges Projekt, bei dem ein Atmega einen virtuellen
USB-COM-Port bereitstellt?
Habe hier ein Gerät, das derzeit an einen normalen COM-Port unter Win XP
Daten übermittelt (MAX232 zwischengeschaltet).
Das ganze soll längerfristig an einem Rechner betrieben werden, der
keine echte RS232-Schnittstelle mehr hat.
Es werden nur die Leitungen Rx und Tx verwendet.
Super wäre, wenn ich einen Atmega (z.b. M88) mit der entsprechenden
Software flashen und dazwischenschalten könnte.
Armin schrieb:> Super wäre, wenn ich einen Atmega (z.b. M88) mit der entsprechenden> Software flashen und dazwischenschalten könnte.
warum nicht ein USB-Seriel Wandler dazwischenschalten.
z.b. CP2104
> Gibt es ein fertiges Projekt, bei dem ein Atmega einen virtuellen> USB-COM-Port bereitstellt?
Ja, V-USB zum Bleistift. Aber warum so kompliziert und nicht einfach
einen fertigen USB-UART-Wandler nehmen? Iss billiger, zuverlässiger und
weniger Aufwand.
VUSB wäre ein Software-USB Stack der auch auf normalen AVRs läuft. Sonst
würde sich eher ein µC mit HW-USB angbieten (z.B. Atmega32U4).
Billig, sicher und zuverlässig würde ich aber auch zu USB/UARTs wie dem
genannten CP oder FTDI FT232 o.ä. raten.
Alternativ eine USB/RS232 Adapterkabel... damit sparst du dir jede Art
von Anpassung.
Wie soll denn ein ATMega einen virtuellen COM-Port simulieren?
Ein virtueller COM-Port ist eine Treiberstruktur innerhalb von
Fenst-DOS.
Es gibt aber ein paar Firmen (z.B. FTDI), die device driver zu ihren
Chips bereitstellen. Sollte so etwas von anderer Seite (z.B. auch Atmel)
geben, so wäre es doch nur ein Programm innerhalb des Fensters.
Amateur schrieb:> Wie soll denn ein ATMega einen virtuellen COM-Port simulieren?
genauso wie es jeder USB-Seriel Adapter auch kann.
> Ein virtueller COM-Port ist eine Treiberstruktur innerhalb von> Fenst-DOS.
Unsinn, ein COM-Port ist eine Definierte Treiberschnittstelle innerhalb
von Windows. Ob er dabei echt oder Virtuell ist spielt keine Rolle.
VUSB ist nicht 100% USB2 kompatibel, weil es in wesentlichen Punkten
gegen den Standard verstößt. Insbesondere mit neuen Windows-Versionen
sind Probleme vorprogrammiert.
Nimm einfach einen MCP2221. DIL-Bauform erhältlich, treiberlos (Windows
will ein .inf sehen, aber kein spezielles Binary), geringer
Schaltungsaufwand, und I2C hat der auch noch gleich mit bei.
Dafür lohnt kein Stress. Und wenn Du eigenen Code auf dem Chip haben
willst: das ist eigentlich ein vorprogrammierter PIC16F1455, der
billigste Microcontroller mit zertifiziertem Full Speed USB Hardware
Interface.
fchk
Frank K. schrieb:> VUSB ist nicht 100% USB2 kompatibel
Nichtmal zu USB1.0. Auch da waren schon keine Bulk-Transfers für
LowSpeed-Devices erlaubt. Der Punkt ist nur: sie haben trotzdem
jahrelang funktioniert, erst die künstliche Kastration der OS-Treiber
auf die Vorgaben der Norm fast ohne jeden (technischen) Grund hat dem
ein Ende gesetzt.
> Nimm einfach einen MCP2221.
Das ist trotzdem sicher die bessere Wahl.
OBACHT: das Datenblatt schreibt:
Note: MCP2221 supports only eight data bits,
No Parity and one Stop bit.
Außerdem kann der nur max. 115200 Baud. Ja, normal ist beides kein
Problem - ansonsten gibt's den FT232RL.
Armin schrieb:> Gibt es ein fertiges Projekt, bei dem ein Atmega einen virtuellen> USB-COM-Port bereitstellt?
Arduino - IMHO alle, die einen USB-Stecker auf dem Board haben.
Armin schrieb:> Gibt es ein fertiges Projekt, bei dem ein Atmega einen virtuellen> USB-COM-Port bereitstellt?
Ja, jedes mit atmega32u2/atmega32u4 kann das. Die Mega32Ux haben eine
echte USB-Schnittstelle und lassen sich u.a. als CDC-Serial benutzen
Danke für die vielen Antworten und Ideen!
Habe hier zwei USB-to-Serial-Module mit CP2402 und CP2102.
Das eine funktioniert gar nicht für die genannte Anwendung (57600/8/N/1)
und das andere nur hin und wieder.
Die echte serielle Verbindung funktioniert dagegen quasi immer.
Armin schrieb:> Deshalb suche ich eine zuverlässige Lösung, die Tx und Rx vom Gerät auf> USB bringen kann.>> Werde erst mal das mit Attiny45 hier probieren:> http://www.recursion.jp/prose/avrcdc/cdc-232.html
genau das ist aber keine zuverlässige Lösung.
Armin schrieb:> Das eine funktioniert gar nicht für die genannte Anwendung (57600/8/N/1)> und das andere nur hin und wieder.
Was heißt "funktioniert" nicht?
Ist der Windows Gerätemanager zufrieden?
Funktioniert ein normales Terminalprogramm damit (z.B. HTerm)?
Kommuniziert dein ATmega nicht richtig mit der PC-Software (welche?)?
Armin schrieb:> Deshalb suche ich eine zuverlässige Lösung, [...]> Werde erst mal das mit Attiny45 hier probieren:> http://www.recursion.jp/prose/avrcdc/cdc-232.html
Warum sollte das jetzt mit einem Baiteil, das keinen USB-Port hat besser
funktionieren als mit einem, das einen hat?
VUSB ist alles andere als zuverlässig und je neuer das Betriebsystem
desto schlechter funktioniert es.
Armin schrieb:> Danke für die vielen Antworten und Ideen!>> Habe hier zwei USB-to-Serial-Module mit CP2402 und CP2102.>> Das eine funktioniert gar nicht für die genannte Anwendung (57600/8/N/1)> und das andere nur hin und wieder.>> Die echte serielle Verbindung funktioniert dagegen quasi immer.
Hmm...
Meine Glaskugel sagt:
Oft versucht man an den Symptomen zu arbeiten, vergisst aber die
Ursache.
Wolfgang schrieb:> Was heißt "funktioniert" nicht?
Bei meinen eigenen AVR-Projekten mit niedrigen Baudraten bis ca. 9600
funktionieren beide Module gut.
> Ist der Windows Gerätemanager zufrieden?
Ich denke ja, er meckert jedenfalls nichts an.
> Funktioniert ein normales Terminalprogramm damit (z.B. HTerm)?
Das eine Modul läuft gut unter H-Therm, das andere nur nach
H-Therm-Neustart (Timing-Problem).
Armin schrieb:> für die genannte Anwendung (57600/8/N/1)
Möglicherweise ist das für beide Module etwas hoch.
Erzeugen diese CP2x02-Bausteine ihren Takt aus dem USB-Takt mittels PLL?
Ein Quarz haben die jedenfalls nicht auf der Modulplatine.
Won K. schrieb:> Warum sollte das jetzt mit einem Baiteil, das keinen USB-Port hat besser> funktionieren als mit einem, das einen hat?> VUSB ist alles andere als zuverlässig und je neuer das Betriebsystem> desto schlechter funktioniert es.
Versuch macht kluch :-) - Attiny hätte ich in der Bastelkiste. Leider
ist der aber sowieso zu lahm.
Armin schrieb:> Bei meinen eigenen AVR-Projekten mit niedrigen Baudraten bis ca. 9600> funktionieren beide Module gut.
hat denn deine Schaltung ein Quarz?
Ulrich F. schrieb:> Meine Glaskugel sagt:> Oft versucht man an den Symptomen zu arbeiten, vergisst aber die> Ursache.
Was sagt die Glaskugel noch zu den möglichen Ursachen?
Armin schrieb:> Was sagt die Glaskugel noch zu den möglichen Ursachen?
Oszi/LA zur Hand?
Ausmessen, wie lang die 8N1 Frames wirklich sind.
Von beiden Partnern!
Dann erst ist klar, WO die Baustelle ist.
Pegel!
Signalform.
Einstreuungen.
Toleranzen
usw....
> (WNT)
Wäschereitechnik?
Wolfgang schrieb:> Ulrich F. schrieb:>>> Habe hier zwei USB-to-Serial-Module mit CP2402 und CP2102.
Ach wenn ich das nicht gesagt habe, möchte ich dir in der Sache nicht
widersprechen.
>> Möglicherweise ist das für beide Module etwas hoch.>> Der CPC2102 ist bis 1Mbps spezifiziert.
Nicht nur das, sogar die Billigstmodule von Amazon funktionieren bis
mindestens 500kBd einwandfrei - hab mehrere davon im Einsatz. Ich würde
den Fehler daher woanders zu suchen beginnen.
Hat der TO möglicherweise Uraltsoftware im Einsatz, die sich
doppelblauäugig ein gewisses Echtzeitverhalten am der Seriellen
erträumt?
Won K. schrieb:> Armin schrieb:>> Hm, der 20.000-kHz-Quarz vom Gerät (NWT) schwingt mit 20.002.600 MHz (+->> 50 Hz).>> ja, 20 THz sind für ein 20MHz-Quarz etwas viel.
Aber mit 50 Hz doch sehr stabil.
Vorteiler nehmen? ;-)
Armin schrieb:> Bei meinen eigenen AVR-Projekten mit niedrigen Baudraten bis ca. 9600> funktionieren beide Module gut.
Such mal in den AVR-Programmen, wo die UART-ISR ausgebremst wird.
Oder pollst Du noch?
Won K. schrieb:> Armin schrieb:>> Hm, der 20.000-kHz-Quarz vom Gerät (NWT) schwingt mit 20.002.600 MHz (+->> 50 Hz).>> ja, 20 THz sind für ein 20MHz-Quarz etwas viel.
Danke für den Hinweis, es sind natürlich
20.002.600 Hz
gemeint.
m.n. schrieb:> Such mal in den AVR-Programmen, wo die UART-ISR ausgebremst wird.> Oder pollst Du noch?
Es ist ein NWT mit Pic16F876. Habe auf die Firmware keinen Einfluss.
Mit normalem UART -> MAX232 -> Serielle PC-Schnittstelle geht es
problemlos.
> Ein Quarz am Pic, dass auf 20,000600 MHz schwingt, bringt auch keine> Änderung der CP2102-Problematik.
..das wären dann 0.003% Abweichung gegen 20MHz - Du bellst den falschen
Baum an. Fang doch mal ganz banal an: Halt ein Ossi dran und schau Dir
die Signale an.
Im Anhang ein "Mitschnitt" der seriellen Kommunikation zwischen
PC-Programm und PIC.
Oben PC, unten PIC. PC sendet, PIC antwortet nach kurzer Verzögerung,
alles gut :O)
Gleich folgt ein Bild mit USB-to-UART-Modul (CP2102).
Abgefahren, jetzt funktioniert das USBtoUART-Modul anscheinend immer.
Für den Logic Analyzer musste ich in der Systemsteuerung die Interrupts
für LPT und COM "enablen", seitdem funktioniert das Modul klaglos, wie
es scheint.
Anscheinend hin das irgendwie zusammen.
Werde das noch mal eine Weile beobachten...
Armin schrieb:> Für den Logic Analyzer musste ich in der Systemsteuerung die Interrupts> für LPT und COM "enablen", seitdem funktioniert das Modul klaglos, wie> es scheint.> Anscheinend hin das irgendwie zusammen.
nein bestimmt nicht. Auf USB hat das keine Auswirkung.
Eventuell beeinfluss der LA das Timing auf dein PC und du hast nur ein
Softwareproblem.
Peter II schrieb:> die beiden Übertragungen sehen recht unterschiedlich aus, da musst du> schon ein paar Worte dazu sagen, was man dort sieht.
Danke für die schnelle Antwort!
Das war mir auch aufgefallen. Es ist einfach nur die
Standby-Kommunikation, wenn der Pic grade nichts steuert und auf Befehle
vom PC wartet.
Armin schrieb:> Das war mir auch aufgefallen. Es ist einfach nur die> Standby-Kommunikation, wenn der Pic grade nichts steuert und auf Befehle> vom PC wartet.
bei der ersten Übertragung wird Gleichzeit gesendet und empfangen, bei
der 2.nicht.
Ist recht ungewöhnlich bei einer einfachen Kommunikation.
Peter II schrieb:> Eventuell beeinfluss der LA das Timing auf dein PC und du hast nur ein> Softwareproblem.
"nur" ist gut ;O)
Hm, dann muss ich jetzt immer den LA anschließen, damit das timing vom
USBtoUART-Modul funktioniert???
Werde das mal im Auge behalten und berichten...
Peter II schrieb:> bei der ersten Übertragung wird Gleichzeit gesendet und empfangen, bei> der 2.nicht.>> Ist recht ungewöhnlich bei einer einfachen Kommunikation.
Finde ich auch.
Ach so, den Parallelport hatte ich noch im Bios von ECP/EPP auf EPP
umgestellt.
Und wie gesagt in der Systemsteuerung die Interrupts für LPT und COM
aktiviert.
Ob es (in)direkt damit zusammenhängen kann - keine Ahnung. Spontan würde
ich sagen nein.
Armin schrieb:> Hm, dann muss ich jetzt immer den LA anschließen, damit das timing vom> USBtoUART-Modul funktioniert???
Ich denke eher, das Du damit ein Masseproblem behoben hast das sonst
vorliegt.
Won K. schrieb:> Ich denke eher, das Du damit ein Masseproblem behoben hast das sonst> vorliegt.
Negativ. Es funktioniert jetzt auch ohne den LA.
Ulrich F. schrieb:> Glückwunsch!
Vielen Dank!
Hier noch mal kurz eine kleine Dokumentation, falls jemand das gleiche
Problem haben sollte.
Habe in anderem Zusammenhang folgendes am System verändert:
- Parallelport im Bios von ECP/EPP auf EPP (bidirektional) geschaltet
- die Datei install_giveio.bat (von WinAVR) ausgeführt
- im Gerätemanager bei "Druckeranschluss(LPT1)" beim Reiter
Anschlusseinstellungen "Jeden dem Anschluss zugewiesenen Interrupt
verwenden" angeklickt.
Seitdem funktioniert die USB-UART-Kommunikation von der PC-Software
WinNWT4 (HFM9) mit dem NWT über verschiedene CP2102-Module reibungslos.
Danke an alle hier und viele Grüße!
Armin schrieb:> Danke an alle hier und viele Grüße!
naja, mir würde das keine Ruhe lassen. Hast du einen jungfräulichen PC
mit dem du es noch mal Testen kannst?
Zur not sollte es auch eine VM tun.
Ich hätte auch gerne gewusst, woran es jetzt gelegen hat.
Ein anderer Verdacht geht in eine ganz andere Richtung:
Wenn das Gerät mit dem PIC abgeschaltet ist, liegt trotzdem eine
geringe spannung von knapp 2V auf VCC, weil Kriechströme vom USB-Modul
durch die Leitung Tx (bzw. Rx) dort hin gelangen.
Diese geringe Spannung stört eventuell beim Einschalten/Initialisieren
den PIC (weil der möglicherweise schon vorher irgendwas macht mit der
geringen Spannung?!?).
Armin schrieb:> weil Kriechströme vom USB-Modul> durch die Leitung Tx (bzw. Rx) dort hin gelangen
Da kriecht kein Strom, der fließt ganz normal aus den USB-5Volt über den
TX-Pin in den PIC und da über die Schutzdioden des PortPins auf Vcc.
Dein Pic16F876 ist im Datenblatt mit 2-5,5Volt Betriebsspannung
angegeben, er war also vermutlich nie wirklich aus.
Won K. schrieb:> Da kriecht kein Strom, der fließt ganz normal aus den USB-5Volt über den> TX-Pin in den PIC und da über die Schutzdioden des PortPins auf Vcc.
Sehe ich auch so.
> Dein Pic16F876 ist im Datenblatt mit 2-5,5Volt Betriebsspannung> angegeben, er war also vermutlich nie wirklich aus.
Oder er hat sich zwischen "aus" und "an" irgendwo verlaufen.
Werde das auf jeden Fall alles im Blick behalten - wenn es neue
Erkenntnisse gibt, werden sie hier gepostet.