Mikrokontrolery - czy stany wyjściowe są stałe czy multipleksowane?

14

PWM oczywiście wymaga zasobów obliczeniowych (a zatem nie można tego robić jednocześnie z innymi procesami), ale jeśli miałbym ustawić pin jako wyjście 5 V lub 0 V, to czy te stany pozostają stałe, czy też są wielokrotnie „odświeżane”, gdy mikrokontroler działa na innych procesach ?

Trudno to wyjaśnić w tekście, więc pomyślałem o analogii do mojego pytania. Wyobraź sobie, że mam szklankę w dłoni i polecono mi postawić ją na stole. Potem polecono mi usiąść na krześle.

Szkło na stole jest stanem. Czy zostawiam szklankę na stole, czy też podnoszę ją z powrotem, siadam i powtarzam bardzo szybko, aby nie zdawać sobie sprawy, że szklanka została kiedykolwiek zdjęta ze stołu?


A może prościej, czy mikrokontroler „zapomina”, jeśli chcesz, o stanach swoich pinów, chyba że wyraźnie zaprogramujesz zmianę stanu?

Mam nadzieję, że uczyniłem to tak mylącym, jak to możliwe.

sherrellbc
źródło
4
+1 Interesujące pytanie, chociaż twoje pierwsze stwierdzenie jest niepoprawne, a pomysł sprzętowego PWM jest taki, że procesor nie musi być zaangażowany przez cały czas. Ale zostaw to i jestem pewien, że ktoś dobrze wyjaśni, jak to wszystko działa.
PeterJ
Myślałem, że PWM jest taki, że procesor zmienia czas cyklu WYSOKI / NISKI. W ten sposób wydaje się, że procesor jest bezpośrednio zaangażowany - przynajmniej czas, w którym stan jest zmieniany.
sherrellbc
1
Aby zmienić cykl pracy z, powiedzmy, 10% na 20%, procesor musi być zaangażowany, ale tylko przez kilka cykli, aby zmienić rejestr. Jeśli chodzi o sprzętowy PWM, powiedzmy, że po zmianie na 20%, nawet jeśli częstotliwość PWM sprzętowego wynosi 1 MHz, nie wpływa to już na procesor.
PeterJ
Czy masz jakieś dobre linki do dokumentacji na temat działania mikrokontrolera na niższym poziomie? Nie rozumiem twoich odniesień do rejestru, więc nie mogę w pełni docenić tych odpowiedzi.
sherrellbc
1
Niezbyt mylące. Próbuj dalej!
radagast

Odpowiedzi:

16

Sposób, w jaki interpretuję pytanie, nie ma nic wspólnego z PWM, przepraszam, jeśli jestem daleko od bazy, ale wygląda na to, że użyłeś go jako przykładu.

Prawie każdy typ mikrokontrolera i urządzenia z I / O używają zatrzasku / FF do sterowania ich obwodem wyjściowym. Oznacza to, że po ustawieniu stanu pozostaje on w tym stanie. To nie jest tak, jak w pamięci DRAM, w której statystyki wyjściowe muszą być ciągle „odświeżane”, aby pozostać w ich stanie.

Na twoim przykładzie szklanym nigdy nie widziałem sprzętu, który wielokrotnie podnosiłby i odstawiał szklankę na stół. Tylko stawiałby szklankę na stole i pozostawiał ją tam, dopóki nie zażąda się zmiany stanu.

Wracając do PWM (na wypadek, gdybyś faktycznie pytał o PWM). Niezależnie od tego, czy używasz bitbang, czy Twój mikrokontroler ma dedykowany sprzęt, jak opisano inne posty, dostęp do bloku we / wy jest modyfikowany tylko wtedy, gdy wymagana jest zmiana stanu przez uruchomienie kodu lub urządzenia peryferyjnego PWM.

Kris Bahnsen
źródło
To jest dokładnie moje pytanie, chociaż wydaje się, że mikrokontrolery mają wiele cech, których nie zdaję sobie sprawy z tego, że nie rozumiem.
sherrellbc
3
Trzymaj nos w kartach danych, eksperymentuj i zadawaj pytania. Zrozumiesz to.
Kris Bahnsen
11

