newind2000 2015. 5. 4. 13:34

A/C 컨버터

 

================================= Outline ===================================

A/C 컨버터

- 분해능의 정의

- A/D 컨버터의 사용 목적

- 디지털 신호의 장점

 

-----------------------------------------------------------------------------

//USART의 대장급은 RS485이다.

 

//1024... 장이사=_=

 

AVR 교재 p/278,

 

“10비트 분해능...”이란,

 

0 - 5v10bit, 1024등분할 수 있다는 뜻이다.

 

 

<A/D 컨버터의 사용 목적>

 

연속적인 데이터는 지속적으로 데이터화하여 정확하게 표현하는 것은 불가능하다. 때문에 연속성을 포기하고 순간의 정지된 데이터를 잘게 끊어서 표현함으로써 연속된 자료와 유사하게 표현하기 위함이다.

 

<Digital 신호의 장점>

Analog신호에 비해 잡음에 강하다.

 


<서미스터(Thermistor)>

저항 값은 온도에 따라 변할 수 있다. 저항 소자가 금속으로 만들어져 있기 때문이다.

온도에 따라 저항 값이 바뀌는 소자를 thermistor라 하고 이를 활용하여 온도계를 만들 수 있다.

<A/D 컨버터 레지스터>

 

A/D 컨버터 제어 및 상태 레지스터 A(ADCSRA)

비트 7 - 1로 설정하면 A/D컨버터의 모든 동작이 허용되고 0으로 설정하면 모든 동작이 금지된다.

 

비트 6 - 1로 설정하면 A/D 컨버터의 변환이 시작된다. 변환이 완료되면 자동적으로 0으로 클리어 된다.

 

비트 5 - 1로 설정하면 외부 트리거 소스에 의해 소프트웨어적으로 A/D변환이 시작, 0으로 설정하면 ADSC비트에 의해서 A/D변환이 시작된다.

 

비트 4 - A/D변환이 완료되어 A/D 컨버터 데이터 레지스터 값이 갱신되고 나면 이것이 1로 셋트되면서 변환완료 인터럽트를 요청한다.

 

비트 3 - 변환완료 인터럽트를 개별적으로 허용한다. 인터럽트 허용을 위해 ADIE = 1, SREGI비트가 1로 설정되어 있어야 한다.

 

비트 2 - 0 - 분주비 설정

A/D 컨버터 제어 및 상태 레지스터 B(ADCSRB)

비트 6 - 아날로그 비교기의 음극성 입력에 A/D 컨버터의 입력신호가 사용될 수 있도록 허용한다.

 

비트 3 - MUX5ADMUX 레지스터의 MUX 4-0 비트와 함께 A/D컨버터의 아날로그 입력 채널을 선택한다.

 

비트 2 - 0


A/D 컨버터 멀티플렉서 선택 레지스터(ADMUX)



/* 소스 */

<main.c>

#include "SMART.h"
#include <Turboc.h>
#include <stdio.h>


int main(void)
{
  /* 변수 설정 */

  unsigned char i;
  unsigned int sum;    

  /* PORT 설정 */
  DDRA = 0xFE;    // A Port 0번 핀 입력
  DDRC = 0xFF;    // C Port 모두 출력
  DDRG = 0xFF;    // G Port 모두 출력
  

  /* ADC 레지스터 설정 */

  //ADCSRA = 0x00;  // disable adc
  ADCSRA = 0x85;     // Enable adc, 분주비 32
  ADCSRB = 0x00;    // free running mode
  ADMUX   = 0x40;     // select adc input 0

  LCD_Init();

  srand(rand(NULL));
  
  
  while(1)
  {
    sum = 0;
    for(i=0; i<16; ++i)
    {
      ADCSRA = 0xD5;
      while((ADCSRA & 0x10) != 0x10);
      sum += ((((int) ADCH<<8))+(int)ADCL);
    }
    sum >>= 4;  // sum = sum / 16, 아날로그 신호의 평균값을 내준다.

    for(i=0; i<100; ++i)
    {
      sum += srand;
      PORTC = sum;
    }
  }
  

  return 0;
}

<SMART.h>


/* A/D컨버터 레지스터 */


#define ADCSRA  (*((volatile unsigned char*)0x7A))

#define ADCSRB  (*((volatile unsigned char*)0x7B))

#define ADMUX  (*((volatile unsigned char*)0x7C))

#define ADCH    (*((volatile unsigned char*)0x79))

#define ADCL    (*((volatile unsigned char*)0x78))

#define DIDR0  (*((volatile unsigned char*)0x7E))

#define DIDR1  (*((volatile unsigned char*)0x7F))

#define DIDR2  (*((volatile unsigned char*)0x7D)) 





반응형