Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Mikrokontrolery PIC10F200/202/204/206 posiadają timer licznika zegarowego (ang. Watchdog Timer), który można wyłączyć tylko poprzez bit konfiguracyjny WDTE. Timer ten jest taktowany swoim własnym oscylatorem RC dla zwiększonej niezawodności. Jeśli używany jest wewnętrzny oscylator RC (tryb INTRC), to występuje opóźnienie 18 ms tylko przy włączeniu zasilania na końcówce VDD. Mając ten timer w mikrokontrolerze, większość aplikacji nie wymaga zewnętrznych obwodów resetu.
Tryb uśpienia został zaprojektowany w celu oferowania trybu wyłączenia o bardzo niskim poborze prądu. Użytkownik może wybudzić swój mikrokontroler z uśpienia poprzez zmianę poziomu logicznego na końcówkach wejściowych, poprzez wybudzenie zmianą w komparatorze lub poprzez zakończenie okresu zliczania w timerze licznika zegarowego.
Słowo konfiguracyjne mikrokontrolerów PIC10F200/202/204/206(1)(2) | ||||||||||||
bit nr | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Nazwa | — | — | — | — | — | — | — | MCLRE | CP | WDTE | — | — |
Własności | R/P-1 | R/P-1 | R/P-1 | R/P-1 | R/P-1 | R/P-1 | R/P-1 | R/P-1 | R/P-1 | R/P-1 | R/P-1 | R/P-1 |
Legenda: |
bity 11...5 Niezaimplementowane, dają odczyt 0 bit
MCLRE: Wybór funkcji końcówki GP3/MCLR bit 3 CP:
bit zabezpieczania kodu bit 2 WDTE: bit włączania timera licznika zegarowego |
Uwagi: | 1. | Zobacz do "Dodatek: programowanie PIC10F2xx", gdzie opisano zasady programowania bitów konfiguracyjnych oraz sposoby dostępu do nich w trakcie programowania. Słowo konfiguracyjne nie jest dostępne dla użytkownika z poziomu programu. |
2. | Tryb INTRC jest jedynym trybem oscylatora oferowanym przez mikrokontrolery PIC10F200/202/204/206. |
Układy PIC10F200/202/204/206 są oferowane tylko z trybem oscylatora wewnętrznego.
Wewnętrzny oscylator dostarcza zegara systemowego o częstotliwości znamionowej 4 MHz (zobacz do rozdziału "Parametry elektryczne", gdzie opisany jest wpływ napięcia zasilania oraz temperatury na pracę mikrokontrolera). Dodatkowo instrukcja kalibracyjna jest zaprogramowana w ostatnim słowie pamięci. Komórka ta jest zawsze zabezpieczona przed przekodowaniem bez względu na ustawienia zabezpieczeń kodu. W komórce znajduje się instrukcja MOVLW xx, gdzie xx jest wartością kalibracyjną i która zostaje wykonana jako wektor Resetu. Spowoduje to załadowanie rejestru W wartością kalibracyjną podczas resetu, a następnie licznik programu PC przewinie się do programu użytkownika pod adresem 0x000. W tym miejscu użytkownik ma opcję zapisu tej wartości do rejestru OSCCAL (05h) lub zignorowania jej. Rejestr OSCAL po zapisie do niego tej wartości kalibracyjnej dostroi wewnętrzny oscylator do częstotliwości 4 MHz w celu usunięcia odchyłek produkcyjnych od znamionowej częstotliwości oscylatora.
Uwaga: | Wymazanie mikrokontrolera wymaże również zaprogramowaną wcześniej wewnętrzną wartość kalibracyjną. Wartość kalibracyjną należy odczytać przed wymazaniem układu, aby można ją było później zaprogramować ponownie. |
Niektóre rejestry nie są w żaden sposób resetowane, ich stan jest nieznany przy POR i niezmieniony przy wszystkich innych resetach. Większość pozostałych rejestrów zostaje ustawiona na "stan poresetowy" (ang. Reset state) przy resecie POR, MCLR , WDT lub wybudzeniu przy zmianie stanu końcówki w czasie normalnej pracy. Nie są one zmieniane w czasie uśpienia przez reset od WDT lub od MCLR, ponieważ resety te są traktowane jako wznowienie normalnej pracy. Wyjątkiem są bity TO, PD, GPWUF i CWUF. Zostają one wyzerowane lub ustawione w różnych sytuacjach resetu. Bity te są używane w programie do określenia natury resetu. W poniższych tabelkach przedstawiono pełny opis stanu poresetowego wszystkich rejestrów.
Rejestr | Adres | POR | Pozostałe resety |
W | — | qqqq qqqu (1) |
qqqq qqqu (1) |
INDF | 00h | xxxx xxxx |
uuuu uuuu |
TMR0 | 01h | xxxx xxxx |
uuuu uuuu |
PCL | 02h | 1111 1111 |
1111 1111 |
STATUS | 03h | 00-1 1xxx |
q00q quuu (2) |
STATUS(3) | 03h | 00-1 1xxx |
qq0q quuu (2) |
FSR | 04h | 111x xxxx |
111u uuuu |
OSCCAL | 05h | 1111 1110 |
uuuu uuuu |
GPIO | 06h | ---- xxxx |
---- uuuu |
CMCON(3) | 07h | 1111 1111 |
uuuu uuuu |
OPTION | — | 1111 1111 |
1111 1111 |
TRISGPIO | — | ---- 1111 |
---- 1111 |
STATUS (03h) | PCL (02h) | |
POR | 00-1 1xxx |
1111 1111 |
MCLR podczas pracy | 000u uuuu |
1111 1111 |
MCLR podczas uśpienia | 0001 0uuu |
1111 1111 |
Reset od WDT podczas pracy | 0000 uuuu |
1111 1111 |
Reset od WDT podczas uśpienia | 0000 0uuu |
1111 1111 |
Wybudzenie z uśpienia przy zmianie stanu końcówki | 1001 0uuu |
1111 1111 |
Wybudzenie z uśpienia przy zmianie na wyjściu komparatora | 0101 0uuu |
1111 1111 |
Legenda: |
Gdy bit konfiguracyjny MCLRE jest niezaprogramowany (pozostawiony w stanie '1'), to zostaje włączona zewnętrzna funkcja MCLR. Po zaprogramowaniu funkcja MCLR zostaje połączona z wewnętrznym napięciem VDD, a końcówka staje się końcówką we/wy, zobacz na poniższy rysunek.
Mikrokontrolery PIC10F200/202/204/206 zawierają wbudowany obwód resetowania przy włączaniu zasilania (ang. Power-on Reset, POR), który resetuje układ przy uruchomieniu. Obwód ten utrzymuje mikrokontroler w stanie resetu, aż napięcie zasilania VDD osiągnie wystarczająco wysoki poziom do poprawnej pracy. Aby skorzystać z wewnętrznego POR, zaprogramuj końcówkę GP3/MCLR/VPP pin jako MCLR i podłącz ją poprzez opornik do VDD, lub zaprogramuj tę końcówkę jako GP3. Wewnętrzny, słaby opornik podciągający jest zaimplementowany przez tranzystor. Eliminuje to potrzebę stosowania zewnętrznych elementów RC, które są zwykle potrzebne do stworzenia obwodu POR. Maksymalny czas narastania VDD jest określony w rozdziale "Parametry elektryczne".
Gdy układ mikrokontrolera wychodzi ze stanu resetu, rozpoczyna normalną pracę. Wtedy warunki robocze (napięcie zasilające, częstotliwość oscylatora zegarowego, temperatura...) muszą spełniać określone wymagania, aby zapewnić poprawne działanie układu. Jeśli warunki te nie są spełnione, to układ musi być utrzymywany w stanie resetu aż do ich spełnienia.
Uproszczony schemat wbudowanego w układ obwodu Power-on Reset jest pokazany na poniższym rysunku.
Obwód POR oraz obwód timera resetu układu (ang. Device Reset Timer, DRT, zobacz do następnego podrozdziału) są ze sobą blisko powiązane. Przy włączeniu zasilania przerzutnik zatrzaskowy zostaje ustawiony, a DRT jest resetowany. Timer DRT rozpoczyna zliczanie, gdy tylko wykryje stan wysoki na MCLR. Po okresie zliczania, wynoszącym typowo 18 ms, timer zresetuje przerzutnik zatrzaskowy Resetu i w ten sposób zakończy wewnętrzny sygnał resetu układu.
Poniższy rysunek przedstawia przykład, gdzie sygnał MCLR jest utrzymywany w stanie niskim.
Sekwencja włączania zasilania przy
MCLR w stanie niskim
Napięcie zasilające VDD ma czas na wzrost i ustabilizowanie się,
przed zmianą stanu MCLR z
niskiego na wysoki. Układ faktycznie wyjdzie z Resetu po upływie TDRT ms od
przejścia MCLR w stan wysoki.
Na poniższym rysunku wykorzystywana jest wbudowana funkcja Power-on Reset (MCLR i VDD są połączone ze sobą lub końcówka ta jest zaprogramowana jako GP3).
Sekwencja włączania zasilania przy
MCLR połączonym z VDD:
szybki czas narastania VDD
Napięcie zasilania VDD jest stabilne zanim timer uruchamiania zakończy zliczanie i nie ma problemu z otrzymaniem właściwego resetu. Jednakże kolejny rysunek przedstawia sytuację problemową, w której zasilanie VDD rośnie zbyt wolno.
Sekwencja włączania zasilania przy
MCLR połączonym z VDD:
wolny czas narastania VDD
Uwaga: | Gdy napięcie zasilania VDD rośnie wolno, to okres TDRT zakończy się na długo przed osiągnięciem przez VDD swojej ostatecznej wartości. W tym przykładzie układ zresetuje się prawidłowo tylko, gdy V1 ≥ VDD min. |
Czas pomiędzy chwilą, w której DRT wykryje wysoki stan MCLR, a faktycznym osiągnięciem przez MCLR i VDD ich pełnej wartości jest zbyt długi. W takiej sytuacji, gdy timer uruchamiania zakończy swój okres zliczania a VDD nie osiągnie wartości VDD(min), układ może nie funkcjonować prawidłowo. W takich przypadkach zalecamy użycie zewnętrznych obwodów RC w celu osiągnięcia dłuższych czasów POR.
Opóźnienia czasu resetu różnią się pomiędzy układami z powodu VDD, temperatury i odchyłek produkcyjnych. Szczegóły znajdziesz w rozdziale "Wykresy i tabele".
Źródłami resetu są POR, MCLR, zakończenie okresu zliczania WDT oraz wybudzenie z uśpienia przy zmianie poziomu logicznego końcówki.
Oscylator | Reset POR | Następne resety |
INTOSC | 18 ms (typowo) | 10 µs (typowo) |
Reset od timera licznika zegarowego wyzeruje bit TO (STATUS[4]).
Moduł WDT można całkowicie wyłączyć przez zaprogramowanie na '0' bitu konfiguracyjnego WDTE (zobacz do podrozdziału "Bity konfiguracyjne"). Zobacz również do Dodatku: "Programowanie PIC10F200/202/204/206", aby dowiedzieć się, jak uzyskać dostęp do słowa konfiguracyjnego.
WDT posiada znamionowy okres zliczania równy 18 ms (bez preskalera). Jeśli jest potrzebny dłuższy okres zliczania, to do WDT można przypisać preskaler ze współczynnikiem podziału do 1:128 (pod kontrolą oprogramowania) przez wpis do rejestru OPTION. W ten sposób można zrealizować okres zliczania maksymalnie do 2,3 sekundy. Okresy te zmieniają się z temperaturą, VDD oraz zmianami tolerancji w trakcie produkcji. W najgorszych warunkach (VDD = min., temperatura = max., maksymalny podział w preskalerze WDT) może upłynąć kilka sekund zanim nastąpi koniec okresu zliczania WDT.
Instrukcja CLRWDT zeruje WDT oraz preskaler, jeśli został przydzielony do WDT, co zapobiega zakończeniu okresu zliczania i wygenerowaniu resetu mikrokontrolera. Instrukcja SLEEP również resetuje WDT wraz z preskalerem, jeśli został przydzielony. Daje to maksymalny czas uśpienia przed wybudzeniem z powodu resetu wywołanego przez WDT.
Schemat blokowy timera licznika zegarowego
Adres | Nazwa | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | Wartość przy resecie przy włączeniu |
Wartość przy pozostałych resetach |
N/A | OPTION | GPWU | GPPU | T0CS | T0SE | PSA | PS2 | PS1 | PS0 | 1111 1111 |
1111 1111 |
Legenda | Zacieniowane bity nie są używane przez timer WDT |
Bity TO, PD, GPWUF i CWUF w rejestrze stanu STATUS można testować w celu określenia źródła powstania resetu: włączenie zasilania, końcówka MCLR, timer licznika zegarowego (WDT), wybudzenie przy zmianie wyjścia komparatora lub wybudzenie przy zmianie stanu końcówki. Poniższa tabela pokazuje stan tych bitów po resecie.
CWUF | GPWUF | TO | PD | Powód resetu |
0 | 0 | 0 | 0 | Wybudzenie z uśpienia przez WDT. |
0 | 0 | 0 | u | Zakończenie zliczania WDT (bez uśpienia). |
0 | 0 | 1 | 0 | Wybudzenie z uśpienia końcówką MCLR. |
0 | 0 | 1 | 1 | Włączenie zasilania. |
0 | 0 | u | u | Końcówka MCLR nie w czasie uśpienia. |
0 | 1 | 1 | 0 | Wybudzenie z uśpienia przy zmianie stanu końcówki. |
1 | 0 | 1 | 0 | Wybudzenie z uśpienia przy zmianie stanu wyjścia komparatora. |
Legenda: | ||
Uwagi: | Bity TO, PD, GPWUF i CWUF zachowują swój stan (u) aż do wystąpienia resetu. Ujemny impuls na wejściu MCLR nie zmienia ich stanu. |
Do resetowania mikrokontrolerów PIC10F200/202/204/206 przy spadku napięcia zasilania można zbudować zewnętrzne obwody zabezpieczające pokazane na poniższych rysunkach.
Obwód nr 1
|
||||||
Obwód nr 2
|
||||||
Obwód nr 3
|
Tryb wyłączenia zasilania (ang. Power-down mode) jest uruchamiany przez wykonanie instrukcji SLEEP. Jeśli jest aktywny timer licznika zegarowego, to zostaje on wyzerowany, lecz ciągle pracuje, zostaje ustawiony bit TO (STATUS[4]), bit PD (STATUS[3]) jest zerowany i wyłączany jest driver oscylatora. Porty we/wy zachowują stan, który posiadały przed wykonaniem instrukcji SLEEP (stan wysoki, niski lub stan wysokiej impedancji).
Uwaga: | Reset wygenerowany przez timer licznika zegarowego WDT nie wymusza stanu niskiego na końcówce MCLR. |
Mikrokontroler może wybudzić się ze stanu uśpienia, gdy wystąpi jedno z poniższych zdarzeń:
Te zdarzenia powodują reset mikrokontrolera. Bity TO, PD, GPWUF i CWUF można wykorzystać do znalezienia przyczyny resetu. Bit TO jest zerowany, jeśli timer licznika zegarowego doliczył do końca swojego okresu i spowodował wybudzenie. Bit PD, ustawiany przy włączeniu zasilania, jest zerowany po wywołaniu instrukcji SLEEP. Bit GPWUF oznacza zmianę stanu podczas uśpienia na końcówkach GP0, GP1 lub GP3 (od ostatniej operacji na porcie GP). Bit CWUF oznacza zmianę stanu podczas uśpienia wyjścia komparatora.
Ostrzeżenie: | Tuż przed wejściem w uśpienie, odczytaj końcówki wejściowe. W czasie uśpienia wybudzenie następuje, gdy wartości na końcówkach zmieniają się od stanu ich ostatniego odczytu. Jeśli wystąpi wybudzenie przy zmianie stanu końcówek, a końcówki te nie zostaną odczytane przed ponownym wejściem w stan uśpienia, to wybudzenie będzie natychmiastowe, nawet jeśli żadna końcówka nie zmieni stanu w czasie uśpienia. |
Uwaga: | Timer licznika zegarowego zawsze jest zerowany, gdy mikrokontroler wybudza się ze stanu uśpienia bez względu na źródło wybudzenia. |
Pierwsze 64 komórki oraz ostatnią komórkę (wektor resetu) zawsze można odczytać, bez względu na stan bitu ochrony kodu.
Używaj tylko dolnych czterech bitów tych komórek ID, a 8 górnych bitów zawsze programuj jako zera.
Mikrokontroler przechodzi w tryb programowania/weryfikacji przez ustawienie niskiego poziomu na końcówkach GP1 i GP0, podczas gdy napięcie na końcówce MCLR rośnie z VIL do VIHH (zobacz do specyfikacji programowania). GP1 staje się linią zegara programowania, a GP0 linią danych programowania. W tym trybie obie linie GP1 i GP0 posiadają wejścia Schmitta. Po resecie do mikrokontrolera przesyłany jest 6-bitowy rozkaz. Zależnie od tego rozkazu (Load = ładowanie, Read = odczyt) zostają następnie przesłane 16-bitowe dane do lub z mikrokontrolera. Szczegóły znajdziesz w dodatku. Typowe połączenie przy programowaniu szeregowym w układzie pokazuje poniższy rysunek.
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.