Witam,
Zacznę od tego, że przeszukałem forum, w prawdzie znalazłem interesujące mnie rzeczy lecz u mnie coś nie działa.
Zacznijmy od początku. Mam dwa ds18b20 na jednej linii w Atmega8. Chciałbym z nich odczytać numery seryjne. Tutaj zaczynają się schody.
Oto kawałek kodu, za pomocą, którego odczytuję dane z linii onewire:
Na pierwszy rzut oka powinno wszystko chodzić, ale :/. Zapisuje sobie odczytane dane do eepromu w atmedze i mam tam tylko 01 00 00 00 00 00 00 00.
Co jest tutaj nie tak?
Pozdrawiam.
Zacznę od tego, że przeszukałem forum, w prawdzie znalazłem interesujące mnie rzeczy lecz u mnie coś nie działa.
Zacznijmy od początku. Mam dwa ds18b20 na jednej linii w Atmega8. Chciałbym z nich odczytać numery seryjne. Tutaj zaczynają się schody.
Oto kawałek kodu, za pomocą, którego odczytuję dane z linii onewire:
//jesli jakies urzadzenie jest podlaczone to bedziemy mogli wyslac komende
if( onewire_reset())
{
//wysylami komende Search ROM
onewire_write( 0xF0);
_delay_us( 210);
for( int i = 0; i < 64; i++)
{
bit = 0;
//odczyt bitu
bit = onewire_readbit();
//_delay_us( 3);
//odczyt negacji bitu
bit |= onewire_readbit() << 1;
//dostalismy 0 i 0
//znaczy to, ze sa przynajmniej 2 rozne urzadzenia
//tzn. jedno ma 1, drugie 0
if( bit == 0)
{
//bedziemy wybierac zawsze 0
bit = 1;
}
//dostalismy 1 i 0
//wszystkie urzadzenia (moze byc jedno) maja taki sam bit (1)
else if( bit == 2)
{
//bit = 2;
}
//dostalismy 0 i 1
//wszystkie urzadzenia (moze byc jedno) maja taki sam bit (0)
else if( bit == 1)
{
//bedziemy wybierac zawsze 0
//dlatego wartosc zmiennych w pierwszym przypadku i tym (trzecim)
//jest taka sama
//bit = 1;
}
//dostalismy 1 i 1
//error
else if( bit == 3)
{
//sbi( PORTD, PD2);
send_text( tekst, 2);
bit = 0;
//uciekamy
break;
}
//wybieramy odpowiedni bit
if( bit == 1)
{
onewire_write_0();
//zapisujemy numery
tablica[i/8] |= 0 << i%8;
}
else
{
onewire_write_1();
//zapisujemy numery
tablica[i/8] |= 1 << i%8;
}
_delay_us( 30);
}
Na pierwszy rzut oka powinno wszystko chodzić, ale :/. Zapisuje sobie odczytane dane do eepromu w atmedze i mam tam tylko 01 00 00 00 00 00 00 00.
Co jest tutaj nie tak?
Pozdrawiam.