sleep a Timer1 w PIC16F914

Apr 13, 2007 13 Replies

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?


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