hallo,
so, den sensor habe ich zum reden gebracht... =D>
hier der funktionierende code
Code:
'Diese Anweisung setzt die Fusebits automatisch korrekt (Syntax $PROG LB, FB , FBH , FBX )
$prog , 255 , &B11011001 , 'Quarz an / Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 16000000 'Quarzfrequenz
Config Pine.5 = Input
USB Alias Pine.5 'Ist 1 wenn USB angeschlossen
Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com4:" For Binary As #4 'USB Buchse
'-------------------------------------------------------------------------------
$lib "i2c_twi.lbx" ' Für Hardware TWI
Config Twi = 400000 ' Init TWBR und TWSR
' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart !
Twcr = Twen
Waitms 500
Config Scl = Portd.0 ' Ports fuer IIC-Bus
Config Sda = Portd.1
'Config I2cdelay = 100 ' je höher der Wert umso langsamer der Bus
' 10 ergibt ca. 100kHz (sollte zumindest)
I2cinit
Const Ds1621w = &H90
Const Ds1621r = &H91
Dim Lowtemp As Byte
Dim Hightemp As Byte
' Messen anstossen
I2csend Ds1621w , &HEE
I2cstart
I2cwbyte Ds1621w
I2cwbyte &HEE
I2cstop
If Err = 1 Then Print #4 , "I2C-Err11111 "
Do
' der DS1621 braucht mind. 400ms zum Temperatur umwandeln !
Waitms 500
' Wert auslesen
I2cstart
I2cwbyte Ds1621w
I2cwbyte &HAA
I2cstart
I2cwbyte Ds1621r
I2crbyte Lowtemp , Ack
I2crbyte Hightemp , Nack
I2cstop
'Print #4 , "low1: " ; Lowtemp
'Print #4 , "high1 :" ; Hightemp
If Err = 0 Then
' Negativer Wert ?
If Lowtemp.7 = 1 Then
Lowtemp = Not Lowtemp
If &H80 > Hightemp Then
Incr Lowtemp
End If
' Print #4 , "-" ; Lowtemp.7
Else
'Print #4 , "+" ; Lowtemp.7
End If
Print #4 , "temp:" ; Lowtemp ; "," ;
If Hightemp = &H80 Then
Print #4 , "5"
Else
Print #4 , "0"
End If
Else
Print #4 , "I2C-Err ! "
End If
Wait 60
Loop
End
die temperaturmessungen werden im bascom-terminalfenster mit 0.5 grad genauigkeit angezeigt. da gibt es ja noch eine möglichkeit, die auflösung des temperaturwertes noch auf stellen hinter dem komma zu erhöhen.
das habe ich bis jetzt aber leider noch nicht verstanden.
ist aber nicht so schlimm, erstmal reichen die 0.5 grad.
ich möchte nun gerne die temperaturwerte zur späteren auswertung speichern. in einer logdatei oder anders. wie muss ich da ansetzen?
welche möglichkeiten gibt es, die vom chip erhaltenen daten zu speichern?
vielen dank für eure hilfe.
ciao, edgar
Lesezeichen