Xin chào tất cả mọi người. Như tiêu để em cần mọi người giúp em về Adc của con atmega 8
- Con atmega 8 của em được em set fuse bit với 8Mhz xung thạch anh nội.
- Em viết code đọc adc 1.
- Chân 20 và 21 (chân AVCC,AREF) em nối nguồn 5v và mắc thêm con tụ 104 nối mát để khử nhiễu.
- Giá trị của ADC được xuất ra 8 con led PORTD để hiển thị
Nhưng khi nạp code xong thì chạy thử 8 con led PORTD cứ sáng lên mặc dù em đã set mức cao,tín hiệu ADC 1 chưa được nối. Trong khi đó mô phỏng trên Proteus mạch chạy ngon
- Anh em nào biết chỉ em với. Em xin cảm ơn!
Đây là code :
#include <io.h>
#include <delay.h>
#define ADC_VREF 0xe0 //Lay ap 2.56V, ADLAR=1
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF; //Chon kenh ADC va ap so sanh
ADCSRA|=0x40; //Start ADC
while (!(ADCSRA & 0x10)); //Kiem tra co ADC
ADCSRA|=0x10;
return ADCH; //ADC 8bit
}
void main(void)
{
ADMUX = ADC_VREF;
ADCSRA = 0x86; //Fosc/64
DDRD = 0XFF;
PORTD = 0XFF;
while (1)
{
PORTD = read_adc(1);
}
}
- Con atmega 8 của em được em set fuse bit với 8Mhz xung thạch anh nội.
- Em viết code đọc adc 1.
- Chân 20 và 21 (chân AVCC,AREF) em nối nguồn 5v và mắc thêm con tụ 104 nối mát để khử nhiễu.
- Giá trị của ADC được xuất ra 8 con led PORTD để hiển thị
Nhưng khi nạp code xong thì chạy thử 8 con led PORTD cứ sáng lên mặc dù em đã set mức cao,tín hiệu ADC 1 chưa được nối. Trong khi đó mô phỏng trên Proteus mạch chạy ngon
- Anh em nào biết chỉ em với. Em xin cảm ơn!
Đây là code :
#include <io.h>
#include <delay.h>
#define ADC_VREF 0xe0 //Lay ap 2.56V, ADLAR=1
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF; //Chon kenh ADC va ap so sanh
ADCSRA|=0x40; //Start ADC
while (!(ADCSRA & 0x10)); //Kiem tra co ADC
ADCSRA|=0x10;
return ADCH; //ADC 8bit
}
void main(void)
{
ADMUX = ADC_VREF;
ADCSRA = 0x86; //Fosc/64
DDRD = 0XFF;
PORTD = 0XFF;
while (1)
{
PORTD = read_adc(1);
}
}
Comment