Mikrokontroler nie musi odświeżać wyjść. Po ustawieniu zachowują swój stan na czas nieokreślony (do momentu odłączenia zasilania). Podczas gdy w starszych procesorach zegar był wymagany do utrzymania stanu procesora, dzisiejsze procesory nazywane są w pełni statycznymi. Oznacza to, że zegar można faktycznie zatrzymać i wszystko pozostanie w obecnym stanie. To dlatego, że wszystkie rejestry (w tym I / O) są tworzone przy użyciu przerzutników.

radagast
źródło
I robimy postępy! Dziękuję ma teraz większy sens. Dziękuję Ci!
sherrellbc
10

Większość współczesnych mikrokontrolerów ma dedykowane sprzętowe urządzenie peryferyjne PWM, które zajmuje się PWM, bardzo z grubsza analogią może być:

Rdzeń procesora mówi urządzeniu peryferyjnemu: „przełączaj ten pin przy 10 kHz i 50% cyklu pracy, aż powiem inaczej”. Wtedy rdzeń może robić inne rzeczy. Może ustawić przerwanie, tzn. Poprosić urządzenie peryferyjne, aby poinformowało go, kiedy wydarzy się coś interesującego.
Możesz myśleć o rdzeniu jako o „szefie”, a urządzenia peryferyjne o specjalistycznych pracownikach. Rdzeń zarządza całym programem (odczytuje każdą instrukcję i działa na nią) i „prosi” urządzenia peryferyjne o wykonanie różnych zadań i powiadamia o tym, kiedy je wykonają.

W twojej analogii byłoby to tak, jakby inna osoba trzymała szklankę, instruujesz ją, aby położyła ją na stole, podczas gdy masz swobodę siedzenia na krześle.

Gdyby mikro nie miało dedykowanego urządzenia peryferyjnego, musiałoby to zrobić „ręcznie” (tj. Siebie) i śledzić stan pinów i czas między przełączeniami. Oznaczałoby to wiele cykli poświęconych ładnym elementom służącym do łatwej obsługi, które można łatwo obsłużyć za pomocą prostego urządzenia peryferyjnego.

Oto schemat układu popularnego 8-bitowego mikrokontrolera, PIC16F690 . Zwróć uwagę na urządzenia peryferyjne umieszczone na dole:

wprowadź opis zdjęcia tutaj

Oli Glaser
źródło
Nie zdawałem sobie sprawy, że takie elementy peryferyjne istnieją. Czy te komponenty są raczej małymi procesorami? To ma sens, że takie rzeczy istnieją.
sherrellbc
Nie procesory, nie - urządzenia peryferyjne są bardziej jak dedykowane bloki sprzętowe zaprojektowane specjalnie do wykonywania określonego zadania. Na przykład typowy mikro będzie miał na pokładzie urządzenia peryferyjne, takie jak ADC, PWM, Timery, UART, SPI itp.
Oli Glaser
Z pewnością zagłębię się w ten temat, chociaż moje rozumienie tych systemów, jeśli z pewnością jest stronnicze. Miałem wrażenie, że uC wykona całe przetwarzanie. „Instrukcje” podane peryferiom muszą być interpretowane. Przypuszczam, że w tym miejscu nie do końca rozumiem.
sherrellbc
2
Dodałem schemat typowej mikro - dobrym miejscem do rozpoczęcia czytania jest arkusz danych, z którym również się łączyłem.
Oli Glaser,
@ sherrellbc, czyli gdzie procesor i mikroprocesor są różne. W µC widać, że np. RAM, ROM, ALU, port szeregowy itp. Są zintegrowane w tym samym układzie. W komputerze wiesz, że procesor jest podłączony zewnętrznie do takich obwodów.
chwi
5

Podejmujesz pewne założenia, które nie są dokładnie poprawne. Ponadto tak, zadałeś pytanie tak mylące, jak to możliwe. Poważnie.

PWM można wykonać jednocześnie z innymi procesami. Jeśli zrobiono to w oprogramowaniu, używasz przerw czasowych do generowania sygnału PWM na pinie GPIO. Mogą być uruchamiane inne przerwania, a głównym procesem są rzeczy niezwiązane. Ponadto wiele jednostek MCU może wykonywać PWM bezpośrednio w urządzeniach peryferyjnych timera, uwalniając MCU do wykonywania innych czynności.

