가변저항의 변화에 따라 PORTA 에 연결된 LED 상태를 변화시키는 예제(소스)입니다.
PF1(ADC1) 핀에 연결된 가변 저항(5K) 값을 읽어
PORTA 에 연결된 LED에 출력
가변저항 0.6K 이하 => LED1개 ON
가변저항 1.2K 이하 => LED2개 ON
가변저항 1.8K 이하 => LED3개 ON
가변저항 2.4K 이하 => LED4개 ON
가변저항 3.0K 이하 => LED5개 ON
가변저항 3.6K 이하 => LED6개 ON
가변저항 4.2K 이하 => LED7개 ON
가변저항 4.2K 초과 => LED8개 ON
WATSIM 시뮬레이션 결과
WATSIM 에서는 ADC 기능을 추가할 예정이라
현재는 시뮬레이션이 안됩니다.
WAT-AVR128 보드에서의 실행
WAT-AVR128 과 WAT-IO&ADC 보드를 연결한 결과 입니다.
메인 소스 AVR Studio 4.18 용
/********************************************** PF3(ADC3) 핀에연결된가변저항(5K) 값을읽어 PORTA 에연결된LED에출력 가변저항0.6K 이하=> LED1개ON 가변저항1.2K 이하=> LED2개ON 가변저항1.8K 이하=> LED3개ON 가변저항2.4K 이하=> LED4개ON 가변저항3.0K 이하=> LED5개ON 가변저항3.6K 이하=> LED6개ON 가변저항4.2K 이하=> LED7개ON 가변저항4.2K 초과=> LED8개ON Main Clock : 11.0592Mhz Tools : AVR Studio 4.16 테스트보드: WAT-AVR128 보드+ WAT IO&ADC http://avr128.com *********************************************/ #include <avr/io.h> #include <avr/interrupt.h> #include <stdio.h> #include "wat128.h" // AD 값보관 UINT16 g_adc1; int main() { INT16 uiTemp; // 임시변수 // LED 출력용포트 DDRA = 0xFF; // ADC 초기화 InitADC(); while (1) { g_adc1 = 0; // 노이즈를생각해서값을16번읽어평균을낸다. for(uiTemp = 0; uiTemp<16;uiTemp++){ ADMUX=0x40 | 0x01; ADCSRA = 0xD7; g_adc1 += ADCL + (ADCH*256); } g_adc1>>=4; if( g_adc1 <128) // 1/8 회전 PORTA = 0xFE; else if( g_adc1 <256) // 2/8 회전 PORTA = 0xFC; else if( g_adc1 <384) // 3/8 회전 PORTA = 0xF8; else if( g_adc1 <512) // 4/8 회전 PORTA = 0xF0; else if( g_adc1 <640) // 5/8 회전 PORTA = 0xE0; else if( g_adc1 <768) // 6/8 회전 PORTA = 0xC0; else if( g_adc1 <896) // 7/8 회전 PORTA = 0x80; else PORTA = 0x00; } }
|
주요 부품
ATMEGA128 - 1EA LED – 8EA 가변저항 5K – 1EA POWER 5V/1A |
프로젝트 파일 다운로드
프로젝트 파일(소스 포함):
가변저항에 대해 정리하였습니다.
'AVR키트' 카테고리의 다른 글
WAT-AVR128 모듈 (0) | 2011.07.20 |
---|---|
WAT-AVR128로 키 패드(키 매트릭스) 제어 (2) | 2011.07.15 |
로터리(Rotary) 스위치 값을 FND(4401ASR)에 표시하는 예제 (0) | 2011.07.12 |
스위치 누름 카운터 Character LCD에 출력 (0) | 2011.07.06 |
Switch 4개를 각각 누를 때마다 FND 카운터 증가 (0) | 2011.05.04 |