Forum: Mikrocontroller und Digitale Elektronik DS1820 an Atmega8 Probleme


von Sebastian (Gast)


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

von Michael (Gast)


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)) ; " "

von Sebastian (Gast)


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

von Sebastian (Gast)


Lesenswert?

und wieso muss das array 9 stellen lang sein, wenn es eh als byte 
deklariert ist? hab den testcode aus dem roboternetz

von Michael (Gast)


Lesenswert?

Ja, das mag binär da drinnen stehen aber Bascom gibt bei PRINT und LCD 
immer den Wert aus, nicht die Bits :)
Dafür gibt es ja dann Bin(x).

von Michael (Gast)


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

von Sebastian (Gast)


Lesenswert?

hmm ok, danke dann bin ich jetzt schonmal weiter ;)

von Sebastian (Gast)


Lesenswert?

achso, also ist jedes feld im array dann ein byte groß? bei 9 feldern 
also 9*8bit insgesamt?

von Michael (Gast)


Lesenswert?

Richtig

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.