سلام ... من میخوام هرقت ولتاژ ورودی بیشتر از یه عددی (مثلا3 ولت) بشه یکی از خروجی ها رو فعال کنم اما مرز مقایسه رو هر عددی بین 0 تا 1024 بزارم میکرو رو ولتاژ حدود 1.3 سوییچ میکنه! با کدویزارد تنظیم کردم و میکرو 16 استفاده کردم ...کسی میدونه مشکل چیه؟
اطلاعیه
Collapse
No announcement yet.
مشکل با ADC
Collapse
X
-
پاسخ : مشکل با ADC
نوشته اصلی توسط Feranchescoسلام ... من میخوام هرقت ولتاژ ورودی بیشتر از یه عددی (مثلا3 ولت) بشه یکی از خروجی ها رو فعال کنم اما مرز مقایسه رو هر عددی بین 0 تا 1024 بزارم میکرو رو ولتاژ حدود 1.3 سوییچ میکنه! با کدویزارد تنظیم کردم و میکرو 16 استفاده کردم ...کسی میدونه مشکل چیه؟Ali Reza Tarkesh Esfahani
Yahoo: amt_1390@yahoo.com
-
پاسخ : مشکل با ADC
#include <mega16a.h>
#include <delay.h>
// Declare your global variables here
float adc0=0;
// Voltage Reference: AVCC pin
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
// Wait for the AD conversion to complete
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}
void main(void)
{
// ADC initialization
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
while (1)
{
// Place your code here
adc0=read_adc(0);
if(adc0 >= 512)
PORTB.0=1;
if(adc0 < 512)
PORTB.0=0;
}
}
دیدگاه
-
پاسخ : مشکل با ADC
نوشته اصلی توسط Feranchesco#include <mega16a.h>
#include <delay.h>
// Declare your global variables here
float adc0=0;
// Voltage Reference: AVCC pin
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
// Wait for the AD conversion to complete
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}
void main(void)
{
// ADC initialization
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
while (1)
{
// Place your code here
adc0=read_adc(0);
if(adc0 >= 512)
PORTB.0=1;
if(adc0 < 512)
PORTB.0=0;
}
}
if (adc0==512){
PORTB=0xff;
}
else {
PORTB=0x00;
}o_O
دیدگاه
دیدگاه