Forum: Mikrocontroller und Digitale Elektronik virtueller COM-Port mit Atmega


von Armin (Gast)


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.

von Peter II (Gast)


Lesenswert?

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

von g457 (Gast)


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.

von xxx (Gast)


Lesenswert?

so was gibt es OBDEV VUSB Beispiel Projekt ....

von ... (Gast)


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.

von xxx (Gast)


Lesenswert?


von Amateur (Gast)


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.

von Peter II (Gast)


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.

von Frank K. (fchk)


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

von c-hater (Gast)


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.

von eagle user (Gast)


Lesenswert?

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.

von Ulrich F. (Gast)


Lesenswert?

Zusätzlich ist er einzeln teurer als ein kompletter 201423072973 bei 
Ebay

von Wolfgang (Gast)


Lesenswert?

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.

von Won K. (Firma: Outside the Asylum) (the_sane)


Lesenswert?

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

von Armin (Gast)


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.

von Armin (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


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?)?

von Armin (Gast)


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

von Won K. (Firma: Outside the Asylum) (the_sane)


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.

von Ulrich F. (Gast)


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.

von Armin (Gast)


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.

von Armin (Gast)


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.

von Peter II (Gast)


Lesenswert?

Armin schrieb:
> Bei meinen eigenen AVR-Projekten mit niedrigen Baudraten bis ca. 9600
> funktionieren beide Module gut.

hat denn deine Schaltung ein Quarz?

von Armin (Gast)


Lesenswert?

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?

von Armin (Gast)


Lesenswert?

Peter II schrieb:
> hat denn deine Schaltung ein Quarz?

Selbstverständlich.

von Armin (Gast)


Lesenswert?

Hm, der 20.000-kHz-Quarz vom Gerät (NWT) schwingt mit 20.002.600 MHz (+- 
50 Hz).

Das kommt mir etwas zu hoch vor...

von Ulrich F. (Gast)


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?

von Wolfgang (Gast)


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

von Ulrich F. (Gast)


Lesenswert?

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.

von Armin (Gast)


Lesenswert?

Sorry, mein Fehler. Sind beide CP2102 (Hätte besser gleich eine Lupe 
benutzt).

von Won K. (Firma: Outside the Asylum) (the_sane)


Lesenswert?

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.

von g457 (Gast)


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?

von m.n. (Gast)


Lesenswert?

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? ;-)

von m.n. (Gast)


Lesenswert?

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?

von Armin (Gast)


Lesenswert?

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.

von Armin (Gast)


Lesenswert?

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.

von Armin (Gast)


Lesenswert?

Ein Quarz am Pic, dass auf 20,000600 MHz schwingt, bringt auch keine 
Änderung der CP2102-Problematik.

von g457 (Gast)


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.

von Armin (Gast)


Lesenswert?

Ok, ich klemme einen LA als Abhörposten an.

Dauert aber ein bisschen...

von Armin (Gast)


Angehängte Dateien:

Lesenswert?

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).

von Armin (Gast)


Angehängte Dateien:

Lesenswert?

Hier ein Bild mit USB-to-UART-Modul (CP2102), wenn die Kommunikation 
funktioniert.

von Peter II (Gast)


Lesenswert?

die beiden Übertragungen sehen recht unterschiedlich aus, da musst du 
schon ein paar Worte dazu sagen, was man dort sieht.

von Armin (Gast)


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...

von Peter II (Gast)


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.

von Armin (Gast)


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.

von Peter II (Gast)


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.

von Armin (Gast)


Lesenswert?

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...

von Armin (Gast)


Lesenswert?

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.

von Armin (Gast)


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.

von Peter II (Gast)


Lesenswert?

Armin schrieb:
> Hm, dann muss ich jetzt immer den LA anschließen, damit das timing vom
> USBtoUART-Modul funktioniert???

alternativ den Fehler beheben.

von Armin (Gast)


Lesenswert?

Hast du einen konkreten Verdacht (ausser, dass der LA das Timing 
beeinflussen könnte)?

von Won K. (Firma: Outside the Asylum) (the_sane)


Lesenswert?

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.

von Ulrich F. (Gast)


Lesenswert?

Glückwunsch!

von Armin (Gast)


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!

von Peter II (Gast)


Lesenswert?

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.

von Armin (Gast)


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?!?).

von Won K. (Firma: Outside the Asylum) (the_sane)


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.

von Armin (Gast)


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.

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
Noch kein Account? Hier anmelden.