اطلاعیه

Collapse
No announcement yet.

درخواست کمک برای رفع مشکل کلید ها در این پروژه + عکس

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

    درخواست کمک برای رفع مشکل کلید ها در این پروژه + عکس

    سلام به همگی

    من در پروژه کنترل دور موتور DC بات میکروی AVR دچار مشکل شدم و فکر میکنم مشکلم از بابت وجود bounce در push button هایی است که استفاده کردم تصویر پروتئوس پروژه کنترل دور موتور DC اینه:
    http://s22.aks98.com/files/13864853689662246064.jpg

    برنامه پروژه هم اینه... میخواستم محبت فرموده برنامه رو طوری تغییر بدید که bounce برای کلید های سوم و چهارم و پنجم که جهت های left و right و brake رو تعیین میکنند حذف بشه.
    ممنونم
    کد:
    Chip type      : ATmega16
    Program type    : Application
    Clock frequency   : 1.000000 MHz
    Memory model    : Small
    External SRAM size : 0
    Data Stack size   : 256
    *****************************************************/
    
    #include <mega16.h>
    
    // Alphanumeric LCD Module functions
    #asm
      .equ __lcd_port=0x1B ;PORTA
    #endasm
    #include <lcd.h> 
    #include<delay.h>
    void display_no(int no); 
    void direction(char dir);
    
    void main(void)
    {
    
    // Input/Output Ports initialization
    // Port A initialization
    PORTA=0x00;
    DDRA=0x00;
    
    // Port B initialization
    PORTB=0x00;
    DDRB=0x08;
    
    // Port C initialization
    PORTC=0x00;
    DDRC=0x00;
    
    // Port D initialization
    PORTD=0x00;
    DDRD=0xFF;
    
    // Timer/Counter 0 initialization
    TCCR0=0x6A;
    TCNT0=0x00;
    OCR0=0x00;
    
    // Timer/Counter 1 initialization
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // LCD module initialization
    lcd_init(16);
    PORTC=255;
    direction(3); 
    while (1)
       {
       
       if (PINC.2==0 || PINC.3==0 || PINC.4==0 ) 
       {  
         delay_ms(10); 
         if (PINC.2==0) 
             direction(1);
         if (PINC.3==0) 
             direction(2);
         if (PINC.4==0) 
             direction(3);
             
        } 
        
       lcd_gotoxy(0,1);
       lcd_putsf("      ");
       lcd_gotoxy(0,1);
       lcd_putsf("OCR0: ");
       display_no(OCR0);
         
       if (PINC.0==0 || PINC.1==0 ) 
       {  
         delay_ms(10);
         
         if (PINC.0==0) 
         {   
           
           if (OCR0> 250)
             OCR0=255; 
           else
             OCR0=OCR0+5;
         }  
         else if (PINC.1==0) 
         {   
              
              if(OCR0<5)
               OCR0=0;
              else   
               OCR0=OCR0-5;
         }     
        }
        else
        {
         
           
        }  
        
      }
    }
     
    ///////////////////////// 
    void direction(char dir)
    {
      switch(dir)
      {
         case 1:
         PORTD.0=0;
         PORTD.1=1;
         lcd_clear();
         lcd_putsf("Direction: Left ");
         break;
         
         case 2:
         PORTD.0=1;
         PORTD.1=0; 
         lcd_clear();
         lcd_putsf("Direction: Right ");
         break;
         
         case 3:
         PORTD.0=0;
         PORTD.1=0;
         lcd_clear();
         lcd_putsf("Direction: Brake ");
         break;
      }
    }
    /////////////////////////
    void display_no(int no)
    {  
      int array[5];
      int i=0,j;
      /*if( no < 0)
      {
       lcd_putchar('-');
       no=-1*no;
      }
      else
       lcd_putchar('+');*/
      while(no > 9)
      {
        array[i++]=no % 10;
        no/=10;
      }
      array[i]=no;
      for(j=i;j >=0 ;j--)  
      {
        lcd_putchar(48+array[j]);
        delay_us(100);
        }
        
    }

    #2
    پاسخ : درخواست کمک برای حذف bounce کلید ها در این برنامه

    سلام دادا.
    من که نفهمیدم چی میخوای!
    تشکر لازم نیست!

    دیدگاه


      #3
      پاسخ : درخواست کمک برای حذف bounce کلید ها در این برنامه

      نوشته اصلی توسط iman-63
      سلام دادا.
      من که نفهمیدم چی میخوای!
      مشکل اینه:
      http://www.eca.ir/forum2/index.php?topic=47208.0

      میخوام حلش کنم.... همین..!! عجله هم دارم

      دیدگاه


        #4
        پاسخ : درخواست کمک برای حذف bounce کلید ها در این برنامه

        آقا این پروژه که توی پرتئوس خوب جواب میده! پس چه مشکلی داری دیگه ؟
        شاید توی بستن سخت افزار مدارت مشکل داری ؟
        برا درایورموتور از چی استفاده کردی؟
        وقتی همه نیروهای جسمی و ذهنی متمرکز شوند توانایی فرد برای حل مشکلات به طور حیرت انگیزی چند برابر می شود .
        نرمن وینسنت پیل

        دیدگاه


          #5
          پاسخ : درخواست کمک برای حذف bounce کلید ها در این برنامه

          نوشته اصلی توسط javad1354
          آقا این پروژه که توی پرتئوس خوب جواب میده! پس چه مشکلی داری دیگه ؟
          شاید توی بستن سخت افزار مدارت مشکل داری ؟
          برا درایورموتور از چی استفاده کردی؟
          بله درسته... برنامه تو پروتئوس عالی کار میکنه ولی در واقعیت هنگام کار با کلید های push button مشکل دارم
          کلید هایی که استفاده کردم این مدلی هستند:
          http://upload1.imgdl.ir/images/21420101119257.jpg

          تصویری از خود پروژه رو براتون پلود میکنم. در این تصویر کلید های +pwm و -PWM کار میکنند و عدد جلوی ocr0 در lcd رو کم و زیاد میکنند ولی کلید های left و right کار نمیکنند.


          مشکل منهم با همین کلید های left و right هست که عمل نمیکنند...یعنی مقداری که جلوی direction نوشته شده همیشه همون brake میمونه و با زدن این کلید ها عوض نمیشه در صورتیکه در پروتئوس عوض میشد.
          دلم میخواد کله ام رو بکوبم به دیوار...!!! :angry: :angry:

          شما رو به خدا قسم... تو رو جان هرکی دوست دارید یک کمکی بکنید......

          دیدگاه


            #6
            پاسخ : درخواست کمک برای رفع مشکل کلید ها در این پروژه + عکس

            من همچنان منتظر پاسخ هستم

            دیدگاه


              #7
              پاسخ : درخواست کمک برای رفع مشکل کلید ها در این پروژه + عکس

              وقتی برنامه تو سیمولاتور درست کار میکنه باید توی پروژه ی عملی هم درست کار کنه. مدار رو یکبار دیگه با دقت چک کن (با مولتی متر). میکرو رو هم عوض کن شاید میکرو خراب باشه.

              دیدگاه


                #8
                پاسخ : درخواست کمک برای رفع مشکل کلید ها در این پروژه + عکس

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

                دیدگاه

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