اطلاعیه

Collapse
No announcement yet.

مشکل با تایمر atmega8

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

    مشکل با تایمر atmega8

    سلام
    من یه مدار فلشر ساختم , متاسفانه در زمان وصل کردن منبع تغذیه تایم بین فلش ها کم هستش , مثلا باید تایم بین فلش 5ثانیه باشه اما میشه 3ثانیه
    این مشکل با ریست کردن از طریق پایه ریست برطرف میشه
    فکر میکنین دلیلش چی میتونه باشه؟

    #2
    پاسخ : مشکل با تایمر atmega8

    oo:
    با درود . . .
    توی پروتئوس چطور جواب میده؟؟؟
    اگه اونجا درسته و مطمئنی برنامت هم درسته یه خازن 220 میکرو بردار و به خروجی رگولاتورت وصل کن. بعضی وقتها نوسان جریان باعث یه چنین سوتی هایی میشه.


    درد من تنهایی نیست؛ بلکه مرگ ملتی است که گدایی را قناعت، بی‏عرضگی را صبر، و با تبسمی بر لب این حماقت را حکمت خداوند می‏ نامند! "گاندی"

    به دلیل وجود برخی مشکلات و بی احترامی ها این اکانت رو غیر فعال کردم. همیشه سر بلند باشید.
    بدرود . . .

    دیدگاه


      #3
      پاسخ : مشکل با تایمر atmega8

      اگه برنامه رو بزارین بهتر میشه فهمید اشکال از چیه .
      [glow=blue,2,300]آنقدر به تاریکی لعنت نفرستید ، یک شمع روشن کنید. [/glow]

      دیدگاه


        #4
        پاسخ : مشکل با تایمر atmega8

        نوشته اصلی توسط وحید نصیری
        oo:
        با درود . . .
        توی پروتئوس چطور جواب میده؟؟؟
        اگه اونجا درسته و مطمئنی برنامت هم درسته یه خازن 220 میکرو بردار و به خروجی رگولاتورت وصل کن. بعضی وقتها نوسان جریان باعث یه چنین سوتی هایی میشه.
        در پروتئوس مشکلی نداره
        خازن داره , یه 100 و یه 1000 رو تغذیه گذاشتم

        دیدگاه


          #5
          پاسخ : مشکل با تایمر atmega8

          کد:
          '--------------------------- in the name of GOD --------------------------
          
          $regfile = "m8def.dat"
          '$crystal = 8000000
          
          Config Timer0 = Timer , Prescale = 1024
          Enable Timer0
          On Ovf0 Sectic
          Start Timer0
          
          Enable Interrupts
          
          Config Adc = Single , Prescaler = Auto
          Start Adc
          
          Dim Dip_sw As Byte , Sec_1 As Byte , I As Byte , I_2 As Byte , Sel As Word , Sel_sample As Word , Calib As Word , Calib_sample As Word
          Dim Active As Bit
          Dim Flash As Byte
          
          
          Config Pinb.5 = Input                    'dip sw 1
          Ddrb.5 = 0 : Portb.5 = 1
          Config Pinb.4 = Input                    'dip sw 2
          Ddrb.4 = 0 : Portb.4 = 1
          Config Pinb.3 = Input                    'dip sw 3
          Ddrb.3 = 0 : Portb.3 = 1
          Config Pinb.2 = Input                    'dip sw 4
          Ddrb.2 = 0 : Portb.2 = 1
          Config Pinb.1 = Input                    'dip sw 5
          Ddrb.1 = 0 : Portb.1 = 1
          Config Pinb.0 = Input                    'dip sw 6
          Ddrb.0 = 0 : Portb.0 = 1
          Config Pind.7 = Input                    'dip sw 7
          Ddrd.7 = 0 : Portd.7 = 1
          Config Pind.6 = Input                    'dip sw 8
          Ddrd.6 = 0 : Portd.6 = 1
          Config Pind.5 = Input                    'with out sel
          Ddrd.5 = 0 : Portd.5 = 1
          
          'Dip_sw_1 Alias Pind.0
          'Dip_sw_2 Alias Pind.1
          'Dip_sw_3 Alias Pind.2
          'Dip_sw_4 Alias Pind.3
          'Dip_sw_5 Alias Pind.4
          'Dip_sw_6 Alias Pind.5
          'Dip_sw_7 Alias Pind.6
          'Dip_sw_8 Alias Pind.7
          
          
          Config Portd.0 = Output
          
          Led Alias Portd.0
          
          Do
          
          If Pind.5 = 0 Then Active = 1
          Dip_sw.0 = Pinb.5
          Dip_sw.1 = Pinb.4
          Dip_sw.2 = Pinb.3
          Dip_sw.3 = Pinb.2
          Dip_sw.4 = Pinb.1
          Dip_sw.5 = Pinb.0
          Dip_sw.6 = Pind.7
          Dip_sw.7 = Pind.6
          
          
          
          If Active = 1 Then
            Select Case Dip_sw
                 Case &B01111111:               '1sec - 1sec - 5sec
                         Set Led
                         Wait 1
                         Reset Led
                         Wait 1
                         Set Led
                         Wait 1
                         Reset Led
                         Wait 5
                         'If Flash = 1 Then Set Led
                         'If Flash = 2 Then Reset Led
                         'If Flash = 3 Then Set Led
                         'If Flash = 4 Then Reset Led
                         'If Flash = 8 Then Flash = 0
                 Case &B10111111:               '1sec - 5sec
                         Set Led
                         Wait 1
                         Reset Led
                         Wait 5
                         'If Flash = 1 Then Set Led
                         'If Flash = 2 Then Reset Led
                         'If Flash = 6 Then Flash = 0
                 Case &B11011111:               '1sec - 7sec
                         Set Led
                         Wait 1
                         Reset Led
                         Wait 7
                         'If Flash = 1 Then Set Led
                         'If Flash = 2 Then Reset Led
                         'If Flash = 8 Then Flash = 0
                 Case &B11101111:               '1sec - 1sec
                         Set Led
                         Wait 1
                         Reset Led
                         Wait 1
                         'If Flash = 1 Then Set Led
                         'If Flash = 2 Then Reset Led
                         'If Flash = 2 Then Flash = 0
            End Select
          End If
          
          
          Loop
          End
          
          Sectic:
          Incr I
          If I > 30 Then
            Stop Timer0
            I = 0
            Incr Sec_1
            Sel_sample = Getadc(5)
            Sel = Sel + Sel_sample
            Calib_sample = Getadc(4)
            Calib = Calib + Calib_sample
            If Sec_1 = 30 Then
              Sel = Sel / 30
              Calib = Calib / 30
              Sec_1 = 0
              Select Case Calib
                  Case Is < 100:
                         If Sel > 200 Then
                                  Active = 1
                         Else
                                  Active = 0
                         End If
                  Case 101 To 200:
                         If Sel > 350 Then
                                  Active = 1
                         Else
                                  Active = 0
                         End If
                  Case 201 To 300:
                         If Sel > 450 Then
                                  Active = 1
                         Else
                                  Active = 0
                         End If
                  Case 301 To 400:
                         If Sel > 500 Then
                                  Active = 1
                         Else
                                  Active = 0
                         End If
                  Case 401 To 500:
                         If Sel > 600 Then
                                  Active = 1
                         Else
                                  Active = 0
                         End If
                  Case 501 To 600:
                         If Sel > 800 Then
                                  Active = 1
                         Else
                                  Active = 0
                         End If
                  Case 601 To 700:
                         If Sel > 900 Then
                                  Active = 1
                         Else
                                  Active = 0
                         End If
                  Case 701 To 800:
                         If Sel > 1000 Then
                                  Active = 1
                         Else
                                  Active = 0
                         End If
                  Case 801 To 900:
                         If Sel > 1200 Then
                                  Active = 1
                         Else
                                  Active = 0
                         End If
                  Case Is > 900:
                         If Sel > 1300 Then
                                  Active = 1
                         Else
                                  Active = 0
                         End If
          
              End Select
            Sel = 0
            Calib = 0
            End If
          Start Timer0
          End If
          If Pind.5 = 0 Then Active = 1
          Return

          دیدگاه


            #6
            پاسخ : مشکل با تایمر atmega8

            شما Start timer0 رو بیار خط قبل از Do ببین درست میشه یا نه ؟
            [glow=blue,2,300]آنقدر به تاریکی لعنت نفرستید ، یک شمع روشن کنید. [/glow]

            دیدگاه


              #7
              پاسخ : مشکل با تایمر atmega8

              فرقی نکرد
              کسی مداری داره که وقتی میکرو شروع به کار میکنه اول ریست شه؟

              دیدگاه


                #8
                پاسخ : مشکل با تایمر atmega8

                یادآوری...

                دیدگاه


                  #9
                  پاسخ : مشکل با تایمر atmega8

                  سلام
                  شما می تونی از طریق رجیستر Brownout پروسسورتون رو هر وقتی که دوست داشتی ریست کنی

                  دیدگاه

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