NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3095 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 13 از 13

موضوع: مشکل adc

  1. #1
    عضو جدید
    تاریخ عضویت
    Oct 2010
    نوشته ها
    6
    تشکر
    0
    تشکر شده 3 بار در 3 پست

    Exclamation مشکل adc

    سلام ... من میخوام هرقت ولتاژ ورودی بیشتر از یه عددی (مثلا3 ولت) بشه یکی از خروجی ها رو فعال کنم اما مرز مقایسه رو هر عددی بین 0 تا 1024 بزارم میکرو رو ولتاژ حدود 1.3 سوییچ میکنه! با کدویزارد تنظیم کردم و میکرو 16 استفاده کردم ...کسی میدونه مشکل چیه؟

  2. تشکرها از این نوشته :


  3. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  4. #2
    کاربر فعال
    تاریخ عضویت
    May 2014
    نوشته ها
    198
    تشکر
    14
    تشکر شده 79 بار در 71 پست

    پیش فرض

    رفرنست 2.54 داخلیه، بزارش رو 5 ولت خارجی

  5. تشکرها از این نوشته :


  6. #3
    تازه وارد
    تاریخ عضویت
    Sep 2015
    نوشته ها
    2
    تشکر
    2
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام وقت بخیر
    لایسنس 2015 برای 64بیت رو میخواستم....اگر لطف کنید..ممنون میشم

  7. #4
    کاربر فعال
    تاریخ عضویت
    Mar 2010
    نوشته ها
    236
    تشکر
    101
    تشکر شده 246 بار در 163 پست

    پیش فرض

    احتمال بسیار زیاد متغییری که عدد Adc رو میخونید و داخلش نگه داری میکنید به صورت char تعریف شده.
    متغییر به صورت int تعریف کنید درست میشه.

  8. تشکرها از این نوشته :


  9. #5
    عضو جدید
    تاریخ عضویت
    Oct 2010
    نوشته ها
    6
    تشکر
    0
    تشکر شده 3 بار در 3 پست

    پیش فرض

    رفرنسم AVCC هست . متغیرمم از نوع Float ...

  10. تشکرها از این نوشته :


  11. #6
    کاربر فعال
    تاریخ عضویت
    May 2014
    نوشته ها
    198
    تشکر
    14
    تشکر شده 79 بار در 71 پست

    پیش فرض

    من متوجه نشدم متفیر چیه، خود رجیستر adc چه عددیو داره میده؟

  12. #7
    کاربر فعال
    تاریخ عضویت
    May 2014
    نوشته ها
    198
    تشکر
    14
    تشکر شده 79 بار در 71 پست

    پیش فرض

    در ضمن مطمین شو که داری adc رو 16 بیتی میخونی نه فقط adcl رو

  13. #8
    عضو جدید
    تاریخ عضویت
    Oct 2010
    نوشته ها
    6
    تشکر
    0
    تشکر شده 3 بار در 3 پست

    پیش فرض

    نقل قول نوشته اصلی توسط erfanjeddy نمایش پست ها
    در ضمن مطمین شو که داری adc رو 16 بیتی میخونی نه فقط adcl رو
    adc که 10 بیتیه ...

  14. #9
    عضو جدید
    تاریخ عضویت
    Oct 2010
    نوشته ها
    6
    تشکر
    0
    تشکر شده 3 بار در 3 پست

    پیش فرض

    اینم قسمت های مرتبط برنامه :

    #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;


    }
    }

  15. #10
    کاربر فعال
    تاریخ عضویت
    May 2014
    نوشته ها
    198
    تشکر
    14
    تشکر شده 79 بار در 71 پست

    پیش فرض

    دیتاااا توووووش 10 بیته دوتا رجیستر 8 بیتیه

  16. تشکرها از این نوشته :


  17. #11
    کاربر فعال
    تاریخ عضویت
    May 2014
    نوشته ها
    198
    تشکر
    14
    تشکر شده 79 بار در 71 پست

    پیش فرض

    اینو یه تست بزن ببین درست میشه یا نه

    کد:
    #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;
    
    
    
    
    }
    }

  18. تشکرها از این نوشته :


  19. #12
    عضو جدید
    تاریخ عضویت
    Oct 2010
    نوشته ها
    6
    تشکر
    0
    تشکر شده 3 بار در 3 پست

    پیش فرض

    نقل قول نوشته اصلی توسط erfanjeddy نمایش پست ها
    اینو یه تست بزن ببین درست میشه یا نه

    کد:
    #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;
    
    
    
    
    }
    }
    هیچ تفاوتی نکرد ...

  20. تشکرها از این نوشته :


  21. #13
    کاربر فعال
    تاریخ عضویت
    May 2014
    نوشته ها
    198
    تشکر
    14
    تشکر شده 79 بار در 71 پست

    پیش فرض


کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •