Program piszę w WinAVR z kursu C, więc chciałem użyć dołączonego programatora AVRdude. Programator szeregowy to wtyczka do portu LPT i kilka kabli. W fazie testów układ działa, choć oprogramowanie nie jest jeszcze gotowe.
Procesor chodził na wbudowanym oscylatorze RC 8Mhz. Używając programatora wbudowanego w BascomAVR przestawiłem Fusy procka na kwarc 32Khz i kontakt z nim się urwał
Po kilku testach stwierdziłem, że lepiej będzie użyć oscylatora RC i dzielnika częstotliwości do taktowania procesora, a czas liczyć Timerem2 taktowanym kwarcem 32Khz (dedykowany dla RTC). Tym razem użyłem możliwości spowolnienia pracy procesora i redukcji zużycia energii poprzez włączenie dzielnika częstotliwości w rejestrze CLKPR. Zaraz po starcie procesor miał wpisać tam wartość 0x80 w celu uaktywnienia dzielnika, a następnie 0x07 w celu wybrania wartości podziału. Niestety znowu straciłem możliwość programowania przy pomocy AVRdude
Poprzedni przypadek mogę zrozumieć, ale tym razem nie mam pojęcia o co chodzi.
Wyczyszczenie pamięci procesora w programatorze Bascom umożliwiło ponowne zaprogramowanie z AVRdude, niestety tylko jednokrotne, a przed kolejnym należało znowu wyczyścić pamięć w Bascomie, bo inaczej AVRdude nie widział procka
Przecież w czasie resetu procesor powinien sam załadować do rejestru dzielnika odpowiednią wartość (0x00 dla braku podziału, lub 0x03 przy ustawieniu dzielenia przez 8 w FuseBitach).
Czy umie ktoś to wyjaśnić?
Sensownym rozwiązaniem problemu jest użycie wyższej częstotliwości taktowania (mniejszy dzielnik), wykorzystanie trybów oszczędzania energii oraz wybudzanie procesora przerwaniem Timera2 kilka razy na sekundę.
Czy może zna ktoś lepsze rozwiązanie tego problemu?
Przecież chciałem tylko sprawdzić, na ile mogę obniżyć pobór prądu, wyszło 1mA przy 3V, taktowaniu 63Khz i aktywnym kontrolerze LCD.