Czy mikrokontrolery mogą działać na dowolnie niskich częstotliwościach zegara?

103

Arkusz danych dla ATTiny13A, na przykład, podaje częstotliwość minimalną 0 MHz. Czy to oznacza, że ​​zegar można uruchomić na dowolnej arbitralnie niskiej częstotliwości bez żadnych skutków ubocznych? Zakładam, że pobiera niższy prąd przy niższych częstotliwościach zegara? Czy 0 MHz oznacza, że ​​możesz całkowicie zatrzymać zegar i dopóki zasilanie będzie nadal podawane, zapamięta swój stan na czas nieokreślony?

endolit
źródło
34
Chciałbym dodać, to doskonałe pytanie. Większość starszych pracowników EE nie poświęca czasu na czytanie i myślenie o arkuszach danych, które są dla ciebie uzupełnieniem lub zniewagą dla nich, chciałbym implikować jedno i drugie.
Kortuk
Nie jestem do końca pewien, czy wewnętrzny oscylator RC jest wyłączony, chyba że wyraźnie to poinstruujesz (poprzez różne opcje oszczędzania energii). Nie jestem pewien, do czego służy, ale przynajmniej dla EEPROM i prawdopodobnie ADC.
jippie
1
@jippie, co masz na myśli RC? Na przykład ATMegaX ma wewnętrzny RC dla zegara systemowego (zwykle 8 MHz, z opcjonalnym preskalerem div 8), ma oscylator kontrolny. Zegar systemowy jest wybrany bezpiecznikiem i prawdopodobnie jest wyłączony podczas korzystania z zegara zewnętrznego. Inne, jak powiedziałeś, mogą być wyłączone przez tryby oszczędzania energii, ale wątpię, czy zatrzymają się przed zegarem systemowym.
Diego C Nascimento,

Odpowiedzi:

73

Tak. Jeśli arkusz danych mówi „praca w pełni statyczna”, można go taktować z dowolną prędkością, nawet 0 Hz. „Dynamiczny” układ musi mieć zegar z określoną szybkością, inaczej straci swój stan.

todbot
źródło
1
czy masz przykład mikro, który to pozwala?
MrEvil,
4
Mikrokontrolery, które zawierają wbudowaną pamięć flash, mogą określać minimalną (i maksymalną) szybkość zegara pamięci flash podczas pisania do pamięci flash. Jednak w przypadku czytania z pamięci flash nie ma to zastosowania.
Steve Melnikoff,
8
MrEvil, seria Atmel AVR ATtiny wspomniana w pytaniu jest w pełni statyczna, ponieważ uważam, że większość układów Atmel AVR. I myślę, że większość mikrokontrolerów PIC firmy Microchip.
todbot
7
Właściwie myślę, że ADC w ATTiny13A nie działa na niskich częstotliwościach, może z powodu rozpadu kondensatora próbkowania? „Domyślnie kolejne obwody aproksymacyjne wymagają częstotliwości zegara wejściowego od 50 kHz do 200 kHz, aby uzyskać maksymalną rozdzielczość. ... Moduł ADC zawiera preskaler, który generuje akceptowalną częstotliwość zegara ADC z dowolnej częstotliwości procesora powyżej 100 kHz.”
endolith,
8
endolith - Zgadzam się, ADC zwykle nie działają na niskich częstotliwościach. O ile wiem, wszystko inne na praktycznie wszystkich współczesnych mikrokontrolerach działa dobrze aż do „0 Hz”, czyli „pauzy na czas nieokreślony”. W szczególności wiele mikrokontrolerów ma tryb „niskiego poboru mocy”, który zatrzymuje wszystkie zegary, dopóki coś - zazwyczaj osoba naciskająca przycisk - nie obudzi go i wznowi od miejsca, w którym zostało przerwane. en.wikipedia.org/wiki/Static_logic_(digital_logic)
davidcary
23

Podaję inną odpowiedź, tylko dlatego, że na ostatnie pytanie, na które wcześniej nie udzielono odpowiedzi.

Todbot jest całkowicie poprawny. Będzie również pobierał niższą moc przy niższych prędkościach. Oznacza to również, że jeśli podasz jego zegar z innego procesora, na przykład możesz przestać go dostarczać w dowolnym momencie, a następnie rozpocząć taktowanie później, o ile nie wybierzesz prędkości większej niż maksymalna, nic ci nie będzie.

Chipy Mam rząd wielkości zmiany między oscylatorem 32768Hz a 1MHz. Miałem aplikacje, w których nie potrzebowałem szybkości, potrzebowałem tylko innego małego faceta, który zająłby się podstawową obsługą danych.

Mam nadzieję że to pomoże.

