
Zitat von
Zeroeightfifteen
ich habe heute mal ausprobiert ob ich Minustemperaturen auch anzeigen lassen kann. Doch wenn die Temperatur unter 0 fällt, läuft er von 256 abwärtz.
Och mann 0815,
was hatte ich geschrieben? Richtig:
Grundlagen und nochmal Grundlagen lernen, Datenblätter lesen, verstehen und dann variieren.
Da fragst Du:
Dieses Programm funktioniert glaub ich mal so weit. Die temperatur wir aber ohne Komma angezeigt.
was bedeutet denn das rechnen mit value +5 oder *10?
kann ich das ganze nicht mit hardware twi lösen?
da sind doch die befehle auch kürzer.
1) Wie man Zahlen ohne Komma in Zahlen mit Komma verwandelt. Das hattest Du bereits in einem anderen Thread gefragt und auch eine Methode genannt bekommen, wie das zu bewerkstelligen ist. In meinem komplettbeispiel, das ich unten nochmal einfüge, lernst Du noc eine Methode kennen. Was die Operation mit *10 und +5 darfst Du nun selbst herausfinden.
2)Natürlich kannst Du das auch mit Hardware TWI lösen. Nur ändern sich die Befehle überhaupt nicht. Der einzige Unterschied ist der, daß die Bascom Library Hardware TWI anspricht und damit gerinfügig weniger Platz verbraucht.
3)Minus kann das Programmbeisiel nicht, ich habe es bewußt einfach gehalten, für Dich aber wohl noch nicht einfach genug.
Irgendwie scheinst Du die Funktion eines Forums falsch zu verstehen. Hier gibt es Hilfe zur Selbsthilfe, keine Rundum Sorglospakete für Denkfaule.
Ein letztes Mal --- Komplettprogramm einfach:
Code:
'-------------------------------------------------------------------------------
'----- Beispiel für das Auslesen des Temperatursensors DS1621/1631 ------------
' HR 2006
'
'Anmerkung: Dieses Beispiel ist sowohl für den 1621 als auch für den 1631
'geeignet. Der 1631 wird dabei im 1621 Kompatibilitätsmodus betrieben.
'Auf die Auswertung negativer Temperaturen wird verzichtet.
'-------------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 7372800
$baud = 9600
$hwstack = 32
$swstack = 32
$framesize = 32
Config Scl = Portc.5
Config Sda = Portc.4
Portc.5 = 1 'Pullup Widerstand ein
Portc.4 = 1 'Pullup Widerstand ein
I2cinit 'entbehrlich
'-------------------------------------------------------------------------------
Declare Sub Readtemp(byval Device As Byte)
Declare Sub Convertvalue_komma1()
Dim Value As Word
Dim Convert_strg As String * 10
Const Ds1 = 150 'ggf. anpassen
'----------------------------- Hauptprogramm -----------------------------------
Do
Call Readtemp(ds1)
Call Convertvalue_komma1()
Print Convert_strg
Waitms 500
Loop
End
'----------------------------- Subroutinen -------------------------------------
'Readtemp liest die Temperatur und stellt sie nach Aufruf in der Variable Value
'in 10tel Grad zu Verfügung. Übergeben wird die Deviceadresse des Sensors.
Sub Readtemp(byval Device As Byte)
Local Deviceread As Byte
Local Lowtemp As Byte
Local Hightemp As Byte
Deviceread = Device + 1
I2cstart
I2cwbyte Device
I2cwbyte &HEE 'Temperaturmessung anstoßen
I2cstop
I2cstart
I2cwbyte Device
I2cwbyte &HAA 'Temperaturmessung Lesekommando
I2cstop
I2cstart
I2cwbyte Deviceread
I2crbyte Lowtemp , Ack 'LSByte holen (Ganze Grad)
I2crbyte Hightemp , Nack 'MSByte holen (0,5 Grad Indikator)
I2cstop
Value = Lowtemp * 10
If Hightemp = 128 Then
Value = Value + 5
End If
End Sub
'-------------------------------------------------------------------------------
'Convertvalue_komma1 wandelt Value in einen String mit einer Nachkommastelle.
'Es wird gezeigt wie ein Zahlenwert in ein String gewandelt wird und dieser
'formatiert werden kann.
'Alternativ kann natürlich auch die "/10, Mod 10 Methode" angewandt werden.
Sub Convertvalue_komma1()
Convert_strg = Str(value)
Convert_strg = Format(convert_strg , " 0.0")
End Sub
'-------------------------------------------------------------------------------
und eine Erweiterung auf negative Temperaturen:
Code:
Sub Readtemp(byval Device As Byte)
Minusflag = 0
Local Deviceread As Byte
Local Lowtemp As Byte
Local Hightemp As Byte
Local Templow As Byte
Deviceread = Device + 1
I2csend , Device , &HEE 'Temperaturmessung anstoßen
I2csend , Device , &HAA 'Temperaturmessung Lesekommando
I2cstart
I2cwbyte Deviceread
I2crbyte Lowtemp , Ack 'LSByte holen (ganze Grad)
Templow = Lowtemp And &H80
If Templow = 128 Then
Minusflag = 1
Lowtemp = 255 - Lowtemp
Lowtemp = Lowtemp + 1
End If
I2crbyte Hightemp , Nack 'MSByte holen (0,5 Indikator)
I2cstop
Value = Lowtemp * 10
Value_x = Lowtemp 'um das LSB für EEprom
'Ausgabe zu retten
If Hightemp = 128 Then '+/- Auswertung
If Minusflag = 0 Then Value = Value + 5
' If Minusflag = 1 Then Value = Value - 5
End If
End Sub
Bevor Du Dich nun wieder mit Fragen meldest, wäre es schön, wenn Du endlich mal die Grundlagen von I2C lernen würdest und das Datenblatt liest. Dann wirst Du evtl. auch weitere Antworten erwarten können.
Henrik
Lesezeichen