Jeśli chodzi o piny we / wy, są one multipleksowane. Ale masz kontrolę nad tym, jak są multipleksowane, więc to naprawdę nie jest problem.


źródło
Rozumiem twój komentarz dotyczący przerwań PWM - to ma sens. W ten sposób procesor jest zaangażowany tylko w momencie zmiany stanu wyjściowego. Chociaż mówisz, że piny I / O są zmultipleksowane - to znaczy, że jeśli zaprogramuję kontroler, aby wyprowadzał pin WYSOKI, a następnie wykonam inne niepowiązane obliczenia, wtedy pin jest chwilowo ustawiony na NISKI podczas wykonywania takich procesów?
sherrellbc
@sherrellbc Masz kontrolę nad sposobem multipleksowania pinów. Zwykle konfigurujesz je podczas uruchamiania i nie zmieniasz ich później. Nie byłby więc „chwilowo niski”, chyba że wyraźnie to powiesz.
Przepraszam, jeśli dodając przykład PWM pomyliłem czytelników. Celem tego pytania było ustalenie, czy instruowany pin we / wy ustawiony na WYSOKI jest multipleksowany przez kontroler (tzn. Ponieważ musi stale „odświeżać” styki i robić tylko jedną rzecz naraz). Teraz jednak zdaję sobie sprawę, że w mikrokontrolerach jest wiele rzeczy, których nie rozumiem (urządzenia peryferyjne). Dlatego wydaje mi się, że odpowiedź brzmi „nie”, styki wyjściowe są ustawione w stan i pozostają w tym stanie do momentu zmiany.
sherrellbc
1

Większość styków we / wy mikrokontrolerów jest wielofunkcyjna, ale nie nazwałbym ich multipleksowanymi.

Na przykład kilka styków AVR może być używanych jako wejście cyfrowe, wyjście cyfrowe lub wejście analogowe. Zwykle wybierasz żądaną funkcję w ramach inicjalizacji programu i nie zmieniasz jej później (chociaż mogę zobaczyć jakiś powód, aby zmienić wejście analogowe na cyfrowe, aby oglądać ten sam sygnał).

W przypadku wyjść cyfrowych, gdy piny zostaną ustawione na wyjścia, będą one przechowywać ostatnią wartość, jaką zapisał im procesor - nie trzeba ich okresowo „odświeżać”.

Peter Bennett
źródło
Zostałyby zmultipleksowane, gdyby procesor ustawił wartość, usunął tę wartość, wykonał inne instrukcje, a następnie zapętlił i ponownie ustawił pierwotną wartość. To jest istota mojego pytania. Jednak z powyższych odpowiedzi wynika, że ​​istnieją różne peryferia, które spełniają te funkcje, a procesor nie ma z tym nic wspólnego, dopóki nie zostanie polecone inaczej; Nie miałem o tym pojęcia. Wiele do nauki. Dziękuję za odpowiedź.
sherrellbc
1

W prostym przykładzie sprzętowego urządzenia peryferyjnego PWM mikrokontrolera 8-bitowy licznik może być podłączony do 8-bitowego komparatora cyfrowego. Mikrokontroler ładowałby liczbę do komparatora i zwiększał licznik zegarem systemowym lub jego wersją podzieloną według skali. licznik uruchomiłby się wtedy swobodnie, licząc od 0 do 255, a następnie ponownie do zera. Komparator miałby wynik wskazujący, czy wartość licznika jest większa czy mniejsza od wartości komparatora. To stałoby się wyjściem PWM. Okres PWM byłby tym, jak długo licznik musi ukończyć cykl zliczania, a cykl roboczy byłby tym, jaka część całkowitej liczby jest reprezentowana przez wartość komparatora. Kod mikrokontrolera nie miałby nic innego, jak początkowo skonfigurować sprzęt i zmienić dane komparatora, gdy pożądana jest zmiana pwm. PWM wysyła ciągły strumień impulsów PWM bez uwagi procesora.

Dan
źródło