Forum: Mikrocontroller und Digitale Elektronik 1-Wire: iButton: sendet keine Daten


von Roman (Gast)


Angehängte Dateien:

Lesenswert?

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

von Roman (Gast)


Angehängte Dateien:

Lesenswert?

Nach den Befehl 0x33 sollten eigentlich Daten kommen: Family Code, 
serial Nummer, CRC (siehe Anhang).
Es tut sich aber nichts auf dem Bus, bleibt dauerhaft auf 3,3V, nachdem 
ich die 0x33 sende.

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

wenn ich das richtig sehe erzeugt der Master nach dem Senden von 0x33 
auch keine Read-Slots. Solltest du dem vielleicht sagen das er 8 Byte 
lesen soll?

Sascha

von Cyblord -. (cyblord)


Lesenswert?

Sascha W. schrieb:
> Hallo,
>
> wenn ich das richtig sehe erzeugt der Master nach dem Senden von 0x33
> auch keine Read-Slots. Solltest du dem vielleicht sagen das er 8 Byte
> lesen soll?
>
> Sascha

Jop. Von allein tut ein 1Wire Sensor gar nichts.

von Roman (Gast)


Lesenswert?

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.

von Roman (Gast)


Lesenswert?

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.

von Roman (Gast)


Lesenswert?

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?

von Sascha W. (sascha-w)


Lesenswert?

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

von John (Gast)


Lesenswert?

Roman schrieb:
> Also 1-Wire Reset und danach 0x33 senden. Genau wie ich es gemacht habe.
> Der Slave scheint von alleine zu senden.

Vielleicht solltest du dir mal anschauen, was „read_byte()“ macht.

von Roman (Gast)


Lesenswert?

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

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.