DS18B20 1-Wire Read Zeit tRDV

Gast #921533
Lesenswert?

Ich bin gerade dabei die ensprechenden Routinen (C) zu testen. Im 
wesentliche klappt es. Nicht ganz verstanden habe ich den "1-Wire Read 
Zero Time Slot", die Zeit tRDV, welche im Datenblatt mit max. 15us 
angegeben ist. Heist das, dass ich nach 15us erst den korrekten Zustand 
einlesen (Daten gültig) darf oder es binnen max. 15us bereits gemacht 
haben muss?
http://datasheets.maxim-ic.com/en/ds/DS18B20.pdf

Mein Testprogramm kann ich in weiten Grenzen variieren, es wird richtig 
L oder H eingelesen. Ich muss es aber für die Serienfertigung gut 
reproduzierbar machen.
1
// ********************************************************************
2
// 1 Wire Bus
3
// Read Bit Funktion
4
// Rückgabe: 0/1 Bit
5
// ********************************************************************
6
bit w1_read_bit(void) {
7
bit datenbit;
8
  W1_BUS = 0; // 1-Wire Daten-Pin P3_4
9
  delay_us(6);  // ca. 25us (hier größer als tRDV ???)
10
  W1_BUS = 1;
11
  delay_us2();  // ca. 6us
12
  datenbit = W1_BUS; // 
13
  delay_us(30); // ca. 75us
14
  return datenbit;
15
}
#921601
Lesenswert?

Du mußt innerhalb von 15µs lesen ab dem 0 setzen, d.h. Dein obiges 
Timing stimmt überhaupt nirgends.

Richtig:
0-Impuls für 1 ... 2µs
Lesen nach weiteren 2 ... 12µs
1-Impuls für >=60µs

Was sind denn das für komische Kommentare hinter den Delays?
Kannst Du die Delays nicht vom Präprozessor richtig berechnen lassen?


Peter
Gast #921668
Lesenswert?

Mein Programm ist noch in der Probierphase, deshalb nicht ganz sauber. 
Ich habe es so wie Du es schreibst jetzt gemacht, funktioniert. (Es hat 
aber auch mit meinem Programm schon problemlos geklappt, wahrscheinlich 
aber nicht bei jedem DS18B20, ich hatte nur einen IC bisher zur 
Verfügung.)
Danke

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren