Guten Abend, Ich versuche momentan mehrere 1 Wire Sensoren an einem 1 Wire Bus zu betreieben und wollte die einzelnen Seriennummern per ROM Search auslesen. Das Problem scheint allerdings zu sein das nach dem Senden des Search Rom Kommandos ein low Impuls kommt, der 30µs lang ist, noch bevor ich einen Read impuls sende. In der Oszilloskop Aufnahme kann man das ganz gut sehen. Meine Frage daher, warum sendet mir der DS1820 diesen Impuls? Die Read und Write Kommandos müssten soweit in Ordnung sein, denn wenn ich die Temperatur per Skip Rom von einem Sensor auslese funktioniert alles. Ich habe den Programmteil mal angehangen. Die Data Leitung hat einen 4k7 PullUp Alle Leitungen des Sensors sind angeschlossen, also VCC, Data und GND. Viele Grüße Julian
Julian schrieb: > Meine Frage daher, warum sendet mir der DS1820 diesen Impuls? Vielleicht um Dir mitzuteilen, dass Du warten sollst / wann er fertig ist (clock stretching)?
Ich habe jetzt mal 1ms gewartet, nachdem ich das Kommando an den 1-Wire Slave gesendet habe, hat allerdings nichts bewirkt, also liegt es nicht daran das ich zu schnell sende.
@Julian (Gast) >Ich habe jetzt mal 1ms gewartet, nachdem ich das Kommando an den 1-Wire >Slave gesendet habe, hat allerdings nichts bewirkt, also liegt es nicht >daran das ich zu schnell sende. Man sollte sich einfach an die Timings halten, dann klappt das auch. >Das Problem scheint allerdings zu sein das nach dem Senden des Search >Rom Kommandos ein low Impuls kommt, der 30µs lang ist, noch bevor ich >einen Read impuls sende. In der Oszilloskop Aufnahme kann man das ganz >gut sehen. Wo denn? Das kann doch keiner einfach mal so dekodieren. >Meine Frage daher, warum sendet mir der DS1820 diesen Impuls? Wahrscheinlich weil sich entweder deine Software verschluckt hat oder deine Hardware störpule sendet, die der DS1820 als Read-Pulse interpretiert. >Die Data Leitung hat einen 4k7 PullUp Ist OK. Uhhh, ich sehe gerade, daß du neben deinem OneWire noch Interrupts laufen hast! Da muss man für das Auslesen der Bits die Interrupts zeitweilig sperren!!! Sonst kann dir ein Interrupt das Timing killen! Hier ist eine Lib, die felsenfest funktioniert. Daran kann man sich orientieren. Beitrag "Re: Onewire + DS18x20 Library" Und sowas hier ist Unfug. In der ISR sind die Interrupts SICHER gesperrt! ISR (TIMER1_COMPA_vect){ cli(); if (ow_time == 1){ ow_time = ow_time + 1; } sei(); }
Jetzt war Falk schneller. Mir war auch aufgefallen, daß Du Interrupts enabled hast. Diese sind bei 1-Wir abzuschalten, damit das Timing nicht durcheinander kommt. Da im Netz ne gute Doku (1-Wire-Projekt). Google mal danach, sehr informativ und wenn man sich an die dort aufgezeigten Regeln hält funktioniert es auch auf Anhieb. Wichtig ist auch, das man vor dem Senden eines Befehles einen Reset raus schickt. Da bin ich einige Zeit drüber gestolpert. Das Searchrom Kommando ist nicht so ganz simpel. Um dieses richtig anzuwenden bedarf es schon eines nicht ganz einfachen Algorithmuses. Bei Dallas gibt es dazu etwas inclusive Quelltext. Man muß aber schon 2x hinsehen damit man es richtig versteht. Nur mit Senden des Searchrombefehles ist es leider nicht getan. Der Searchrombefehl ist der am schwierigsten umzusetzende Befehl, wenn mehrere Devices am Bus hängen. Zeno
Search rom ist kompliziert. Selbst wenn du die Dinger auseinannder klabustert hast, weißt du immer noch nicht, welcher Sensor wo steht. Ich war auch so geil darauf, aber dann kam das "who is who". Seitdem lese ich vorher die Nummern aus und beschrifte die Sensoren. Somit weiß ich wer wo steht ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.