Hallo Leute,
ich habe mir so einen iButton von Dallas besorgt um etwas damit
herumzuexperimentieren und möchte gerne den ROM-Code auslesen. Wenn ich
das mit den Bibliotheksfunktionen eines kommerziellen Compilers mache,
klappt es. Also der iButton ist mit Sicherheit nicht kaputt. Aber alle
Versuche mit avrgcc selbst ein Programm zu schreiben sind bislang
gescheitert, ich weiß nicht wieso!
Erst hab ich Code von dem Dallas-Toolkit genommen und für den AVR
angepaßt, das lief jedoch nicht. Dann habe ich den Code von der
Application Note 126 wirklich Zeile für Zeile abgeschrieben und mit dem
AVR-Studio das Timing genau kontrolliert, no way!
Ich werde noch wahnsinnig und bin kurz davor alles hinzuschmeißen!
Was mache ich nur falsch? Das ist doch eine simple Geschichte, wieso
läuft das nicht? Ich habe schon aufwendigere Dinge für den AVR
programmiert und die liefen auf Anhieb bestens. Kann es denn sein, daß
man beim Umschalten des Ports vom Ausgang zum Eingang etwas beachten muß
wegen der internen pull-ups (Glitch???)? Oder gibt es hier irgendwelche
versteckten Tricks die nur Insider kennen? Ich bin doch bestimmt nicht
der erste der sowas zu programmieren versucht.
Bin für jede Hilfe dankbar!
Gruss, Peter
hi,
ich habe in etwa das gleiche Problem mit dem 2313. Als Anhang habe ich
mal den Source und die Beschaltung beigefügt. Ich versuche auch
krampfhaft erst einmal auf das Scrachpad ein Byte zu schreiben. Ganz zu
schweigen von dem Beschreiben des Security Subkeys.
Na dann....
Mario
"... genommen ... abgeschrieben ..."
Hast Du ihn aber auch verstanden ?
Ich bin da sehr skeptisch, daß man einen fremden Code bei sich einfügen
kann, ohne ihn verstanden zu haben.
In der Codesammlung sind ja auch C und Assemblerbeispiele für 1-Wire
von mir. Wenn Du Fragen dazu hast, frag mich ruhig.
"Kann es denn sein, daß man beim Umschalten des Ports vom Ausgang zum
Eingang etwas beachten muß wegen der internen pull-ups (Glitch???)?"
Da ist nichts geheimnisvolles. Der Pin wird einmalig auf 0 gesetzt und
immer, wenn eine 0 gesendet wird, wird er als Ausgang gesetzt, sonst
immer als Eingang. Damit ergibt sich eine echte Open-Drain Funktion.
Als Pullup empfehle ich 2,2kOhm.
Nur für parasite Power während der Temperaturwandlung oder Schreiben
des EEPROM darf der Pin als Ausgang auf 1 gesetzt werden !
Peter
Hallo Peter,
ich könnte mich nicht erinnern, dass ich code von dir eingefügt hätte.
Das Beispiel ist aus dem Buch "AVR Mikrocontroller-Praxis". Auf den
DS1991 abgeändert. Ich dachte, dass ich den Code verstanden hätte. Na
was ist denn Grundsätzlich falsch an dem Code??
Oder erkennst du den etwaigen Fehler warum ich kein Byte aud das
Scrachpad schreiben kann??
Danke im Voraus
Mario
@Mario,
"ich könnte mich nicht erinnern, dass ich code von dir eingefügt
hätte."
ich könnte mich nicht erinnern, daß ich derartiges behauptet hätte.
Ich habe nur gesagt, daß ich Fragen bezüglich meines Codes beantworten
kann.
Meine Zitate stammmen aus dem Ursprungspost (Peter) und daher sind auch
die Antworten darauf bezogen.
Peter
@ Peter:
Ich hab mal die dementsprechenden Funktionen für die Anbindung von
DS1822-Sensoren an einen PIC geschrieben (auch in C) - das Ganze tat
dann auch was es sollte, nachdem ich das erwähnte Timing halbwegs
erfüllt habe und ein paar "Denkfehler" in den
Byte-Übertragungsfunktionen korrigiert habe. Als Quelle genügte mir das
zu Datenblatt des DS1822, das alle Detail der OneWire-Kommunikation
beschreibt.
Stell doch einfach dein Programm hier rein - vielleicht findet sich
dann das Problem...
Gruß
Konrad
Hi,
@Konrad
Stell doch einfach dein Programm hier rein - vielleicht findet sich
dann das Problem...
Ich habe den Assembler Code angehangen. Vielleicht findet ja jemand den
Fehler.
Wäre für jeden Ansatz dankbar.
Mario
Hi Konrad,
ok das ist in c, da müßte ich mal den avrgcc compiler instalieren.
Hast du dir mal den Schaltplan angesehen, ob das io ist??
Der ist mit im DS1991 File des letzten posting.
Danke für deine schnelle Hilfe.
Mario.
ich tippe mal, dass PB0 den "Open-Collector" Ausgang ansteuern soll -
das geht aber so nicht. Funktionieren kann es nur wenn statt dem BC327
irgendein NPN-Transistor mit Emitter an Masse usw. eingebaut.
Warum aber machst du dir überhaupt die Arbeit mir externem Treiber,
wenn man doch über die Tristate-Bits den IO-Pin des AVR als
Open-Collector nutzen kann (vgl. Peter Danneger
http://www.mikrocontroller.net/forum/read-1-3914.html#287303). Das
spart sogar noch einen IO-Pin.
Im übrigen könntest du, statt den Compiler zu installieren, einfach die
Funktionen in ASM nachprogrammieren - das liefert sicher ein
speichereffizienteres Ergebnis, zumal manches sicher nicht optimal
implementiert ist.
Gruß
Konrad