Hallo Zusammen.
Ich fleissig am Ausbau meines Xmega Systems und habe jetzt den SHT71 angeschlossen. Alleridngs bekomme ich mit der Routine, die ich bisher auf meinem Mega2561 mit einem SHT11 am Laufen hatte keine Werte.
Die RAW werte werden immer mit 0 augegeben.
Initialisiert habe ich das ganze folgendermassen.
Zwar liegen der FAT16 und der SHT71 auf dem Selben Port (PortD) aber an unterschiedlichen Pins.
Mit dem Oszi habe ich mal geschaut. Beide Leitungen sind auf LOW. Beim Zugriff auf den SHT pulst die Clk (PortD.1) einmal kurzezeitig auf High-Pegel. DAT (PortD.2) geht dann auch auf HIGH, bleibt aber wesentlich länger dort. Sonst passiert eigentlich nichts. Das ist doch bestimmt so nicht korrekt?
Ich fleissig am Ausbau meines Xmega Systems und habe jetzt den SHT71 angeschlossen. Alleridngs bekomme ich mit der Routine, die ich bisher auf meinem Mega2561 mit einem SHT11 am Laufen hatte keine Werte.
Code
procedure ReadSHT;
var Value: word;
T : integer;
H : float;
begin
If SHT11GetStatus <> $FF then // wenn er da ist
SHT11startTemp; // Temperaturlesen Starten
Value:= SHT11getTemp; // Temperatur holen
Writeln(Seroutc1,'RAWT: '+inttostr(value));
T:= integer(Value div 10) - 400; // 14bit resolution
system.Temperature:= float(T)*0.1; // Teperaur in Systemvariable
SHT11startHum; // Feuchtigkeit starten
Value:= SHT11getHum; // Feuchtigkeit holen
Writeln(Seroutc1,'RAWH: '+inttostr(value));
Value:= MulDivInt(Value, 405, 1000) - 40; // 12bit resolution
system.Humidity:= float(Value)*0.1;
H := (log10(system.Humidity) - 2) / 0.4343 + (17.62*system.Temperature) / (243.12 + system.Temperature);
system.Dewpoint:= 243.12*H / (17.62 - H);
endif;
end;
var Value: word;
T : integer;
H : float;
begin
If SHT11GetStatus <> $FF then // wenn er da ist
SHT11startTemp; // Temperaturlesen Starten
Value:= SHT11getTemp; // Temperatur holen
Writeln(Seroutc1,'RAWT: '+inttostr(value));
T:= integer(Value div 10) - 400; // 14bit resolution
system.Temperature:= float(T)*0.1; // Teperaur in Systemvariable
SHT11startHum; // Feuchtigkeit starten
Value:= SHT11getHum; // Feuchtigkeit holen
Writeln(Seroutc1,'RAWH: '+inttostr(value));
Value:= MulDivInt(Value, 405, 1000) - 40; // 12bit resolution
system.Humidity:= float(Value)*0.1;
H := (log10(system.Humidity) - 2) / 0.4343 + (17.62*system.Temperature) / (243.12 + system.Temperature);
system.Dewpoint:= 243.12*H / (17.62 - H);
endif;
end;
Die RAW werte werden immer mit 0 augegeben.
Initialisiert habe ich das ganze folgendermassen.
Code
Import ... SHT11drvr, ...;
Define
OSCtype = int32MHz, PLLmul=4, prescB=1, prescC=1;
SysTick = 10, adj; // msec, correct the RTC32K timer for exact mSec timing
StackSize = $0100, iData;
FrameSize = $0100, iData;
Scheduler = iData;
TaskStack = $0040, iData;
TaskFrame = $0020;
// Exceptions = 1; {levels}
//MMC Port
FAT16 = SPI_D, PortD, 4, IData; // SPI_X, SS-Port, SS-PIN, data area
F16_FileHandles = 2;
F16_DirLevels = 2;
F16_StrLen = 128; // only for file of text
F16_MMCspeed = slow; // standard, slow, fast
//SHT11 Luftfeuchtesensor
SHT11drvr = polled;
SHT11clk = PortD, 1; {Port, Pin#}
SHT11Dat = PortD, 2; {Port, Pin#}
Define
OSCtype = int32MHz, PLLmul=4, prescB=1, prescC=1;
SysTick = 10, adj; // msec, correct the RTC32K timer for exact mSec timing
StackSize = $0100, iData;
FrameSize = $0100, iData;
Scheduler = iData;
TaskStack = $0040, iData;
TaskFrame = $0020;
// Exceptions = 1; {levels}
//MMC Port
FAT16 = SPI_D, PortD, 4, IData; // SPI_X, SS-Port, SS-PIN, data area
F16_FileHandles = 2;
F16_DirLevels = 2;
F16_StrLen = 128; // only for file of text
F16_MMCspeed = slow; // standard, slow, fast
//SHT11 Luftfeuchtesensor
SHT11drvr = polled;
SHT11clk = PortD, 1; {Port, Pin#}
SHT11Dat = PortD, 2; {Port, Pin#}
Zwar liegen der FAT16 und der SHT71 auf dem Selben Port (PortD) aber an unterschiedlichen Pins.
Mit dem Oszi habe ich mal geschaut. Beide Leitungen sind auf LOW. Beim Zugriff auf den SHT pulst die Clk (PortD.1) einmal kurzezeitig auf High-Pegel. DAT (PortD.2) geht dann auch auf HIGH, bleibt aber wesentlich länger dort. Sonst passiert eigentlich nichts. Das ist doch bestimmt so nicht korrekt?