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?
und diesen schaltplan habe ich für den ds1621 benutzt.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" '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 '---------------------------------
http://www.avrprojects.net/img/DS162...ometer_sch.jpg
habe alles gewissenhaft angeschlossen und weiss jetzt nicht mehr weiter.
vielen dank im voraus für hinweise...)
gruss, edgar






Zitieren

Lesezeichen