DS1820 an Atmega8 Probleme

Gast #3534371
Lesenswert?

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 #3534392
Lesenswert?

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 #3534462
Lesenswert?

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 #3534473
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren