- 필요한 구성 요소 및 하드웨어 설정
- 아날로그 전압을 읽기위한 Nuvoton N76E003 회로 다이어그램
- N76E003의 GPIO 및 아날로그 핀에 대한 정보
- N76E003의 ADC 주변 장치에 대한 정보
- ADC 용 N76E003 프로그래밍
- 코드 및 출력 깜박임
아날로그-디지털 변환기 (ADC)는 마이크로 컨트롤러에서 가장 많이 사용되는 하드웨어 기능입니다. 아날로그 전압을 받아 디지털 값으로 변환합니다. 마이크로 컨트롤러는 디지털 장치이고 이진 숫자 1과 0으로 작동하기 때문에 아날로그 데이터를 직접 처리 할 수 없습니다. 따라서 ADC는 아날로그 전압을 받아 마이크로 컨트롤러가 이해할 수있는 동등한 디지털 값으로 변환하는 데 사용됩니다. ADC (Analog to Digital Converter)에 대한 자세한 내용은 링크 된 문서를 확인하세요.
MQ 가스 센서, ADXL335 가속도계 센서 등과 같이 아날로그 출력을 제공하는 전자 장치에는 다양한 센서가 있습니다. 따라서 아날로그-디지털 변환기를 사용하여 이러한 센서를 마이크로 컨트롤러 장치와 인터페이스 할 수 있습니다. 다른 마이크로 컨트롤러와 함께 ADC를 사용하기위한 아래 나열된 다른 자습서를 확인할 수도 있습니다.
- Arduino Uno에서 ADC를 사용하는 방법?
- ADC0808과 8051 마이크로 컨트롤러의 인터페이스
- PIC 마이크로 컨트롤러의 ADC 모듈 사용
- Raspberry Pi ADC 튜토리얼
- MSP430G2에서 ADC를 사용하는 방법-아날로그 전압 측정
- STM32F103C8에서 ADC를 사용하는 방법
이 튜토리얼에서는 N76E003 마이크로 컨트롤러 장치 의 내장 ADC 주변 장치를 사용 하므로이 애플리케이션에 필요한 하드웨어 설정의 종류를 평가 해 보겠습니다.
필요한 구성 요소 및 하드웨어 설정
N76E003 에서 ADC 를 사용하기 위해 전위차계를 사용하는 전압 분배기를 사용하고 0V-5.0V 범위의 전압을 읽습니다. 전압은 16x2 문자 LCD에 표시되며, LCD 및 N76E003을 처음 사용하는 경우 Nuvoton N76E003과 LCD를 인터페이스하는 방법을 확인할 수 있습니다. 따라서이 프로젝트에 필요한 주요 구성 요소는 16x2 Character LCD입니다. 이 프로젝트에서는 아래 구성 요소를 사용합니다.
- 캐릭터 LCD 16x2
- 1k 저항
- 50k 전위차계 또는 트림 포트
- 몇 가지 버그 와이어
- 몇 개의 연결 전선
- 브레드 보드
말할 것도없이, 위의 구성 요소 외에 N76E003 마이크로 컨트롤러 기반 개발 보드와 Nu-Link 프로그래머가 필요 합니다. LCD가 프로그래머가 제공 할 수없는 충분한 전류를 끌어 오기 때문에 추가 5V 전원 공급 장치도 필요합니다.
아날로그 전압을 읽기위한 Nuvoton N76E003 회로 다이어그램
회로도에서 볼 수 있듯이 포트 P0은 LCD 관련 연결에 사용됩니다. 맨 왼쪽에는 프로그래밍 인터페이스 연결이 표시됩니다. 전위차계는 전압 분배기 역할을하며 아날로그 입력 0 (AN0)에 의해 감지됩니다.
N76E003의 GPIO 및 아날로그 핀에 대한 정보
아래 이미지는 N76E003AT20 마이크로 컨트롤러 장치에서 사용 가능한 GPIO 핀을 보여줍니다. 단, 20 개의 핀 중 LCD 관련 연결에는 Port P0 (P0.0, P0.1, P0.2, P0.4, P0.5, P0.6, P0.7)을 사용합니다. 아날로그 핀은 빨간색으로 강조 표시됩니다.
보시다시피 Port P0에는 최대 아날로그 핀이 있지만 LCD 관련 통신에 사용됩니다. 따라서 P3.0 및 P1.7은 아날로그 입력 핀 AIN1 및 AIN0으로 사용할 수 있습니다. 이 프로젝트는 하나의 아날로그 핀만 필요하므로이 프로젝트에는 아날로그 입력 채널 0 인 P1.7이 사용됩니다.
N76E003의 ADC 주변 장치에 대한 정보
N76E003은 12 비트 SAR ADC를 제공합니다. ADC의 분해능이 매우 좋은 것은 N76E003의 매우 좋은 기능입니다. ADC에는 단일 엔드 모드에서 8 채널 입력 이 있습니다. ADC 인터페이스는 매우 간단하고 간단합니다.
첫 번째 단계는 ADC 채널 입력 을 선택하는 것 입니다. N76E003 마이크로 컨트롤러에서 사용할 수있는 8 채널 입력이 있습니다. ADC 입력 또는 I / O 핀을 선택한 후 모든 핀을 코드의 방향으로 설정해야합니다. 아날로그 입력에 사용되는 모든 핀은 마이크로 컨트롤러의 입력 핀이므로 모든 핀을 입력 전용 (고 임피던스) 모드로 설정해야합니다. 이들은 PxM1 및 PxM2 레지스터를 사용하여 설정할 수 있습니다. 이 두 레지스터는 x가 포트 번호를 나타내는 I / O 모드를 설정합니다 (예: 포트 P1.0 레지스터는 P1M1 및 P1M2, P3.0의 경우 P3M1 및 P3M2 등). 구성은 다음과 같습니다. 아래 이미지에서 볼 수 있습니다.
ADC 구성은 두 개의 레지스터 ADCCON0 및 ADCCON1에 의해 수행됩니다. ADCCON0 레지스터 설명은 다음과 같습니다.
비트 0에서 비트 3까지 레지스터의 처음 4 비트는 ADC 채널 선택을 설정하는 데 사용됩니다. AIN0 채널을 사용하고 있으므로이 4 비트에 대해 선택은 0000이됩니다.
6 번째와 7 번째 비트는 중요한 것들입니다. ADCS 는 ADC 변환을 시작하기 위해 1을 설정해야하며 ADCF 는 성공적인 ADC 변환에 대한 정보를 제공합니다. ADC 변환을 시작하려면 펌웨어에서 0으로 설정해야합니다. 다음 레지스터는 ADCCON1-
ADCCON1 레지스터는 주로 외부 소스에 의해 트리거되는 ADC 변환에 사용됩니다. 그러나 일반적인 폴링 관련 작업의 경우 ADC 회로를 켜기 위해 첫 번째 비트 ADCEN 을 1로 설정해야합니다.
다음으로 ADC 채널의 입력은 디지털 입력을 분리 할 수있는 AINDIDS 레지스터에서 제어해야합니다.
n은 채널 비트를 나타냅니다 (예를 들어 AIN0 채널은 AINDIDS 레지스터 의 첫 번째 비트 P17DIDS 를 사용하여 제어해야합니다). 디지털 입력을 활성화해야합니다. 그렇지 않으면 0으로 읽습니다. 모두 ADC의 기본 설정입니다. 이제 ADCF를 지우고 ADCS를 설정하면 ADC 변환을 시작할 수 있습니다. 변환 된 값은 아래 레지스터에서 사용할 수 있습니다.
과
두 레지스터는 모두 8 비트입니다. ADC가 12 비트 데이터를 제공하므로 ADCRH는 전체 (8 비트)로 사용되고 ADCRL은 절반 (4 비트)으로 사용됩니다.
ADC 용 N76E003 프로그래밍
특정 모듈에 대한 코딩은 매번 바쁜 작업이므로 N76E003과 인터페이스하는 16x2 문자 LCD에 매우 유용한 간단하면서도 강력한 LCD 라이브러리가 제공됩니다. 16x2 LCD 라이브러리는 아래 링크에서 다운로드 할 수있는 Github 저장소에서 사용할 수 있습니다.
Nuvoton N76E003 용 16x2 LCD 라이브러리 다운로드
라이브러리 (복제 또는 다운로드)를 보유 하고 Keil N76E003 프로젝트 에 lcd.c 및 LCD.h 파일을 포함 하여 원하는 애플리케이션 또는 프로젝트에 16x2 LCD를 쉽게 통합 할 수 있습니다. 라이브러리는 다음과 같은 유용한 디스플레이 관련 기능을 제공합니다.
- LCD를 초기화합니다.
- LCD에 명령을 보냅니다.
- LCD에 씁니다.
- LCD에 문자열 (16 자)을 입력합니다.
- 16 진수 값을 전송하여 문자를 인쇄합니다.
- 16 자 이상의 긴 메시지를 스크롤합니다.
- LCD에 직접 정수를 인쇄합니다.
ADC 코딩은 간단합니다. 설정 기능에서 Enable_ADC_AIN0; AIN0 입력을 위한 ADC 설정에 사용됩니다. 이것은 파일에 정의되어 있습니다.
#define Enable_ADC_AIN0 ADCCON0 & = 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS- = SET_BIT0; ADCCON1- = SET_BIT0 // P17
따라서 위의 행은 핀을 입력으로 설정하고 ADCCON0, ADCCON1 레지스터 및 AINDIDS 레지스터도 구성합니다. 아래 함수는 ADCRH 및 ADCRL 레지스터 에서 ADC를 읽지 만 12 비트 분해능을 사용 합니다.
unsigned int ADC_read (void) { 레지스터 unsigned int adc_value = 0x0000; clr_ADCF; set_ADCS; while (ADCF == 0); adc_value = ADCRH; adc_value << = 4; adc_value-= ADCRL; 반환 adc_value; }
비트는 왼쪽으로 4 번 이동 한 다음 데이터 변수에 추가됩니다. 주요 기능에서 ADC는 데이터를 읽고 디스플레이에 직접 인쇄합니다. 그러나 전압은 비트 값으로 나눈 전압 간의 관계 또는 비율을 사용하여 변환됩니다.
12 비트 ADC는 5.0V 입력에서 4095 비트를 제공합니다. 따라서 5.0V / 4095 = 0.0012210012210012V 나누기
따라서 1 자리의 비트 변경은 0.001V (대략)의 변경과 동일합니다. 이것은 아래 표시된 주요 기능에서 수행됩니다.
void main (void) { int adc_data; 설정(); lcd_com (0x01); while (1) { lcd_com (0x01); lcd_com (0x80); lcd_puts ("ADC 데이터:"); adc_data = ADC_read (); lcd_print_number (adc_data); 전압 = adc_data * bit_to_voltage_ratio; sprintf (str_voltage, "Volt: % 0.2fV", 전압); lcd_com (0xC0); lcd_puts (str_voltage); Timer0_Delay1ms (500); } }
데이터는 비트 값에서 전압으로 변환되고 sprintf 함수를 사용하여 출력이 문자열로 변환되어 LCD로 전송됩니다.
코드 및 출력 깜박임
코드는 경고 0 개와 오류 0 개를 반환했으며 Keil의 기본 깜박임 방법을 사용하여 깜박였습니다. 아래 깜박임 메시지를 볼 수 있습니다. Keil 또는 Nuvoton을 처음 사용하는 경우 Nuvoton 마이크로 컨트롤러 시작하기를 확인하여 기본 사항과 코드 업로드 방법을 이해하십시오.
재 구축이 시작되었습니다. 프로젝트: timer STARTUP.A51을 조립하는 대상 'Target 1'재 구축 … main.c 컴파일 중… lcd.c 컴파일 중… Delay.c 컴파일 중… 연결 중… 프로그램 크기: data = 101.3 xdata = 0 code = 4162 ". \ Objects \ timer"… ". \ Objects \ timer" 에서 16 진수 파일을 만드는 중 입니다.-0 오류, 0 경고. 빌드 시간 경과: 00:00:02 "G: \\ n76E003 \\ Display \\ Objects \\ timer"로드 플래시 지우기가 완료되었습니다. 플래시 쓰기 완료: 4162 바이트가 프로그래밍되었습니다. 플래시 확인 완료: 4162 바이트가 확인되었습니다. 플래시로드가 11:56:04에 완료되었습니다.
아래 이미지는 DC 어댑터를 사용하여 전원에 연결된 하드웨어를 보여 주며 디스플레이는 오른쪽의 전위차계로 설정된 전압 출력을 보여줍니다.
전위차계를 돌리면 ADC 핀에 제공되는 전압도 변경되고 LCD에 표시된 ADC 값과 아날로그 전압을 확인할 수 있습니다. 이 자습서의 전체 작업 데모를 보려면 아래 비디오를 확인하십시오.
기사를 즐겁게 읽고 유용한 것을 배웠기를 바랍니다. 질문이 있으면 아래 댓글 섹션에 남겨 주시거나 포럼을 사용하여 다른 기술 질문을 게시 할 수 있습니다.