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