Witam! Mam ci ja PIC'a z kawałkiem LCD (własny softwareowy driver do niego) zasilanego bateryjką. Próbuję go uśpić poprzez #asm sleep #endasm, i budzić na odświeżenie LCD (60Hz) przerwaniem z Timer'a nr 1. Oscylator jest wewnętrzny (INTCLK w CONFIG). Problem polega na niewstawaniu PIC'a z uśpienia - wyłącza się wewnętrzny oscylator i wszystko zdycha. Jakoś nie mogę połapać się w dokumentacji do niego czy da się zrobić to bez zewnętrznego zegara. Czy ktoś z Was może mi podpowiedzieć jak to zmusić do poprawnego działania?
sleep a Timer1 w PIC16F914
Apr 13, 2007
13 Replies
Michał 'Aeddin' Ogiński napisał(a):
Z całą pewnością się da. Nie używałem tego układu, choć planowałem. Musisz BARDZO dokładnie prześledzić fragmenty na temat obniżonego poboru mocy, startu oiscylatora i stanów specjalnych - nie ma rady :( Zwracaj też uwagę na teksty w ramkach, które traktuja o najczęstszych błędach popełnianych przez programistów.
Michał 'Aeddin' Ogiński napisał(a):
W trybie SLEEP, jak sam zauważyłeś, główny zegar jest wyłączony. Jeśli Timer1 jest skonfigurowany do pracy z głównym zegarem, to w trybie SLEEP nie dostaje zegara i nigdy nie wybudzi procesora.
Timer1 może budzić procesor ze SLEEP wyłącznie gdy pracuje z zewnętrznym źródłem zegara.
Pozdrawiam,
Dnia 16.04.2007 o 14:04:11, Andrzej Ekiert napisał(a): [...]
Właśnie się doczytałem :-(. W takim razie, spróbuję skorzystać z watchdoga
- o ile rozumiem, w trybie uśpienia, watchog nie resetuje tego PICa, tylko go budzi i program jest dalej wykonywany, zgadza się? PS. I dzięki za linka do forum ;)
Michał 'Aeddin' Ogiński napisał(a):
Zgadza się.
Dnia 16.04.2007 o 14:17:55, Michał 'Aeddin' Ogiński napisał(a):
[ciach] Kto czyta/pyta nie błądzi ;-) Na razie wszystko wygląda całkiem dobrze, pobór prądu wreszcie zaczął być znikomy. Pytanie tylko mam: na jaką dokładność w pomiarze czasu przy użyciu watchdoga mogę liczyć? Napędzany jest 31kHz oscylatorem, a nie udało mi się znaleźć w nocie katalogowej informacji o jego tolerancji.Michał 'Aeddin' Ogiński napisał(a):
LFINTOSC jest nieskalibrowanym oscylatorem RC. W dokumentacji do PIC16F9xx faktycznie nie ma podanej jego tolerancji, ale można znaleźć tę daną w dokumentacji innych procesorów z "technologią NanoWatt": np. przy pic12f683 podają MIN=15kHz, TYP=31kHz, MAX=45kHz. Czyli dokładność uzyskasz raczej niewielką.
Pozdrawiam,
Michał 'Aeddin' Ogiński napisał(a):
Bardzo zgrubną. Główne oscylatory RC u Microchipa, trymowane, dają błąd na poziomie procenta w najbardziej udanych pod tym wzgledem procesorach. Oscylator wdoga nie jest ani trymowany ani stabilny. Ale do odswieżania LCD nie ma to żadnego znaczenia, bo i 30Hz i 200Hz będzie dobrze a krótkoterminowa stabilnośc będziesz miał wystarczająco dobra, żeby składowej stałej na LCD nie było.
Dnia 17.04.2007 o 16:52:08, Andrzej Ekiert napisał(a):
Niedobrze... potrzebuję odliczyć 4 godziny a z takim rozrzutem to mogę mieć różnie :-(. A może jest jakiś sprytny sposób na jego synchronizację z, powiedzmy, HFINTOSC? Tak się zastanawiam, czy zanim procesor pójdzie spać, nie dałoby się sprawdzić czy obydwa oscylatory równo 'cykają' i na tej podstawie wprowadzić korektę do odliczania czasu - sądzę, że dałoby się w ten sposób wyeliminować rozrzut między różnymi PICami. Tylko co z płynięciem częstotliwości ze zmianami temperatury? Dokumentacja mówi, że maksymalne zmiany INTOSC dla 8MHz przy temperaturach od -40 do +85 st.C to
+/- 5%? A nieskalibrowany LFINTOSC jak popłynie? Dziękuję Wam obydwom A. za pomoc :)Michał 'Aeddin' Ogiński napisał(a):
Czemu nie, coś na pewno da się wymyślić. Np. timerem pędzonym z wewnętrznego zegara pomierzyć sobie rzeczwisty okres Watchdoga. Da się.
Bardziej ;-) Może nawet dużo bardziej.
Jeśli już masz LCD na pokładzie, to zastanów się czy na pewno nie stać cię na zegarkowy oscylator podłączony do Timera1. T1OSC bierze tylko
3.4uA @ 5V, a da ci precyzyjny pomiar czasu.Pozdrawiam,
Andrzej Ekiert napisał(a):
On chyba juz ma projekt gotowy... Ale to jedyne rozsądne rozwiązanie jesli ma to być RTC, zresztą po to właśnie ta opcja została stworzona... Albo PCF-a i2c na zewnątrz, który będzie wyzwalał procesor co jakiś czas do pomiaru RTC. Prądowo wyjdzie bardziej oszczędnie i tylko jeden pin "zużyty". A odświeżanie na wdogu.
Dnia 18.04.2007 o 13:06:31, A. Grodecki napisał(a): [...]
Masz rację - projekt niestety jest "na przedwczoraj" i przesiadając się z AVRów nie doczytałem wszystkiego w dokumentacji PICa :(. A jeśli chodzi o RTC, to nie potrzebuję specjalnej dokładności. Co 15 minut zapalam segment na LCD i tak aż do 4 godzin. Potem już mi zegar nie jest potrzebny, aż do wyzerowania tego czasu. Pozdrawiam,
Michał 'Aeddin' Ogiński napisał(a):
No to jeśli nie da sie podlutowac kwarcu pod timer1, PCF przyklejony do płytki będzie dobrym rozwiązaniem. I dokładnym.
Dnia 20.04.2007 o 10:21:22, A. Grodecki napisał(a):
[...]Niestety, to ma być _tani_ układ. Nawet bardzo tani. Tylko procesor i garstka drobnicy ; ).
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required