Panowie, zgłupiałem już. Nie raz robiłem urządzenia z usypianiem gdzie wszystko pięknie działało, a tu trafiło mi się coś czego nie mogę logicznie wytłumaczyć. Pewnie to jakiś zator myślowy po sporej przerwie bez programowania, ale do rzeczy...
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Po wykonaniu
asm("sleep"); program powinien się zatrzymać i czekać na sygnał LOW na INT0. Jak widać program czeka przed uśpieniem aż klawisz będzie rozwarty (pin podciągnięty wewnętrznie do +5V). Po wybudzaniu zanim uruchomione zostaną bloki programu badany jest czas wciśnięcia klawisza (około 0,5s) aby to wybudzenie było świadome, a nie przypadkowe czy wywołane jakimś silnym zakłóceniem. Jeśli sygnał wybudzania był zbyt krótki program ponownie wykonuje sekwencje powyższego fragmentu kodu czyli usypia się. I tyle teorii. bo w praktyce dioda miga z częstotliwością około 128kHz czyli tak naprawdę procek nie idzie spać, albo błędnie skonfigurowałem przerwania INT0:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Same przerwania włączone
sei() na początku programu, bo korzystam z prawie wszystkich timerów.
Robiłem też dodatkowe opóźnienia 50ms tuż po puszczeniu klawisza (wiadomo- jakieś drgania odbicia mogą być) to pojawiały się na LED szpilki co ...50ms.
Co przeoczyłem...??