Forum: Mikrocontroller und Digitale Elektronik One Wire Rom Search Problem


von Julian (Gast)


Angehängte Dateien:

Lesenswert?

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

von Rainer U. (r-u)


Lesenswert?

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

von Julian (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@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();
}

von Zeno (Gast)


Lesenswert?

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

von Jörn P. (jonnyp)


Lesenswert?

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