نمایش نتایج: از 1 به 2 از 2

موضوع: برنامه جدید فلاشر

  1. #1
    کاربر عادی hamed_avr آواتار ها
    تاریخ عضویت
    May 2014
    نوشته ها
    77
    تشکر
    15
    تشکر شده 24 بار در 19 پست

    برنامه جدید فلاشر

    با سلام خدمت دوستان عزیز.
    تو نت یه برنامه فلاشر با زبان بیسیک گرفتم به نظرم جالب اومد . هم کلید انتخاب افکت داره هم ولوم کنترل سرعت.
    حالا بنده چند تا سوال از کارشناسان محترم دارم : 1) یه توضیح کلی در موردش بدید و اینکه میشه میکرو رو به اتمگا 16ارتقا داد؟
    2)در قسمت آنالوگ به دیجیتال برام سوال پیش اومد که چه تکنیکی به کار برده و از انالوگ میخونه ؟
    3) امکلن داره یه ولوم هم برای کنترل نور کل پورتها گذاشت؟ به برنامه چه کدی باید اضافه بشه؟
    ممنونم از کمکتون
    کد:
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Portb = Input
    
    Config Portd = Output
    Config Pinc.0 = Input
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc   'ADC=AUTO
    Config Timer1 = Timer , Prescale = 8                        'TIMER1 PERSCAL
    Enable Interrupts
          Enable Timer1
          On Ovf1 Mahdi
          Start Timer1
    
    
    Dim Speed As Word
    'Dim Speed1 As Word
    
    Dim Key0 As Bit
    Dim Key1 As Bit
    Dim Key2 As Bit
    Dim Key3 As Bit
    Dim Key4 As Bit
    Dim Key5 As Bit
    Dim Key6 As Bit
    Dim Key7 As Bit
    
    Dim Efect As Byte
    Dim Replay As Byte
    Dim Pwwm As Byte
    Dim Repolay As Byte
    
    Pwmspeed Alias 10
    
      Nesbat Alias 4
    
      '================================================PWM==========================
      Max_var_pwm Alias 99
     Dim Pwm(8) As Byte , A As Byte
     A = Max_var_pwm
    
       'Config All =============================================
       'Config Timers
       'Config Ports
          Config Timer0 = Timer , Prescale = 8
          Enable Interrupts
          Enable Timer0
          On Ovf0 T0
          Tcnt0 = 105
          Start Timer0
          Ddrd = 255
          Stop Timer0
       'End Config ===========================================
       '===============================================END==========================
    
      S0 Alias Pinb.0
      S1 Alias Pinb.1
      S2 Alias Pinb.2
      S3 Alias Pinb.3
      S4 Alias Pinb.4
      S5 Alias Pinb.5
      S6 Alias Pinb.6
      S7 Alias Pinb.7
    
      L0 Alias Portd.0
      L1 Alias Portd.1
      L2 Alias Portd.2
      L3 Alias Portd.3
      L4 Alias Portd.4
      L5 Alias Portd.5
      L6 Alias Portd.6
      L7 Alias Portd.7
    
      Led1 Alias Portd.0
      Led2 Alias Portd.1
      Led3 Alias Portd.2
      Led4 Alias Portd.3
      Led5 Alias Portd.4
      Led6 Alias Portd.5
      Led7 Alias Portd.6
      Led8 Alias Portd.7
    
    Pot Alias Portc.0
    
    Start Adc
    
    'for test port d
    Portd = &HFF
    Waitms 30
    Portd = 0
    Waitms 30
    'end test
    
    Speed = 0
    'Speed1 = 0
    
    Do
    
    '-----------------------------------------
    If Key0 = 1 Then
    
      For Replay = 0 To 5
    '{EFECT1
    
    Start Timer0
    Pwwm = 0
    
    While Pwwm < 99
    
    Pwm(1) = Pwwm
    Pwm(2) = Pwwm
    Pwm(3) = Pwwm
    Pwm(4) = Pwwm
    Pwm(5) = Pwwm
    Pwm(6) = Pwwm
    Pwm(7) = Pwwm
    Pwm(8) = Pwwm
    
    Waitms Pwmspeed
    
    Incr Pwwm
    
    Wend
    
    While Pwwm > 0
    
    Pwm(1) = Pwwm
    Pwm(2) = Pwwm
    Pwm(3) = Pwwm
    Pwm(4) = Pwwm
    Pwm(5) = Pwwm
    Pwm(6) = Pwwm
    Pwm(7) = Pwwm
    Pwm(8) = Pwwm
    
    Waitms Pwmspeed
    
    Decr Pwwm
    
    Wend
    
    Pwwm = 0
     '}
     Next
    
     Stop Timer0
    
    Else
    Portd = 0
    End If
    '-----------------------------------------
    If Key1 = 1 Then
    
    '{EFECT2
    For Replay = 0 To 2
    Portd = &HFF
    Waitms Speed
    Portd = 0
    Waitms Speed.
    Next
    '}
    Else
    Portd = 0
    End If
    '-----------------------------------------
    If Key2 = 1 Then
    
    '{EFECT3
     For Replay = 0 To 2
      Portd = &B00000001
        Waitms Speed
      Portd = &B00000010
        Waitms Speed
      Portd = &B00000100
        Waitms Speed
      Portd = &B00001000
        Waitms Speed
      Portd = &B00010000
        Waitms Speed
      Portd = &B00100000
        Waitms Speed
      Portd = &B01000000
        Waitms Speed
      Portd = &B10000000
    
        Waitms Speed
      Portd = &B01000000
        Waitms Speed
      Portd = &B00100000
        Waitms Speed
      Portd = &B00010000
        Waitms Speed
      Portd = &B00001000
        Waitms Speed
      Portd = &B00000100
        Waitms Speed
      Portd = &B00000010
        Waitms Speed
      Portd = 0
     Next
    '}
    Else
    Portd = 0
    End If
    '-----------------------------------------
    If Key3 = 1 Then
    
    '{EFECT4
    For Replay = 0 To 2
    Portd = &B11111110
    Waitms Speed
    Portd = &B11111101
    Waitms Speed
    Portd = &B11111011
    Waitms Speed
    Portd = &B11110111
    Waitms Speed
    Portd = &B11101111
    Waitms Speed
    Portd = &B11011111
    Waitms Speed
    Portd = &B10111111
    Waitms Speed
    Portd = &B01111111
    
    Waitms Speed
    Portd = &B10111111
    Waitms Speed
    Portd = &B11011111
    Waitms Speed
    Portd = &B11101111
    Waitms Speed
    Portd = &B11110111
    Waitms Speed
    Portd = &B11111011
    Waitms Speed
    Portd = &B11111101
    Waitms Speed
    Portd = &B11111110
    Waitms Speed
    Portd = 0
    Next
    
    '}
    Else
    Portd = 0
    End If
    '-----------------------------------------
    If Key4 = 1 Then
    
    '{EFECT5
    For Replay = 0 To 2
      Portd = &B00000001
     Waitms Speed
      Portd = &B00000011
     Waitms Speed
      Portd = &B00000111
     Waitms Speed
      Portd = &B00001111
     Waitms Speed
      Portd = &B00011111
     Waitms Speed
      Portd = &B00111111
     Waitms Speed
      Portd = &B01111111
     Waitms Speed
      Portd = &B11111111
     Waitms Speed
      Portd = &B00000000
     Waitms Speed
      Portd = &B10000000
     Waitms Speed
      Portd = &B11000000
     Waitms Speed
      Portd = &B11100000
     Waitms Speed
      Portd = &B11110000
     Waitms Speed
      Portd = &B11111000
     Waitms Speed
      Portd = &B11111100
     Waitms Speed
      Portd = &B11111110
     Waitms Speed
      Portd = &B11111111
     Waitms Speed
       Portd = &B00000000
      Waitms Speed
       Next
    '}
    Else
    Portd = 0
    End If
    '-----------------------------------------
    If Key5 = 1 Then
    
    '{EFECT6
    
    
    '}
    Else
    Portd = 0
    End If
    
    If Key6 = 1 Then
    
    '{EFECT7
    
    
    '}
    Else
    Portd = 0
    End If
    '-----------------------------------------
    If Key7 = 1 Then
    
    '{EFECT8
    
    
    '}
    Else
    Portd = 0
    End If
    '-----------------------------------------
    
    Loop
    
    End                                                         'end program
    
    
    Mahdi:
    
    Speed = Getadc(5)
    Speed = Speed / Nesbat
    'Speed1 = Speed * Nesbatpwm
    
    'SCAN KEYS
       If S0 = 1 Then Key0 = 1
       If S0 = 0 Then Key0 = 0
    
       If S1 = 1 Then Key1 = 1
       If S1 = 0 Then Key1 = 0
    
       If S2 = 1 Then Key2 = 1
       If S2 = 0 Then Key2 = 0
    
       If S3 = 1 Then Key3 = 1
       If S3 = 0 Then Key3 = 0
    
       If S4 = 1 Then Key4 = 1
       If S4 = 0 Then Key4 = 0
    
       If S5 = 1 Then Key5 = 1
       If S5 = 0 Then Key5 = 0
    
       If S6 = 1 Then Key6 = 1
       If S6 = 0 Then Key6 = 0
    
       If S7 = 1 Then Key7 = 1
       If S7 = 0 Then Key7 = 0
    
    'END SCAN
    
    Return
    
    
    T0:
       Tcnt0 = 105
       If A > 0 Then
          If A = Pwm(1) Then Led1 = 1
          If A = Pwm(2) Then Led2 = 1
          If A = Pwm(3) Then Led3 = 1
          If A = Pwm(4) Then Led4 = 1
          If A = Pwm(5) Then Led5 = 1
          If A = Pwm(6) Then Led6 = 1
          If A = Pwm(7) Then Led7 = 1
          If A = Pwm(8) Then Led8 = 1
    
       End If
       Decr A
       If A = 255 Then
          A = Max_var_pwm
          Portd = 0
       End If
    Return

  2. کاربران زیر از این پست مفید hamed_avr تشکر نموده اند:

    aliavr (05-09-2015)

  3. #2
    مدیریت سایت LightIran آواتار ها
    تاریخ عضویت
    Apr 2014
    نوشته ها
    1,122
    تشکر
    224
    تشکر شده 1,440 بار در 641 پست
    با سلام
    در مورد سوالاتون:
    1- برنامه متاسفانه روند گیج کننده و نسبتا سنگینی داره و اصول برنامه نویسی رعایت نشده و به قولی آماتوری نوشته شده و احتمال هنگ کردن برنامه وجود داره. البته نکات مثبتی هم داره از جمله روش PWM در یک افکت و کلیدهای انتخاب برنامه که میشه با برنامه نویسی درست استفاده خوبی ازشون کرد. نکته شدیدا منفی که در این برنامه وجود داره این هست که برای افزودن و یا کاستن و حتی تغییر در یک افکت باید مجموعه ای از کدها تغییر کنه که به هیچ وجه مطلوب نیست.
    در مورد امکان تغییر به میکرو مگا 16 بله مشخصا هست!
    2- برای خوندن آنالوگ به دیجیتال تکنیک خاصی نیست و به مانند فلاشر نمونه موجود در انجمن از وقفه تایمر و تبدیل ساده استفاده شده و در نهایت مقدار بدست آمده رو بر یک مقسم تقسیم کرده.
    3- همونطوری که گفته شد این برنامه اصول برنامه نویسی رو رعایت نکرده و بر فرض برای افزودن امکان کنترل نور باید برای هر افکت کدهای متغیری افزوده بشه.
    در کل توصیه میشه از کدهای این چنینی برای فلاشر استفاده نکنید و از این نوع برنامه ها صرفا برای یادگیری و به نوعی نکته برداری استفاده کنید. به طور مثال با روش PWM درج شده و یا انتخاب برنامه موجود در این برنامه و ترکیب با فلاشر نمونه انجمن میتونید فلاشر نیمه حرفه ای خوبی بسازید. برای تمامی این موارد البته پیش نیاز اصلی تسلط مناسب به کدنویسی و اصول الکترونیک دیجیتال هست.

    موفق باشید
    You can if you want!Trust Me
    تنها غیرممکن غیرممکن است پس تلاش کنید!

  4. کاربران زیر از این پست مفید LightIran تشکر کرده اند:

    aliavr (05-09-2015),hamed_avr (05-06-2015),omid20 (01-01-2016)

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

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  
با کلیک بر روی 1+ ما را در گوگل محبوب کنید