So, habe jetzt noch ein viel größeres Problem diesbezhüglich.
Die DS18S20 die ich habe funktionieren eigentlich wunderbar.
Jetzt habe ich mit verschiedenen Berechnungen rumexperimentiert und plötzlich berechnet der Mega8 keine Temperaturen zwischen x,7 und x,3°C.
Wie kann das sein?
Hier mein Code (wieder abgespeckt):
Und übrigens muss ich, denke ich, das Licht Exponentiell erhöhen um einen linearen Helligkeitsverlauf zu bekommen, oder?Code:$regfile = "m8def.dat" ' specify the used micro $crystal = 8000000 Declare Sub Lcdinit Declare Sub Lcdwrite(byval Zeichen As Byte) Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Config Lcd = 20 * 4a Waitms 100 'damit das LCD etwas Zeit bekommt um nach dem Einschalten empfangsbereit zu sein... Call Lcdinit Cls Dim I As Byte Dim Bd(9) As Byte Dim Tmp As Byte Dim T As Integer , Temp As Single Gruen Alias Pwm1a Rot Alias Pwm1b Blau Alias Ocr2 Config 1wire = Portd.4 Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1 Config Timer2 = Counter Pwm , Pwm = On , Compare Pwm = Clear Down , Prescale = 1 Config Pinb.1 = Output Config Pinb.2 = Output Config Pinb.3 = Output Gruen = 0 Rot = 0 Blau = 0 Do Waitms 300 1wreset 'reset the device 1wwrite &HCC 'read ROM command 1wwrite &H44 Waitms 500 'read ROM command 1wreset 'reset the device 1wwrite &HCC 'read ROM command 1wwrite &HBE 'read ROM command Bd(1) = 1wread(9) ' read bytes in array 1wreset ' reset the bus ' if is OK, calculate for Tmp = Bd(1) And 1 ' 0.1C precision If Tmp = 1 Then Decr Bd(1) T = Makeint(bd(1) , Bd(2)) T = T / 2 Temp = Bd(8) - Bd(7) Temp = Temp / Bd(8) Temp = T + Temp Temp = Temp - 0.25 End If Locate 1 , 1 Lcd Temp Locate 2 , 1 Lcd Bd(1) Locate 3 , 1 Lcd Bd(7) Locate 4 , 1 Lcd Bd(8) Loop End Sub Lcdinit Call Lcdwrite(&B00101100) Call Lcdwrite(&B00001001) Call Lcdwrite(&B00101000) Call Lcdwrite(&B00000110) Call Lcdwrite(&B00001100) End Sub Sub Lcdwrite(byval Zeichen As Byte) ' Höherwertiges Nibble setzen If Zeichen.4 = 1 Then Portc.3 = 1 Else Portc.3 = 0 If Zeichen.5 = 1 Then Portc.2 = 1 Else Portc.2 = 0 If Zeichen.6 = 1 Then Portc.1 = 1 Else Portc.1 = 0 If Zeichen.7 = 1 Then Portc.0 = 1 Else Portc.0 = 0 ' Höherwertiges Nibble übertragen Portc.4 = 1 Waitms 1 Portc.4 = 0 Waitms 1 ' Niederwertiges Nibble setzen If Zeichen.0 = 1 Then Portc.3 = 1 Else Portc.3 = 0 If Zeichen.1 = 1 Then Portc.2 = 1 Else Portc.2 = 0 If Zeichen.2 = 1 Then Portc.1 = 1 Else Portc.1 = 0 If Zeichen.3 = 1 Then Portc.0 = 1 Else Portc.0 = 0 ' Niederwertiges Nibble übertragen Portc.4 = 1 Waitms 1 Portc.4 = 0 Waitms 1 End Sub
Marten83







Zitieren

Lesezeichen