목차
1. 배경
2. 보드 구성 및 소스코드
3. 실습결과
1. 배경
ADC는 아날로그 신호를 디지털로 변환해 주는 장치입니다.
현실에서는 다 아날로그 신호로 되어 있죠.
우리가 사용할 디지털 신호로 바꾸는 방법은 굉장히 중요합니다.
저는 가지고 있는 LCM1602 IIC 쉴드 장치를 가지고 실습해보려고 합니다.
출처: https://www.devicemart.co.kr/goods/view?no=1279486
사진에 보이는 것처럼 버튼들이 있는데,
버튼들의 Digital 변환값을 확인할 것입니다.
위의 이론상의 계산값과 실습을 통한 결과값이 일치하는지 확인해보려고 합니다.
2. 보드 구성 및 소스코드
기본적으로, Board Select 선택 시 불필요한 기능이 포함되어
코드가 길어지고 보기 불편합니다.
따라서 MCU 방법으로 직접 세팅하겠습니다.
기본 상태에서 코딩이 필요한 부분만을 언급할 예정이며,
자세한 것은 첨부된 파일을 참고하시면 됩니다.
- 보드 세팅
- ADC 세팅
Polling 모드가 아닌 Interrupt 모드가 빠르기 때문에
저는 Interrupt 방식을 채택할 것입니다.
- Main
- ADC Callback
/* USER CODE BEGIN 4 */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
if(hadc -> Instance == ADC1)
{
adc_value = HAL_ADC_GetValue(&hadc1);
memset(uart_buf, 0, sizeof(uart_buf));
sprintf(uart_buf,"ADC Value : %d \r\n", adc_value);
// sprintf(uart_buf,"ADC_Value\n%d", adc_value);
HAL_UART_Transmit(&huart3, (uint8_t *)uart_buf, sizeof(uart_buf), 1000);
// HAL_ADC_Start_IT(&hadc1);
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)uart_buf, 1);
}
}
/* USER CODE END 4 */
인터럽트 함수를 찾는 법은 이전 글 참고 부탁드립니다.
memset 함수는 메모리를 원하는 사이즈로 조절하는 함수입니다.
sprintf 함수는 문자열을 생성해 버퍼에 저장하는 함수입니다.
HAL_ADC_Start_DMA 함수는 DMA 전송이 완료되면 인터럽트를 활성화하는 함수입니다.
- PV
3. 실습결과
좌측부터 Up, Down, Left, Right, Select 버튼을 눌렀을 때의 값입니다.
이론상의 값과 비슷한 것을 확인할 수 있습니다.
'Embedded' 카테고리의 다른 글
ARM Cortex M4 core - (6) PWM을 활용한 주파수 변형 (악보연주) (0) | 2024.09.04 |
---|---|
ARM Cortex M4 core - (5) RTC 알람시계 (0) | 2024.09.04 |
ARM Cortex M4 core - (3) UART 키보드로 LED제어 (0) | 2024.09.04 |
ARM Cortex M4 core - (2) EXTI로 FND 제어 (0) | 2024.09.04 |
ARM Cortex M4 core - (1) GPIO로 LED 동작 (0) | 2024.09.04 |