Forum: Mikrocontroller und Digitale Elektronik DS1820 convert_t


von maed (Gast)


Lesenswert?

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!

von maed (Gast)


Lesenswert?

noch ein zusatz! ab und zu wird auch die richtige temp angezeigt.
nur es dauer eine gewisse zeit lang!
MfG Matthias Eder

von maed (Gast)


Lesenswert?

weiß da keiner was?
ich bin am verzweifel hier weil des ding ned mag!
Würd mich sehr freuen! ; )
Mfg Maed

von Tobi (Gast)


Lesenswert?

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

von Uwe Nagel (Gast)


Lesenswert?

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!

von maed (Gast)


Angehängte Dateien:

Lesenswert?

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!

von maed (Gast)


Angehängte Dateien:

Lesenswert?

hier noch mal asm

von Uwe Nagel (Gast)


Lesenswert?

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

von maed (Gast)


Lesenswert?

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

von maed (Gast)


Angehängte Dateien:

Lesenswert?

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