اطلاعیه

Collapse
No announcement yet.

قطع و وصل لحظه ای ATTINY13

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

    قطع و وصل لحظه ای ATTINY13

    سلام
    اول بگم موضوع مناسبی براش پیدا نکردمم :mrgreen:
    میخوام با زمین شدن کلید اول ( PINB.3 )خروجی PINB.0 یک بشه و به مدت 700 میلی ثانیه یک بمونه و صفر بشه
    حالا اگه کلید دوم زمین شد ( PINB.4) خروجی PINB.1 یک بشه و بعد از 700 میلی ثانیه یک بمونه و قطع شه
    با بسکام
    ATTINY 13
    هر کسی لطف کنه برنامشو بزاره شرمنده میکنه
    نمیدونم تونستم منظورمه برسونم یا نه
    من خودم این برنامه رو نوشتم ولی مشکلات اساسی داره که چشمک میزنه
    ممنون از راهنماییتون

    کد:
    $regfile = "attiny13a.dat "
    $crystal = 1000000
    $hwstack = 10
    $swstack = 8
    $framesize = 8
    
       Config Pinb.0 = Output
       Config Pinb.1 = Output
       Config Pinb.3 = Input
       Config Pinb.4 = Input
    
      Main:
    
    
         If Pinb.3 = 0 Then Goto M
         If Pinb.4 = 0 Then Goto Y
    
    
    
      M:
    
       Set Pinb.0
       Waitms 700
       Reset Pinb.0
       Goto Main
    
    
      Y:
    
       Set Pinb.1
       Waitms 700
       Reset Pinb.1
       Goto Main

    #2
    پاسخ : قطع و وصل لحظه ای ATTINY13

    من به زبان cمیتونم راهش بندازم

    به دردت میخوره؟ :nice:

    دیدگاه


      #3
      پاسخ : قطع و وصل لحظه ای ATTINY13

      نوشته اصلی توسط Hamedsj
      من به زبان cمیتونم راهش بندازم

      به دردت میخوره؟ :nice:
      مشکلی نداره
      خودم اشنایی دارم به زبونش ولی با اونم همین داستانو دارم ممنون میشم

      دیدگاه


        #4
        پاسخ : قطع و وصل لحظه ای ATTINY13

        نوشته اصلی توسط mohammad safarnejad
        مشکلی نداره
        خودم اشنایی دارم به زبونش ولی با اونم همین داستانو دارم ممنون میشم
        اینم کد امتحانش کن بعد بهم نتیجش رو بده[code=c]
        #include <mega16.h>
        #include <delay.h>
        #define l1 PINB.0
        #define l2 PINB.1
        #define k1 PINB.3
        #define k2 PINB.4
        void main(void)
        {
        PORTB=0x00;
        DDRB=0x03;
        while (1)
        {
        if(k1==0)
        {
        l1=1;
        delay_ms(700);
        l1=0;
        }
        if(k2==0)
        {
        l2=1;
        delay_ms(700);
        l2=0;
        }

        }
        }
        [/code]

        دیدگاه


          #5
          پاسخ : قطع و وصل لحظه ای ATTINY13

          نوشته اصلی توسط Hamedsj
          اینم کد امتحانش کن بعد بهم نتیجش رو بده[code=c]
          #include <mega16.h>
          #include <delay.h>
          #define l1 PINB.0
          #define l2 PINB.1
          #define k1 PINB.3
          #define k2 PINB.4
          void main(void)
          {
          PORTB=0x00;
          DDRB=0x03;
          while (1)
          {
          if(k1==0)
          {
          l1=1;
          delay_ms(700);
          l1=0;
          }
          if(k2==0)
          {
          l2=1;
          delay_ms(700);
          l2=0;
          }

          }
          }
          [/code]
          با تشکر
          ولی اینم همون مثل چشمک زنه
          منظورم اینه که کلید ما شستی نیست که یه بار بزنیم و ول کنیم
          وقتی کلید رو میزنم درست بعد از 700 میلی ثانیه روشن خاموش میشه ولی اگه کلید ثابت بمونه دوباره این عمل روشن و خاموش تکرار میشه که فقط باید یه بار انجام بشه
          http://s6.picofile.com/file/8180861218/New_folder_4_.rar.html
          خودتون تست کنید
          شستی رو نگه دارید و عمل رو ببینید
          با تشکر

          دیدگاه


            #6
            پاسخ : قطع و وصل لحظه ای ATTINY13

            دیگه فکر نکنم کمکی ازم بر بیاد
            باتشکر :bye

            دیدگاه


              #7
              پاسخ : قطع و وصل لحظه ای ATTINY13

              سلام
              پینهای کلید را باید جوری وصل کنی که وقتی فشارش میدی به + وصل بشه و وقتی برداشتی صفر بشه:
              $regfile = "attiny13a.dat "
              $crystal = 1000000
              $hwstack = 10
              $swstack = 8
              $framesize = 8
              dim k1 as bit
              dim k2 as bit

              Config Pinb.0 = Output
              Config Pinb.1 = Output
              Config Pinb.3 = Input
              Config Pinb.4 = Input

              do

              If pinb.3= 1 Then : If K1 = 0 Then : set pinb.0 : waitms 700 :reset pinb.0 : K1 = 1 : End If : Else : K1 = 0 : End If
              If pinb.4= 1 Then : If K2 = 0 Then : set pinb.1 : waitms 700: reset pinb.1 : K2 = 1 : End If : Else : K2 = 0 : End If
              loop

              الهم صل علی محمد و آل محمد و عجل فرجهم

              دیدگاه


                #8
                پاسخ : قطع و وصل لحظه ای ATTINY13

                نوشته اصلی توسط shahpoori
                سلام
                پینهای کلید را باید جوری وصل کنی که وقتی فشارش میدی به + وصل بشه و وقتی برداشتی صفر بشه:
                $regfile = "attiny13a.dat "
                $crystal = 1000000
                $hwstack = 10
                $swstack = 8
                $framesize = 8
                dim k1 as bit
                dim k2 as bit

                Config Pinb.0 = Output
                Config Pinb.1 = Output
                Config Pinb.3 = Input
                Config Pinb.4 = Input

                do

                If pinb.3= 1 Then : If K1 = 0 Then : set pinb.0 : waitms 700 :reset pinb.0 : K1 = 1 : End If : Else : K1 = 0 : End If
                If pinb.4= 1 Then : If K2 = 0 Then : set pinb.1 : waitms 700: reset pinb.1 : K2 = 1 : End If : Else : K2 = 0 : End If
                loop
                با تشکر ولی مثل توگل سویچ کار میکنه با یکبار فشار دادن روشن و با فشار دوباره همون کلید led خاموش میشه

                دیدگاه


                  #9
                  پاسخ : قطع و وصل لحظه ای ATTINY13

                  سلام
                  برنامه رو با بسکام نوشتم براتون،منتها یه سوال برام بوجود اومده ،اگه دوتا کلید همزمان یا کمتر از 700 میلی ثانیه فشار داده شوند ،شما انتظار داری هردو پورت باهم روشن شوند وهریک زمان مختص خودشو طی کنه تا خاموش بشه یا انتظار داری وقتی کلیدی زده شد فرآیند روکاملا کنه وبعدش دوباره کلیدها رو چک کنه؟؟ وسوال دیگه شما میخای بار اول که کلیدو میزنی پورتدلخواهتو روشن کنه وبا فشار دوم خاموشش کنه؟؟؟
                  جواب سوالارو بدید تا برنامه رو کاملش کنم

                  دیدگاه


                    #10
                    پاسخ : قطع و وصل لحظه ای ATTINY13

                    نوشته اصلی توسط میثم قاسمی نیا
                    سلام
                    برنامه رو با بسکام نوشتم براتون،منتها یه سوال برام بوجود اومده ،اگه دوتا کلید همزمان یا کمتر از 700 میلی ثانیه فشار داده شوند ،شما انتظار داری هردو پورت باهم روشن شوند وهریک زمان مختص خودشو طی کنه تا خاموش بشه یا انتظار داری وقتی کلیدی زده شد فرآیند روکاملا کنه وبعدش دوباره کلیدها رو چک کنه؟؟ وسوال دیگه شما میخای بار اول که کلیدو میزنی پورت دلخواهتو روشن کنه وبا فشار دوم خاموشش کنه؟؟؟
                    جواب سوالارو بدید تا برنامه رو کاملش کنم
                    با تشکر از شما
                    نه فک کنم من نتونستم منظورمو کامل برسونم
                    ببینید
                    اول اینکه امکان فشرده شدن همزمان کلید ها وجود نداره
                    دوم کلید ها کلید راکر هستند و شستی نیستند
                    http://eshop.eca.ir/%DA%A9%D9%84%DB%8C%D8%AF-%D8%B1%D8%A7%DA%A9%D8%B1/2354-%DA%A9%D9%84%DB%8C%D8%AF-%D8%B1%D8%A7%DA%A9%D8%B1-%D8%AF%D9%88%D8%AD%D8%A7%D9%84%D8%AA%D9%87-%DA%AF%D8%B1%D8%AF-%D8%B3%D9%87-%D9%BE%DB%8C%D9%86.html
                    از کلید بالا قراره استفاده بشه
                    پس در نتبجه این کلید یه پین com داره یه پین nc و یه پین no قراره کام به منفی یا مثبت ( همون پین زمین کلید )
                    پین nc به یکی از ورودی های میکرو , no به پین ورودی بعدی
                    حالا اگه پین nc به ورودی میکرو وارد شد ( اگه زمین شد ) خروجی pinb.3 به مدت 700 میلی ثانیه روشن بمونه و بعدش خاموش بشه
                    یه مشکل اینجاست که اگه بیاد دوباره کلید رو اسکن کنه چون کلید هنوز زمین هست دوباره همون پین رو 700 میلی ثانیه روشن خاموش میکنه که نباید اینطوری بشه یعنی باید منتظر کلید دوم باشه واگر کلید دوم زده شد 700 میلی ثانیه پین pinb.4 روشن و خاموش شه و دوباره منتظر کلید اول باشه و دوباره همون پین رو خاموش روشن نکنه
                    فک کنم منظور شما اینه که باید شستی رو 700 میلی ثانیه نگه داریم تا پین رو روشن کنه ؟
                    اگه اینطوری میگید
                    نه قرارا نیست اسنطوری باشه قراره 700 میلی ثانیه روشن بمونه و بعدش خانوش شه
                    نمیدونم میشه یا نه ولی باید اینطوری باشه
                    اگه این برنامه امکانش نیست باید از شستی استفاده کنم که اونم میشه دو تا سشتی که روی تابلو بد میشه و امکان اشتباه هم زیاده

                    دیدگاه


                      #11
                      پاسخ : قطع و وصل لحظه ای ATTINY13

                      نوشته اصلی توسط mohammad safarnejad
                      با تشکر از شما
                      نه فک کنم من نتونستم منظورمو کامل برسونم
                      ببینید
                      اول اینکه امکان فشرده شدن همزمان کلید ها وجود نداره
                      دوم کلید ها کلید راکر هستند و شستی نیستند
                      http://eshop.eca.ir/%DA%A9%D9%84%DB%8C%D8%AF-%D8%B1%D8%A7%DA%A9%D8%B1/2354-%DA%A9%D9%84%DB%8C%D8%AF-%D8%B1%D8%A7%DA%A9%D8%B1-%D8%AF%D9%88%D8%AD%D8%A7%D9%84%D8%AA%D9%87-%DA%AF%D8%B1%D8%AF-%D8%B3%D9%87-%D9%BE%DB%8C%D9%86.html
                      از کلید بالا قراره استفاده بشه
                      پس در نتبجه این کلید یه پین com داره یه پین nc و یه پین no قراره کام به منفی یا مثبت ( همون پین زمین کلید )
                      پین nc به یکی از ورودی های میکرو , no به پین ورودی بعدی
                      حالا اگه پین nc به ورودی میکرو وارد شد ( اگه زمین شد ) خروجی pinb.3 به مدت 700 میلی ثانیه روشن بمونه و بعدش خاموش بشه
                      یه مشکل اینجاست که اگه بیاد دوباره کلید رو اسکن کنه چون کلید هنوز زمین هست دوباره همون پین رو 700 میلی ثانیه روشن خاموش میکنه که نباید اینطوری بشه یعنی باید منتظر کلید دوم باشه واگر کلید دوم زده شد 700 میلی ثانیه پین pinb.4 روشن و خاموش شه و دوباره منتظر کلید اول باشه و دوباره همون پین رو خاموش روشن نکنه
                      فک کنم منظور شما اینه که باید شستی رو 700 میلی ثانیه نگه داریم تا پین رو روشن کنه ؟
                      اگه اینطوری میگید
                      نه قرارا نیست اسنطوری باشه قراره 700 میلی ثانیه روشن بمونه و بعدش خانوش شه
                      نمیدونم میشه یا نه ولی باید اینطوری باشه
                      اگه این برنامه امکانش نیست باید از شستی استفاده کنم که اونم میشه دو تا سشتی که روی تابلو بد میشه و امکان اشتباه هم زیاده
                      سلام برنامهرو نوشتم فک کنم چیزی باشه که نیاز دارین
                      تست کنید ببینید چطوره
                      کد:
                      $regfile = "attiny13a.dat "
                      $crystal = 1000000
                      $hwstack = 10
                      $swstack = 8
                      $framesize = 8
                      Dim A As Byte
                      Dim Main As Bit
                      Dim Fe As Single
                      Dim F As Byte
                      Dim P As Bit
                       Config Pinb.0 = Output
                         Config Pinb.1 = Output
                         Config Pinb.3 = Input
                         Config Pinb.4 = Input
                      Config Timer0 = Timer0 , Prescale = 1024
                      Enable Timer0
                      Enable Interrupts
                      On Timer0 Delayoff
                      Stop Timer0
                      Main = 0 : F = 0 : Fe = 0 : A = 0
                      Do
                      While Main = 0
                      Debounce Pinb.3 , 0 , P0 , Sub
                      Debounce Pinb.4 , 0 , P1 , Sub
                      Wend
                      While Main = 1
                      If F = 2 Then : A = Timer0 : End If
                      If A > 171 And P = 0 Then : Portb.0 = 0 : A = 0 : Main = 0 : F = 0 : Stop Timer0 : End If
                      If A > 171 And P = 1 Then : Portb.1 = 0 : A = 0 : Main = 0 : F = 0 : Stop Timer0 : End If
                      Wend
                      Loop
                      End
                      P0:
                      Start Timer0
                      Portb.0 = 1 : Main = 1 : P = 0
                      Return
                      
                      P1:
                      Start Timer0
                      Portb.1 = 1 : Main = 1 : P = 1
                      Return
                      Delayoff:
                      
                      If F < 2 Then : Incr F : End If
                      Return

                      دیدگاه


                        #12
                        پاسخ : قطع و وصل لحظه ای ATTINY13

                        نوشته اصلی توسط میثم قاسمی نیا
                        سلام برنامهرو نوشتم فک کنم چیزی باشه که نیاز دارین
                        تست کنید ببینید چطوره
                        کد:
                        $regfile = "attiny13a.dat "
                        $crystal = 1000000
                        $hwstack = 10
                        $swstack = 8
                        $framesize = 8
                        Dim A As Byte
                        Dim Main As Bit
                        Dim Fe As Single
                        Dim F As Byte
                        Dim P As Bit
                         Config Pinb.0 = Output
                           Config Pinb.1 = Output
                           Config Pinb.3 = Input
                           Config Pinb.4 = Input
                        Config Timer0 = Timer0 , Prescale = 1024
                        Enable Timer0
                        Enable Interrupts
                        On Timer0 Delayoff
                        Stop Timer0
                        Main = 0 : F = 0 : Fe = 0 : A = 0
                        Do
                        While Main = 0
                        Debounce Pinb.3 , 0 , P0 , Sub
                        Debounce Pinb.4 , 0 , P1 , Sub
                        Wend
                        While Main = 1
                        If F = 2 Then : A = Timer0 : End If
                        If A > 171 And P = 0 Then : Portb.0 = 0 : A = 0 : Main = 0 : F = 0 : Stop Timer0 : End If
                        If A > 171 And P = 1 Then : Portb.1 = 0 : A = 0 : Main = 0 : F = 0 : Stop Timer0 : End If
                        Wend
                        Loop
                        End
                        P0:
                        Start Timer0
                        Portb.0 = 1 : Main = 1 : P = 0
                        Return
                        
                        P1:
                        Start Timer0
                        Portb.1 = 1 : Main = 1 : P = 1
                        Return
                        Delayoff:
                        
                        If F < 2 Then : Incr F : End If
                        Return
                        سلام
                        با تشکر اصلا نمیدونم چطوری ازت تشکر کنم
                        فقط چطوری تایمش رو زیاد کنم
                        تایم قطع و وصل منظورمه

                        دیدگاه


                          #13
                          پاسخ : قطع و وصل لحظه ای ATTINY13

                          نوشته اصلی توسط mohammad safarnejad
                          سلام
                          با تشکر اصلا نمیدونم چطوری ازت تشکر کنم
                          فقط چطوری تایمش رو زیاد کنم
                          تایم قطع و وصل منظورمه
                          خواهش میکنم کاری نکردم
                          اگه میخوای با کلید زمان رو افزایش بدی که چندتا خط دیگه باید اضافه بشه وگرنه باید تو برنامه یکی دو متغیرو تغییر بدی...خوب ا ین تایمر هر0.262144ثانیه میره تو زیر برنامش که همون delayoffباشه اونجا متغیر fزیاد میشه،مثلا شما 0.7 ثایه نیاز داشتی پس این مقدار رو ضربدر 256میکنی که میشه 179.2 واین عدد رو تقسیم بر0.262144که میشه 683.59375که تقسیم بر 256 میشه 2.67028809 پس fبرابر 2 هست وباضرب 0.67028809 در 256 عدد 171.6 میده که این رو باید در حلقه دوم در دستور شرط قرار بدی که مجموعا بشه 700 میلی ثانیه

                          دیدگاه


                            #14
                            پاسخ : قطع و وصل لحظه ای ATTINY13

                            نوشته اصلی توسط میثم قاسمی نیا
                            خواهش میکنم کاری نکردم
                            اگه میخوای با کلید زمان رو افزایش بدی که چندتا خط دیگه باید اضافه بشه وگرنه باید تو برنامه یکی دو متغیرو تغییر بدی...خوب ا ین تایمر هر0.262144ثانیه میره تو زیر برنامش که همون delayoffباشه اونجا متغیر fزیاد میشه،مثلا شما 0.7 ثایه نیاز داشتی پس این مقدار رو ضربدر 256میکنی که میشه 179.2 واین عدد رو تقسیم بر0.262144که میشه 683.59375که تقسیم بر 256 میشه 2.67028809 پس fبرابر 2 هست وباضرب 0.67028809 در 256 عدد 171.6 میده که این رو باید در حلقه دوم در دستور شرط قرار بدی که مجموعا بشه 700 میلی ثانیه
                            نه قرار نیست با کلید انجام بشه
                            متوجه شدم دستت درد نکنه
                            شرمنده کردی :job:

                            دیدگاه

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