Hallo,

Zitat Zitat von zwanzischmark
Hallo,
ich habe einen LM75 Temperatursensor und ein Programm was eigentlich für einen PCF8574 etwas angepasst.
So wird das nix. Passe mal das untenstehende Programm an Deine Bedürfnisse an. Ist von mir zwar für die Micro und den DS 1621/1631 geschrieben, das macht aber in Bezug auf den Sensor keinen Unterschied.
Die SDA/SCL Ports müssen natürlich zurechtgebogen werden
Ach so, es wird Basic++ benutzt, was ich nur jedem empfehlen kann.

Code:
'Test für I2C mit Dallas Temperatursensor
'
'
'---- Variablen definieren-----------------------------------------

option ccmicro


define DEV        byte
define TEMP       byte
define DATA       byte
define mask       byte
define temperatur byte
define value      byte
define nullkomma  byte
define flow       byte
define i          byte
define j          byte

define TxD      port[1]
define RxD      port[2]
define test_ad    ad[2]
define taster   port[3]
define freqport port[4]
define SCL      port[5]
define SDA      port[6]

declare FUNCTION IICSEND(d ref DATA)
declare FUNCTION IICREAD()
declare function ACKN()
declare FUNCTION IICSTART()
declare FUNCTION IICSTOP()
declare FUNCTION NACKN()
declare FUNCTION Verzoegerung()

declare function READTEMP()

#INIT
baud r9600
freq = 150                         'Torzeit = 3 sek
SDA = off
SCL = off

IICSTOP()

put 0
pause 300
print
print"Micro-Test - 2 sek warten"
pause 200

'--------- HAUPTPROGRAMM -----------------------------------------

#main

'#read1621_1
DEV=158
READTEMP()
print value; & ",";
if nullkomma = 128 then print "5" else print "0"
verzoegerung()
flow = freq
print flow
deact rxd
j = test_ad
print j

goto main
'----------------------------

function READTEMP()

IICSTART()
IICSEND(dev)
IICSEND(EEh)                'Temperaturmessung anstoßen
IICSTOP

IICSTART()
IICSEND(dev)
IICSEND(AAh)                'Temperaturmessung Lesekommando
IICSTOP()

IICSTART()
IICSEND(dev+1)
IICREAD()                   'LSB holen
ACKN()
value = data

IICREAD()                   'MSB holen
NACKN()
nullkomma = data

IICSTOP()

END FUNCTION



FUNCTION IICSTART()

SDA=off
SCL=off
END FUNCTION
'-------------------------------------------
FUNCTION IICSTOP()

SDA=off
SCL=on
SDA=on
END FUNCTION
'-------------------------------------------
FUNCTION IICREAD()
deact SDA
DATA=0
MASK=80h
#INSHIFT
SCL=on
if SDA=on then DATA=(DATA or MASK)
SCL=off
MASK=MASK shr 1
if MASK <>0 then goto INSHIFT


'---- 9. Takt für ACKN bzw. NACKN ---------

'ACHTUNG! Je nach Erfordernis (letzte Leseoperation
'bei sequenziellem lesen?) muss danach ACKN oder NACKN
'aufgerufen werden! Daher ist (N)ACKN hier NICHT
'Bestandteil der Funktion!

END FUNCTION

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

FUNCTION IICSEND(d ref DATA)
MASK=80h
#OUTSHIFT
SDA=(DATA and MASK)
SCL=on
SCL=off
MASK=MASK shr 1
if MASK<>0 then goto OUTSHIFT
'---- 9. Takt für ACKN  -------------------
deact SDA
SCL = on
SCL = off
i = not SDA                         'ackn?
SDA= off

end function
'------------------------------------------

function ACKN()
 SDA = OFF
 TOG SCL
 TOG SCL
END FUNCTION

function NACKN()
 SDA = ON
 TOG SCL
 TOG SCL
END FUNCTION

'-------------------------------------------------------------------
FUNCTION Verzoegerung()
for i = 1 to 128
    for j = 1 to 255
    next j
next i
END FUNCTION
'-------------------------------------------------------------------
end
Für die M-Unit V2 finden sich weitere Beispiele auf meinen Seiten.
http://www.henrik-reimers.de/control/

Viele Grüße
Henrik