Próbuję zrozumieć GPIO i przeczytałem kilka różnych postów na blogu i myślę, że jestem bliski zdobycia go, ale wciąż mam problemy z kilkoma rzeczami.
Widziałem kilka odniesień do tego, że GPIO może pracować tylko z wartościami binarnymi, ale inne posty mówią, że wartość może wynosić od 0-255. Zakładam, że taka jest różnica między analogowym a cyfrowym GPIO. Czy to jest poprawne? Czy to możliwe, że pojedynczy pin GPIO może działać zarówno analogowo, jak i cyfrowo?
Odpowiedzi:
Pin GPIO jest pinem „wejścia / wyjścia ogólnego zastosowania”. Jest to domyślnie tylko wysokie lub niskie (poziomy napięcia, wysokie to napięcie zasilania mikrokontrolera, niskie zwykle jest uziemione lub 0V). Ale poziomy „wysoki” i „niski” są zwykle podawane jako napięcia jako proporcja napięcia zasilania. Zatem wszystko, co zwykle przekracza 66% napięcia zasilania, jest uważane za poziom logiczny „wysoki”, co oznacza, że niektóre urządzenia o niższym napięciu mogą komunikować się z urządzeniami o wysokim napięciu, o ile poziomy mieszczą się w granicach tego, co uważa się za „wysokie”. Na przykład mikrokontroler lub odbiornik GPS o niskiej mocy 1,8–2,7 V lub odbiornik GPS będą miały problemy z komunikacją bezpośrednio z mikrokontrolerem 5 V, ponieważ to, co urządzenie niskiego napięcia postrzega jako „wysokie”, urządzenie o wyższym napięciu w ogóle nie uzna, że jest wysokie. Służy do używania GPIO jako wejścia,
Czasami możesz użyć SINGLE pin do wartości „analogowych”, konfigurując pin GPIO do użycia przez inne urządzenia pokładowe, takie jak konwerter „analogowo-cyfrowy” (ADC). Pin jest ustawiony na kanał w ADC i działa teraz jako wejście do ADC, a nie normalny pin GPIO. Następnie można ustawić ADC do pobierania próbki i odczytać wartość rejestru wyników ADC dla liczb takich jak 0-1024, jeśli jest to rozdzielczość 10-bitowa.
Jak ktoś wspomniał, pinu GPIO można użyć w oprogramowaniu, aby uzyskać efekt sygnału modulacji szerokości impulsu (PWM), zwykle przy niskich prędkościach do przełączania GPIO. Większość mikrokontrolerów ma dedykowane generatory PWM, które można skonfigurować tak, aby wykorzystywały pin GPIO jako pin wyjściowy, a te są bardzo szybkie i znacznie bardziej stabilne niż używanie oprogramowania do sterowania GPIO do generowania sygnału PWM. PWM są używane do sygnałów w stylu „przeciętnym” lub „%” i pozwalają robić rzeczy takie jak przyciemnione światła i kontrolować prędkość silnika.
Piny GPIO są zwykle ułożone w grupy, zwane Porty. W małych kontrolerach mogą to być architektury 8-bitowe, więc porty są często pogrupowane w partie po 8, a ich wartości można odczytać jednocześnie, czytając „rejestr danych” reprezentujący logiczne wysokie / niskie wartości tych szpilki. Podobnie, możesz ustawić piny jako wyjścia, a następnie zapisać 8-bitów w rejestrze danych, a kontroler GPIO mikrokontrolerów odczyta zmienione wartości rejestru i podnieśli pin wysoko lub pociągnie pin niski w zależności od ustawionej wartości.
W nowszych kontrolerach, takich jak ARM Cortex A8 i A9, jak w Raspberry Pi i BeagleBone, ich kontrolery GPIO i różne opcje są bardzo skomplikowane. Korzystają z architektury 32-bitowej, więc większość pinów GPIO jest ułożonych w 32-pinowe bloki, nawet jeśli nie wszystkie są w rzeczywistości użyteczne (niektóre mogą być dedykowane lub nieaktywne). BeagleBone (nad którym pracowałem wcześniej) ma kilka naprawdę niesamowitych opcji ze względu na dużą liczbę pinów, a czasami będziesz musiał użyć narzędzia „pin mux”, które pozwala ustawić specjalne tryby niektórych pinów dla rzeczy takich jak PWM, przechwytywanie impulsów, wyjścia timera, wejścia kanałów analogowych (ADC), a nawet mapowanie (w każdym razie na BeagleBone) do podprocesorów przemysłowych dostępnych na rdzeniu ARM, ale są uważane za niezależne procesory i potrzebują własnego mapowania pinów w celu być połączonym ze światem zewnętrznym.
źródło
Najprawdopodobniej masz na myśli wyjście analogowe Arduino, które często wykorzystuje pin GPIO z oprogramowaniem PWM . GPIO zazwyczaj mają trzy stany. Output High, Output Low i Input / High-Z (High Impedance, gdzie nie wpływa na sygnał wyjściowy).
PWM szybko przełącza wyjście z wyjścia wysokiego na wyjście niskie (okres), aby utworzyć średnią (cykl pracy), pozwalając na coś, co wygląda jak wartość analogowa. Przełączając binarne GPIO przy cyklu pracy 50% (lub 128), sygnał wyjściowy jest nadal binarny, ale średnio osiąga połowę między wartością wysoką a niską.
Pomyśl o żarówce. Widzisz to Włączone lub Wyłączone. Ale tak naprawdę włącza się i wyłącza 60 razy na sekundę, tak szybko, że nie zauważysz, że miga naprawdę szybko. Ale włączaj i wyłączaj żarówkę ręcznie bardzo powoli, a zauważysz, że miga. Przez 255 oznacza to 100%, a mniej niż 255 to ułamek 100%.
W ten sposób binarne GPIO może zachowywać się jak analogowy pin stanu 255.
źródło
Bit GPIO może mieć wartość 0 lub 1. 8-bitowy port GPIO, złożony z 8 kolejnych bitów, może mieć zakres od 00000000 do 11111111 lub 255 miejsc po przecinku. Ma to niewiele wspólnego z koncepcją „analogu”
źródło