Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

DS18S20 ohne I2C to 1Wire Converter 2 Kategorie: Programmierung Basic (von AndreasK - 28.02.2009 18:23)
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board
Hallo,

ich komme beim Programmieren nicht weiter...
Dieses Programm läuft:

'Benötigte Libs´s:  IntFunc_lib.cc
'Funktion: Auslesen EINES Temperatursensors DS18B20 (pro Port)
'ohne I2C to 1-Wire Converter

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' Mögliche Ports (RAM besser über JP7 ausschalten):
' PortA.0 = Portbit 0 ... PortA.7 = Portbit 7
' PortB.0 = Portbit 8 ... PortB.7 = Portbit 15
' PortC.0 = Portbit 16 ... PortC.7 = Portbit 23
' PortD.0 = Portbit 24 ... PortA.7 = Portbit 31
' PortE.0 = PortBit 32 ... PortE.6 = PortBit 38 (39 geht nicht)
' PortF.0 = PortBit 40 ... PortF.7 = PortBit 47
' PortG.0 = PortBit 48 ... PortG.4 = PortBit 52
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


Dim Port As Integer            ' das PortBit
Dim TextaufAnzeige(5) As Char  ' AusgabeTextaufAnzeige auf LCD
Dim i As Integer               ' Zählervariable
Dim temp As Integer            ' Temperaturwert LCD
Dim scratch_pad(1) As Byte     ' Temperaturwert DS18B20

Sub main()

    LCD_Init()
    LCD_ClearLCD()
    LCD_CursorOff()
    Port = 7
    TextaufAnzeige = "A7:"    ' + temp

    Do While True
      OneWire_Reset(Port)
      OneWire_Write(0xcc)   ' ROM überspringen Kommando
      OneWire_Write(0x44)   ' starte Temperatur Messung Kommando
      AbsDelay(50)          ' Wert ausprobieren...
      OneWire_Reset(Port)
      OneWire_Write(0xcc)   ' ROM überspringen Kommando
      OneWire_Write(0xbe)   ' scratchpad lesen (bis i=9 nicht notwendig)
      For i = 0 To 1
          scratch_pad(i)= OneWire_Read()
      Next
      temp= scratch_pad(1) * 256 + scratch_pad(0)
      LCD_Locate(1,1)       ' Zeile 1, Spalte 1
      LCD_WriteText(TextaufAnzeige)
      LCD_WriteFloat(temp*0.06255,1)'Faktor 0.06255 für DS18B20
    End While

End Sub

Nun wollte ich die Sache mit einer Funktion lösen:

Sub DS18B20(PortBit As Integer)As Integer

Dim i As Integer               ' Zählervariable
Dim temp As Integer            ' Temperaturwert für LCD-Anzeige
Dim scratch_pad(1) As Byte     ' Temperaturwert DS18B20

      OneWire_Reset(PortBit)
      OneWire_Write(0xcc)   ' ROM überspringen Kommando
      OneWire_Write(0x44)   ' starte Temperatur Messung Kommando
      AbsDelay(50)          ' Wert ausprobieren...
      OneWire_Reset(PortBit)
      OneWire_Write(0xcc)   ' ROM überspringen Kommando
      OneWire_Write(0xbe)   ' scratchpad lesen (bis i=9 nicht notwendig)
      For i = 0 To 1
          scratch_pad(i)= OneWire_Read()
      Next
      temp= scratch_pad(1) * 256 + scratch_pad(0)
      Return temp * 0.06255   'Faktor 0.06255 für DS18B20

End Sub


Sub main()

Dim temp As Integer            ' Temperaturwert für LCD-Anzeige

    LCD_Init()
    LCD_ClearLCD()
    LCD_CursorOff()


    Do While True
      DS18B20(7)
      LCD_Locate(1,1)       ' Zeile 1, Spalte 1
      LCD_WriteFloat(temp,1)
    End While

End Sub

Nun ist der Anzeigewert unsinn.
Wo steckt der Fehler ?

Grü�e aus Kiel

Andreas Kunze



    Antwort schreiben


Antworten:

Re: DS18S20 ohne I2C to 1Wire Converter 2 (von PeterS - 1.03.2009 8:56)