Hat jemand Erfahrung mit dem DS2408? Der Chip scheint in meiner Schaltung, in der er als 8x-Eingang benutzt wird, nach dem ersten Einschalten zufällig einige seiner IO-Leitungen auf Ausgang zu stellen, d.h. reagiert nicht auf angelegte Signale oder Pull-ups. Den Reset-Pin habe ich auf VCC gelegt und die Initalisierung schreibt 0xff mit dem "channel access write command" (um die Ausgangs-Transistoren abzuschalten). Danach sollten die IO-Bits eigentlich wegen der Pull-Ups auf 1 gehen. Der Chip antwortet auf die geschrieben 0xff zwar mit 0xaa (= "OK"), aber danach kommt - zumindest beim ersten Einschalten - nicht der erwartete Wert 0xff. Nach dem zweite Einschalten klappt es dann. Der Chip wird mit VCC versorgt und hat einen 100N-Kondensator zwischen den Supply-Pins. -- initalization code, fails randomly (verify != 0xff)) --- | | /*! Initialize DS2408 IO chip | * | * This function will turn all output transistors off | * | * <bus> Bitmask of the bus where the DS2408 is located. | * | * <id> 64 bit identifier of the DS2408 | * | * Return: void | */ | | unsigned char | OWI_InitDS2408(unsigned char bus, unsigned char *id) | { | // any 1-wire device on bus (reset, detect presence)? | | uint8_t tries; | | for (tries = 0; tries < 8; ++tries) | { | if (OWI_DetectPresence(bus)) | { | // match ID | | OWI_MatchRom(id, bus); | | // send write command | | OWI_SendByte(DS2408_CHANNEL_ACCESS_WRITE, bus); | | // write 0xff to turn off all output transistors | | OWI_SendByte(0xff, bus); | | // write inverted value (= checksum) | | OWI_SendByte(0x0 , bus); | | // check ok flag | | if (OWI_ReceiveByte(bus) == 0xaa) | { | uint8_t verify = OWI_ReceiveByte(bus); | | if (verify == 0xff) | { | return(1); | } | else | { | char out[16]; | uint8_t n; | | sprintf(out, "%d", verify); | | lcd_puts(out); | | for (n = 0; n < 100; ++n) | | _delay_ms(10); | } | } | | beep(); | } | } | | | // error | | return(0); | }
Falls es jemanden interessiert: Problem gelöst, es ist ein Chip-Bug. Bei bestimmten Power-On-Bedingungen landet der Chip in einem undokumentierten Test-Modus und reagiert nicht mehr richtig: die ganze 1-Wire-Kommunikation läuft noch, der Chip scheint zu leben, aber Schreibvorgänge in das Output-Register werden nicht mehr ausgeführt. Die Lösung ist ein ebenfalls im Datenblatt nicht dokumentiertes Kommando, den Test-Modus zu verlassen. Die Details dazu findet man im Maxim-1-Wire-Forum (http://discuss.dalsemi.com) im Thread "Ds2408 Power Up With Pins Off?".
Da ich mit dem DS2408 einen Microcontroller als 1-Wire-Client anbinden will, interessiert mich dieses Thema doch brennend ;-) Leider läßt sich auf das Maxim-1-Wire-Forum nur noch mit bestehenden alten Accounts zugreifen, neue Accounts werden nicht akzeptiert. Kann mir jemand den Inhalt des Threads verraten? Also, wie man diesen Testmodus wieder verlassen kann. Danke und einen guten Rutsch Rolf
Hallo @Rolf Deinen anderen Beitrag habe ich nicht gefunden... MfG Achim
Vielen Dank für Deine Mühe! Ich denke, mit dem Kommando für das Verlassen des Test-Modus komme ich weiter, sollte ich tatsächlich Probleme bekommen. Ich will einen DS2408 einsetzen, um einen Microcontroller als Slave an den 1-Wire-Bus zu hängen und das sollte schon zuverlässig funktionieren... Viele Grüße Rolf
Hallo @Rolf ich habe zwar keinen DS2408 im Einsatz, aber falls Du das zum laufen bringts, wäre der Code von Interesse. Ich nehme dazu einen Atmega8. MfG Achim
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.