Witajcie!
Chcę oprogramować przerwanie Int0 w ATMedze88 tak, aby przy wykryciu braku zasilania głównego - zmianie stanu PD2 z niskiego na wysoki procesor przechodził w tryb PowerDown natomiast gdy na PD2 pojawi się stan niski procesor wybudzał się.
Wykrywanie obecności zasilania zrobiłem następująco:
POWER_OK podłączone do PD2, w trakcie normalnej pracy gdy napięcie jest wyższe niż napięcie ustalone przez diodę zenera, tranzystor typu nmos zwiera PD2 do masy. W przypadku zaniku zasilania głównego zasilanie ma tylko procesor z baterii, a zewnętrzny rezystor pullup wymusza na wejściu stan wysoki...
Napisałem taki oto kod w C (AVR Studio) - proszę o przejrzenie i sprawdzenie:
Inicjalizacja przy uruchamianiu procesora:
Obsługa przerwania:
Pytania:
1 - Czy lepiej w tym przypadku wyzwalać przerwanie (do usypiania) zmianą stanu czy zboczem rosnącym?
2 - Czy prawidłowo robię usypianie i budzenie?
3 - Co byście zmienili poprawili...?
Chcę oprogramować przerwanie Int0 w ATMedze88 tak, aby przy wykryciu braku zasilania głównego - zmianie stanu PD2 z niskiego na wysoki procesor przechodził w tryb PowerDown natomiast gdy na PD2 pojawi się stan niski procesor wybudzał się.
Wykrywanie obecności zasilania zrobiłem następująco:
POWER_OK podłączone do PD2, w trakcie normalnej pracy gdy napięcie jest wyższe niż napięcie ustalone przez diodę zenera, tranzystor typu nmos zwiera PD2 do masy. W przypadku zaniku zasilania głównego zasilanie ma tylko procesor z baterii, a zewnętrzny rezystor pullup wymusza na wejściu stan wysoki...
Napisałem taki oto kod w C (AVR Studio) - proszę o przejrzenie i sprawdzenie:
Inicjalizacja przy uruchamianiu procesora:
Kod: C / C++
Obsługa przerwania:
Kod: C / C++
Pytania:
1 - Czy lepiej w tym przypadku wyzwalać przerwanie (do usypiania) zmianą stanu czy zboczem rosnącym?
2 - Czy prawidłowo robię usypianie i budzenie?
3 - Co byście zmienili poprawili...?
