اطلاعیه

Collapse
No announcement yet.

راه اندازی سنسور آلتراسونیک

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    راه اندازی سنسور آلتراسونیک

    سلام من دارم بورد قسمت آلتراسونیک یک روبات که از شرکت نوآوران الکترونیک رو که قبلا خریدمو راه اندازی میکنم...
    قبلا خودم همین بوردو ساخته بودم ولی دیگه بیخیالش شده بودم...به هرحال....

    مشکلم اینجاس میخوام مقدار TCN1 رو بخونم تا زمان رفت و برگشت موج آلتراسونیکو حساب کنم...ولی مشکل داره...یر همین TCN1H و TCN1L .... مقدارشو روی lcd میندازم ... ولی اشتباهه ... یکی کمک میکنه ؟ من هر تاپیکی که باز میکنم نمیدونم چرا به نتیجه نمیرسه...هیچکی علاقه نشون نمیده...
    لطفا این رو کمک کنین دوستان...
    مدار کاملا درس کار میکنه خیلی چک کردم ، مشکلم خوندن TCN1 ا...
    تیکه های کد لازم رو گذاشتم، عکس مدار رو هم پلود کردم

    کد:
    #include <mega32.h>
    #include <delay.h> 
    #include <stdlib.h> 
    #include <string.h> 
    #asm
      .equ __lcd_port = 0x18 ;//PORTB
    #endasm
    #include <lcd.h>
    
    char s1[8];
    int mode = 0 ;
    int count = 0 ;
    char timer[];
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {  
      unsigned int f = 0; 
      float metr = 343.5 / 2000000;
      PORTD.2 = 0 ;//RX OFF 
      
      f=TCNT1H;
        f=f<<8;
        f=(f+TCNT1L);
      
      metr *= (8125*count)+((f-536)*0.125);
      ftoa(metr,2,timer);  
      lcd_gotoxy(0,1); 
      lcd_putsf(">>      ");
      lcd_gotoxy(8,0); 
      lcd_putsf("INT1  "); 
      lcd_gotoxy(3,1);
      lcd_puts(timer);  
    }
    
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {  
      lcd_gotoxy(8,0);
      if(mode==0)
      {  
        lcd_putsf("mode0");
        //TCNT1=65524;  
        TCNT1=65436;   //12.5us
        PORTD.7 = ~PORTD.7 ; //send TX
        count ++ ;
        if(count == 40 ) // SEND .5 MS=500us 40KHZ PULS (20 * 25us pulse width =.5ms)
        {
          count = 0; 
          mode = 1; 
          PORTD.7 = 0; 
          //TCNT1=64536; 
          TCNT1=57536; //1ms
        }
      }
      else if(mode ==1)
      {  
        lcd_putsf("mode1"); 
        //GICR|=0x80; //INT1 ENABLE
        PORTD.2 = 1 ;//RX ON
        mode = 2; 
        lcd_gotoxy(0,1); 
        lcd_putsf(">>    ");
        TCNT1=536;
      }
      else
      { 
      //first count = 0
        if(count == 7 )//(65536-536 = 65000) 65000*0.125us = 8125 us raise time  , 8 * 8125 =65000us= 65ms
        {
          lcd_putsf("mode2");
          PORTD.2 = 0 ;//RX OFF 
          count = 0; 
          mode=0;
          PORTA.7 =~ PORTA.7 ; //Right 
          //TCNT1=65524; 
          TCNT1=65436;
        }
        else
          TCNT1=536; 
        count ++ ; 
      }  
    }  
    
    main(){
      int i=0;
      lcd_init(16) ; 
      lcd_gotoxy(0,0); 
      lcd_putsf("Start");
        
      DDRC = 0xFF;// STEPMOTOR
      PORTC = 0xFF;
      
      ADMUX=ADC_VREF_TYPE;
      ADCSRA=0x8F;
      SFIOR&=0xEF;
             
      DDRA.6 = 1;
      DDRA.7 = 1;
        
      DDRD=0b10110111;   
      //DDRD.3 = 0; //INT1 FOR GET PULSE ULTRASONIC-RX  
      delay_ms(1);
      PORTD=0b111111101; 
      
        
      TCNT1=65436;
      TCCR1A=0x00; 
      TCCR1B=0x01; //  each pulse 0.125us
      TIMSK=0x04;
      
        
      GICR|=0x80; //INT1 ENABLE
      MCUCR=0x0C;
      MCUCSR=0x00;
      GIFR=0x80;
      
      lcd_putsf("."); 
      #asm("sei")
     while(1){}
    }

    #2
    پاسخ : راه اندازی سنسور آلتراسونیک

    سلام
    برنامه رو کامل بذارید.
    معمولا این اشکالات از نوع تعیین متغییر یا چاپ اون با متغییر های عادیه. معمولا از توابع فکر کنم Sprintf برای نمایش استفاده میشه.

    دیدگاه


      #3
      پاسخ : راه اندازی سنسور آلتراسونیک

      نوشته اصلی توسط rozeh
      سلام
      برنامه رو کامل بذارید.
      معمولا این اشکالات از نوع تعیین متغییر یا چاپ اون با متغییر های عادیه. معمولا از توابع فکر کنم Sprintf برای نمایش استفاده میشه.
      دوست عزیز کد کامله ، حالا کاملترشم کردم چون فایل اصلی واسه خودم کامنت نوشتمو یک سری چیزای اضافه...

      الان محاسبه فاصله رو گذاشتم . فقط 0.13 m نشون میده ... میشه به عنوان دزدگیر استفاده کرد نه فاصله سنج :biggrin:

      مشگلش کجاس ؟ TCN1 رو درست میخونم ؟ من واسه ارسال فرکانس 40 کیلو هرتز و 1 میلی ثانیه تاخیر و... از تامیر 1 استفاده کردم فقط به سه قسمت تقسیم کردم فک نکنم مشکلی باشه ....
      این که درس تشخیص میده چیزی جلو سنسوره...چرا نمیتونم فاصله رو محاسبه کنم ؟:( مشکلم فک کنم با TCN1 باشه ...

      فرمول من :

      کد:
      metr =[ 343.5 m/sec] * [1sec/1000000us] * [( (8125*count)+((f-536)*0.125) ) /2 ]

      (8125*count)+((f-536)*0.125)
      ----------------------------------------------
      2

      هم زمان رفت موج هست
      =========================
      پایه INT1 رو هم pull up کردم سطح منطقی عادیش صفر هس چون درحالت عادی rx خاموشه یا هیچ موجی نمیاد به rx پس فقط لازمه روی لبهی بالا رونده حساسش کنم چون خروجی مدار rx وقتی موج برگشت رو سنس میکنه خروجیش 1 میلی ثانیه 1 میشه ...
      مدار به عنوان فقط حس گر درس کار میکنه ولی فاصله سنج نیس.... :'(

      دیدگاه


        #4
        پاسخ : راه اندازی سنسور آلتراسونیک

        من یک امتحانی کردم....جلوی سنسور گیرندمو بالنت پوشوندم...
        پایه INT1 رو دستی با تیکه سیم به 5 ولت وصل کردم(مثلا سنسور یک چیزیو حس کرد و خروجیش یک شد) ... هروقت این سیمو به پایه INT1 میزنم همون عدد 0.13 رو نشون میده...
        وقتی جلوی سنسور هم چیزی باشه فقط همین عدد رو نشون میده ...حالا از هر فاصله ای...
        کسی کمک میکنه؟

        دیدگاه


          #5
          پاسخ : پاسخ : راه اندازی سنسور آلتراسونیک

          نوشته اصلی توسط par3eh
          دوست عزیز کد کامله ، حالا کاملترشم کردم چون فایل اصلی واسه خودم کامنت نوشتمو یک سری چیزای اضافه...

          الان محاسبه فاصله رو گذاشتم . فقط 0.13 m نشون میده ... میشه به عنوان دزدگیر استفاده کرد نه فاصله سنج :biggrin:

          مشگلش کجاس ؟ TCN1 رو درست میخونم ؟ من واسه ارسال فرکانس 40 کیلو هرتز و 1 میلی ثانیه تاخیر و... از تامیر 1 استفاده کردم فقط به سه قسمت تقسیم کردم فک نکنم مشکلی باشه ....
          این که درس تشخیص میده چیزی جلو سنسوره...چرا نمیتونم فاصله رو محاسبه کنم ؟:( مشکلم فک کنم با TCN1 باشه ...

          فرمول من :

          کد:
          metr =[ 343.5 m/sec] * [1sec/1000000us] * [(tcn1-65436)/2]

          (tcn1-65436)/2
          هم زمان رفت موج هست
          =========================
          پایه INT1 رو هم pull up کردم سطح منطقی عادیش صفر هس چون درحالت عادی rx خاموشه یا هیچ موجی نمیاد به rx پس فقط لازمه روی لبهی بالا رونده حساسش کنم چون خروجی مدار rx وقتی موج برگشت رو سنس میکنه خروجیش 1 میلی ثانیه 1 میشه ...
          مدار به عنوان فقط حس گر درس کار میکنه ولی فاصله سنج نیس.... :'(
          عجیبه!
          شما میگی سخت افزار درسته بعد میذاری بقیه هم ببینن ولی نرم افزار که شک داری نمی ذاری!
          قسمتی اصلی کار همون حلقه هستش که شما نذاشتی. اصلا داره؟
          اون TCN1 هم منظورتون TCNT1 هستش دیگه؟ درست می نویسیش؟
          چرا پورت های 6 و 7 رو یه بار 1 کردی بعدش 0 کردی بعش دوباره بعد 1 میلی ثانیه 1 کردی؟


          دیدگاه


            #6
            پاسخ : راه اندازی سنسور آلتراسونیک

            آره منظورم همون TCNT1 هس ... تو کد درس نوشتم ...
            کدرو اصلاح کردم ... اون پورت 7 و 6 فقط led چیز خاصی نیس من گفتم چیزه اضافه زیاد داره شما گفتی همشو بزار....
            اون حلقه while(1) اگه منظورت هس رو هم گذاشتم توی main تو تاپیک...کدم درسته توی pc ، اینجا بد انتقال دادم، انقد خستم که اصلا جون ندارم...
            حداقل 70 درصد به بالا مطمینم قسمت TIM1_OVF درسته هزاربار با ماشین حساب حساب کردم تایم ارسال و تاخیر و...
            فقط الان واسه محاسبه مسافتو یک اصلاحی کردم که دیگه فقط 0.00 متر نشون میده

            تایمر 1 هم که خودش داره مدام کار ارسالو انجام میده...فک کنم مشکل همون قسمت خوندن TCNT1 یا INT1 باشه...شما چیزی متوجه نشدین ؟

            دیدگاه


              #7
              پاسخ : راه اندازی سنسور آلتراسونیک

              چرا مقدار ریجستر TCNT1 رو اینجوری قرار دادی؟
              مگه هگزاش FF9C نمیشه؟

              دیدگاه


                #8
                پاسخ : راه اندازی سنسور آلتراسونیک

                نوشته اصلی توسط rozeh
                چرا مقدار ریجستر TCNT1 رو اینجوری قرار دادی؟
                مگه هگزاش FF9C نمیشه؟
                همون میشه ، چه فرقی داره ؟ اینجوری هم میشه ریخت توش دیگه ، نمیشه ؟ فرکانس کلاک 8مگ هس و هرپالس میشه 0.125 میکرو ثانیه توی mode0 بهمدت 50 میلی ثانیه پالس با طول 12.5میکروثانیه میفرسته که فرکانس 40کیلو رو میسازه بعد mode1 واسم 1 میلی ثانیه تاخیر میسازه و در آخر rx فعال و 65ms منتظر وقفه INT1 میشم....

                دیدگاه


                  #9
                  پاسخ : راه اندازی سنسور آلتراسونیک

                  سلام

                  میشه در مورد 1 میلی ثانیه یک تجدید نظر بکنید ....
                  چون 0.343 = 0.001 * 343
                  یعنی توی این یک میلی ثانیه صوت 34 سانتی متر رو طی میکنه پس اگر فاصلتون کمتر از 17 سانت باشه (بخاطر رفت و برگشتش) شما اطلاعاتی دریافت نمیکنید

                  ولی این مشکل اصلی شما نیست ...
                  چون فعلا برنامتون به طور صحیح کار نمیکنه
                  صرفا این رو گفتم چون فاصله ی کم رو نمیتونه اندازه بگیره


                  برای بر طرف شدن مشکل اصلی برنامتون هم بهتره خط به خط برنامتون رو چک کنید و خروجی رو نمایش بدید ببینید با مقدار دلخواه شما هماهنگی داره یا نه

                  دیدگاه


                    #10
                    پاسخ : راه اندازی سنسور آلتراسونیک

                    نوشته اصلی توسط ShahiMV
                    سلام

                    میشه در مورد 1 میلی ثانیه یک تجدید نظر بکنید ....
                    چون 0.343 = 0.001 * 343
                    یعنی توی این یک میلی ثانیه صوت 34 سانتی متر رو طی میکنه پس اگر فاصلتون کمتر از 17 سانت باشه (بخاطر رفت و برگشتش) شما اطلاعاتی دریافت نمیکنید

                    ولی این مشکل اصلی شما نیست ...
                    چون فعلا برنامتون به طور صحیح کار نمیکنه
                    صرفا این رو گفتم چون فاصله ی کم رو نمیتونه اندازه بگیره


                    برای بر طرف شدن مشکل اصلی برنامتون هم بهتره خط به خط برنامتون رو چک کنید و خروجی رو نمایش بدید ببینید با مقدار دلخواه شما هماهنگی داره یا نه
                    میتونیم در نظر نگیریم ولی با این حال من دستمو جلوی سنسور 2 سانتیش میزارم عکسالعملشو نشون میده....
                    یکاری کردم...
                    توی روال وقفه INT1 من تایمرمو غیر فعال کردم ، خواستم ببینم اولین موجی که میفرسته رو چطور سنس میکنه...
                    این دفعه اون عدد ثابت صفر رو نشون نداد ! هر دفعه که دکمه ریست میکرو میزنم هر دفعه یک عددی نشون میده ...

                    دیدگاه


                      #11
                      پاسخ : راه اندازی سنسور آلتراسونیک

                      دوست من ShahiMV

                      همونطور که شما گفتی من اون تاخیر 1 میلی ثانیه رو ور داشتم.ولی 500 میکروش کردم چون این تاخیر بخاطر جلوگیری از تاثیر سیگنال ارسالی هست...
                      یعنی الان 500میکرو با فرکانس 40 کیلو میفرسته T، 500 میکرو صبر میکنه و 65 میلی ثانیه منتظر بازگشت....
                      کد:
                        metr *= (float)(8125*count)+((float)(f-536)*0.125)+500;
                      محاصبه متراژو به این شکل تغییر دادم .

                      میشه تاخیرامو چک کنین؟ یا وقفه INT1 ام رو؟

                      دیدگاه


                        #12
                        پاسخ : راه اندازی سنسور آلتراسونیک

                        نوشته اصلی توسط par3eh
                        دوست من ShahiMV

                        همونطور که شما گفتی من اون تاخیر 1 میلی ثانیه رو ور داشتم.ولی 500 میکروش کردم چون این تاخیر بخاطر جلوگیری از تاثیر سیگنال ارسالی هست...
                        یعنی الان 500میکرو با فرکانس 40 کیلو میفرسته T، 500 میکرو صبر میکنه و 65 میلی ثانیه منتظر بازگشت....
                        کد:
                          metr *= (float)(8125*count)+((float)(f-536)*0.125)+500;
                        محاصبه متراژو به این شکل تغییر دادم .

                        میشه تاخیرامو چک کنین؟ یا وقفه INT1 ام رو؟
                        سلام دادا
                        یک کاری بکن اون تبدیلات رو فعلا حذف کن : چون میکرو شما هشت بیتی هست و دارید با عدد شناور محاسبه میکنید به شدت سرعت شما کم میشه

                        پس فعلا بهتره فقط عدد تایمر رو مستقیم نشون بدی
                        تازه برای اینکه محاسبات اضافی هم انجام ندی بهتره دو تا عدد مجزا برای TCNT1L و TCNT1H روی ال سی دی نشون بدی و خودت به صورت دستی عددت رو پیدا کنی
                        با این طریق میتونید بفهمید که تایمر عدد درستی رو نشون میده یا نه...
                        فکر میکنم اینجوری زودتر مشکلتون برطرف میشه


                        --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                        اضافه شد در چند دقیقه بعدش
                        --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                        راستی میشه از بردتون یک عکسی بزارید ببینیم چیکار کردید...

                        دیدگاه

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