DS1820 an Atmega8 Probleme

Gast #3534371
Hi,
versuche mich gerade in die Programmierung eines Thermometers 
einzuarbeiten. Allerdings komme ich leider nicht weiter. Für den Anfang 
wollte ich einfach erstmal nur das Array ausgeben lassen in dem die 
Werte vom 1820 gespeichert werden

Quellcode:

$regfile = "m8adef.dat"
$crystal = 1000000

Config Lcd = 16 * 2
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , 
Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5

Config 1wire = Portd.7

Dim Temp(9) As Byte
Dim I As Integer

Cls

Do
 1wreset
 1wwrite &HCC
 1wwrite &H44
 Waitms 500
 1wreset
 1wwrite &HCC
 1wwrite &HBE
 Temp(1) = 1wread(9)

 Waitms 500

For I = 1 To 9 Step 1
Locate 1 , I
Lcd Temp(i)
Next

Loop

End


Allerdings zeigt er dann auf dem Display "22222222255". Wie kann das 
sein? 1. sollte ja nur 0 oder 1 drin stehen, 2. sollte er ja nur 9 
stellen ausgeben. Wenn der Sensor nicht angeschlossen ist, gibt er 
korrekterweise 9 nullen aus.
Ich hab kein Plan wo hier der Fehler liegen soll, so viel verkehrt kann 
man in den paar Zeilen Code doch gar nicht machen...
Gruß Sebastian
Gast
Dein "LCD Temp(i)" gibt immer 255 aus, da du den Cursor aber immer nur 
um eine Stelle nach rechts schiebst überschneidet sich das ganze halt.

22222222255
255
 255
  255
   255
    255
     255
      255
       255
        255

Lass einfach das Locate weg, der Cursor wird schon automatisch weiter 
geschoben. Wenn du es übersichtlicher haben möchtest dann mach lieber
LCD Hex(Temp(i)) ; " "
Gast
danke, nun geht es. allerdings eine verständnisfrage:

der wert im array ist doch binär? also in jedem feld (1-9) steht 
entweder ne 0 oder ne 1? wieso gibt er dann im o.a. quellcode den wert 
dezimal wieder?
erst mit "lcd bin(temp(1))" wird er binär dargestellt.

falsch war oben btw auch der 1mhz interne oszillator, mit nem 8mhz ext 
quarz zeigt er jetzt auch den richtigen wert, deshalb stand oben immer 
nur die 255.

Gruß Sebastian
Gast
Sebastian schrieb:
> und wieso muss das array 9 stellen lang sein, wenn es eh als byte
> deklariert ist? hab den testcode aus dem roboternetz

Schau mal ins Datenblatt: Seite 6 unten und Seite 8

Es werden 9 Byte vom 1820 gelesen, deshalb auch ein 9 Byte großes Array.

Byte 0: Temp LSB
Byte 1: Temp MSB
Byte 2: User Byte 1
Byte 3: User Byte 2
Byte 4: -
Byte 5: -
Byte 6: Count remain
Byte 7: Count per °C
Byte 8: CRC

Zusammen 9 Byte

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.