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.
źródło
Odpowiedzi:
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.
źródło
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.
źródło
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:
źródło
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
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ć”.
źródło
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.
źródło