Witam,
Jak wymusić niski stan na lini?
Mam następujący problem. Nie mogę skomunikować się z czujnikiem DS1820. Przejrzałem forum w sprawie komunikacji z czujnikiem. Przeczytalem dokumentacje Dallasa itp.
Czujnik podłączony jest w następujący sposób:
1 - GND
2 - DQ (do procesora do pinu PIND7)
3 - Vcc
Dodatkowo linia danych podciągnięta jest przez rezystor 4.7kΩ do zasilania.
Procesor taktowany jest wewnętrznym zegarem 8Mhz.
Załączam kluczowe fragmenty kodu:
#define DQ 7
#define OW_HI DDRD&=~(1<<DQ);
#define OW_LO DDRD|=(1<<DQ);
void delay_s(s)
{
int i;
do{
for(i=0;i<5;i++)
{
_delay_loop_2(0xffff);
_delay_loop_2(0xffff);
_delay_loop_2(0xffff);
}
}while(s--);
}
int main (void)
{
for ( ; ; )
{ OW_LO;
delay_s(3);
OW_HI;
}
return (0);
}
Krótkie omówienie kodu. Program na przemian ustawia port D pin 7 w stanie wejścia i wyjścia. Są to podstawowe komendy do sterowania magistrala 1-wire i z tego co przeczytalem to musi działać.
De facto tak się dzieje. Podłaczając miernik widze, że port zmienia swoją impedancję z niskej na wysoką. Niestety po podłączeniu czujnika napięcia na linii DQ wynoszą 5V dla loginczej "1" oraz 4.23V dla "zera".
Innymi słowy procek "macha" linią, jednak nie jest w stanie ściągnąc napięcia do zera dla stanu niskiego.
Proszę o jakiekolwiek sugestie. Czujnik powinien być sprawny, bo mam jeszcze 3 inne sztuki i zawsze dzieje się to samo.
W trybie parasite napięcie na linii zmienia się poprawnie.
Pozdrawiam i czekam na pomoc.
Jak wymusić niski stan na lini?
Mam następujący problem. Nie mogę skomunikować się z czujnikiem DS1820. Przejrzałem forum w sprawie komunikacji z czujnikiem. Przeczytalem dokumentacje Dallasa itp.
Czujnik podłączony jest w następujący sposób:
1 - GND
2 - DQ (do procesora do pinu PIND7)
3 - Vcc
Dodatkowo linia danych podciągnięta jest przez rezystor 4.7kΩ do zasilania.
Procesor taktowany jest wewnętrznym zegarem 8Mhz.
Załączam kluczowe fragmenty kodu:
#define DQ 7
#define OW_HI DDRD&=~(1<<DQ);
#define OW_LO DDRD|=(1<<DQ);
void delay_s(s)
{
int i;
do{
for(i=0;i<5;i++)
{
_delay_loop_2(0xffff);
_delay_loop_2(0xffff);
_delay_loop_2(0xffff);
}
}while(s--);
}
int main (void)
{
for ( ; ; )
{ OW_LO;
delay_s(3);
OW_HI;
}
return (0);
}
Krótkie omówienie kodu. Program na przemian ustawia port D pin 7 w stanie wejścia i wyjścia. Są to podstawowe komendy do sterowania magistrala 1-wire i z tego co przeczytalem to musi działać.
De facto tak się dzieje. Podłaczając miernik widze, że port zmienia swoją impedancję z niskej na wysoką. Niestety po podłączeniu czujnika napięcia na linii DQ wynoszą 5V dla loginczej "1" oraz 4.23V dla "zera".
Innymi słowy procek "macha" linią, jednak nie jest w stanie ściągnąc napięcia do zera dla stanu niskiego.
Proszę o jakiekolwiek sugestie. Czujnik powinien być sprawny, bo mam jeszcze 3 inne sztuki i zawsze dzieje się to samo.
W trybie parasite napięcie na linii zmienia się poprawnie.
Pozdrawiam i czekam na pomoc.