اطلاعیه

Collapse
No announcement yet.

راهنمایی برای مثال های تمرینی AVR

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

    راهنمایی برای مثال های تمرینی AVR

    سلام دوستان
    میخوام توی مدار زیر، LED ها بعد از زدن کلید روشن شده و شروع به چشمک زدن بکنن. باید چیکار کنم؟
    کد:
    
    
    کد:
    # include <mega32.h>
    # include <delay.h>
    
    
    void main (void)
    {
    PORTB = 0x00 ;
    DDRB = 0xff ;
    
    
    while (1)
         {   
         if(PINA.0==0){
        PORTB = 0xff ;
        delay_ms(1000) ;
        PORTB = 0x00 ;
        delay_ms(1000) ;
        }             }
    }
    [RIGHT][COLOR=#333333][FONT=Yekan][/FONT][/COLOR][/RIGHT]


    #2
    پاسخ : راهنمایی برای مثال های تمرینی AVR

    شما که شماتیک رو طراحی کردی و برنامه رو هم نوشتی. چی میخوای بدونی؟
    البته باید با led ها مقاومت سری کنی.

    دیدگاه


      #3
      پاسخ : راهنمایی برای مثال های تمرینی AVR

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

      دیدگاه


        #4
        پاسخ : راهنمایی برای مثال های تمرینی AVR

        باید براش یه فلگ بذارید. یعنی یه متغیر تعریف می کنید که وقتی کلید زده شد اون متغیر 1بشه. حالا توی همون برنامه ای که بالا گذاشتید بجای شرط کلید شرط این متغیر رو بررسی کنید.
        www.gam-co.blogsky.com

        دیدگاه


          #5
          پاسخ : راهنمایی برای مثال های تمرینی AVR

          اگه شرط if رو بیاری بیرون از حلقه while، فقط یه بار شرط if رو بررسی میکنه و اگه برقرار بود(کلید رو زده باشی) دیگه تا وقتی میکرو رو خاموش نکنی مدار چشمک میزنه.

          دیدگاه


            #6
            پاسخ : راهنمایی برای مثال های تمرینی AVR

            نوشته اصلی توسط شوکول نمایش پست ها
            اگه شرط if رو بیاری بیرون از حلقه while، فقط یه بار شرط if رو بررسی میکنه و اگه برقرار بود(کلید رو زده باشی) دیگه تا وقتی میکرو رو خاموش نکنی مدار چشمک میزنه.
            این که نمیشه ، مثلا باید میکرو خاموش باشه ، و کلید و نگه داره و حالا روشن کنه میکرو رو تا همون یبار شرط رو چک کنه و اجرا بشه.

            ایشون به راحتی میتونن این قسمت از کد رو تو حلقه بزارن :
            کد:
            PORTB = 0xff ;
                delay_ms(1000) ;
                PORTB = 0x00 ;
                delay_ms(1000) ;
            هر وقت کلید زده شد ، میره تو حلقه گیر میکنه و کدهارو اجرا میکنه .
            به سمت نور خورشيد حرکت کن،تو ميتوني تابش خورشيد رو حس کني ،حتي اگه کور باشي.
            (پيش به سوي هدف)

            دیدگاه


              #7
              پاسخ : راهنمایی برای مثال های تمرینی AVR

              نوشته اصلی توسط hosseinam نمایش پست ها
              این که نمیشه ، مثلا باید میکرو خاموش باشه ، و کلید و نگه داره و حالا روشن کنه میکرو رو تا همون یبار شرط رو چک کنه و اجرا بشه.

              ایشون به راحتی میتونن این قسمت از کد رو تو حلقه بزارن :
              کد:
              PORTB = 0xff ;
                  delay_ms(1000) ;
                  PORTB = 0x00 ;
                  delay_ms(1000) ;
              هر وقت کلید زده شد ، میره تو حلقه گیر میکنه و کدهارو اجرا میکنه .
              بله حق با شماست.
              میشه بفرمایین کجای کد شما شرط زده شدن کلید رو بررسی میکنه؟



              به نظرم راهش این باشه:
              کد:
              int x=0;
              while (1)
                   {   
                   if(PINA.0==0 || x){
                  PORTB = 0xff ;
                  delay_ms(1000) ;
                  PORTB = 0x00 ;
                  delay_ms(1000) ;
                         x=1;
                  }             }
              جدیدترین ویرایش توسط شوکول; ۰۰:۲۵ ۱۳۹۵/۰۷/۲۶.

              دیدگاه


                #8
                پاسخ : راهنمایی برای مثال های تمرینی AVR

                نوشته اصلی توسط شوکول نمایش پست ها
                بله حق با شماست.
                میشه بفرمایین کجای کد شما شرط زده شدن کلید رو بررسی میکنه؟



                به نظرم راهش این باشه:
                کد:
                int x=0;
                while (1)
                     {   
                     if(PINA.0==0 || x){
                    PORTB = 0xff ;
                    delay_ms(1000) ;
                    PORTB = 0x00 ;
                    delay_ms(1000) ;
                           x=1;
                    }             }
                منظورم اینه که همون کد رو بنویسن ، و این قسمت کد رو بزارن تو حلقه :
                کد:
                PORTB = 0xff ;
                    delay_ms(1000) ;
                    PORTB = 0x00 ;
                    delay_ms(1000) ;
                با if قبلش کلید چک میشه دیگه .

                بله با این روش شما هم میشه، فقط x رو بهتر اینه که بیاد از نوع bit تعریف کنه.چون به حافظه ی کمتری نیاز خواهد داشت نسبت به int.
                به سمت نور خورشيد حرکت کن،تو ميتوني تابش خورشيد رو حس کني ،حتي اگه کور باشي.
                (پيش به سوي هدف)

                دیدگاه


                  #9
                  پاسخ : راهنمایی برای مثال های تمرینی AVR

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

                  کد HTML:
                  #include <mega32.h>
                  #include <delay.h>
                  void main (void){
                  bit x=0;
                  DDRA.0=0;
                  DDRB=0B11111111;
                  while(1){
                        if(PINA.0==0){
                        while(PINA.0==0);
                        x=!x;
                        }
                        
                        if(x==1){
                        PORTB=0B11111111;
                        delay_ms(500);
                        PORTB=0B00000000;
                        delay_ms(500);
                        }
                        
                     }   
                  }        
                  اینم مدارش:

                  فقط یادتون نره که واسه هر ال ای دی یه مقاومت 330 اهم بزارید.
                  بدرود
                  جدیدترین ویرایش توسط real_ahmadi; ۰۹:۰۶ ۱۳۹۵/۰۷/۲۶.
                  Proudly @real_ahmadi
                  #real_ahmadi

                  واسه اسمت بجنگ

                  دیدگاه


                    #10
                    پاسخ : راهنمایی برای مثال های تمرینی AVR

                    سلام دوستان
                    من میخوام ال ای دی rgb رو از طریق pwm کنترل کنم جوری که بتونم ترکیب رنگ ها رو داشته باشم. کسی میتونه راهنمایی کنه.؟

                    دیدگاه


                      #11
                      پاسخ : راهنمایی برای مثال های تمرینی AVR

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

                      کد HTML:
                      #include <mega32.h>
                      #include <delay.h>
                      void main (void){
                      bit x=0;
                      DDRA.0=0;
                      DDRB=0B11111111;
                      while(1){
                            if(PINA.0==0){
                            while(PINA.0==0);
                            x=!x;
                            }
                            
                            if(x==1){
                            PORTB=0B11111111;
                            delay_ms(500);
                            PORTB=0B00000000;
                            delay_ms(500);
                            }
                            
                         }   
                      }        
                      اینم مدارش:

                      فقط یادتون نره که واسه هر ال ای دی یه مقاومت 330 اهم بزارید.
                      بدرود
                      عالی بود! دقیقا همینو میخواستم.
                      حالا اگه بخوام با هر بار کلید زدن یکی از لامپها روشن بشه چی؟
                      مثلا با اولین کلید، LED اولی روشن. با دومین بار LED دومی روشن. (همچنان که لامپ اولی روشنه دومی هم روشن بشه و الی آخر)

                      دیدگاه


                        #12
                        پاسخ : راهنمایی برای مثال های تمرینی AVR

                        نوشته اصلی توسط reza_rouhi نمایش پست ها
                        عالی بود! دقیقا همینو میخواستم.
                        حالا اگه بخوام با هر بار کلید زدن یکی از لامپها روشن بشه چی؟
                        مثلا با اولین کلید، LED اولی روشن. با دومین بار LED دومی روشن. (همچنان که لامپ اولی روشنه دومی هم روشن بشه و الی آخر)
                        متغیر bit رو از نوع int بزارید شرط رو بزارید که اگه PORTA.0==0 بشه x=x+1 ایکس یکی زیاد بشه
                        حالا شرط می زاری اگر ایکس 1شد اولی ایکس 2شد دومی ایکس سه شدسومی و...الی اخر...متوجه نشدین بگین برنامه شو قرار میدم
                        موفق باشی
                        Proudly @real_ahmadi
                        #real_ahmadi

                        واسه اسمت بجنگ

                        دیدگاه


                          #13
                          پاسخ : راهنمایی برای مثال های تمرینی AVR

                          نوشته اصلی توسط مهندس احمدی نمایش پست ها
                          متغیر bit رو از نوع int بزارید شرط رو بزارید که اگه PORTA.0==0 بشه x=x+1 ایکس یکی زیاد بشه
                          حالا شرط می زاری اگر ایکس 1شد اولی ایکس 2شد دومی ایکس سه شدسومی و...الی اخر...متوجه نشدین بگین برنامه شو قرار میدم
                          موفق باشی
                          اول چندتا سوال دارم و بعد چیزی که گفتین رو انجام میدم و اگه مشکلی داشتم از شما کمک میگیرم.
                          مرسی از اینکه راهنمایی میکنید. اینطوری خیلی خوب یاد میگیرم

                          1- چرا توی برنامه جدید باید بجای bit از int استفاده بشه؟
                          2- این دستور چیکار میکنه؟
                          کد:
                          x=!x;
                          جدیدترین ویرایش توسط reza_rouhi; ۲۱:۴۱ ۱۳۹۵/۰۷/۲۶.

                          دیدگاه


                            #14
                            پاسخ : راهنمایی برای مثال های تمرینی AVR

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

                            1- چرا توی برنامه جدید باید بجای bit از int استفاده بشه؟
                            2- این دستور چیکار میکنه؟
                            کد:
                            x=!x;
                            سلام دوست عزیز.
                            1- چون توی برنامه داری از دستور جمع (x=x+1) استفاده میکنی باید متغیر، عدد صحیح باشه
                            2- وضعیت متغیر x رو از حالت صفر به یک تبدیل میکنه و بالعکس.

                            دیدگاه


                              #15
                              پاسخ : راهنمایی برای مثال های تمرینی AVR

                              من برنامه جدید رو نوشتم و جواب گرفتم.
                              کد:
                              #include <mega32.h>
                              #include <delay.h>
                              void main (void){
                              int x=0;
                              DDRA.0=0;
                              DDRB=0xff;
                              
                              
                              while(1){
                                    if(PINA.0==0){
                                   while(PINA.0==0);  
                                    x++ ;  
                                    }     
                                    
                                          if(x==1){
                                    PORTB.0=0xff;
                                    }
                                     
                                          if(x==2){
                                    PORTB.1=0xff;
                                    }
                                    
                                          if(x==3){
                                    PORTB.2=0xff;
                                    }
                                    
                                          if(x==4){
                                    PORTB.3=0xff;
                                    }
                                    
                                          if(x==5){
                                    PORTB.4=0xff;
                                    }
                                    
                                          if(x==6){
                                    PORTB.5=0xff;
                                    }
                                    
                                          if(x==7){
                                    PORTB.6=0xff;
                                    }
                                    
                                          if(x==8){
                                    PORTB.7=0xff;
                                    }
                                 }   
                              }
                              یعنی لامپها یکی پس از دیگری روشن میشن تا لامپ آخری.
                              حالا سوالم اینه که وقتی همه روشن شدن میخوام با کلیک کردن بعدی برنامه ریست شده و لامپها خاموش بشن و دوباره LED ها از اول روشن بشن.
                              باید چیکار کنم؟



                              دیدگاه

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