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):
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
Und übrigens muss ich, denke ich, das Licht Exponentiell erhöhen um einen linearen Helligkeitsverlauf zu bekommen, oder?

Marten83