쉬발 분명 저렇게 회로 연결 완벽하게 다 햇고!! 어??


가변저항 돌리면 그 값을 ADC로 읽어서 LCD에 출력하면 되는데 어?? 쉬바 왜 값이 255로 나오고 안나오는거지??







#include <stdio.h>

#define F_CPU 16000000UL

#include <avr/interrupt.h>

#include <avr/io.h>

#include <util/delay.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   =      >";

    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);

}







이럭게 코드까지 다 넣어서 햇는데 외 안되는거죠?? 이거 안되서 암걸릴거같은데 억덕게 해야댐;;