Witam,
Próbując uruchomić projekt 10_1Wire dostępny na płycie do książki Pana Mirka spotkałem się z problemem braku wykrycia czujnika (robiłem pętle wyświetlającą na LCD po funkcji search_sensors()).
Program uruchamiam przy użyciu zestawu uruchomieniowego ZL2AVR.
Oprócz zmian pinów tak jak było w zaleceniach (przerzuciłem wyświetlacz na PORTD, czujnik podłączam pod pin PB1), poprawki są widoczne tutaj:
Kod:
TCCR0A |= (1<<WGM01); /* tryb CTC */
TCCR0B |= (1<<CS02)|(1<<CS00); /* preskaler = 1024 */
OCR0A = 107; /* dodatkowy podział przez 108 (rej. przepełnienia) */
TIMSK0 |= (1<<OCIE0A); /* zezwolenie na przerwanie CompareMatch */
Kod:
ISR(TIMER0_COMPA_vect)
{
static uint8_t cnt=0; /* statyczna zmienna cnt do odliczania setnych ms */
if(++cnt>99) { /* gdy licznik ms > 99 (minęła 1 sekunda) */
s1_flag=1; /* ustaw flagę tyknięcia sekundy */
sekundy++; /* zwiększ licznik sekund */
if(sekundy>59) sekundy=0; /* jeśli ilość sekund > 59 - wyzeruj */
cnt=0; /* wyzeru licznik setnych ms */
}
}
Domyślnie projekt mam ustawiony na 8 MHz, ale próbowałem też na 11,0592 MHz.
Myślę że nawet jeśli źle sprawdziłem w nocie obsługę Timera, to wykrywanie czujnika i tak powinno działać, przepraszam jeśli się mylę.
Czujnik sprawdzałem na specjalnie przygotowanym wejściu do 1Wire dostępnym w moim zestawie uruchomieniowym, oraz budowałem na płytce stykowej używając rezystorów podciągających 2,2k lub 4,7k.
Wyświetlacz działa dobrze (wyświetla napisy T1, T2, pod nimi errory oraz po pewnym czasie cyfrę 0 na środku).
Ogólnie rzecz biorąc nie mam pojęcia gdzie robię błąd.
Bardzo proszę Was o pomoc i z góry przepraszam za głupie błędy, ale męczę się z tym już kilka dni.