BASIC4MCU | 질문게시판 | ATMEGA128 가변저항을 이용해 값을 LCD로 받고싶습니다.
페이지 정보
작성자 납땜마스터 작성일2022-12-01 21:48 조회4,618회 댓글1건본문
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
*********************************************/
#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;
while((ADCSRA & 0x10) != 0X10);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;
}
}
이 코드를 참고하려한느데 LED는 사용하지않고
값을 LCD로 받고싶은데 어디를 고쳐야하나요?
댓글 1
조회수 4,618master님의 댓글
master 작성일
0~7 결과를 받을 것이라서 평균을 낼 필요는 없고요
ADMUX=0x41; ADCSRA=0xE7;
while(1){
_delay_ms(1); g_adc1=ADC>>7; // g_adc1=ADCW>>7; 컴파일러 버전에 따라서 변경 // 0~1023 => 0~7
PORTA=g_adc1+1; // 0~7 => 1~8
PORTA=(1<<g_adc1)-1;
}
}