hallo! ich möchte euch eigentlich nicht schon wieder nerven, aber ich komm einfach nicht weiter: Hier mal der convert_t befehl: convert_t: ldi temp1, 0x44 ;befehl für convert_t mov r10, temp1 rcall write_command ;schicken rcall wait500ms ret anzumerken ist folgendes: ich weiß 100%, dass write_command-funktion funktioniert! dazu schreibe ich den gefehl ins arbeitsregister r10. genauso weiß ich dass wait500ms funktioniert! problem dabei ist: ich bekomme immer wieder 85,5 grad als ausgabe, also den standartwert! ich vermute deshalb, dass ich den fehler bei convert_t suchen muss. ablauf: rcall init rcall skip_rom rcall convert_t rcall init rcall skip_rom rcall read_scratchpad rcall init ich hab noch ein paar fragen: welche zeitspanne ist für die abfrage des ds1820 am besten? (eigenerwärmung...) ist das gehäuse des ds1820 wasserdicht? was ist im parasite modus zu beachten? geht es vielleicht eleganter so ein convert-t durchzuführen? vielen dank schon mal!
noch ein zusatz! ab und zu wird auch die richtige temp angezeigt. nur es dauer eine gewisse zeit lang! MfG Matthias Eder
weiß da keiner was? ich bin am verzweifel hier weil des ding ned mag! Würd mich sehr freuen! ; ) Mfg Maed
könnte auch sein, dass keiner mit deinen codeauszügen und rcalls gross was anfangen kann. geht mir zumindest so. häng einfach das zeug an und dann kann man mal schaun
Der grundlegende Ablauf sieht vernünftig aus, poste doch mal den gesamten Quelltext. Das Gehäuse sollte Wasserdicht sein, bedenke aber, dass Du die Anschlüsse auch wasserdicht ausführen musst. Der parasite-modus ist eigentlich eher komplizierter zu programmieren, da keine Abfrage möglich ist, wann die Wandlung fertig ist. Ich glaube eher, dass in deinem Programm irgendein Timing-Fehler steckt. Das Timing ist kritisch bei diesem Teil!
Hier mal der gesamte Code! zur erklärung: die funktion ausgabe wird alle sekunden aufgerufen! lcd ausgabe dürfte klar sein! bin2ascii wandelt mir registerwert in ascii um! und gibt sie mir in r4 und r5 aus!´ ich kann falls nötig auch noch die include dateien hochladen!
Ich glaube, das Ende der Wandlung wird falsch abgefragt. in meinem funktionierenden Quelltext (in C) sieht das so aus: // start conversion ow_reset(); ow_write_byte( SKIP_ROM ); ow_write_byte( CONVERT_T); // wait for end of conversion do delay_us(100); while( ow_read_bit()==0 ); //!!! hier liegt der Unterschied !!! // read scratchpad ow_reset(); ow_write_byte( SKIP_ROM ); ow_write_byte( READ_SCRATCHPAD ); for(i=0; i<8; i++ ) mem[i]=ow_read_byte(); Also folgender Änderungsvorschlag: convert_t: ldi temp1, 0x44 ;befehl für convert_t mov r10, temp1 rcall write_command ;schicken ; eventuell wäre hier eine Pause nicht schlecht ; dürfte aber nicht notwendig sein convert_t1: cbi portb,0 ; lesen starten sbi ddrd,0 rcall wait6us sbi portb,0 ; hier stand cbi ! cbi ddrd,0 ; Port auf Input, zum lesen ! rcall wait9us sbis pinb,0 rjmp convert_t1
erst mal danke! nach senden des convert-befehls versteh ich das so: signal auf low ziehen ( cbi portb,0 signal löschen, sbi ddrd,0 pb0 als ausgang) dann 6us warten (sieh datenblatt seite 13) signal loslassen cbi portb,0 da jetzt aber ein pullup dranhängt wird das signal auf high gezogen. des ds1820 zieht es aber auf low, da ja conversion läuft. wenn jetzt die conversion beendet ist schickt des ds1820 ein high signal und dass wird mitder schleife gemacht. was mich stutzig macht ist, dass durch die read time slots eventuell der ds1820 gestört werden könnte
Ich habe den Fehler gefunden! Ich habe ein clr vergessen! Danke an alle! P.S.: Fertiger Code (nicht sauber geprogt ; ) im Anhang
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.