virtueller COM-Port mit Atmega

Gast #4322552
Lesenswert?

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.
Gast #4322559
Lesenswert?

> 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.
Gast #4322569
Lesenswert?

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.
Gast #4322581
Lesenswert?

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.
Gast #4322585
Lesenswert?

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.
#4322588
Lesenswert?

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
Gast #4322618
Lesenswert?

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.
Gast #4322954
Lesenswert?

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.
Gast #4322964
Lesenswert?

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?)?
Gast #4322965
Lesenswert?

Armin schrieb:
> für die genannte Anwendung (57600/8/N/1)

Armin schrieb:
> Werde erst mal das mit Attiny45 hier probieren:
> http://www.recursion.jp/prose/avrcdc/cdc-232.html

Ich sehe grade, das wird nichts:
1
ATtiny45/85 uses internal RC oscillator and PLL. 
2
It is calibrated by  USB signal when connected. 
3
UART is implemented by software. 
4
It is not enough for high speed data transfer. 
5
If the TxD and the RxD are inverted (rebuild with -
6
DUART_INVERT option), you can directly connect to RS-232C line.     
7
1200 - 4800bps, 8N1
(Firma: Outside the Asylum) #4322968
Lesenswert?

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.
Gast #4322974
Lesenswert?

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.
Gast #4322979
Lesenswert?

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.
Gast #4322983
Lesenswert?

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.
Gast #4323007
Lesenswert?

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?
Gast #4323009
Lesenswert?

Armin schrieb:
> Möglicherweise ist das für beide Module etwas hoch.

Der CPC2102 ist bis 1Mbps spezifiziert.

Ulrich F. schrieb:
>> Habe hier zwei USB-to-Serial-Module mit CP2402 und CP2102.

Der CP2402 ist ein 128/64 Segment LCD Driver mit SPI. Vielleicht 
funktioniert er deshalb nicht als USB-to-Serial-Module ;-)
https://www.silabs.com/Support%20Documents/TechnicalDocs/CP2400-1-2-3.pdf
Gast #4323028
Lesenswert?

>> 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?
Gast #4323147
Lesenswert?

> 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.
Gast #4323779
Lesenswert?

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...
Gast #4323782
Lesenswert?

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.
Gast #4323785
Lesenswert?

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.
Gast #4323787
Lesenswert?

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.
Gast #4323792
Lesenswert?

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.
Gast #4324246
Lesenswert?

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!
Gast #4324598
Lesenswert?

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?!?).
(Firma: Outside the Asylum) #4326002
Lesenswert?

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.
Gast #4326373
Lesenswert?

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.

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