Forum: Mikrocontroller und Digitale Elektronik vusb und onewire am selben bus


von Mario G. (mario_g10)


Angehängte Dateien:

Lesenswert?

Nach langer Zeit (etliche Jahre) wage ich wieder an ein Hardware 
Bastel-Projekt.

Was ich bauen möchte: eine Blackbox, die 8 Temperatur-Messfühler 
periodisch abfragt und die Messdaten auf eine SD-Karte schreibt.

Das ganze soll minimalistisch werden, mit Draht-durch-Loch Bauteilen, 
die möglichst in der gut sortierten Bastelkiste zu finden sind.

Die Box soll 'on the field' eingesetzt werden, keine externe 
Stromversorgung.
Als Stromquelle plane ich NC Akkus einzusetzen. Temperatur-Fühler mit 
onewire.
Auslesen der Messdaten über USB, plane dafür die V-USB lib.

Gemessen werden 8 Messfühler, in 15min Abstand. Auslesen alle 1-2 Monate 
mit Laptop.

Um das ganze minimalistisch zu halten würde ich gerne einen 
Steckverbinder (USB-B Buchse) sowohl zum Laden des Akkus, zum auslesen 
der Daten und auch zum anschliessen der Temperatur-Fühler benutzen.

Das ganze ist noch am Reissbrett, ich habe mal angehängt was ich bisher 
habe..

Frage ist nun: kann das Konzept so überhaupt funktionieren?

Ist alles ziemlich weit out of spec...

Vielleicht hat einer der Pro's ja musse, kurz drüber zu schauen, ob das 
so geht.
Oder jmd hat Vorschläge?

Sehr unsicher bin ich was die Stromversorgung angeht; ab einem gewissen 
Ladestand geht die Spannung recht weit runter (bis auf 2.6, 2.7V?), was 
sagt der Mega8 und vor allem die onewires dazu?

Wenn ich 4-Zellen Akkus benutze (oder die Diode D2 weglasse), geht die 
Spannung zu weit herauf, zerschiesse ich damit die SD-Karte oder meinen 
USB-Port?
Den USB könnte ich mit Zehner absichern; selbes Konzept auch bei der 
MMC?
Oder für D2 vielleicht eine Germanium-Diode?


Einfacher wäre natürlich einfach nen Arduino mit 9v-Block zu benutzen..
Aber wo bleibt da der Spass? :)

Grüsse
Mario

--

Kurze Beschreibung was ich mir gedacht hatte:

usb power

Die Schaltung arbeitet nominal mit 3.3V.

Ein 3-Zellen NC-Akku dient im Messbetrieb als Stromquelle.
Bei voll geladenem Akku haben wir eine Zellspannung von ~4V, D2 bewirkt 
einen Spannungsabfall auf 3.3V. R6/R7 bilden einen Spannungsteiler, um 
den Batterie-Ladezustand zu messen.

Im Usb-Betrieb wird der Akku über R9/D1 geladen; R9 begrenzt den 
Ladestrom auf 75mA, D1 sorgt für eine maximale Ladespannung von 4.3V.
Über R8 wird dem uC signalisiert das die Schaltung am USB Bus liegt.
Zusammen mit der LED und der der Signalleitung sollte der Gesamt-Strom 
100mA nicht überschreiten.

D+ und D- werden mit dem üblichen pullup nach Vcc direkt an den uC 
weitergeleitet.

Ist kein USB angeschlossen (Mess-Modus) schaltet der uC D+ auf 5V und 
versorgt somit die Messfühler. Der für VUSB benötigte Pullup auf D- 
dient gleichzeitig als pullup für das onewire Protokoll.

MCU
Nichts besonderes..
Mit einer Besonderheit, der uC arbeitet mit internem RC-Takt, 
hochgepimpt auf 12.7-12.9 MHz; Statt des üblichen Taktgebers ist ein 
32kHz Uhrenquarz angeschlossen, um eine stabile Zeitbasis zu erhalten. 
Ob das mit der instabilen Stromversorgung funktionieren wird ist 
allerdings noch fraglich.

MMC
Standard-Beschaltung.

dev-plugs
Anschlüsse für die Entwicklung.. Incircuit-Programmer und seriell 
Konsole. I2C eigentlich nur weils noch frei ist.


Software:

Im Normalbetrieb schläft der uC. TMR2 ist als RTC konfiguriert, der 
32kHz Quarz sorgt für die Zeitbasis.
Alle 15min wird eine Messung vorgenommen. Messergebnisse kommen erst 
einmal in einen Puffer im RAM.
Ist der Puffer voll, wird er als CSV auf die MMC-Karte geschrieben. 
Einfaches FAT fs, fester Dateiname.
Gleichzeitig kurz Ladezustand des Akkus prüfen, wenn der (fast) leer 
ist, Meldung über LED.
Adressen der Temperatur-Fühler fest konfiguriert, also kein Suche nach 
onewire-devices.

Wird Usb angeschlossen (INT0) schaltet der uC VUSB ein, und agiert als 
usb-geraet.
Kommandos: Messdaten abholen, Messdaten löschen, Uhr stellen, 
Messfühleradressen setzen.
Entweder als HID Modem mit AT-Kommandos, oder als custom Gerät, was 
gerade einfacher ist.

Gleichzeitig wird der Akku nachgeladen. Sobald USB getrennt wird 
(fallende FLanke an USB_SENSE), führt das Gerät einen Reset aus.

Weiterverabeitung der Messdaten dann am PC.


Referenzen:

[http://www.obdev.at/products/vusb/index-de.html]
'V-USB is a software-only implementation of a low-speed USB device for 
Atmel’s AVR® microcontrollers'

[http://www.nxp.com/documents/application_note/AN10911.pdf] Seite 6:
VSD (SD-memory card supply voltage): min 2.7V, max 3.6V
IDD (supply current in high-speed mode): 200 mA

[http://www.micropik.com/PDF/ds1820.pdf] Seite 24:
VDD (Supply Voltage): min 2.8V, max: 5.5V
  for ±1/2°C Accurate Temperature Conversions: min 4.3V
  Temperature conversion will work with ±2°C accuracy down to VDD = 3.4 
volts
IDD (Active Current):  min 1mA max 1.5mA

[http://forums.obdev.at/viewtopic.php?f=8&t=4737]
'I tried different OSCCAL-values and found out that 0xEF (239) results 
in a clock frequency of
12.700MHz at 5V, while 0xF0 (240) will result in a clock frequency of 
12.917MHz - and both of
these values are sufficiently close to 12.8MHz to use the 
V-USB-firmware.'




[edit: added referemces]

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.