1-Wire: iButton: sendet keine Daten

Gast #5957868
Hallo,

ich habe einen iButton (DS1990 F5) und 1-Wire Master DS2482-100 bzw. 
DS2482-800. Master jeweils versorgt mit 3,3V.

Ich habe das Problem, daß der iButton auf den 1-Wire-Reset reagiert, 
aber auf den nachfolgenden Befehl Read ROM (0x33 oder 0x0F) nichts 
ausgibt. Es hängen keine weitere Slaves am 1-Wire-Bus. Selbes Problem 
mit DS2482-100 und DS2482-800.

Schließe ich anstelle meinem Master DS2482 einen 1-Wire Busmaster / USB 
Hostadapter DS9490R an, so wird der iButton erkannt.

Ist mit total unklar, warum es nicht geht. Anbei das aufgezeichnete 
1-Wire-Timing und ein datenblatt vom iButton.

Gruß
Roman
Angehängte Dateien:
Gast #5958430
Wie erzeuge ich einen Read-Slot mit dem DS2482-Master?

So 100% ganz klar ist mir das 1-Wire-Protokoll nicht. Habe auch noch 
keine Doku gefunden, wo das für mich verständlich erklärt wurde.
Gast #5958436
Ich habe gerade nach Beispielen gesucht und bin auf folgendes gestoßen:

https://embdev.net/attachment/391825/STM32_CunbeMX_DS18B20.pdf
1
// You can read the 8 byte ID with these lines of code:
2
void get_ID(void)
3
{
4
uint8_t id_data[] = {0,0,0,0,0,0,0,0};//8 Byte
5
reset();
6
write_byte(0x33);//Read ROM [33h] command
7
for (uint8_t i = 0; i < 8; i++)
8
   id_data[i] = read_byte();//id_data[0] = 40 = 0x28
9
for (uint8_t i = 0; i < 8; i++){
10
  USB_Info_tutu("id", i, " = ", id_data[i]);
11
HAL_Delay(200)
12
}


Also 1-Wire Reset und danach 0x33 senden. Genau wie ich es gemacht habe. 
Der Slave scheint von alleine zu senden.
Gast #5958509
Auch hier ist es wie von mir gemacht:

https://hackaday.com/2008/12/10/parts-1-wire-temperature-sensor-ds1822/

1-WIRE>{ 0x33 r:8 <–command
xxx 1WIRE BUS RESET OK
xxx 1WIRE WRITE: 0x33 <–READ ROM
xxx 1WIRE BULK READ, 0x08 BYTES:
0x22 0x47 0x45 0x22 0x00 0x00 0x00 0x29 <–ID#
1-WIRE>

Was kann das Problem sein, daß der 1-Wire Slave nicht auf 0x33 reagiert? 
Muß zwischen Reset und dem 0x33-Befehl eine bestimmte Zeit eingehalten 
werden?
#5958511
Roman schrieb:
> Ich habe gerade nach Beispielen gesucht und bin auf folgendes gestoßen:
verwendet aber nicht den DS2482 ?
>
> Also 1-Wire Reset und danach 0x33 senden. Genau wie ich es gemacht habe.
> Der Slave scheint von alleine zu senden.
Nein der Slave sendet nicht von selbst, der Master muss Readslots (kurze 
L-Impulse mit 15μs Länge) erzeugen.
Lt. DB hat der DS2482 das CMD 0x96 um ein Byte zu lesen.

Sascha
Gast #5958536
Sascha W. schrieb:
> Lt. DB hat der DS2482 das CMD 0x96 um ein Byte zu lesen.

Das war das Problem! Vielen Dank für Eure Hilfe!
Ich habe gedacht, das Read benötigt man nur um Nutzdaten z.B. bei einem 
Temperatursensor oder EEPROM auszulesen. Daß man es auch schon für die 
ID benötigt, war mir nicht klar.

Gruß Roman

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.