اطلاعیه

Collapse
No announcement yet.

تایمر با 7segment

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

    تایمر با 7segment

    سلام دوستان
    راستش من ی مدار ساده میخام ترجیحا با atmega8 , 7segment باشه و درواقع عملکرد تایمر رو انجام بده
    یعنی با روشن شدن مدار سون سگمنت ها صفر باشن و با دو شستی up و down عدد تایمر رو تغییر بدیم و با زدن استارت تایمر شروع به کار کنه و یه پایه یک بشه
    با تموم شدن زمان تعیین شده پایه صفر بشه
    خیلی هم دقت نمیخاد ، اگه تو 10 ساعت مثلا 1 دقیقه هم عقب جلو رفت مهم نیست
    اگر مدار آماده ای دارید ممنون میشم به اشتراک بذارید


    اضافه شده در تاریخ :
    کسی نیست کمک کنه :angry: :angry: :angry: :angry: :angry: :angry:
    استاد کار پادو نميشه ، کسي خوشبختي رو به تو کادو نميده

    #2
    پاسخ : تایمر با 7segment

    سلام
    حداقل و حداکثر زمان شمارش چقدر باشه؟
    واحد شمارش؟

    دیدگاه


      #3
      پاسخ : تایمر با 7segment

      نوشته اصلی توسط azta3000
      سلام
      حداقل و حداکثر زمان شمارش چقدر باشه؟
      واحد شمارش؟
      از صفر تا 9999 دقیقه یا اگه نشه تا 999 دقیقه
      واحد هم دقیقه

      مثلا تنظیم کنی 746 دقیقه
      استاد کار پادو نميشه ، کسي خوشبختي رو به تو کادو نميده

      دیدگاه


        #4
        پاسخ : تایمر با 7segment

        درود
        کاتد مشترک میخوای یا آند مشترک ؟؟
        [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
        معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
        معرفی نرم افزار Codewizard PWM
        با من بیشتر آشنا شوید

        دیدگاه


          #5
          پاسخ : تایمر با 7segment

          نوشته اصلی توسط سامان اسدی
          درود
          کاتد مشترک میخوای یا آند مشترک ؟؟
          با تشکر

          هـــــــــــــیـــــچ تفاوتی نمی کنه هر سون سگمنتی باشه :agree:
          فقط سه تا یا 4 تا 7segment داشته باشه
          استاد کار پادو نميشه ، کسي خوشبختي رو به تو کادو نميده

          دیدگاه


            #6
            پاسخ : تایمر با 7segment

            نوشته اصلی توسط mmm021
            با تشکر

            هـــــــــــــیـــــچ تفاوتی نمی کنه هر سون سگمنتی باشه :agree:
            فقط سه تا یا 4 تا 7segment داشته باشه

            سلام مجدد
            مهندس بنده از داخل نت یه مدار پیدا کردم که خیلی به مدار مورد نظرم شبیهِ

            این فایل http://www.uplooder.net/cgi-bin/dl.c...339ff585713211 یه ساعته با atmega8 و 7segment و کامپلیر بسکام ، یعنی دقیقا همون چیزی که میخاستم :wow:

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

            تنها تغییری که باید ایجاد بشه اینه که شمارش برعکس باشه

            اول که عدد صفره
            بعد مثلا تنظیم می کنیم 2 ساعت و 28 دقیقه

            فقط باید زمانش کاهش پیدا کنه تا صفر بشه و یه پایه رو یک کنه

            باز هم ازتون ممنونم :redface:
            استاد کار پادو نميشه ، کسي خوشبختي رو به تو کادو نميده

            دیدگاه


              #7
              پاسخ : تایمر با 7segment

              این برنامه رو نوشتم ...
              برنامه خوبیه ... از 1 تا 9999 دقیقه کار میکنه ... تنظیم کردنش خیلی راحته ...
              امیدوارم که خوشتون بیاد
              دوستان اگر وقت کردند روی عمل تست کنند ...
              [code=qbasic]
              $regfile = "m8def.dat"
              $crystal = 8000000
              $hwstack = 100
              $swstack = 100
              $framesize = 100


              Config Portd = Output
              Config Portb.0 = Output
              Config Portb.1 = Output
              Config Portb.2 = Output
              Config Portb.3 = Output
              Config Portb.4 = Output
              Config Portb.5 = Output

              Led Alias Portb.4
              Led_pulse Alias Portb.5
              ' Timer / Counter 1 Initialization
              ' Clock source: System Clock
              ' Clock value: 8000.000 kHz
              ' Mode: CTC top=OCR1A
              ' Compare A Match Interrupt: On

              On Timer1 Scan_7segment
              Enable Ovf1
              Stop Timer1

              Config Timer2 = Timer , Async = On , Prescale = 128
              On Timer2 _timer2
              Enable Timer2

              Enable Interrupts

              Pull_up Alias 1

              Portc.0 = Pull_up
              Portc.1 = Pull_up
              Portc.2 = Pull_up
              Portc.3 = Pull_up

              Seg_a Alias Portd.0
              Seg_b Alias Portd.1
              Seg_c Alias Portd.2
              Seg_d Alias Portd.3
              Seg_e Alias Portd.4
              Seg_f Alias Portd.5
              Seg_g Alias Portd.6
              C1 Alias Portb.0
              C2 Alias Portb.1
              C3 Alias Portb.2
              C4 Alias Portb.3
              Up Alias Pinc.0
              Ok Alias Pinc.1
              Down Alias Pinc.2
              On_common_cathode Alias 1
              Off_common_cathode Alias 0
              On_common_anode Alias 0
              Off_common_anode Alias 1
              _on Alias On_common_cathode
              _off Alias Off_common_cathode
              On_sw Alias 0
              Adjust Alias 1
              Working_out Alias 0

              Declare Sub Display_7segment(byval X As Word)
              Declare Sub Jodasazi
              Dim Digit(4) As Word , A As Byte , _time As Word , _time2 As Word , _
              _mode As Bit , Y As Word , Y2 As Word , Z As Byte , S As Byte
              A = 1

              Yekan Alias Digit(1)
              Dahgan Alias Digit(2)
              Sadgan Alias Digit(3)
              Hezargan Alias Digit(4)
              _time = 1
              _time2 = _time

              Call Jodasazi
              Led = 1


              Do
              If Up = On_sw Or Down = On_sw Then
              Assr = &H00
              Tccr2 = &H00
              Tccr1b = 1
              _mode = Adjust
              Do
              If Up = On_sw And Down <> On_sw Then
              Incr _time : If _time = 10000 Then _time = 0
              'Call Bip
              Call Jodasazi
              Z = 0
              While Up = On_sw And Down <> On_sw And Z < 250
              Incr Z
              Waitms 6
              If Z = 250 Then
              Z = 0
              While Up = On_sw And Down <> On_sw And Z < 5
              Incr Z
              Waitms 400
              Incr _time : If _time = 10000 Then _time = 0
              Call Jodasazi
              Wend
              If Z = 5 Then
              Z = 0
              While Up = On_sw And Down <> On_sw And Z < 10
              Incr Z
              Waitms 200
              Incr _time : If _time = 10000 Then _time = 0
              Call Jodasazi
              Wend
              If Z = 10 Then
              Z = 0
              While Up = On_sw And Down <> On_sw And Z < 15
              Incr Z
              Waitms 100
              Incr _time : If _time = 10000 Then _time = 0
              Call Jodasazi
              Wend
              If Z = 15 Then
              Z = 0
              While Up = On_sw And Down <> On_sw
              Incr Z
              Waitms 50
              Incr _time : If _time = 10000 Then _time = 0
              Call Jodasazi
              Wend
              End If
              End If
              End If
              End If
              Wend
              End If

              If Down = On_sw And Up <> On_sw Then
              Decr _time : If _time = &HFFFF Then _time = 9999
              'Call Bip
              Call Jodasazi
              Z = 0
              While Down = On_sw And Up <> On_sw And Z < 250
              Incr Z
              Waitms 6
              If Z = 250 Then
              Z = 0
              While Down = On_sw And Up <> On_sw And Z < 5
              Incr Z
              Waitms 400
              Decr _time : If _time = &HFFFF Then _time = 9999
              Call Jodasazi
              Wend
              If Z = 5 Then
              Z = 0
              While Down = On_sw And Up <> On_sw And Z < 10
              Incr Z
              Waitms 200
              Decr _time : If _time = &HFFFF Then _time = 9999
              Call Jodasazi
              Wend
              If Z = 10 Then
              Z = 0
              While Down = On_sw And Up <> On_sw And Z < 15
              Incr Z
              Waitms 100
              Decr _time : If _time = &HFFFF Then _time = 9999
              Call Jodasazi
              Wend
              If Z = 15 Then
              Z = 0
              While Down = On_sw And Up <> On_sw
              Incr Z
              Waitms 50
              Decr _time : If _time = &HFFFF Then _time = 9999
              Call Jodasazi
              Wend
              End If
              End If
              End If
              End If
              Wend
              End If

              If Ok = On_sw Then
              _mode = Working_out
              _time2 = _time
              Led = 1
              Tccr1b = 0
              Tcnt2 = 0
              Assr = &H08
              Tccr2 = &H05
              S = 0
              End If
              Loop Until _mode = Adjust
              End If
              If Ok = On_sw Then
              _time = _time2
              Led = 1
              Call Jodasazi
              Assr = &H08
              Tccr2 = &H05
              End If
              Incr A
              If A > 4 Then A = 1
              Call Display_7segment(digit(a))
              Waitms 2
              Loop
              End

              Scan_7segment:
              Tcnt1 = 49536
              Incr A
              If A = 5 Then A = 1
              Call Display_7segment(digit(a))
              Return

              _timer2:
              Incr S
              If S = 60 Then
              S = 0
              Decr _time
              Call Jodasazi
              If _time = 0 Then
              Led = 0
              Assr = &H00
              Tccr2 = &H00
              End If
              End If
              Led_pulse = 1
              Waitms 20
              Led_pulse = 0
              Return

              Sub Jodasazi
              Y = _time
              Hezargan = Y / 1000
              Y2 = Hezargan * 1000
              Y = Y - Y2
              Sadgan = Y / 100
              Y2 = Sadgan * 100
              Y = Y - Y2
              Dahgan = Y / 10
              Y2 = Dahgan * 10
              Y = Y - Y2
              Yekan = Y
              End Sub

              Sub Display_7segment(byval X As Word)
              Seg_a = 0
              Seg_b = 0
              Seg_c = 0
              Seg_d = 0
              Seg_e = 0
              Seg_f = 0
              Seg_g = 0
              Waitus 50
              Select Case A
              Case 1:
              C4 = _off
              C1 = _on
              Case 2:
              C1 = _off
              C2 = _on
              Case 3:
              C2 = _off
              C3 = _on
              Case 4:
              C3 = _off
              C4 = _on
              End Select
              Select Case X
              Case 0:
              Seg_a = _on
              Seg_b = _on
              Seg_c = _on
              Seg_d = _on
              Seg_e = _on
              Seg_f = _on
              Seg_g = _off
              Case 1:
              Seg_a = _off
              Seg_b = _on
              Seg_c = _on
              Seg_d = _off
              Seg_e = _off
              Seg_f = _off
              Seg_g = _off
              Case 2:
              Seg_a = _on
              Seg_b = _on
              Seg_c = _off
              Seg_d = _on
              Seg_e = _on
              Seg_f = _off
              Seg_g = _on
              Case 3:
              Seg_a = _on
              Seg_b = _on
              Seg_c = _on
              Seg_d = _on
              Seg_e = _off
              Seg_f = _off
              Seg_g = _on
              Case 4:
              Seg_a = _off
              Seg_b = _on
              Seg_c = _on
              Seg_d = _off
              Seg_e = _off
              Seg_f = _on
              Seg_g = _on
              Case 5:
              Seg_a = _on
              Seg_b = _off
              Seg_c = _on
              Seg_d = _on
              Seg_e = _off
              Seg_f = _on
              Seg_g = _on
              Case 6:
              Seg_a = _on
              Seg_b = _off
              Seg_c = _on
              Seg_d = _on
              Seg_e = _on
              Seg_f = _on
              Seg_g = _on
              Case 7:
              Seg_a = _on
              Seg_b = _on
              Seg_c = _on
              Seg_d = _off
              Seg_e = _off
              Seg_f = _off
              Seg_g = _off
              Case 8:
              Seg_a = _on
              Seg_b = _on
              Seg_c = _on
              Seg_d = _on
              Seg_e = _on
              Seg_f = _on
              Seg_g = _on
              Case 9:
              Seg_a = _on
              Seg_b = _on
              Seg_c = _on
              Seg_d = _on
              Seg_e = _off
              Seg_f = _on
              Seg_g = _on
              End Select
              End Sub
              [/code]



              پایه ها را میتوانید خودتان تغییر دهید ...
              قابل اجرا روی آند مشترک و کاتد مشترک ...
              برنامه به صورت پیشفرض روی 1 دقیقه تنظیم است ...
              شما باید با بالا زدن یا پایین زدن کلید آن را تنظیم کنید ...
              برنامه طوری طراحی شده که با گرفتن دکمه های بالا یا پایین ابتدا یواش زیاد یا کم میشود و سپس سرعت آن افزایش می یابد ...
              زمانی که روی دکمه OK بزنید زمان از آن موقع شروع به شمارش میکنم ...
              یک LED روی مدار هست که موقع کار کردن تایمر هر یک ثانیه یکبار چشمک میزند ...
              دوستانی که با این برنامه و مدار کار میکنند نظر خودشون را اعلام کننند ...

              شاد و پیروز باشید
              [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
              معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
              معرفی نرم افزار Codewizard PWM
              با من بیشتر آشنا شوید

              دیدگاه

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