Forum: Mikrocontroller und Digitale Elektronik V-USB mit asynchronem Sensor


von Mampf F. (mampf) Benutzerseite


Lesenswert?

Guten Mittag,

ich wollte gerne einen DHT22/AM2302 Temp+Hygro-Sensor per V-USB an USB 
adaptieren.

V-USB ist kein Problem, das läuft auf der USBASP-Hardware (Billig 
AVR-Programmer für 3EUR) fast out-of-the-box.

Was ich mich jetzt frage ist, wie man sicherstellen kann, dass man das 
Timing des Sensors einhält. Er ist ja asynchron und schickt die Bits in 
Form von kurzen und langen Impulsen (sowas 30-80µs jeweils) zum AVR.

V-USB verwendet Interrupts, die um die 100µs dauern können. Ich vermute, 
da könnten mit Bits verloren gehen oder die Länge falsch eingelesen 
werden.

Allerdings weiß ich nicht, wie oft USB-Interrupts passieren, da ich mit 
V-USB vorher noch nicht gearbeitet hab.

Wie würdet ihr das Problem lösen?

Viele Grüße,
Mampf

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Enweder Sensor mit Digitalschnittstelle (z.B. SHT21) oder µC mit echtem 
USB verwenden. Bei echtem USB muss man nicht so schnell auf die USB 
Interrupts reagieren.

von Hardy (Gast)


Lesenswert?

> Das kleinstmögliche Abfrageintervall beträgt bei Low Speed 10 ms

https://de.wikipedia.org/wiki/USB

Zwischen diesen Intervallen sollte es möglich sein die Daten vom DHT22 
zu holen. Wo kann man die Quellen zum V-USB einsehen?

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Hardy schrieb:
> Wo kann man die Quellen zum V-USB einsehen?

Die gibts hier im Download-Bereich:

https://www.obdev.at/products/vusb/index.html

Ah oder Git gleich direkt:

https://github.com/obdev/v-usb

: Bearbeitet durch User
von Hardy (Gast)


Lesenswert?

Interessante Software :)

Suche doch einmal im V-USB Forum und/oder poste deine Frage dort auch.

https://forums.obdev.at/viewforum.php?f=8

von Hardy (Gast)


Lesenswert?

Noch etwas: Wenn dich der DHT22 zu sehr ärgert, dann solltest du dir den 
HTU21D anschauen. Der wird am I2C-Bus betrieben und ist damit 
interruptfreundlicher.

http://www.ebay.de/itm/New-HTU21D-Temperature-and-Humidity-Sensor-Module-Development-board-VR-/152003514439

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Hardy schrieb:
> Noch etwas: Wenn dich der DHT22 zu sehr ärgert, dann solltest du dir den
> HTU21D anschauen. Der wird am I2C-Bus betrieben und ist damit
> interruptfreundlicher.

Ja, der DHT22 ist ein Sch***Ding ... Hatte ihn erst am Raspi hängen, 
aber seine asynchrone Natur macht mit einem Multitasking-OS nur Probleme

Daher dachte ich mir, ich kauf mir für 3,30EUR einen USBASP, modifizier 
die v-usb-Firmware etwas und flantsch den DHT22 an.

Ich hab es jetzt einfach mal ausprobiert und weniger analysiert ... 
Pragmatischer Ansatz ;-)

Hab einen DHT22-Auslese-Code in die Main-Loop unter dem "UsbLoop()" 
gesetzt und voila es funktioniert ohne Probleme.

Problem gelöst :) (Y)

Allerdings hab ich mir auch noch SI7021-Sensoren bestellt, die I2C haben 
... Das ist mir viel sympathischer :)

von Ralph S. (jjflash)


Lesenswert?

... und wenn du an den ATmega eine UART2USB Brücke CH340G "anflanschst" 
und die Daten am Host dann über einen virtuellen COM-Port einliest?

Dann kann das komplette Timing des Controllers dem Sensor gehören, die 
Kommunikation erledigt der kleine CH340G (und er funktioniert auch unter 
Windows7 bis Windows10. Unter Linux sogar nativ als ttyUSBx).

V-USB habe ich auch ausprobiert und entweder du lässt einen Controller 
mit 3,3V laufen - hier hatte ich dann schon mal Probleme wenn ich 
schnelleren Takt als 8MHz haben wollte, siehe auch Datenblatt), oder man 
"levelt" D+ und D- von USB auf 3,3V mittels Zenerdioden ein. Hier hab 
ich dann schon bemerkt, dass das ZWINGEND die kleinen Zenerdioden bis 
0,25W sein müssen, weil die größeren (ausgemesen) ihre Zenerspannung am 
USB-Port zu hoch haben (ist also "Fummelei" --- leider).

Der CH340G funktioniert problemlos und kostet beim freundlichen Chinesen 
im 5er Pack keine 2 Euro...

Ralph

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Ralph S. schrieb:
> ... und wenn du an den ATmega eine UART2USB Brücke CH340G "anflanschst"
> und die Daten am Host dann über einen virtuellen COM-Port einliest?

Da brauch ich ja dann noch ein Bauteil mehr ...


> V-USB habe ich auch ausprobiert und entweder du lässt einen Controller
> mit 3,3V laufen - hier hatte ich dann schon mal Probleme wenn ich
> schnelleren Takt als 8MHz haben wollte, siehe auch Datenblatt), oder man
> "levelt" D+ und D- von USB auf 3,3V mittels Zenerdioden ein. Hier hab
> ich dann schon bemerkt, dass das ZWINGEND die kleinen Zenerdioden bis
> 0,25W sein müssen, weil die größeren (ausgemesen) ihre Zenerspannung am
> USB-Port zu hoch haben (ist also "Fummelei" --- leider).

Das ist das tolle an den USBASP Programmern ... Die kosten 3,20EUR in 
der Bucht (geliefert aus Deutschland!) und implementieren quasi das 
Referenzdesign von V-USB. Ebenfalls mit Z-Dioden und LM1117-3,3 (falls 
benötigt).

> Der CH340G funktioniert problemlos und kostet beim freundlichen Chinesen
> im 5er Pack keine 2 Euro...

Und man braucht noch einen µC dazu ... Die USBASP haben alles, was man 
dafür benötigt :)

: Bearbeitet durch User
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.