mario2015 napisał(a):
Po pierwsze, skąd wziąłeś te 5 ms w pętli głównej? Przecież jak w pętli głównej dopiszesz cokolwiek, to czas się wydłuży.
Po drugie co to jest "OCR0A = F_CPU / 1024 / 100; //ok 100 Hz"? Gdzie w kodzie masz zmienną lub makro F_CPU? Bierzesz to z makefile?
Zapisz to tak:" OCR0A=16000000/1024/100" albo wylicz i zapisz jako zmienna.
Mogę się mylić ale do OCR0A jak ja przypisuję, to wyliczoną wartość albo przypisuję ją do jakiegoś makra albo do jakiejś zmiennej, zależy co chcę uzyskać.
Raczej się mylisz, kolego. Program jest wprost z poradnika i te 5 ms w pętli głównej ma tam być. Mimo to, próbowałem zakomentować zawartość pętli - nadal na kanale 2 jest 10 Hz.
Nie muszę nigdzie definiować zmiennej F_CPU, bo się tego nie robi. Wartość ta pobierana jest z ustawień procesora w Eclipse (i tam znajduje się właściwy wpis, właśnie 16000000). Gdy do rejestru OCR0A wpiszę wartość 156 (czyli dokładnie 16000000UL / 1024UL / 100UL), jest to samo: 10 Hz na kanale 2.
Spójrz jak to wygląda na analizatorze u Mirka (wklejam screen z analizatora i programu):
![Obrazek](https://obrazkiforum.atnel.pl/thumb/18960/38a7598ac80e3d6c25d0b18ec723e653.png)
------------------------ [ Dodano po: 36 minutach ]Gdy zmienię zawartość obsługi przerwania jak niżej (XOR), wówczas uzyskuję poprawne dla takiego zapisu wartości. Stan PB6 zmienia się z częstotliwością 100 Hz, naprzemiennie: co 10 ms mamy stan niski i wysoki.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Zrzut ekranu z analizatora:
![Obrazek](https://obrazkiforum.atnel.pl/thumb/18960/65c7e3cde38bb4ffff183e36c8542b0b.png)