Kortuk
źródło
9
Zawsze chciałem uruchomić linię zegara mikrokontrolera za pomocą przycisku. Niech człowiek będzie zegarem. :) Mówiąc poważnie, naprawdę fajną rzeczą w tych statycznych konstrukcjach jest to, że pobór mocy jest liniowy wraz z prędkością zegara: spowolnij zegar i zużyj mniej energii. To może być naprawdę przydatne.
todbot
5
Tak, ale lubię zauważyć, że zużycie energii jest funkcją liniową z przesunięciem, nawet bez zegara nadal zużywają energię, szczególnie przy napędzanych wyjściach. Właśnie dostaliśmy nowych stażystów w mojej pracy, zasugeruję użycie przycisku i zobaczę, co się stanie.
Kortuk
13
@todbot Fajny pomysł. :-) Ale pamiętaj, aby ogłosić przycisk.
starblue
4
Spróbuj z „grind crank” (jak w żargonie : jargon.net/jargonfile/g/grindcrank.html ) :-)) (i tak, wiele lat temu zbudowałem jeden krok po kroku, kiedy korzystałem z Turbo Pascal w szkole :-)
Axeman
@todbot Nie jest to zbyt dalekie i trudne, jeśli możesz zaakceptować szorstką abstrakcję. Istnieje kilka przykładów osób korzystających z takich gadżetów w celu nauczenia działania komputerów. Myke Predko ma naprawdę dobrą książkę, a nawet zawiera płytki drukowane (choć nie do projektu komputerowego): amazon.com/Digital-Electronics-Guidebook-Michael-Predko/dp/…
Lou
17

Większość współczesnych konstrukcji mikrokontrolerów będzie działać z dowolnym wzorcem na wejściu zegara, pod warunkiem, że żaden wysoki impuls nie jest poniżej określonej minimalnej długości, żaden niski impuls nie jest poniżej określonej minimalnej długości i nie ma niskiej-wysokiej-niskiej lub wysokiej-niskiej-wysokiej para impulsów jest poniżej określonej długości. Zasadniczo dzieje się tak, że po wykonaniu przez układ wszystkich działań związanych z konkretnym zboczem zegara, układ znajdzie się w stanie, w którym nie robi nic, tylko czeka na następne zbocze zegara. Jeśli następna krawędź zegara nie pojawi się przez dziesięć dni, wtedy (chyba że chip ma jakiś zewnętrzny watchdog), chip będzie w takim samym stanie, jak gdyby krawędź przybyła w momencie, gdy chip był na nią gotowy.

Należy zauważyć, że na ogół wstrzymanie zegara na mikrokontrolerze znacznie zmniejszy pobór prądu, ale nie tak bardzo, jak przy użyciu funkcji „uśpienia”. Zużycie prądu przez większość mikrokontrolerów w trybie „run” można dość dobrze oszacować jako stały prąd spoczynkowy powiększony o pewną ilość prądu na cykl na sekundę (co może być bardziej „naturalnie” wyrażone jako ładunek na cykl). Na przykład układ może mieć prąd spoczynkowy 10uA plus prąd 0,1mA / MHz (100pC / cykl). Uruchomienie takiego układu przy 10 MHz dałoby prąd o wartości 1,01 mA. Uruchomienie go z częstotliwością 1 MHz dałoby 0,11 mA. Uruchomienie go przy 100 kHz dałoby 0,02 mA. Praca z częstotliwością 1 Hz woudl daje 0,0100001 mA. Z drugiej strony układ może oferować prąd uśpienia 1uA. Ogólnie, przejście w tryb uśpienia całkowicie wyłączy obszary mikroukładu, które nie będą robić nic pożytecznego, gdy mikroprocesor śpi, unikając w ten sposób prądu upływowego, jaki mogą mieć takie obszary. W niektórych przypadkach spowoduje to również zmniejszenie napięcia w obszarach takich jak pliki rejestrów do poziomu, w którym pliki rejestrów mogą przechowywać ich zawartość, ale nie uzyskują do nich dostępu bardzo szybko (ponieważ w ogóle nie będą one dostępne, prędkość dostępu nie ma znaczenia) .

