Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

ADC voi avr

Tóm tắt : Qua bài này các bạn có thể sử dụng được ADC của AVR

Giới thiệu :

Phần cứng các bạn cần 1 con biến trở nối vào portA.0

Mạch ATmega16 như bài đầu .

Các chế độ sẽ chọn :

sử dụng chế độ ngắt ADC, tự động scan giá trị analog của port A

Ví dụ : Dùng PORTA.0 nhận giá trị từ biến trở hiển thị lên LCD theo ADC 8bit (từ 0->5V thành 0 ->255)

Chú ý :

trong chương trình có sử dụng hàm lcd_putnum(value); hiển thị chữ số

/*****************************************************

This program was produced by the

CodeWizardAVR V1.24.8d Professional

Automatic Program Generator

© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project :

Version :

Date : 1/9/2008

Author : LENGOCTUAN

Company : VAGAM

Comments:

Comments:

Chip type : ATmega16

Program type : Application

Clock frequency : 8.000000 MHz

Memory model : Small

External SRAM size : 0

Data Stack size : 256

*****************************************************/

#include

// Alphanumeric LCD Module functions

#asm

.equ __lcd_port=0x15 ;PORTC

#endasm

#include

#define FIRST_ADC_INPUT 0

#define LAST_ADC_INPUT 7

unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];

#define ADC_VREF_TYPE 0x20

// ADC interrupt service routine

// with auto input scanning

interrupt [ADC_INT] void adc_isr(void)

{

register static unsigned char input_index=0;

// Read the 8 most significant bits

// of the AD conversion result

adc_data[input_index]=ADCH;

// Select next ADC input

if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))

input_index=0;

ADMUX=(FIRST_ADC_INPUT|ADC_VREF_TYPE)+input_index;

// Start the AD conversion

ADCSRA|=0x40;

}

// Declare your global variables here

void lcd_putnum(unsigned int d)

{

unsigned char donvi, chuc, tram;

donvi=d%10;

d=d/10;

chuc=d%10;

d=d/10;

tram=d%10;

d=d/10;

if(tram>0)

{

lcd_putchar(48+tram);

lcd_putchar(48+chuc);

lcd_putchar(48+donvi);

}

else if(chuc>0)

{

lcd_putchar(48+chuc);

lcd_putchar(48+donvi);

lcd_putsf(" ");

}

else {

lcd_putchar(48+donvi);

lcd_putsf(" ");

lcd_putsf(" ");

}

}

void main(void)

{

// Declare your local variables here

// Input/Output Ports initialization

// Port A 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

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;

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=FFh

// OC0 output: Disconnected

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.

// 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

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

MCUCR=0x00;

MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=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: AREF pin

// ADC Auto Trigger Source: None

// Only the 8 most significant bits of

// the AD conversion result are used

ADMUX=FIRST_ADC_INPUT|ADC_VREF_TYPE;

ADCSRA=0xCB;

// LCD module initialization

lcd_init(16);

// Global enable interrupts

#asm("sei")

lcd_gotoxy(0,0);

lcd_putsf("ADC");

while (1)

{

// Place your code here

lcd_gotoxy(4,1);

lcd_putnum(adc_data[0]);

};

}

Bạn đang đọc truyện trên: Truyen247.Pro

Tags: #saoxathubk