아트메가128을 이용한 과제 하고 있는데
가변저항값을 조절하고 그걸 LCD에 값을 출력하는거거든
근데 연결 다 하고 LCD를 보면 가변저항값이 변동이 안되고 255에서 멈춰있음..
회로는 LCD의 RS RW E를 A0 01 02에 연결했고
D0~D7을 PC 0~7까지 연결 했어
가변저항은 가운데 PF0에 꽂고 나머지는 전원이랑 GND에 꽂고
회로구성에는 문제가 없는듯함
코드는 밑에 적어놓을게
#include <stdio.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/signal.h>
#define lcd_data(i) (PORTC = i) // LCD에 데이터 출력
typedef unsigned char byte;
void delay_500m()
{
byte k;
for(k=0; k<50; k++)
_delay_ms(10);
}
void lcd_iw(byte inst) // LCD 명령 출력함수
{ // 4비트 모드
PORTA = 0x04; // LCD 명령 쓰기 이네이블
lcd_data(inst & 0xf0); // 명령어 상위 4비트를 LCD에 출력
PORTA &= 0xfb; // LCD Disable
PORTA = 0x04;
lcd_data(inst<<4); // 명령어 하위 4비트를 LCD에 출력
PORTA &= 0xfb;
_delay_ms(200);
}
void lcd_dw(byte dw) // LCD 데이터 출력함수
{
PORTA = 0x05; // LCD 데이터 쓰기 이네이블
lcd_data(dw & 0xf0); // 데이터 상위 비트 LCD에 출력
PORTA &= 0xfb; // LCD Disable
PORTA = 0x05;
lcd_data(dw<<4); // 데이터 하위 4비트를 LCD에 출력
PORTA &= 0xfb;
_delay_us(400);
}
void init_lcd(void) // LCD 초기화
{
lcd_iw(0x20);
lcd_iw(0x28); // 4 비트 모드, 2 줄로 표시하며, 5x7 도트
lcd_iw(0x06); // 문자를 오른쪽으로 이동시키면서 표시
lcd_iw(0x0c); // 화면 표시, 커서 표시 안함
lcd_iw(0x01); // LCD 화면을 클리어
}
void lcd_str(char *str) // 문자열 출력함수
{
while(*str){
lcd_dw(*str++);
}
}
void htoa(byte hh)
{
lcd_dw((hh00)/100+'0');
lcd_dw((hh0)/10+'0');
lcd_dw(hh+'0');
}
// ADC 인터럽트 서비스 루틴
SIGNAL(SIG_ADC)
{
lcd_iw(0xca); // LCD 두 번째줄에 커서 위치
htoa(ADCW>>2); // 10비트 데이터 중 하위 2비트를 버리고, 8비트만 사용
// winavr/avr/include/avr/iom128.h를 보면 ADCL과 ADCW는 같은 주소
}
int main(void)
{
char *str1="<ADC Conversion>";
char *str2="< A/D 0 = >";
DDRC = 0xf0; // 포트 C의 상위 4비트를 출력으로 설정
DDRA = 0x07; // 포트 A의 하위 3비트를 출력으로 설정
init_lcd();
lcd_str(str1);
lcd_iw(0xc0);
lcd_str(str2);
// ADC 이네이블, 오른쪽 정렬, 분배비 64로 250kHz ADC 클럭 주파수 설정
ADCSRA=0x8E;
sei();
SREG |=0x80; // 전체 인터럽트 이네이블
do {
// 데이터를 오른쪽 정렬, 입력채널은 ADC0
ADMUX = 0x00;
// 단일 모드로 컨버팅 시작
ADCSRA |= 0x40;
// 500ms delay
delay_500m();
} while(1);
}
내가 짠 코드는 아니라서 문제는 없을거같은데 회로는 몇번이나 다시 봤는데도 잘못된부분이 없고 작동이 안되네 뭐가 문젠지 모르겟어...
소스는 못보겠고 255로 나오는 원인은
1. 가변저항 다리 3개가 +, -, ADC 이렇게 연결하셨을텐데 -극이 빠진 경우
2. 내부 풀업이 걸린 상태에서 가변저항이 연결 안된경우
3. 포트를 출력상태에 HI로 전달하고 이 포트를 ADC로 읽은 경우
가 있을것 같아요 . H/W문제로 생각했을때 이야기고 255가 눈으로 읽히신다니까 LCD쪽은 이상없다는 이야기겠죠
가변저항이 손잡이 부분을 내쪽으로 향했을때 왼쪽이 GND 오른쪽이 전원 가운데가 PF0에 연결하는거 아니얌??
이분 풀업 풀다운 이해 다시하셔야 할거 같아양 ㄹㅇ루다가 - dc App