اطلاعیه

Collapse
No announcement yet.

مشکل در کاربا adc

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در کاربا adc

    سلام ... من دوباره اومدم :redface: ... برای پروژم قصد دارم یک کنترل کننده PID رو توسط میکرو پیاده سازی کنم ... رابطه مربوطه را که از تبدیل z بدست میاد و در واقع همان روابط انتگرال و مشتق خودمون در حوزه گسسته است را دارم ... مشکل من اینجاست که دو مقدار آنالوگ را باید بخوانم و باتوجه به اونها کنترلر PID مو طراحی کنم .
    موقع کار کردن با adc وقتی با یک کانال کار میکنم درست جواب میده و مشکلی نداره . اما وقتیکه دو تا کانال را هم زمان میخوام بخونم ، اشتباه میکنه ... به اسن صورت که یک کانال را درست نشون میده ، اما دیگری را مقداری نزدیک به کانال اولی نشون میده و اصلا ربطی به مقدار اصلی خودش نداره . مثلا چون من از ده بیت استفاده میکنم بزرگترین عددم 1024 است .... یکی را 230 نشون میده مثلا ... دیگری را 320 ... و هر چی این یکی را تغییر میدهد ، اون یکی هم متناسب باهاش تغییر میکنه ... در صورتیکه وقتی با مولتی متر چک کردم دیدم اون یکی ثابته و نباید تغییری رو نشون بده !! برنامه را در ccs نوشتم و تقریبا هیچ دستور گمراه کننده و اشتباهی به نظرم نمیاد که بکار برده باشم .


    main()
    {
    int16 a1=50;
    int16 a2=50;
    set_tris_d (0x0);
    lcd_init();



    setup_port_a( ALL_ANALOG );
    setup_adc( ADC_CLOCK_INTERNAL );


    while (true)
    {
    set_adc_channel( 0 );
    a1 = Read_ADC();

    set_adc_channel( 2 );
    a2 = Read_ADC();

    lcd_gotoxy(1,1);
    lcd_putc(" "
    lcd_gotoxy(1,2);
    lcd_putc(" "
    lcd_gotoxy(1,1);
    printf (lcd_putc," %lu",a1);
    printf (lcd_putc," %lu",a2);
    delay_ms(10);
    میدونم که توی این فروم همه ccs باز هستند ... کسی میتونه بگه اشکال کارم کجاست ؟
    دلا خوبـــان دل خونيــــن پســـندند
    دلا خون شو که خوبان اين پسندند
    متاع کفر و دين بيآ‌مشتري نيست
    گروهــــي آن گروهي اين پســـندند

    #2
    پاسخ : مشکل در کاربا adc

    به احتمال زیاد مشکل به خاطر اینه که شما بین خوندن دو کانال ADC هیچگونه تاخیری نذاشتید. یه delay_ms(3)‎ میتونه کمکت کنه

    دیدگاه


      #3
      پاسخ : مشکل در کاربا adc

      setup_port_a( ALL_ANALOG );
      setup_adc( ADC_CLOCK_INTERNAL );
      باسلام
      دوست عزیز بجای این دو دستور از مقدار دهی ریجستری استفاده کن ببین که نتیجه چی میشه، مثلا ریجستر ADCON1 مخصوص فعال و غیر فعال کردن مبدل آنالوگ به دیجیتال هست، میتونید با مراجعه به دیتا شیت میکرو این ریجستر رو پیدا کنید و اطلاعات مربوط این تنظیمات رو از اونجا بخونید فقط یادتون نره که اول از همه باید این ریجستر رو از SFR فراخوانی کنید تا موقع کامپایل کردن دوچار مشکل نشین. اگه باز مشکلی بود در خدمتیم

      موفق باشید :job:

      دیدگاه

      لطفا صبر کنید...
      X