توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل adc
Feranchesco
01-11-2015, 22:05
سلام ... من میخوام هرقت ولتاژ ورودی بیشتر از یه عددی (مثلا3 ولت) بشه یکی از خروجی ها رو فعال کنم اما مرز مقایسه رو هر عددی بین 0 تا 1024 بزارم میکرو رو ولتاژ حدود 1.3 سوییچ میکنه! با کدویزارد تنظیم کردم و میکرو 16 استفاده کردم ...کسی میدونه مشکل چیه؟
erfanjeddy
02-11-2015, 00:05
رفرنست 2.54 داخلیه، بزارش رو 5 ولت خارجی
سلام وقت بخیر
لایسنس 2015 برای 64بیت رو میخواستم....اگر لطف کنید..ممنون میشم
احتمال بسیار زیاد متغییری که عدد Adc رو میخونید و داخلش نگه داری میکنید به صورت char تعریف شده.
متغییر به صورت int تعریف کنید درست میشه.
Feranchesco
02-11-2015, 20:23
رفرنسم AVCC هست . متغیرمم از نوع Float ...
erfanjeddy
03-11-2015, 00:43
من متوجه نشدم متفیر چیه، خود رجیستر adc چه عددیو داره میده؟
erfanjeddy
03-11-2015, 01:09
در ضمن مطمین شو که داری adc رو 16 بیتی میخونی نه فقط adcl رو
Feranchesco
03-11-2015, 13:15
در ضمن مطمین شو که داری adc رو 16 بیتی میخونی نه فقط adcl رو
adc که 10 بیتیه ...
Feranchesco
03-11-2015, 13:21
اینم قسمت های مرتبط برنامه :
#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;
}
}
erfanjeddy
03-11-2015, 23:03
دیتاااا توووووش 10 بیته دوتا رجیستر 8 بیتیه
erfanjeddy
03-11-2015, 23:25
اینو یه تست بزن ببین درست میشه یا نه
#include <stdint.h>#include <delay.h>
#define F_CPU 8000000UL
// Declare your global variables here
uint16_t adc0=0;
// Voltage Reference: AVCC pin
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
// Read the AD conversion result
uint16_t read_adc(uint8_t adc_input)
{
ADMUX |=adc_input;
// 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) | (0<<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;
}
}
Feranchesco
04-11-2015, 21:57
اینو یه تست بزن ببین درست میشه یا نه
#include <stdint.h>#include <delay.h>
#define F_CPU 8000000UL
// Declare your global variables here
uint16_t adc0=0;
// Voltage Reference: AVCC pin
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
// Read the AD conversion result
uint16_t read_adc(uint8_t adc_input)
{
ADMUX |=adc_input;
// 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) | (0<<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;
}
}
هیچ تفاوتی نکرد ...
erfanjeddy
04-11-2015, 23:52
:(
Powered by vBulletin® Version 4.2.1 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.