mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DS1820 convert_t


Autor: maed (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: maed (Gast)
Datum:

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

Autor: maed (Gast)
Datum:

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

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe Nagel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: maed (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!

Autor: maed (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier noch mal asm

Autor: Uwe Nagel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: maed (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: maed (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den Fehler gefunden!
Ich habe ein clr vergessen!
Danke an alle!
P.S.: Fertiger Code (nicht sauber geprogt ; ) im Anhang

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.