sleep a Timer1 w PIC16F914
=?iso-8859-2?Q?Micha=B3_'Aeddin'_Ogi=F1ski?= - 13-04-2007 16:45
sleep a Timer1 w PIC16F914 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
A. Grodecki - 16-04-2007 13:45
Michał 'Aeddin' Ogiński napisał(a):
> 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?
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.
--
Pozdrawiam,
A. Grodecki
"Wszystkie zwierzęta sa równe.
Ale te, które mają futerko w trzykolorowe pasy, są równiejsze."
=?iso-8859-2?Q?Micha=B3_'Aeddin'_Ogi=F1ski?= - 16-04-2007 14:45
Dnia 16.04.2007 o 14:04:11, Andrzej Ekiert 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.
>
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
Andrzej Ekiert - 16-04-2007 14:45
Michał 'Aeddin' Ogiński napisał(a):
> Mam ci ja PIC'a [...]
> Próbuję go uśpić poprzez #asm sleep #endasm, i budzić
> [...] 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. [...]
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,
--
Andrzej Ekiert
http://www.ekiert.com/microchip
Andrzej Ekiert - 16-04-2007 16:45
Michał 'Aeddin' Ogiński napisał(a):
> - o ile rozumiem, w trybie uśpienia, watchog nie resetuje tego PICa, tylko
> go budzi i program jest dalej wykonywany, zgadza się?
Zgadza się.
--
Andrzej Ekiert
http://www.ekiert.com/microchip
=?iso-8859-2?Q?Micha=B3_'Aeddin'_Ogi=F1ski?= - 17-04-2007 16:45
Dnia 16.04.2007 o 14:17:55, Michał 'Aeddin' Ogiński napisał(a):
> Właśnie się doczytałem :-(. W takim razie, spróbuję skorzystać z watchdoga
[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
A. Grodecki - 17-04-2007 17:45
Michał 'Aeddin' Ogiński napisał(a):
> Dnia 16.04.2007 o 14:17:55, Michał 'Aeddin' Ogiński napisał(a):
>
>>Właśnie się doczytałem :-(. W takim razie, spróbuję skorzystać z watchdoga
>
> [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.
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.
--
Pozdrawiam,
A. Grodecki
"Wszystkie zwierzęta sa równe.
Ale te, które mają futerko w trzykolorowe pasy, są równiejsze."
Andrzej Ekiert - 17-04-2007 17:45
Michał 'Aeddin' Ogiński napisał(a):
> 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.
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,
--
Andrzej Ekiert
http://www.ekiert.com/microchip
=?iso-8859-2?Q?Micha=B3_'Aeddin'_Ogi=F1ski?= - 18-04-2007 09:45
Dnia 17.04.2007 o 16:52:08, Andrzej Ekiert napisał(a):
> Michał 'Aeddin' Ogiński napisał(a):
>
>> 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.
>
> 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,
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
Andrzej Ekiert - 18-04-2007 11:45
Michał 'Aeddin' Ogiński napisał(a):
> [...] 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
Czemu nie, coś na pewno da się wymyślić. Np. timerem pędzonym z
wewnętrznego zegara pomierzyć sobie rzeczwisty okres Watchdoga. Da się.
> maksymalne zmiany INTOSC dla 8MHz przy temperaturach od -40 do +85 st.C to
> +/- 5%? A nieskalibrowany LFINTOSC jak popłynie?
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
http://www.ekiert.com/microchip
A. Grodecki - 18-04-2007 13:45
Andrzej Ekiert napisał(a):
>> maksymalne zmiany INTOSC dla 8MHz przy temperaturach od -40 do +85
>> st.C to
>> +/- 5%? A nieskalibrowany LFINTOSC jak popłynie?
>
>
> 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.
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.
--
Pozdrawiam,
A. Grodecki
"Wszystkie zwierzęta sa równe.
Ale te, które mają futerko w trzykolorowe pasy, są równiejsze."
=?iso-8859-2?Q?Micha=B3_'Aeddin'_Ogi=F1ski?= - 20-04-2007 09:45
Dnia 18.04.2007 o 13:06:31, A. Grodecki 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.
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
A. Grodecki - 20-04-2007 10:45
Michał 'Aeddin' Ogiński 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,
No to jeśli nie da sie podlutowac kwarcu pod timer1, PCF przyklejony do
płytki będzie dobrym rozwiązaniem. I dokładnym.
--
Pozdrawiam,
A. Grodecki
"Wszystkie zwierzęta sa równe.
Ale te, które mają futerko w trzykolorowe pasy, są równiejsze."
=?iso-8859-2?Q?Micha=B3_'Aeddin'_Ogi=F1ski?= - 20-04-2007 15:45
Dnia 20.04.2007 o 10:21:22, A. Grodecki 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.
Niestety, to ma być _tani_ układ. Nawet bardzo tani. Tylko procesor i
garstka drobnicy ; ).
--
Michał 'Aeddin' Ogiński
zanotowane.pldoc.pisz.plpdf.pisz.plkonstruktor.keep.pl