Gast
#476223
So haben uns jetz an den Code von sensirion gehalten mit allen zeiten
usw.
Es geht immernoch nix. Selbst wenn wir eine slave adresse angeben die es
nicht gibt meldet er erfolgreich gesendet.
Kann bitte jemand nochmal drüberschauen.
Is es eigentlich egal an welche Pins man den Sensor anschließt? Wir
haben ihn jetz an den Pins PC1 und PC0 vom ATmega16.
Danke
void S_SDA() {
DDRC |= (1<<SDA);
PORTC |= (1<<SDA);
}
void C_SDA(){
DDRC |= (1<<SDA);
PORTC &= ~(1<<SDA);
}
void S_SCL(){
DDRC |= (1<<SCL);
PORTC |= (1<<SCL);
}
void C_SCL(){
DDRC |= (1<<SCL);
PORTC &= ~(1<<SCL);
}
unsigned char G_SDA(){
DDRC &= ~(1<<SDA);
if ((PORTC & (1 << SDA)) == 1) { return 1;} else { return 0;};
}
void SHT7Start(void) {
S_SDA();
C_SCL();
delay_us(5);
S_SCL();
delay_us(5);
C_SDA();
delay_us(5);
C_SCL();
delay_us(5);
S_SCL();
delay_us(5);
S_SDA();
delay_us(5);
C_SCL();
}
void SHT7Reset(void) {
}
unsigned char SHT7Read(unsigned char SHTACK) {
unsigned char i, tempvalue=0;
S_SDA(); //release DATA-line
for (i=0x80;i>0;i/=2) //shift bit for masking
{ S_SCL(); //clk for SENSI-BUS
if (G_SDA == 1) {tempvalue = (tempvalue | i);}; //read bit
delay_ms(10);
C_SCL();
delay_ms(100);
}
if (SHTACK == 0){S_SDA();}
else {C_SDA();}; //in case of "ack==1" pull down
DATA-Line
S_SCL(); //clk #9 for ack
delay_us(5); //pulswith approx. 5 us
C_SCL();
delay_us(5);
S_SDA(); //release DATA-line
return tempvalue;
}
char SHT7Write(unsigned char Data) {
unsigned char i,error=0;
for (i=0x80;i>0;i/=2) //shift bit for masking
{ if ((i & Data) == i) {S_SDA();} //masking value with i , write to
Bus
else {S_SDA();};
S_SCL(); //clk for SENSI-BUS
delay_us(5); //pulswith approx. 5 us
C_SCL();
delay_ms(100);
}
S_SDA(); //release DATA-line
S_SCL(); //clk #9 for ack
error=G_SDA(); //check ack (DATA will be pulled down by
SHT11)
C_SCL();
return error; //error=1 in case of no acknowledge
}