Niektóre starsze mikroprocesory, mikrokontrolery i inne urządzenia miały maksymalne czasy taktowania i / lub czas taktowania. Takie procesory korzystały z dynamicznej logiki, aby oszczędzać obwody. Jako przykład logiki dynamicznej rozważmy rejestr przesuwny: typowy bit rejestru statycznego wymaga wartości dwóch tranzystorów, aby utrzymać wartość, podczas gdy bit rejestru dynamicznego przechowuje wartość na bramce tranzystora odczytu. Dwufazowy taktowany dynamiczny rejestr przesuwny może być zrealizowany w NMOS przy użyciu czterech NFET i dwóch rezystorów na bit. Statyczny rejestr przesuwny wymagałby ośmiu NFET i czterech rezystorów na bit. Dynamiczne podejścia logiczne nie są dziś tak powszechne. W latach siedemdziesiątych pojemność bramki była znaczna i nie można się jej było pozbyć. Nie było zatem żadnego konkretnego powodu, aby z tego nie skorzystać. Dzisiaj, pojemność bramki jest na ogół znacznie niższa, a producenci układów aktywnie starają się ją jeszcze bardziej zmniejszyć. Niezawodne działanie dynamicznej logiki często wymagałoby celowej pracy w celu zwiększenia pojemności bramki. W większości przypadków dodatkowy obszar układu potrzebny do zwiększenia pojemności może być równie skutecznie wykorzystany do dodania większej liczby tranzystorów, aby uczynić pojemność niepotrzebną.

supercat
źródło
Wspominając o NMOS i IIRC, istnieje związek między popularnością logiki dynamicznej a komplementarnym MOS (CMOS), który nie jest jeszcze dostępny.
JPC
@jpc: Przebadałem schematy różnych układów NMOS - niektóre bardzo szczegółowo, w tym Atari 2600 TIA, które są prawdziwym dziełem geniuszu - ludzie wciąż znajdują nowe rzeczy z tym związane trzy dekady później. Myślę, że jedną zaletą NMOS w porównaniu z CMOS z punktu widzenia wygody projektowania jest to, że „strzelanie” (przypadkowa jednoczesna aktywacja napędu wysokiego i niskiego poziomu) nie jest czynnikiem, chociaż wyznaję ciekawość, dlaczego CMOS nie pracuje przy wystarczająco niskim napięciu, aby punkt przejścia na wejściu pozostawił sterowniki wyłączone po stronie wysokiej i niskiej, zamiast aktywować oba.
supercat,
@jpc: W NMOS możliwe jest zaimplementowanie bramki XOR z dwoma tranzystorami i dwoma rezystorami, jeśli wejścia są wystarczająco „silne”. Nawet jeśli trzeba dodać falowniki do obu wejść, brama XOR z czterema tranzystorami i czterema rezystorami byłaby lepsza niż wiele innych podejść. Jednak nigdy nie widziałem takiego podejścia, chociaż zaprojektowałem podobny obwód z wykorzystaniem BJT's około 1978 roku (koncepcja projektowa działałaby lepiej z MOSFETAMI, ale nic o nich nie wiedziałam).
supercat
2
+1 - Wydaje mi się, że prawdziwym klejnotem, o którym tu wspomniałeś, jest to, że niższe częstotliwości zegara oszczędzają energię, ale nie tak bardzo, jak tryby uśpienia, które zostały zaprojektowane specjalnie w celu optymalizacji oszczędności energii. Mój żołądek mówi mi, że zaoszczędzisz więcej energii, uruchamiając szybki oscylator w połączeniu z rozsądnym użyciem trybu uśpienia, przez ciągłe działanie z naprawdę niską częstotliwością.
Joel B
@JelB: To zależy od wielu czynników. Na wielu procesorach występuje opóźnienie między włączeniem szybkiego zegara a faktycznym użyciem go; w tym czasie marnuje się energię. Jeśli trzeba się obudzić, np. 100x / sekundę, może być lepiej, aby biegać powoli w sposób ciągły, niż ciągłe uruchamianie i zatrzymywanie. Z drugiej strony, jeśli zamierza się uruchamiać i zatrzymywać szybki zegar, dobrze jest zminimalizować ilość czasu, który biegnie do tego stopnia, że ​​można to zrobić bez marnowania dodatkowej energii. Na przykład ...
supercat
12

Tak, możesz całkowicie zatrzymać zegar i uruchomić go później bez żadnych konsekwencji. Możesz nawet wymienić zegar na przycisk i przejść program dosłownie krok po kroku (częstotliwość: około 0,1 Hz).

Moc jest prawie liniowa z częstotliwością: przy 10 MHz mikrokontroler zużywa 10 razy więcej mocy niż przy 1 MHz. Nie oznacza to jednak, że przy 0 Hz zużycie jest całkowicie zerowe. Zawsze występuje rozpraszanie statyczne, ale jest to bardzo niskie, zwykle 1 uA lub mniej.

PS: zauważ, że ADC ma minimalną częstotliwość roboczą. Jeśli częstotliwość jest zbyt niska, kondensator, na którym mierzone jest napięcie, rozładuje się zbyt mocno, a twój pomiar będzie błędny.

flup
źródło
Naciśnij przycisk? Co z ogłaszaniem?
Peter Mortensen
1
Wymagane jest ogłoszenie.
Vovanium