Dziękuję za wyjaśnienia związane z operatorami.
Od poprzedniego posta walczę z zrozumieniem timerów i dla ćwiczeń przerobiłem przykład z tej strony, co podał Pan mirekk36
Cytuj:
Zainteresuj się po pierwsze moim blogiem a szczególnie tym artykułem:
http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html
dokładnie z trzeciej części.
Kod przerobiłem z ATmega32 na swój procesor ATmega328P (F-CPU 16MHz). Starałem się aby wcięcia były poprawne, ale nie wiem czy wszędzie takie są.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Mo i nie działa, a przynajmniej nie tak jak powinien.
Zastosowałem Timer 16 Bitowy.
Ustawienia szukałem w noce katalogowej ATmegi328P po kolei:
Strona 172 ustawienie trybu CTC:

Strona 173 ustawienie prescaler:

Strona 184 ustawienie przerwania CompareMatch i tu wystąpił problem po parunastu próbach doszedłem jak to ustawić:

i przeszukałem AVR Device Explorer

oraz

niestety nie znalazłem wzmianki w nocie ja ustawić TIMSK1 oraz jaki rejestr ustawić tak aby kompilator nie zgłaszał błędu.
Ustawiłem tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
inne ustawienia kompilator nie przyjmował dlatego opisałem na rzutach, co zmieniłem aby kompilator chciał to kompilować opisy z noty nie działały.
Czyli całe ustawienie timera TC1 16bit wygląda tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Przestawiam schemat jak to podłączyłem:

I teraz jak to działa:
Po skompilowaniu i wgraniu w do procesora mrugnie dioda LED3 (1<<PD7), a po chwili miga , co około 4s i nie blokuje się gdy nacisnę przycisk czyli działa, ale jakoś bardzo długo.
Po krótkim naciśnięciu przycisku KEY1 (1<<PB4) zmienia mi się tylko stan diody LED1, a po dłuższym nienacinaniu przycisku nie dzieje się nic, a miała zapalać się dioda LED2.
Według opisu Pana mirekk36 po krótkim naciśnięciu inicjalizujemy zmienna "flag" po naciśnięciu i odczekaniu ustalonego czasu (wait_time_s = 3;) powinna zrealizować się druga akcja czyli zaświecić LED2. I teraz nie wiem czy ta część dobrze zrozumiałem Aktualnie 2 akcja nie działa.
Mogę liczyć na doprecyzowanie, co jest nie tak z tymi moimi ustawieniami?