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

موضوع: مشکل در آنالوگ به دیجیتال (adc)

  1. #1
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    Talking مشکل در آنالوگ به دیجیتال (adc)

    با سلام
    در مجله شماره 10 صفحه 11 با عنوان پروژه شماره دو مثالی از تبدیل آنالوگ به دیجیتال برای LPC2378 ذکر شده است. من این برنامه را روی برد eke2lpc پروگرام کردم و پایه 4 تا 11 پورت صفر را هم به LED وصل کردم. پایه p0.23(AD00) را هم به عنوان ورودی آنالوگ استفاده می کنم. بعد از اجرا پایه آنالوگ چه به صفر ولت چه به 3.3 ولت وصل باشد در خروجی تغییری حاصل نمی شود! (البته یادم هم نرفته آدرس از 0x2000 شروع بشه!)
    از دوستان کسی این برنامه را جواب گرفته!؟ ایراد از برنامه هست یا جایی تنظیم دیگری باید انجام بشه که من نکردم؟
    البته در ادامه این بحث در شبیه سازی با keil که گفته در Function Editor کدهای زیر را کپی کنید:
    signal void ADC0_tst (void) {
    int a;
    for (a = 0 ; a < 1024; i++) {
    AD0DR0 = a;
    swatch (0.001); // in 1000 uSec steps
    }
    a=0;
    }
    و Compile را کلید کنید و شبیه سازی را آغاز کنید.
    در اینجا هم چیزی در شبیه سازی ندیدیم! (البته این برنامه خطا میده و باید i را هم به عنوان int معرفی کنیم). در مد شبیه سازی کجای کار ایراد داره که ورودی آنالوگ نداریم؟
    البته نظر من روی سوال اولمه. چون برام مهمه در عمل بتونم این برنامه را اجرا کنم.

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    یعنی کسی تا به حال آنالوگ به دیجیتال را تست نکرده!!!!!!؟؟؟

  4. #3
    مدیرکل سایت kavir آواتار ها
    تاریخ عضویت
    Jun 2007
    نام
    زارعی
    نوشته ها
    3,547
    تشکر
    1,218
    تشکر شده 5,684 بار در 1,801 پست

    پیش فرض

    از توضیحات آقای تروشه استفاده کنید
    کویر ویدئو راه اندازی شد

    اگر چه دیر ولی برگشتم به جمع دوستان قدیمی....

  5. #4
    مدیرکل سایت kavir آواتار ها
    تاریخ عضویت
    Jun 2007
    نام
    زارعی
    نوشته ها
    3,547
    تشکر
    1,218
    تشکر شده 5,684 بار در 1,801 پست

    پیش فرض

    adc.h
    [PHP]


    #ifndef __ADC_H
    #define __ADC_H

    #define ADC_VALUE_MAX 0xFFF

    void ADC_Init (void);
    void ADC_StartCnv(void);
    void ADC_StopCnv (void);
    uint32_t ADC_GetCnv (void);
    uint16_t ADC_Get (void);

    #endif /* end __ADC_H */[/PHP]






    ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++
    adc.c
    ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++
    [PHP]#include "adc.h"

    /*----------------------------------------------------------------------------
    initialize ADC Pins
    *----------------------------------------------------------------------------*/
    void ADC_Init (void) {

    LPC_PINCON->PINSEL3 &= ~(3UL<<30); /* P1.31 is GPIO */
    LPC_PINCON->PINSEL3 |= (3UL<<30); /* P1.31 is AD0.5 */

    LPC_SC->PCONP |= (1<<12); /* Enable power to ADC block */

    LPC_ADC->ADCR = (1<< 5) | /* select AD0.5 pin */
    (4<< 8) | /* ADC clock is 25MHz/5 */
    (1<<21); /* enable ADC */
    }

    /*----------------------------------------------------------------------------
    start ADC Conversion
    *----------------------------------------------------------------------------*/
    void ADC_StartCnv (void) {
    LPC_ADC->ADCR &= ~(7<<24); /* stop conversion */
    LPC_ADC->ADCR |= (1<<24); /* start conversion */
    }


    /*----------------------------------------------------------------------------
    stop ADC Conversion
    *----------------------------------------------------------------------------*/
    void ADC_StopCnv (void) {
    LPC_ADC->ADCR &= ~(7<<24); /* stop conversion */
    }

    /*----------------------------------------------------------------------------
    get converted ADC value
    *----------------------------------------------------------------------------*/
    uint32_t ADC_GetCnv (void) {
    uint32_t adGdr;
    // uint32_t adDr2;

    while (!(LPC_ADC->ADGDR & (1UL<<31))); /* Wait for Conversion end */
    adGdr = LPC_ADC->ADGDR;
    // adDr2 = LPC_ADC->ADDR2;
    return((adGdr >> 4) & ADC_VALUE_MAX); /* read converted value */
    }

    /*------------------------------------------------------------------------------
    read a converted value from the Analog/Digital converter
    *------------------------------------------------------------------------------*/
    uint16_t ADC_Get (void) {
    uint16_t val;

    ADC_StartCnv(); /* start A/D conversion */
    val = ADC_GetCnv(); /* use upper 8 bits of 12 bit AD conversion */
    ADC_StopCnv(); /* stop A/D conversion */

    return (val);
    }
    [/PHP]
    کویر ویدئو راه اندازی شد

    اگر چه دیر ولی برگشتم به جمع دوستان قدیمی....

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


  7. #5
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    من برنامه آقای تروشه را هم پروگرام کرده بودم. در این برنامه گفته شده اگر پایه p0.23(ADC0.0 پایه شماره 55 روی برد) را هم به عنوان ورودی آنالوگ استفاده می کنم و از 100 بیشتر شود پایه p0.21 (پایه شماره 51 روی برد) روشن می شود. یعنی اگه ورودی را از ولتاژ 0 به 3.3 وصل کنیم باید روشن بشه . ولی این برنامه به این صورت است که بعد از اجرا led نیمه روشن است(در حالی که باید خاموش باشه) و با وصل کردن ADC0.0 به ولتاژ 3.3 پر نورتر می شود!
    برای همین به برنامه ها شک کردم و سوال مطرح کردم.(نمی دونم Vref در برد از داخل به جایی وصل هست؟) گفتم کسی این برنامه را پروگرام کرده و جواب گرفته؟ یا ایراد از منه!
    من روی برنامه هایی که گذاشتید هم کار می کنم تا ببینم به چه صورت در میاد.

  8. #6
    مدیر باز نشسته alireza9900 آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    علیرضا اینانلو
    نوشته ها
    379
    تشکر
    285
    تشکر شده 792 بار در 246 پست

    پیش فرض

    منظورتون از نیمه روشن اینه که انگار یه نقطه از led روشنه ؟

  9. #7
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    یعنی نورش کمه در حالی که باید خاموش باشه
    ویرایش توسط mzarkoob : 21-07-2011 در ساعت 21:09

  10. #8
    مدیر باز نشسته t.o.e آواتار ها
    تاریخ عضویت
    Sep 2010
    نوشته ها
    191
    تشکر
    150
    تشکر شده 122 بار در 60 پست

    پیش فرض

    سلام:
    شما لطف کنید برنامه تونو کامل پیوست کنید تا دوستان برنامه تون رو تست بگیرند.
    اینطوری سریعتر به نتیجه خواهید رسید.

    موفق و موید باشید.

  11. #9
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض برنامه های adc

    بله . حتما
    فایل اول(ADC.LPC) که برنامه خود مجله شماره 10 می باشد. در این برنامه بعد از اجرا بعضی led ها کم نورند و با تغییر رنج ولتاژ ورودی آنالوگ تغییری درآنها حاصل نمی شود.
    فایل دوم(adc)هم که برنامه آقای تروشه می باشد که شرح آن گذشت.از دوستان خواستند این برنامه ها رو تست کنند تا مشخص بشه جواب میده
    با تشکر
    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: rar ADC.LPC.rar (72.0 کیلو بایت, 42 نمايش)
    • نوع فایل: rar adc.rar (73.4 کیلو بایت, 40 نمايش)

  12. #10
    مدیرکل سایت kavir آواتار ها
    تاریخ عضویت
    Jun 2007
    نام
    زارعی
    نوشته ها
    3,547
    تشکر
    1,218
    تشکر شده 5,684 بار در 1,801 پست

    پیش فرض

    برای برنامه اقای تروشه FIO0CLR= 0xFFFFFFFF; اگر اشتباه نکنم باید به این تغییر بدین و همچنین نمونه برنامه در بخش مثالهای ال پی سی بود که ورودی و خروجی ها براش مثال گذاشتیم
    [PHP]#include <LPC23xx.h>

    /* LED Definitions */

    #define LED_MSK 0x000000FF /* P3.0..7 */
    #define LED_RD 0x00000001 /* P3.0 */
    #define LED_WR 0x00000002 /* P3.1 */
    #define LED_CFG 0x00000004 /* P3.2 */
    #define LED_SUSP 0x00000008 /* P3.3 */
    void delay(unsigned long i);


    void key_read()
    {
    if((FIO2PIN & 1<<11)==0)
    {
    FIO3SET = LED_WR; /* Turn On Write LED */
    FIO3SET=LED_RD;
    FIO3SET=LED_CFG;
    FIO3SET=LED_SUSP;
    // delay(2000000);
    FIO3CLR = LED_WR; /* Turn On Write LED */
    FIO3CLR=LED_RD;
    FIO3CLR=LED_CFG;
    FIO3CLR=LED_SUSP;
    // delay(2000000);
    }

    }

    int main()
    {
    PINSEL6=0x00; // Set For GPIO
    SCS |= 0x00000001; //Fast Mode
    FIO3MASK= 0x00000000;// If=0 All = Fast Mode
    FIO3DIR= 0xFFFFFFFF; //If=1 out put Else if=0 = input
    FIO3SET= 0xFFFFFFFF;
    FIO3CLR= 0xFFFFFFFF;
    PINSEL10 = 0; // Disable ETM interface, enable LEDs
    // P2[0:7] = GPIO Function(xxxx 0000 0000 0000 0000 0000 0000 0000)
    PINSEL4 = 0x00FF;
    // Enable Pull-Up P2[0:7] (0101 1111 1111 1111 1111 1111 1111 1111)
    PINMODE4 = 0x0000;
    // Set GPIO-2[0:7] = Output(xxxx xxxx xxxx xxxx xxxx xxxx 1111 1111)
    FIO2DIR = 0x00000000;

    while(1)
    {

    key_read();
    }
    }
    void delay(unsigned long i)
    {
    unsigned long j;
    for (j=0;j<i;j++);
    }[/PHP]
    کویر ویدئو راه اندازی شد

    اگر چه دیر ولی برگشتم به جمع دوستان قدیمی....

  13. #11
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    تغییری که فرموده بودید (برای برنامه اقای تروشه FIO0CLR= 0xFFFFFFFF) را هم اعمال کردم. تغییری حاصل نشد!
    در مورد مثالی که "نمونه برنامه در بخش مثالهای ال پی سی که برای ورودی و خروجی ها می باشد"، این برنامه مشکلی نداره و من هم اجرا کردم، ولی این برنامه مربوط به ADC نمی شود.
    چیزی که در آنالوگ به دیجیتال ما لازم داریم مقداری است که می خواند(i = AD0DR0) یعنی برنامه ای که این مقدار را بخواند(0 تا 1024) و از آن استفاده کند.

  14. #12
    مدیرکل سایت kavir آواتار ها
    تاریخ عضویت
    Jun 2007
    نام
    زارعی
    نوشته ها
    3,547
    تشکر
    1,218
    تشکر شده 5,684 بار در 1,801 پست

    پیش فرض

    دوست عزیز این برنامه با سرعت بالا اجرا میشه و اینکه با چشم بتونید تشخیص بدین ال ای دی کی خاموش روشن میشه نیست
    شما برای کار با آرم بدون دیباگر 50 درصد عقب هستی
    wigler یا جیلینک بسازید و یا بخرید و دیباگ کنید
    کویر ویدئو راه اندازی شد

    اگر چه دیر ولی برگشتم به جمع دوستان قدیمی....

  15. #13
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    بله شما درست میگید. . تو چند تا تایپیک هم مطرح کرده بودید که وقتی با جیلینگ برنامه را دیباگ کردید سریع مشکل را پیدا کردید.
    من برنامه آقای تروشه را یک بار دیگه پروگرام کردم. فکر کنم درست شد. یعنی بعد از پروگرام کردن در حالی که ورودی آنالوگ زمین است led خاموش است و وقتی مقدار ورودی را زیاد می کنیم led روشن می شود. البته آخر دلیل این نیمه روشن بودن را نفهمیدم. چون الان که خاموشه دلیلش اینه که دو تا از پایه های p0.4 تا p0.11 را هم به led وصل کردم(و زمین کردم). هر چند در این برنامه هیچ ایفای نقشی برای آنها تعریف نشده!(اینم اتفاقی فهمیدم)

  16. #14
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    Thumbs up

    با سلام
    بالاخره یه برنامه نوشتم برای آنالوگ به دیجیتال که منو به هدفم برسونه و روی برد جوابم بده.
    شرح برنامه:
    در این برنامه مقدار ولتاژ ورودی که از ADC0 (پایه p0.23 با شماره 55 شماتیک) اعمال می شود، با استفاده از یک پتانسومتر 10K قابل تغییر است. با کم و زیاد کردن مقدار آن، led های روی برد که پایه p3.0 تا p3.7 می باشد چشمک می زند. اینکه کدامیک چشمک می زند بستگی به سطح ولتاژ اعمالی دارد.
    در بالای برد پایه vref را به 3.3 وصل کنید.
    این یک مثال ساده است که بستگی به کاربردتان قابل تغییر است.
    فقط قبل از گرفتن اون دگمه تشکر را بزنید ، اگه جواب نداد برگردید پس بگیرید!
    فايل هاي پيوست شده فايل هاي پيوست شده

  17. کاربران : 4 تشکر کرده اند از شما mzarkoob برای ارسال این پست سودمند:


  18. #15
    مدیرکل سایت kavir آواتار ها
    تاریخ عضویت
    Jun 2007
    نام
    زارعی
    نوشته ها
    3,547
    تشکر
    1,218
    تشکر شده 5,684 بار در 1,801 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    با سلام
    بالاخره یه برنامه نوشتم برای آنالوگ به دیجیتال که منو به هدفم برسونه و روی برد جوابم بده.
    شرح برنامه:
    در این برنامه مقدار ولتاژ ورودی که از ADC0 (پایه p0.23 با شماره 55 شماتیک) اعمال می شود، با استفاده از یک پتانسومتر 10K قابل تغییر است. با کم و زیاد کردن مقدار آن، led های روی برد که پایه p3.0 تا p3.7 می باشد چشمک می زند. اینکه کدامیک چشمک می زند بستگی به سطح ولتاژ اعمالی دارد.
    در بالای برد پایه vref را به 3.3 وصل کنید.
    این یک مثال ساده است که بستگی به کاربردتان قابل تغییر است.
    فقط قبل از گرفتن اون دگمه تشکر را بزنید ، اگه جواب نداد برگردید پس بگیرید!
    سلام
    فعلا وقت تستش نمیشه ولی جواب قطعی بگیرید اینجا بذارید
    کلیه آموزش ها و نکات مهم برد eke2lpc v1.0 کویرالکترونیک - ایـــــــــران میـــــــکرو ™
    با تشکر
    کویر ویدئو راه اندازی شد

    اگر چه دیر ولی برگشتم به جمع دوستان قدیمی....

  19. #16
    عضو جدید
    تاریخ عضویت
    Oct 2013
    نوشته ها
    6
    تشکر
    2
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام با تشکر از آقای زرکوب

  20. #17
    عضو جدید
    تاریخ عضویت
    Aug 2013
    نوشته ها
    13
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام
    من با adc0 جواب میگیرم
    ولی وقتی میخوام از adc1 یا adc2 استفاده کنم جواب نمیده
    هدف برنامه ام اینه که همزمان 3 خط رو بخونه و تبدیل به دیجیتال کنه

موضوعات مشابه

  1. کمک در مورد تبدیل آنالوگ به دیجیتال
    توسط vackiom در انجمن الکترونیک
    پاسخ: 5
    آخرين نوشته: 23-05-2013, 20:19
  2. انتقال دیتا ازمیکرو بهpcبا اترنت
    توسط ali asghar در انجمن مخابرات
    پاسخ: 3
    آخرين نوشته: 22-04-2013, 12:22
  3. پاسخ: 14
    آخرين نوشته: 20-02-2011, 01:44
  4. قفل رمز دیجیتالی
    توسط sam166 در انجمن AVR
    پاسخ: 14
    آخرين نوشته: 21-08-2010, 11:26

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

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