PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit DS1820 und Anzeige der temperatur



martin66119
08.01.2007, 12:26
Einen schönen Tag euch allen!

Da ich mich erst seit kurzer Zeit mit Microcontrollern befasse habe ich hier
im Forum gesucht und einen Code gefunden mit dem man mit dem DS1820 eine Temp. messen und auf dem Display darstellen kann.
Jedoch wird keine Kommastelle auf dem Display angezeit.

ich verwende das Boar myavr. Hier der Code




$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600

Config 1wire = Portb.0

Config Lcd = 40 * 2

Config Lcdpin = Pin , Rs = Portd.2 , E = Portd.3 , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
Config Lcdbus = 4
Config Lcdmode = Port

Dim ___lcdno As Bit
Dim T1 As Integer
Dim T2 As Integer
Dim I As Byte
Dim Id1(8) As Byte
Dim Id2(8) As Byte
Dim Ar1(2) As Byte
Dim Ar2(2) As Byte


___lcdno = 0
Initlcd
Cursor Off
Cls

___lcdno = 1
Initlcd
Cursor Off
Cls




Id1(1) = 1wsearchfirst()
Id2(1) = 1wsearchnext()


Do
1wreset 'reset
1wwrite &H55 'Match Rom command
1wwrite Id1(1) , 8 'Id von Sensor 1
1wwrite &H44 'Convert T

Waitms 300 'warten bis convert T fertig ist
1wreset 'reset
1wwrite &H55 'match rom command
1wwrite Id1(1) , 8 'id von sensor 1
1wwrite &HBE 'scratchpad lesen
Ar1(1) = 1wread(1) 'erstes byte auslesen, da steht Temp drin
Ar1(2) = 1wread(1) 'zweites Byte auslesen, wenn 00000000 dann pos vorzeichen, wenn 11111111 dann neg vorzeichen


Waitms 500
1wreset 'reset
1wwrite &H55 'Match Rom command
1wwrite Id2(1) , 8 'Id von Sensor 2
1wwrite &H44 'Convert T

Waitms 300 'warten bis convert T fertig ist
1wreset 'reset
1wwrite &H55 'match rom command
1wwrite Id2(1) , 8 'id von sensor 2
1wwrite &HBE 'scratchpad lesen
Ar2(1) = 1wread(1) 'erstes byte auslesen, da steht Temp drin
Ar2(2) = 1wread(1) 'zweites Byte auslesen, wenn 00000000 dann pos vorzeichen, wenn 11111111 dann neg vorzeichen

T1 = Ar1(1) / 2
T2 = Ar2(1) / 2






___lcdno = 0


Upperline

If Ar1(2) = 0 Then 'wenn byte 2 aus dem sensor = 0 dann temp pos, sonst neg
Lcd "Temp. 1:" ; " " ; T1

Else
Lcd "Temp. 1:" ; "-" ; T1

End If

Lowerline

If Ar2(2) = 0 Then 'wenn byte 2 aus dem sensor = 0 dann temp pos, sonst neg
Lcd "Temp. 2:" ; " " ; T2

Else
Lcd "Temp. 2:" ; "-" ; T2

End If

___lcdno = 1

' Upperline
' Lcd "ID 1:" ; Id1(1) ; Id1(2) ; Id1(3) ; Id1(4) ; Id1(5) ; Id1(6) ; Id1(7) ; Id1(8)

' Lowerline
' Lcd "ID 2:" ; Id2(1) ; Id2(2) ; Id2(3) ; Id2(4) ; Id2(5) ; Id2(6) ; Id2(7) ; Id2(8)

Waitms 500

Loop

Was mache ich falsch und was muss ich ändern, dass auch Kommastellen angezeigt werden. Am besten wäre die hier schon ein paar mal geschielderte 0,1 C Genauigkeit.

Danke für die Hilfe
Martin

Tretsch
08.01.2007, 13:00
Hi,
hab mir den code jetzt nur kurz angeguckt (bin in der schule :D ) und wenn ich das richtig sehe liegt es daran das du T1 und T2 als integer deklariert hast. Integerzahlen sind aber nur Ganzzahlen (-32768 bis +32768). Der Rest wird abgeschnitten. Müsstest diese also anders deklarieren.

Tretsch

helimike0705
08.01.2007, 17:18
www.qslnet.de/member/dg1xpz/elektronik/avr

hoffe der link geht , schaue dir da mal das ds1820 bascom prog an
und schreibe es für deinen maga8 um ,sollte ohne probleme auf diese
laufen und berichte ob es funktioniert.

gruß mike

martin66119
09.01.2007, 07:22
Danke!!!!!!!!!

Ich habs mit der Hilfe hinbekommen.

Einen schönen Tag euch allen