Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Probleme mit i2c / ds1621 Temperatur-ic Kategorie: C-Control I V1.1 (von Eltor - 8.11.2004 12:22)
 Als Antwort auf Probleme mit i2c / ds1621 Temperatur-ic von DC-Fisherman - 5.11.2004 18:45

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

Bisherige Antworten:

Re: Probleme mit i2c / ds1621 Temperatur-ic (von Henrik - 8.11.2004 21:02)