이 튜토리얼에서는 FLEX 센서를 ATMEGA8 마이크로 컨트롤러와 인터페이스 할 것 입니다. ATMEGA8에서는이 작업을 수행하기 위해 10 비트 ADC (Analog to Digital Conversion) 기능을 사용할 것입니다. 이제 ATMEGA 의 ADC는 + 5V 이상의 입력을받을 수 없습니다.
플렉스 센서 란?
FLEX 센서는 그 형상이 변화 될 때의 저항을 변화시키는 변환기이다. 아래 그림과 같습니다.
이 센서는 선형성의 변화를 감지하는 데 사용됩니다. 따라서 FLEX 센서가 구부러지면 저항이 크게 구부러집니다. 이것은 아래 그림에 나와 있습니다.
이제이 저항 변화를 전압 변화로 변환하기 위해 전압 분배기 회로 를 사용할 것 입니다. 이 저항 네트워크에는 하나의 일정한 저항과 다른 가변 저항이 있습니다. 아래 그림과 같이 R1은 일정한 저항이고 R2는 저항 역할을하는 FLEX 센서입니다. 분기의 중간 점을 측정합니다. 저항 R2가 변하면 Vout도 선형으로 변합니다. 그래서 이것으로 우리는 선형성에 따라 변하는 전압을 갖게됩니다.
여기서 주목해야 할 중요한 점은 ADC 변환을 위해 컨트롤러가 취하는 입력이 50µAmp만큼 낮다는 것입니다. 저항 기반 전압 분배기의 이러한 부하 효과는 전압 분배기의 Vout에서 끌어온 전류가 오류 비율을 증가시키기 때문에 중요합니다. 지금은 부하 효과에 대해 걱정할 필요가 없습니다.
우리는 두 개의 저항을 사용하여 분배기 회로를 구성하여 25VVin의 경우 5VVout을 얻습니다. 따라서 실제 입력 전압을 얻기 위해 프로그램에서 Vout 값에 "5"를 곱하면됩니다.
필요한 구성 요소
하드웨어: ATMEGA8, 전원 공급 장치 (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), 100uF 커패시터, 100nF 커패시터 (5 개), 100KΩ 저항.
소프트웨어: Atmel studio 6.1, progisp 또는 flash magic.
회로도 및 작동 설명
ATMEGA8의 PORTD 회로 에서 데이터 포트 LCD에 연결됩니다. 16x2 LCD에는 백라이트가 있으면 전체적으로 16 개의 핀이 있고, 백라이트가 없으면 14 개의 핀이 있습니다. 백라이트 핀에 전원을 공급하거나 남겨 둘 수 있습니다. 이제 14 핀에는 8 개의 데이터 핀 (7-14 또는 D0-D7), 2 개의 전원 공급 장치 핀 (1 & 2 또는 VSS & VDD 또는 gnd & + 5v), 대비 제어를위한 3 번째 핀 (VEE- 문자의 두께 제어)이 있습니다. 표시됨) 및 3 개의 제어 핀 (RS & RW & E).
회로에서 제어 핀이 두 개뿐임을 알 수 있습니다. 대비 비트와 READ / WRITE는 자주 사용되지 않으므로 접지로 단락 될 수 있습니다. 이렇게하면 LCD가 가장 높은 명암비 및 읽기 모드가됩니다. ENABLE 및 RS 핀을 제어하여 문자와 데이터를 적절하게 전송하면됩니다.
ATmega8과의 LCD 연결은 다음과 같습니다.
PIN1 또는 VSS- 접지
PIN2 또는 VDD 또는 VCC ~ + 5v 전원
PIN3 또는 VEE to Ground (초보자에게 최상의 대비를 제공)
uC의 PB0에 PIN4 또는 RS (등록 선택)
PIN5 또는 RW (읽기 / 쓰기)를 접지 (LCD를 읽기 모드로 설정하여 사용자의 통신을 용이하게 함)
uC의 PB1에 PIN6 또는 E (활성화)
uC의 PIN7 또는 D0 ~ PD0
uC의 PIN8 또는 D1 ~ PD1
uC의 PIN9 또는 D2 ~ PD2
uC의 PIN10 또는 D3 ~ PD3
uC의 PIN11 또는 D4 ~ D4
uC의 PIN12 또는 D5 ~ PD5
uC의 PIN13 또는 D6 ~ PD6
uC의 PIN14 또는 D7 ~ PD7
회로에서 우리는 8bit 통신 (D0-D7)을 사용 하였지만 이것은 필수 사항은 아니며 4bit 통신 (D4-D7)을 사용할 수 있지만 4bit 통신 프로그램은 약간 복잡 해져서 8bit로갔습니다. 통신. (또한이 자습서 확인: AVR 마이크로 컨트롤러와 인터페이스하는 16x2 LCD)
따라서 위의 표에서 관찰 한 것만으로도 LCD의 10 핀을 컨트롤러에 연결하고 있는데 8 핀은 데이터 핀이고 2 핀은 제어용입니다.
R2 양단의 전압은 완전히 선형이 아닙니다. 시끄러울 것입니다. 노이즈를 필터링하기 위해 그림과 같이 분배기 회로의 각 저항에 커패시터를 배치합니다.
여기서 1K pot은 ADC의 정확도를 조정하는 것입니다. 이제 ATMEGA8의 ADC에 대해 알아 보겠습니다.
ATMEGA8에서는 PORTC의 4 개 채널 중 하나에 아날로그 입력을 제공 할 수 있습니다. 모든 채널이 동일하므로 어떤 채널을 선택하든 상관 없습니다. PORTC의 채널 0 또는 PIN0을 선택합니다.
ATMEGA8에서 ADC는 10 비트 분해능이므로 컨트롤러는 Vref / 2 ^ 10의 최소 변화를 감지 할 수 있으므로 기준 전압이 5V이면 5 / 2 ^ 10 = 5mV마다 디지털 출력 증분을 얻습니다.. 따라서 입력이 5mV 증가 할 때마다 디지털 출력에서 1 씩 증가합니다.
이제 다음 용어에 따라 ADC의 레지스터 를 설정 해야합니다.
1. 먼저 ADC에서 ADC 기능을 활성화해야합니다.
2. ADC 변환을위한 최대 입력 전압은 + 5V입니다. 따라서 ADC의 최대 값 또는 레퍼런스를 5V로 설정할 수 있습니다.
3. 컨트롤러에는 ADC 변환이 외부 트리거 후에 만 발생한다는 것을 의미하는 트리거 변환 기능이 있습니다. ADC가 연속 자유 실행 모드에서 실행되도록 레지스터를 설정할 필요가 없기 때문입니다.
4. 모든 ADC의 경우 변환 빈도 (아날로그 값에서 디지털 값으로)와 디지털 출력의 정확도는 반비례합니다. 따라서 디지털 출력의 정확도를 높이려면 더 낮은 주파수를 선택해야합니다. 정상적인 ADC 클럭의 경우 ADC 사전 판매를 최대 값 (2)으로 설정합니다. 1MHZ의 내부 클럭을 사용하고 있기 때문에 ADC 클럭은 (1000000/2)가됩니다.
ADC를 시작하기 위해 알아야 할 4 가지 사항은 이것뿐입니다.
위의 네 가지 기능은 모두 두 개의 레지스터로 설정됩니다.
빨간색 (ADEN): ATMEGA의 ADC 기능을 활성화하려면이 비트를 설정해야합니다.
BLUE (REFS1, REFS0):이 두 비트는 기준 전압 (또는 우리가 제공 할 최대 입력 전압)을 설정하는 데 사용됩니다. 기준 전압을 5V로하고 싶기 때문에 표에 따라 REFS0을 설정해야합니다.
노란색 (ADFR): ADC가 계속 실행되도록하려면이 비트를 설정해야합니다 (자유 실행 모드).
PINK (MUX0-MUX3):이 4 비트는 입력 채널을 알리기위한 것입니다. ADC0 또는 PIN0을 사용할 것이므로 테이블과 같이 비트를 설정할 필요가 없습니다.
BROWN (ADPS0-ADPS2):이 세 비트는 ADC의 프리 스칼라를 설정하기위한 것입니다. 2의 프리 스칼라를 사용하고 있으므로 1 비트를 설정해야합니다.
DARK GREEN (ADSC): ADC가 변환을 시작하도록이 비트를 설정합니다. 이 비트는 변환을 중지해야 할 때 프로그램에서 비활성화 할 수 있습니다.
ATmega8과 연동되는 FLEX 센서 는 아래의 C 코드에서 단계별로 설명됩니다.