PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrere Thermometermodule am I2C auslesen



Dirkey
13.03.2008, 21:19
Hallo und guten Tag.

Ich bin Dirk und fange an mit Basic zu experimentieren.Ich habe
mir eine M Unit 2.0 zugelegt und einige einfache Programme zum Thema
langzeit Datenerfassung geschrieben.

Nun habe ich mich seit Tagen beim I2C Bus festgebissen und komme
nicht mehr weiter. Ich habe mir Programmbeispiele abgeschrieben um
das Thermometermodul von Conrad auszulesen. Hat funktioniert, war ja
auch nicht schwer es abzutippen. Nun möchte ich aber ein zweites
Thermometermodul anschließen (später sollen es noch ein paar mehr
werden um die Heizungsanlage auszuwerten ). Aber das bekomme ich
nicht hin .

Kann mir da jemand weiterhelfen ? Über Tipps oder sogar ein kleines
Programm in Basic, was ich auf meine Bedürfnisse selber zuschneiden
kann, wäre ich sehr dankbar.
Oder weiß jemand einen guten Link, wo es solche Softwarebausteine
gibt.

Viele Grüße von der stürmischen Ostsee.
Dirk

Tido
13.03.2008, 21:34
Hi Dirk,

so in etwa könnte es aussehen (nur das Wichtigste):



#start
Sensor=140 'Adresse Sensor1
readtemp()
print value
Sensor=156 'Adresse Sensor2
readtemp()
print value
'usw.
goto start


'---- Funktionen -------------------------------------------------

FUNCTION readtemp()

IIC.INIT

IIC.start
IIC.SEND Sensor
IIC.SEND EEh 'temperaturmessung anstoßen
IIC.STOP

PAUSE 10

IIC.start
IIC.SEND Sensor
IIC.SEND 22h 'temperaturmessung stoppen
IIC.stop

'---------------------------

IIC.start
IIC.SEND Sensor
IIC.SEND AAh 'temperaturmessung Lesekommando
IIC.stop

IIC.start
IIC.SEND (Sensor+1) 'lowtemperaturbyte auslesen
IIC.GET value

minusflag = OFF
IF value > 128 THEN
minusflag = ON
value = (255-value)+1
END IF
temperatur = value

IIC.stop
'------------------------------
IIC.start
IIC.SEND Sensor
IIC.SEND A8h 'Counter Lesekommando
IIC.stop

IIC.start
IIC.SEND (Sensor+1) 'Counter auslesen
IIC.GET value
counter = value
IIC.stop
'-----------------------------

IIC.start
IIC.SEND Sensor
IIC.SEND A9h 'Slope Lesekommando
IIC.stop

IIC.start
IIC.SEND (Sensor+1) 'Slope auslesen
IIC.GET value
slope = value
IIC.stop

IIC.OFF
IF minusflag THEN
value=((temperatur * 100 - 25)-((slope-counter)*100/slope*100)/100)/10
value=value*(-1)
ELSE
value=((temperatur * 100 - 25)+((slope-counter)*100/slope*100)/100)/10
END IF

END FUNCTION

Dirkey
14.03.2008, 12:45
Vielen Dank soweit. Ich werde das gleich mal ausprobieren und weiterprogramieren.

Gruß :-)