mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik One Wire Rom Search Problem


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Julian (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.