mach das mal in mehreren Schritten, so kannst Du besser analysieren:
1) weise das Funktionsergebnis einer Variablen zu
2) wandle die Variable in einen String
3) gib den String aus (LCD strIrgendwas)
wo hakt es jetzt?
Einen wunderschönen guten Morgähn liebe Leute.
Ich habe nun die halbe Nacht an einer Kleinigkeit gesessen. Ich wollte eine Funktion fürs Auslesen mehrerer Temperatursensoren schreiben und bin an einer ganz simplen Stelle gescheitert - einer function.
Die Fehlermeldung, die da erscheint, zeigt auf Zeile 39: Lcd Get_temp(test)Code:'------------------------------------------------------------------------------ ' I2C: Sda = Portc.4 Scl = Portc.5 ' UART: RxD = Portd.0 TxD = Portd.1 '------------------------------------------------------------------------------ $regfile = "m32def.dat" $crystal = 8000000 Declare Function Get_temp(ts As Byte) As Integer Dim ___lcdno As Byte 'Umschaltbyte für Anzeige : Config Lcd = 20 * 4 'Anzeigemodus 40 x 4 Zeichen Config Lcdpin = Pin , E = Portb.6 , Rs = Portb.7 , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E2 = Portb.5 ___lcdno = 0 'auf Chip 1 schalten Initlcd 'die beiden oberen Zeilen initialisieren Cls 'die beiden oberen Zeilen löschen ___lcdno = 1 Initlcd Cls Config 1wire = Portc.6 Cls Dim Ar(8) As Byte Dim I As Byte Dim Sc(9) As Byte Dim Sensor As Byte Dim T As Integer Dim Test As Byte For Sensor = 1 To 1wirecount() If Sensor = 1 Then Ar(1) = 1wsearchfirst() Else Ar(1) = 1wsearchnext() Locate 1 , 1 : Lcd "Sensor" ; Sensor ; " "; For I = 1 To 8 Lcd Hex(ar(i)) Next Locate 2 , 1 Test = Ar(1) Lcd Get_temp(test) Wait 3 Next Sensor Function Get_temp(ts As Byte) 1wreset 1wwrite &HCC 'skip rom (an alle) 1wwrite &H44 ' messen Waitus 200 'zeit zum messen geben 1wverify Ts ' Den gewünschten Sensor auswählen 1wwrite &HBE ' Kommando READ SCRATCHPAD Sc(1) = 1wread(9) If Sc(9) = Crc8(sc(1) , 8) Then T = Makeint(sc(1) , Sc(2)) ' Die Nachkommastelle entfernen T = T / 2 ' Temperatur in ganzen Grad Schritten ausgeben End If Get_temp = T End Function End
Fehler ist "Different parameter type passed then declared".
Ich weiss ja, was Bascom von mir will. Ich versteh' nur nicht, wo ich da angeblich einen falschen Typ übergeben soll oder ich habe doch ein Grundsatzproblem
Kann mir jemand von Euch bitte einen Denkanstoß geben? Gute Nacht erstmal![]()
mach das mal in mehreren Schritten, so kannst Du besser analysieren:
1) weise das Funktionsergebnis einer Variablen zu
2) wandle die Variable in einen String
3) gib den String aus (LCD strIrgendwas)
wo hakt es jetzt?
Nirgens =D>
Einfach nochmal das Funktionsergebnis statt direkt aufs Lcd in eine Variable und dann erst ausgeben.
Ich ändere bei der Gelegenheit mal den Thread-Titel.
Danke Dir für den Schubs
Das Programm gibt nun ganz simpel nacheinander die Temperaturwerte und Chip-IDs der Temperatursensoren aus.
Code:'------------------------------------------------------------------------------ ' I2C: Sda = Portc.4 Scl = Portc.5 ' UART: RxD = Portd.0 TxD = Portd.1 '------------------------------------------------------------------------------ $regfile = "m32def.dat" $crystal = 8000000 Declare Function Get_temp(ts As Byte) As Integer Dim ___lcdno As Byte 'Umschaltbyte für Anzeige : Config Lcd = 20 * 4 'Anzeigemodus 40 x 4 Zeichen Config Lcdpin = Pin , E = Portb.6 , Rs = Portb.7 , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E2 = Portb.5 ___lcdno = 0 'auf Chip 1 schalten Initlcd 'die beiden oberen Zeilen initialisieren Cls 'die beiden oberen Zeilen löschen ___lcdno = 1 Initlcd Cls Config 1wire = Portc.6 Dim Ar(8) As Byte Dim I As Byte Dim Sc(9) As Byte Dim Sensor As Byte Dim T As Integer Dim Test As Byte Dim Temp2 As Integer For Sensor = 1 To 1wirecount() If Sensor = 1 Then Ar(1) = 1wsearchfirst() Else Ar(1) = 1wsearchnext() Locate 1 , 1 : Lcd "Sensor" ; Sensor ; " "; For I = 1 To 8 Lcd Hex(ar(i)) Next Locate 2 , 1 Test = Ar(1) Temp2 = Get_temp(test) Temp3 = Str(temp2) Lcd Temp2 Wait 3 Next Sensor Function Get_temp(ts As Byte) 1wreset 1wwrite &HCC 'skip rom (an alle) 1wwrite &H44 ' messen Waitus 200 'zeit zum messen geben 1wverify Ts ' Den gewünschten Sensor auswählen 1wwrite &HBE ' Kommando READ SCRATCHPAD Sc(1) = 1wread(9) If Sc(9) = Crc8(sc(1) , 8) Then T = Makeint(sc(1) , Sc(2)) ' Die Nachkommastelle entfernen T = T / 2 ' Temperatur in ganzen Grad Schritten ausgeben End If Get_temp = T End Function End
Okay, vergesst es. Die Werte stimmen nicht.
Bei mehreren Sensoren merkt sich das Programm nur zwei IDs und nicht mehr. Dementsprechend bekomme ich auch nur zwei sinnvolle Temperaturen.
Hmm... jemand eine Idee?![]()
http://www.pirnaer.de/bascom_fuer_my...ur_ds1820.html
Schau mal auf den untersten Programmcode.Vielleicht kannst du damit was anfangen.
Mike
Leider nein. Das Programm fragt auch nur nach 1wsearchnext so wie meins auch. Das ist der Punkt, an dem ich die falsche Adresse bekomme und damit natürlich auch die falsche Temperatur.
Allerdings bekomme ich auch mit diesem Programm den selben Effekt wie bei mir.
Lesezeichen