회원가입 ID/PW 찾기
AA

안녕하세요.
제가 AVR 정말 초보라 모르는게 너무많아 질문 올립니다.
ATmega128사용, 컴파일러는 CodevisionAVR을 사용하고 있습니다.

제가 CCD센서를 이용하여 광세기 변화에 따른 전압값을 ADC를 해야하는데,
우선, ADC의 실습을 위해 가변저항을 변화시키며 나온 전압값의 변화를
 LCD창 또는 "serial com"이라는 통신 프로그램 화면으로 출력하려고 하는데 어떤 원인으로 안되는지 전혀 모르겠습니다.ㅜㅜ
하기 소스는 제가 책보고 나름 레지스터 값을 설정해놓은 것입니다.
ADC를 꼭 해야하는데, 제가 너무 초보라서 이렇게 질문올립니다.
LCD 창 및  "serial com" 화면으로 출력되기 위해 어떻게 해야되나요?

답변 꼭 부탁드리며, 감사합니다..

------------------소스----------------------------------------------------------------------------

#include <mega128.h>                     //ATmega128라이브러리 선언                                       
#include <delay.h>                             //delay라이브러리 선언
#include <stdio.h>

unsigned int data;                       //AVR에서 컴퓨터로 전송시키기 위해 선언

#define ADC_VREF_TYPE 0x40               //외부의 AVcc단자로 입력된 전압 사용

 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)           //ADC_input=아날로그 입력 채널
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);               //아날로그 입력 채널과 외부의 AVcc단자 사용을 OR시켜 ADMUX레지스터에 대입

// Delay needed for the stabilization of the ADC input voltage
delay_us(10);

// Start the AD conversion
ADCSRA|=0x40;                                           //AD 컨버터 변환 시작 시점

// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);                             //AD 컨버터 변환이 종료될 때까지 polling방식으로 계속 대기
ADCSRA|=0x10;                                           //ADCSRA를 0x10으로 초기화
return ADCW;                                             //ADCL ADCH값을 16비트로 합친 ADCW 레지스터 선언

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void Init_Serial(void)
{
UCSR0B = 0x18;              //포트 송신부와 수신부가 동작하도록 설정
UCSR0C = 0x16;              //8비트 데이터 전송
UBRR0H = 0x06;
UBRR0L = 0x67;              //9600 bps
}

void main(void)
{

PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Port E initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTE=0x00;
DDRE=0x00;

// Port F initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTF=0x00;
DDRF=0x00;

// Port G initialization
// Func4=In Func3=In Func2=In Func1=In Func0=In
// State4=T State3=T State2=T State1=T State0=T
PORTG=0x00;
DDRG=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: Timer 3 Stopped
// Mode: Normal top=FFFFh
// Noise Canceler: Off
// Input Capture on Falling Edge
// OC3A output: Discon.
// OC3B output: Discon.
// OC3C output: Discon.
// Timer 3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;

// External Interrupt(s) initialization
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
ETIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE & 0xff;                           //define0x40 설정 되어있으므로 ADMUX=0x40과 같음
ADCSRA=0x84;                                          //AD컨버터 동작 허용, 16분주비 사용

Init_Serial();

while (1)
      {
      ADCSRA &=0x7F;
      ADMUX=0x40;
      data=read_adc(0);                              //입력 채널 ADC0를 사용하여 출력 값을 data에 넣음
      delay_ms(10);
     
      printf("%d\r\n",data);                         //data값을 출력
      delay_ms(1000);

      };
}

댓글 1
  • No Profile

    Init_Serial() 함수의 UCSR0C = 0x16;  은  0x16이 아니라 0x06일 것 같고요.  비동기방식이라.
    UBRR0H = 0x06;은  0x06이 아니라  0x00일 것 같습니다. 보레이트가 안 맞는 것 같아요.
    UBRR이 103인데 9600bps라면 크리스털은 16MHz 사용하시겠네요.

     

    main() 함수의 while(1) 문 안에 ADCSRA &=0x7F; 은 반대로  ADCSRA |=0x80; 로 해야  ADC가
    Enable 되겠죠.


하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
216 전기전자 아무거나 HOT소형의 근접센서 찾고있습니다.1 하늘노랑 1149 2010.03.02
215 전기전자 아무거나 HOT슈퍼 콘덴서는 어느곳에 사용되나여?5 루키키 2630 2010.02.25
214 전기전자 아무거나 HOTclass d amp회로에서 anti pump에 대해 설명해주실분 퀴아쿠 881 2010.02.19
213 전기전자 아무거나 HOT전기장판4 지우 3313 2010.02.18
212 전기전자 아무거나 HOT컴퓨터 팬 컨트롤러를 제작하고 싶습니다.1 TreeOfDream 1583 2010.02.11
211 드론/로봇/라인트레이서 HOT정말 대단하네요.. 잘 봤습니다~9 오로로 5336 2010.02.10
210 드론/로봇/라인트레이서 HOT라인트렌서 만드는데 얼마나 걸리죠?8 오로로 1825 2010.02.10
209 전기전자 아무거나 HOT배터리 구입에 관해 질문드립니다.3 파아랑스 801 2010.02.04
208 전기전자 아무거나 HOTIC 편람 요청1 meri5 1817 2010.02.04
207 전기전자 아무거나 HOTHW 8051 설계 쎄오 985 2010.02.04
206 전기전자 아무거나 HOT[질문요]제가 hall effect sensor schematic을 만들어봤는데요1 엑스트라 1633 2010.02.03
205 전기전자 아무거나 HOTDSP430F149 칩을 사용해야되는데 잘모르겠어요 ㅜㅜ 수달달이짱 700 2010.01.30
204 전기전자 아무거나 HOT하드웨어 쪽으로 공부할려고 하는데. 진행 방향을 잡아주세요^^2 고야 944 2010.01.28
203 전기전자 아무거나 HOT회로 해석좀 도와주세요^^3 고야 1752 2010.01.28
202 전기전자 아무거나 HOTARM7에 대해 공부할려고 하는데 무엇부터 시작하는게 좋을까요? 고야 839 2010.01.28
201 드론/로봇/라인트레이서 HOT라인트레이서 스위치 없애는법2 검ㅁ마 1595 2010.01.19
200 전기전자 아무거나 HOT테스트 지그 지그 하는대 ..... 지그가 먼지?2 하노이별 4954 2010.01.12
199 전기전자 아무거나 HOTRF가 어떤건지 알려주세요 ㅠㅜ2 돼지토끼 1300 2010.01.08
198 전기전자 아무거나 HOTPIC 과 AVR과 ARM의 차이점을 가르쳐 주세요.10 Adelposs 2966 2009.12.30
197 전기전자 아무거나 HOTAVR studio 코딩 중 DDRC?4 냐옹 1634 2009.12.20
Prev 1 ... 24 25 26 27 28 29 30 31 32 33 ... 39 Next
  • 너의 의무를 다하라. 그리고 나머지는 하나님께 맡겨라.
    - 코네일
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.