나는 GPIO를 이해하려고 노력하고 있으며 다른 블로그 게시물을 많이 읽었으며 그것을 얻는 것에 가깝지만 여전히 몇 가지 문제로 어려움을 겪고 있다고 생각합니다.
GPIO에 대한 몇 가지 참조만이 이진 값으로 만 작동 할 수 있지만 값이 0-255 일 수 있다고 말하는 다른 게시물이 있습니다. 이것이 아날로그와 디지털 GPIO의 차이점이라고 가정합니다. 그 맞습니까? 단일 GPIO 핀이 아날로그 및 디지털 기능을 모두 수행 할 수 있습니까?
나는 GPIO를 이해하려고 노력하고 있으며 다른 블로그 게시물을 많이 읽었으며 그것을 얻는 것에 가깝지만 여전히 몇 가지 문제로 어려움을 겪고 있다고 생각합니다.
GPIO에 대한 몇 가지 참조만이 이진 값으로 만 작동 할 수 있지만 값이 0-255 일 수 있다고 말하는 다른 게시물이 있습니다. 이것이 아날로그와 디지털 GPIO의 차이점이라고 가정합니다. 그 맞습니까? 단일 GPIO 핀이 아날로그 및 디지털 기능을 모두 수행 할 수 있습니까?
답변:
GPIO 핀은 '범용 입 / 출력'핀입니다. 이것은 기본적으로 높거나 낮습니다 (전압 수준, 높음은 마이크로 컨트롤러의 공급 전압, 낮음은 보통 접지 또는 0V). 그러나 '높음'과 '낮음'의 수준은 일반적으로 공급 전압의 비율로 전압으로 제공됩니다. 따라서 일반적으로 공급 전압의 66 %를 초과하는 것은 로직 레벨 '고'로 간주됩니다. 이는 일부 저전압 장치가 레벨이 '고'로 간주되는 한 고전압 장치와 통신 할 수 있음을 의미합니다. 예를 들어 1.8–2.7V 저전력 마이크로 컨트롤러 또는 GPS 수신기는 5V 마이크로 컨트롤러와 직접 통신하는 데 문제가있을 수 있습니다. 저전압 장치가 고전압 장치를 '높은'것으로 보는 것은 전혀 높은 것으로 생각하지 않기 때문입니다. 이것은 GPIO를 입력 핀으로 사용하기위한 것입니다.
때때로 '아날로그 대 디지털'(ADC) 변환기와 같은 다른 온보드 장치에서 사용하도록 GPIO 핀을 구성하여 '아날로그'값에 SINGLE 핀을 사용할 수 있습니다. 핀은 ADC의 채널로 설정되며 이는 일반적인 GPIO 핀이 아니라 ADC의 입력으로 작동합니다. 그런 다음 ADC가 샘플을 가져 오도록 설정하고 10 비트 해상도 인 경우 0-1024와 같은 숫자에 대한 ADC의 결과 레지스터 값을 읽을 수 있습니다.
누군가 언급했듯이 GPIO 핀은 소프트웨어에서 PWM (Pulse Width Modulation) 신호의 효과를주기 위해 일반적으로 GPIO 토글을위한 저속에서 사용될 수 있습니다. 대부분의 마이크로 컨트롤러에는 GPIO 핀을 출력 핀으로 사용하도록 구성 할 수있는 전용 PWM 생성기가 있으며, 소프트웨어를 사용하여 PWM 신호를 생성하기 위해 GPIO를 제어하는 것보다 매우 빠르고 안정적입니다. PWM은 '평균'또는 '%'스타일 신호에 사용되며 희미한 조명과 같은 작업을 수행하고 모터 속도를 제어 할 수 있습니다.
GPIO 핀은 일반적으로 포트라고하는 그룹으로 배열됩니다. 소형 컨트롤러에서는 8 비트 아키텍처 일 수 있으므로 포트는 종종 많은 8 개로 그룹화되며 로직 하이 / 로우 값을 나타내는 '데이터 레지스터'를 읽어 동시에 해당 값을 모두 읽을 수 있습니다. 다리. 마찬가지로, 핀을 출력으로 설정 한 다음 8 비트를 데이터 레지스터에 쓸 수 있으며, 마이크로 컨트롤러 GPIO 컨트롤러는 레지스터의 변경된 값을 읽고 방금 설정 한 값에 따라 핀을 높이거나 낮게 잡아 당깁니다.
Raspberry Pi 및 BeagleBone과 같은 ARM Cortex A8 및 A9와 같은 최신 컨트롤러에서는 GPIO 컨트롤러와 다양한 옵션이 매우 복잡합니다. 32 비트 아키텍처를 사용하므로 대부분의 GPIO 핀은 모두 실제로 사용 가능하지는 않지만 (일부 전용 또는 사용하지 않을 수 있음) 32 핀 블록으로 배열됩니다. BeagleBone (이전에 작업 한)에는 많은 양의 핀에 대한 훌륭한 옵션이 있으며 때로는 'pin mux'도구를 사용해야 할 수도 있습니다.이 도구를 사용하면 특정 핀의 특수 모드를 설정할 수 있습니다 PWM, 펄스 캡처, 타이머 출력, 아날로그 (ADC) 채널 입력, 심지어 ARM 코어에서 사용 가능한 산업용 서브 프로세서로의 (BeagleBone 어쨌든) 매핑과 같은 독립적 인 프로세서로 간주되며 순서대로 자체 핀 매핑이 필요합니다. 외부 세계와 연결됩니다.
소프트웨어 PWM과 함께 GPIO 핀 을 사용하는 Arduino의 아날로그 출력을 참조 할 가능성이 높습니다 . GPIO는 일반적으로 세 가지 상태가 있습니다. Output High, Output Low 및 Input / High-Z (출력에 영향을 미치지 않는 높은 임피던스).
PWM은 출력을 출력 높음에서 출력 낮음 (기간)으로 빠르게 전환하여 평균값 (듀티 사이클)을 생성하여 아날로그 값처럼 보일 수 있습니다. 이진 GPIO를 50 % (또는 128) 듀티 사이클로 전환하면 출력은 여전히 이진이지만 평균은 높음과 낮음의 중간 정도입니다.
전구를 생각하십시오. 켜짐 또는 꺼짐이 표시됩니다. 그러나 실제로 초당 60 번 켜지고 꺼 지므로 깜박임이 빠르지 않습니다. 그러나 전구를 실제로 천천히 수동으로 켜고 끄면 깜박이는 것을 알 수 있습니다. 255는 100 % 켜짐을 의미하고 255 미만은 100 %의 분수입니다.
이것이 바이너리 GPIO가 255 상태 아날로그 핀처럼 작동하는 방식입니다.
GPIO 비트는 0 또는 1 일 수 있습니다. 8 개의 연속 비트로 구성된 8 비트 GPIO 포트의 범위는 00000000에서 11111111 또는 10 진수 255입니다. 이것은 "아날로그"의 개념과는 거의 관련이 없습니다.