what?
19.02.2008, 07:42
hallo
und erstmal kompliment für das board.
weil ich absoluter anfänger bin, habe ich mich tage durch die beiträge hier gelesen und schon gelernt :-$
ich habe den mega2560 und möchte den temperatur sensor ds1621 über ic2 ansprechen bzw. dessen daten auswerten.
es gibt ja einige codebeispiele, wie man das in bascom macht.
bei mir kommt leider immer nur der wert null an, bzw andere, unsinnige werte
leider zeigt er bei der zuletzt am besten funktionierenden codevariante sagenhafte 143 grad an.
hier mein zusammengeschraubter code.
was mir eigenlich fehlt, ist eine gut zu verstehende erklärung des befehlaufbaus in bascom für i2c.
muss der ic2master eingesetzt werden?
'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" 'Bibliothek einbinden
'---------- I²C Einsatellungen ----------
$lib "i2c_twi.lbx" 'Einbindung der I2C-Bibliothek (Hardware)
'Config Twi = 100000 'i2c Frequenz einstellen
'*** I2C Config ***
Config Scl = Portd.0 'Ports an eigene Hardware anpassen!
Config Sda = Portd.1
'Config I2cdelay = 0
I2cinit 'entbehrlich
'-------------------------------------------------------------------------------
Declare Sub Readtemp(byval Device As Byte)
Declare Sub Convertvalue_komma1()
Dim Value As Word
Dim Ton As Integer
Dim Convert_strg As String * 10
Const Ds1 = 142 'ggf. anpassen
'----------------------------- Hauptprogramm -----------------------------------
Do
Call Readtemp(ds1)
Call Convertvalue_komma1()
Print #4 , 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 diesen schaltplan habe ich für den ds1621 benutzt.
http://www.avrprojects.net/img/DS1621_Thermometer_sch.jpg
habe alles gewissenhaft angeschlossen und weiss jetzt nicht mehr weiter.
vielen dank im voraus für hinweise...:o)
gruss, edgar
und erstmal kompliment für das board.
weil ich absoluter anfänger bin, habe ich mich tage durch die beiträge hier gelesen und schon gelernt :-$
ich habe den mega2560 und möchte den temperatur sensor ds1621 über ic2 ansprechen bzw. dessen daten auswerten.
es gibt ja einige codebeispiele, wie man das in bascom macht.
bei mir kommt leider immer nur der wert null an, bzw andere, unsinnige werte
leider zeigt er bei der zuletzt am besten funktionierenden codevariante sagenhafte 143 grad an.
hier mein zusammengeschraubter code.
was mir eigenlich fehlt, ist eine gut zu verstehende erklärung des befehlaufbaus in bascom für i2c.
muss der ic2master eingesetzt werden?
'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" 'Bibliothek einbinden
'---------- I²C Einsatellungen ----------
$lib "i2c_twi.lbx" 'Einbindung der I2C-Bibliothek (Hardware)
'Config Twi = 100000 'i2c Frequenz einstellen
'*** I2C Config ***
Config Scl = Portd.0 'Ports an eigene Hardware anpassen!
Config Sda = Portd.1
'Config I2cdelay = 0
I2cinit 'entbehrlich
'-------------------------------------------------------------------------------
Declare Sub Readtemp(byval Device As Byte)
Declare Sub Convertvalue_komma1()
Dim Value As Word
Dim Ton As Integer
Dim Convert_strg As String * 10
Const Ds1 = 142 'ggf. anpassen
'----------------------------- Hauptprogramm -----------------------------------
Do
Call Readtemp(ds1)
Call Convertvalue_komma1()
Print #4 , 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 diesen schaltplan habe ich für den ds1621 benutzt.
http://www.avrprojects.net/img/DS1621_Thermometer_sch.jpg
habe alles gewissenhaft angeschlossen und weiss jetzt nicht mehr weiter.
vielen dank im voraus für hinweise...:o)
gruss, edgar