Mam problem z odebraniem wartości linii SDA, odbieram zawsze same logiczne "1", proszę o pomoc.
Definicja ustawiania i czyszczenia bitów na linii SDA i SCL
Definicja odbioru bitu na linii SDA <- Sprawdziłem poniższą funkcję i działa prawidłowo. SDA podpiąłem pod masę funkcja zwracała 0, jak podpiąłem pod 5V funkcja zwracała 1;
Problem jest w funkcji wystawiającej bajt a mianowicie z odebraniem potwierdzenia (zawsze funkcja check() zwraca 1), układ SHT11 powinien wyzerować linię SDA, a funkcja check() powinna zwrócić 0.
error = check();
Ogólnie to problem jest z odbiorem bitów, ponieważ w funkcji check() odczytującej bit z linii SDA są same wysokie stany, tak jakby układ SHT11 nie wstawiał 0. Co w konsekwencji uniemożliwia mi odbiór bajtów zawartych w rejestrach układu SHT11, każdy odebrany bajt to 0xFF.
Grubszą linią zaznaczono na obrazie przejęcie linii SDA przez układ SHT11
Proszę o pomoc
Definicja ustawiania i czyszczenia bitów na linii SDA i SCL
#define SHT11Out PORTB
#define SDA 2
#define SCL 3
//
#define CLR_SDA SHT11Out &= ~_BV(SDA)
#define SET_SDA SHT11Out |= _BV(SDA)
#define CLR_SCL SHT11Out &= ~_BV(SCL)
#define SET_SCL SHT11Out |= _BV(SCL) Definicja odbioru bitu na linii SDA <- Sprawdziłem poniższą funkcję i działa prawidłowo. SDA podpiąłem pod masę funkcja zwracała 0, jak podpiąłem pod 5V funkcja zwracała 1;
char check(void)
{
DDRB^=0b0000100;
if(bit_is_clear(PINB,SDA))
{
DDRB^=0b0000100;
return 0;
}
else
{
DDRB^=0b0000100;
return 1;
}
}Problem jest w funkcji wystawiającej bajt a mianowicie z odebraniem potwierdzenia (zawsze funkcja check() zwraca 1), układ SHT11 powinien wyzerować linię SDA, a funkcja check() powinna zwrócić 0.
error = check();
char SHT11_write(unsigned char value)
{
unsigned char i,error=0,error2=0;
for(i=0;i<8;i++,value<<=1)
{
if(value & 0x80)
{
SET_SDA;
}
else
{
CLR_SDA;
}
SET_SCL;
_delay_ms(0.1);
CLR_SCL;
}
SET_SDA;
SET_SCL;
_delay_ms(0.1);
error = check();
_delay_ms(0.1);
CLR_SCL;
return error;
}Ogólnie to problem jest z odbiorem bitów, ponieważ w funkcji check() odczytującej bit z linii SDA są same wysokie stany, tak jakby układ SHT11 nie wstawiał 0. Co w konsekwencji uniemożliwia mi odbiór bajtów zawartych w rejestrach układu SHT11, każdy odebrany bajt to 0xFF.
Grubszą linią zaznaczono na obrazie przejęcie linii SDA przez układ SHT11
Proszę o pomoc