ايران ويج

نسخه‌ی کامل: مشکل با adc
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام به همگی Biggrin

من یک تازه واردم :oops:
من وقتی با ADC میکرو AVR می خوام یک مقدار رو بخونم با رفرنس داخلی چرا وقتی پورت مورد نظر به جایی وصل نیست عدد های الکی میده ایا باید کاری کرد تا این مشکل حل بشه در ضمن من تو BASCOM مینویسم :cry:

قبلا ازهمتون برای کمک متشکرم Amaze
شما حتما باید adc رو به جایی وصل کنی تا تخمین درست باشه اگه داری به جای ولت متر استفاده میکنی بهتره با یک مقاومت 10 کیلو به زمین هم وصلش کنی
دلیل اینکه وقتی پایه adc به جایی وصل نیست، مقادیر بی ربط رو adc می خونه اینه که پورت ها در AVR ها وقتی به عنوان ورودی در نظر گرفته می شن و پولاپ داخلی هم برای اون ها فعال نباشه دارای ایمپدانس خیلی خیلی بالایی هستن و با کوچکترین نویز دارای اختلاف پتانسیل می شن . ما یه بار یه فرکانس متر با ورودی کانتر درست کرده بودیم ولی پولاپ رو فعال نکردیم . وقتی پایه ورودی به جایی وصل نیود ، دائم فرکانس رو به جای صفر می نوشت 50 هرتز که فهمیدیم به خاطر سیم های برقه که از چند متری رو مدار تاثیر می ذارن.ولی خوب با پولاپ(یا پول دان خارجی :wink: ) این مشکل حل میشه.
سلام
من قصد دارم از ولتاژ و جریان، با یه سنسور هال، نمونه گیری کنم؛ و چیزی که واضحه اینه که منم ناواردم؛ مشکلم اینه که نمیتونم از دو تا ورودی ADC همزمان ورودی بگیرم، هر کار میکنم هر دو رو یکی نشون میده..
کد:
#define ADC_VREF_TYPE 0x20

// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}                                  
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
// Declare your global variables here
  unsigned char i,v;
  char str[16];
void main(void)
{
// Declare your local variables here    

//float flt;

// ADC initialization
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AREF pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x86;
                            

// LCD module initialization
lcd_init(16);
ADCSRA=0xFF;
while (1)
      {  
      
i=read_adc(1);
//delay_ms(10);
v=read_adc(0);

lcd_gotoxy(0,0);
sprintf(str,"I=%d V=%d",i,v);
lcd_clear();
lcd_puts(str);
delay_ms(10);
      };
}

اینم کدشه و نمیدونم چطور میشه اصلاحش کرد..
مرسی