
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
ich hatte ebenfalls Probleme mit dem I2C Temperatursensor DS1621. Was sinnvolles kam da nicht raus, obwohl eigentlich alles ok sein müsste. Der Sensor wurde mit der richtigen Adresse als I2C Device mit dem Beispielprogramm erkannt, also lebte der ja! Dann hab ich es mal mit dem CCBasic++ probiert und siehe da, es funktionierte alles so wie es sollte. Sogar zehntel Grad kann der ds1621 anzeigen! Um auf des Rätsel's Lösung zu kommen habe ich den funktionierenden CBasic++ Quellcode umgeschrieben, damit der unter der C-Control 2.0 IDE läuft. Das Ergebnis vorweg: Es lief da nicht, keine sinnvollen Werte, wie gehabt.... Es kann natürlich sein, dass ich beim Umschreiben Mist gebaut habe. Das denke ich allerdings nicht, mir scheint, dass das Problem tiefer liegen könnte. Bloss wo??? Quellecode für CCBasic++, wie im Thread gepostet. Etwas umgearbeitet , damit's läuft '-------------------------------------- define value as word [2] define temperatur as word [3] define temp as byte [7] define data as byte [8] define counter as byte [9] define slope as byte [10] define dev as byte [11] define lcd_backgroundlight as port[16] lcd_backgroundlight=off Dev = 9Eh 'Ändern für die aktuelle DS1621 Adresse #Restart IIC.init IIC.start IIC.send dev IIC.send EEh 'temperaturmessung anstoßen IIC.STOP pause 10 IIC.start IIC.send dev IIC.send 22h 'temperaturmessung stoppen IIC.stop '--------------------------- IIC.start IIC.send DEV IIC.send AAh 'temperaturmessung Lesekommando IIC.stop IIC.start IIC.send (dev+1) 'lowtemperaturbyte auslesen IIC.get value temperatur = value IIC.stop '------------------------------ IIC.start IIC.send dev IIC.send A8h 'Counter Lesekommando IIC.stop IIC.start IIC.send (dev + 1) 'Counter auslesen IIC.get value counter = value IIC.stop '----------------------------- IIC.start IIC.send dev IIC.send A9h 'Slope Lesekommando IIC.stop IIC.start IIC.send (DEV+1) 'Slope auslesen IIC.get value slope = value IIC.stop IIC.off value = ( ( temperatur * 100 - 25 ) + ( ( slope - counter ) * 100 / slope * 100 ) /100) / 10 with lcd .init .clear .pos 1,4 .print "Temperatur" .pos 2,7 .Print value pause 40 .clear .off end with goto restart end *************************************************************************************** Und nun für die CCBasic 2.0 IDE **************************************************************************************** define value word [2] define temperatur word [3] define temp byte [7] define data byte [8] define counter byte [9] define slope byte [10] define dev byte [11] define lcd_backgroundlight port[16] lcd_backgroundlight=off Dev = &h9E #Restart print"#ON_IIC#"; 'UPLEITUNG ZUM IIC-MODULE print"#START#"; 'START BEDINGUNG put dev 'ADRESSE SENDEN put &hEE 'Messung starten print "#STOP#"; 'STOP BEDINGUNG Pause 10 print"#START#"; put dev put &h22 print "#STOP#"; print"#START#"; put dev put &hAA print "#STOP#"; print"#START#"; put dev put &hA8 print "#STOP#"; print"#START#"; put (dev + 1) get value counter=value print "#STOP#"; print"#START#"; put dev put &hA9 print "#STOP#"; print"#START#"; put (dev + 1) get value slope=value print "#STOP#"; print"#OFF#"; value = ( ( temperatur * 100 - 25 ) + ( ( slope - counter ) * 100 / slope * 100 ) /100) / 10 print"#ON_LCD#"; print"#INIT#"; print"#L104#"; print"Temperatur" print"#L207#"; print value print"#OFF#"; goto restart end Das passt vielleicht eher als eigener Thread ins C-Control I V2.0 Forum rein. Weil es hier um I2C und eben denselben Chip handelt habe ich hier gepostet. Schliesslich kam die Rettung ( CCBAsic++ und funktionierender Quellcode) auch aus diesem Thread. Danke dafür!!! |
| Antwort schreiben |