اطلاعیه

Collapse
No announcement yet.

چگونه همه پایه های میکروکنترلر AVR را PWM کنیم ؟؟

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

    پاسخ : (برنامه بسکام)چگونه تمام پایه های ATmega16-32-64-128 را PWM کنیم ؟؟!!! [آموزشی]

    نوشته اصلی توسط سامان اسدی
    پیش خودم گفتم که این سورس که اینقدر خوب جواب داده چرا با زبانهای دیگه (مثل بیسیک) ارائه ندادم ؟؟؟
    به خاطر همین رفتم کدها رو به زبان بیسیک تبدیل کردم
    با این وجود که خیلی وقت بود طرف بیسیک نرفته بودم و کلا" یادم رفته بود ولی آخرش موفق شدم کدها رو تبدیل کنم

    سورس کد برای میکروهای ATmega16-32 به زبان بیسیک (بسکام)
    کد:
     $regfile = "m16def.dat"
     $crystal = 8000000
     Led1 Alias Porta.0
     Led2 Alias Porta.1
     Led3 Alias Porta.2
     Led4 Alias Porta.3
     Led5 Alias Porta.4
     Led6 Alias Porta.5
     Led7 Alias Porta.6
     Led8 Alias Porta.7
     Led9 Alias Portc.7
     Led10 Alias Portc.6
     Led11 Alias Portc.5
     Led12 Alias Portc.4
     Led13 Alias Portc.3
     Led14 Alias Portc.2
     Led15 Alias Portc.1
     Led16 Alias Portc.0
     Led17 Alias Portd.7
     Led18 Alias Portd.6
     Led19 Alias Portd.5
     Led20 Alias Portd.4
     Led21 Alias Portd.3
     Led22 Alias Portd.2
     Led23 Alias Portd.1
     Led24 Alias Portd.0
     Led25 Alias Portb.7
     Led26 Alias Portb.6
     Led27 Alias Portb.5
     Led28 Alias Portb.4
     Led29 Alias Portb.3
     Led30 Alias Portb.2
     Led31 Alias Portb.1
     Led32 Alias Portb.0
     Max_var_pwm Alias 99
    
     Dim Pwm(35) As Byte , A As Byte , X1 As Byte , X2 As Byte , X3 As Byte , X As Byte
     A = Max_var_pwm
      'Config All =============================================
      'Config Timers
      'Config Ports
       Config Timer0 = Timer , Prescale = 8
       Enable Compare0
       On Compare0 T0
       Ddra = 255
       Ddrb = 255
       Ddrc = 255
       Ddrd = 255
       ' Timer/Counter 0 initialization
       ' Clock source: System Clock
       ' Clock value: 1000.000 kHz
       ' Mode: CTC top=OCR0
       Tccr0 = &H0A
       Ocr0 = 150
       ' Global enable interrupts
       Enable Interrupts
      'End Config ============================================
      Do
       For X1 = 0 To 24
         Pwm(1) = Lookup(x1 , Rain1)
         For X2 = 17 To 1 Step -1
          X = X2 + 1
          Pwm(x) = Pwm(x2)
         Next X2
         Waitms 40
       Next X1
       For X1 = 0 To 34
         Pwm(1) = Lookup(x1 , Rain2)
         For X2 = 17 To 1 Step -1
          X = X2 + 1
          Pwm(x) = Pwm(x2)
         Next X2
         Waitms 40
       Next X1
       For X1 = 0 To 24
         Pwm(1) = Lookup(x1 , Rain3)
         For X2 = 17 To 1 Step -1
          X = X2 + 1
          Pwm(x) = Pwm(x2)
         Next X2
         Waitms 40
       Next X1
       For X1 = 1 To 24
         Pwm(17) = Lookup(x1 , Rain1)
         For X2 = 1 To 16
          X = X2 + 1
          Pwm(x2) = Pwm(x)
         Next X2
         Waitms 40
       Next X1
       For X1 = 0 To 34
         Pwm(17) = Lookup(x1 , Rain2)
         For X2 = 1 To 16
          X = X2 + 1
          Pwm(x2) = Pwm(x)
         Next X2
         Waitms 40
       Next X1
       For X1 = 0 To 24
         Pwm(17) = Lookup(x1 , Rain3)
         For X2 = 1 To 16
          X = X2 + 1
          Pwm(x2) = Pwm(x)
         Next X2
         Waitms 40
       Next X1
       For X3 = 1 To 3
         For X1 = 0 To 13
          For X2 = 1 To 7
            X = X2 + 1
            Pwm(x2) = Pwm(x)
          Next X2
          For X2 = 17 To 10 Step -1
            X = X2 - 1
            Pwm(x2) = Pwm(x)
          Next X2
          Pwm(8) = Lookup(x1 , Rain1)
          Pwm(9) = Lookup(x1 , Rain1)
          Waitms 40
         Next X1
       Next X3
       For X3 = 1 To 3
         For X1 = 0 To 13
          For X2 = 8 To 2 Step -1
            X = X2 - 1
            Pwm(x2) = Pwm(x)
          Next
          For X2 = 9 To 16
            X = X2 + 1
            Pwm(x2) = Pwm(x)
          Next
          Pwm(17) = Lookup(x1 , Rain1)
          Waitms 40
          Pwm(1) = Lookup(x1 , Rain1)
         Next
       Next
       For X3 = 0 To 3
         For X1 = 0 To 18
          For X2 = 1 To 7
            X = X2 + 1
            Pwm(x2) = Pwm(x)
          Next
          For X2 = 17 To 10 Step -1
            X = X2 - 1
            Pwm(x2) = Pwm(x)
          Next
          Pwm(8) = Lookup(x1 , Rain4)
          Pwm(9) = Lookup(x1 , Rain4)
          Waitms 40
         Next
       Next
       For X3 = 0 To 3
         For X1 = 0 To 18
          For X2 = 8 To 2 Step -1
            X = X2 - 1
            Pwm(x2) = Pwm(x)
          Next
          For X2 = 9 To 17
            X = X2 - 1
            Pwm(x2) = Pwm(x2 + 1)
          Next
          Pwm(1) = Lookup(x1 , Rain2)
          Pwm(17) = Lookup(x1 , Rain2)
          waitms 40
         Next
       Next
    
      Loop
    End                             'end program
    
    
     T0:
      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
       If A = Pwm(9) Then Led9 = 1
       If A = Pwm(10) Then Led10 = 1
       If A = Pwm(11) Then Led11 = 1
       If A = Pwm(12) Then Led12 = 1
       If A = Pwm(13) Then Led13 = 1
       If A = Pwm(14) Then Led14 = 1
       If A = Pwm(15) Then Led15 = 1
       If A = Pwm(16) Then Led16 = 1
       If A = Pwm(17) Then Led17 = 1
       If A = Pwm(18) Then Led18 = 1
       If A = Pwm(19) Then Led19 = 1
       If A = Pwm(20) Then Led20 = 1
       If A = Pwm(21) Then Led21 = 1
       If A = Pwm(22) Then Led22 = 1
       If A = Pwm(23) Then Led23 = 1
       If A = Pwm(24) Then Led24 = 1
       If A = Pwm(25) Then Led25 = 1
       If A = Pwm(26) Then Led26 = 1
       If A = Pwm(27) Then Led27 = 1
       If A = Pwm(28) Then Led28 = 1
       If A = Pwm(29) Then Led29 = 1
       If A = Pwm(30) Then Led30 = 1
       If A = Pwm(31) Then Led31 = 1
       If A = Pwm(32) Then Led32 = 1
      End If
      Decr A
      If A = 255 Then
       A = Max_var_pwm
       Porta = 0
       Portb = 0
       Portc = 0
       Portd = 0
      End If
    Return
    
     Rain1:
     Data 0 , 99 , 70 , 40 , 20 , 10 , 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
     Rain2:
     Data 0 , 1 , 2 , 3 , 4 , 5 , 10 , 20 , 40 , 70 , 99 , 70 , 40 , 20 , 10 , 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
     Rain3:
     Data 0 , 1 , 2 , 3 , 4 , 5 , 10 , 20 , 40 , 70 , 99 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
     Rain4:
     Data 1 , 2 , 3 , 4 , 5 , 10 , 20 , 40 , 70 , 99 , 70 , 40 , 20 , 10 , 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    سورس کد برای ATmega64-128 به زبان بیسیک(بسکام)
    کد:
     $regfile = "m64def.dat"
     $crystal = 8000000
    
     LED1 Alias Portf.0
     LED2 Alias Portf.1
     LED3 Alias Portf.2
     LED4 Alias Portf.3
     LED5 Alias Portf.4
     LED6 Alias Portf.5
     LED7 Alias Portf.6
     LED8 Alias Portf.7
     LED9 Alias Porta.0
     LED10 Alias Porta.1
     LED11 Alias Porta.2
     LED12 Alias Porta.3
     LED13 Alias Porta.4
     LED14 Alias Porta.5
     LED15 Alias Porta.6
     LED16 Alias Porta.7
     LED17 Alias Portg.2
     LED18 Alias Portc.7
     LED19 Alias Portc.6
     LED20 Alias Portc.5
     LED21 Alias Portc.4
     LED22 Alias Portc.3
     LED23 Alias Portc.2
     LED24 Alias Portc.1
     LED25 Alias Portc.0
     LED26 Alias Portg.1
     LED27 Alias Portg.0
     LED28 Alias Portd.7
     LED29 Alias Portd.6
     LED30 Alias Portd.5
     LED31 Alias Portd.4
     LED32 Alias Portd.3
     LED33 Alias Portd.2
     LED34 Alias Portd.1
     LED35 Alias Portd.0
     LED36 Alias Portg.4
     LED37 Alias Portg.3
     LED38 Alias Portb.7
     LED39 Alias Portb.6
     LED40 Alias Portb.5
     LED41 Alias Portb.4
     LED42 Alias Portb.3
     LED43 Alias Portb.2
     LED44 Alias Portb.1
     LED45 Alias Portb.0
     LED46 Alias Porte.7
     LED47 Alias Porte.6
     LED48 Alias Porte.5
     LED49 Alias Porte.4
     LED50 Alias Porte.3
     LED51 Alias Porte.2
     LED52 Alias Porte.1
     LED53 Alias Porte.0
    
     Max_var_pwm Alias 99
    
     Dim Pwm(55) As Byte , A As Byte , X1 As Byte , X2 As Byte , X3 As Byte , X As Byte
     A = Max_var_pwm
      'Config All =============================================
      'Config Timers
      'Config Ports
       Config Timer0 = Timer , Prescale = 8
       Enable Compare0
       On Compare0 T0
       Ddra = 255
       Ddrb = 255
       Ddrc = 255
       Ddrd = 255
       Ddre = 255
       Ddrf = 255
       Ddrg = 31
       ' Timer/Counter 0 initialization
       ' Clock source: System Clock
       ' Clock value: 1000.000 kHz
       ' Mode: CTC top=OCR0
       Tccr0 = &H0A
       Ocr0 = 150
       ' Global enable interrupts
       Enable Interrupts
      'End Config ============================================
      Do
       For X1 = 0 To 24
         Pwm(1) = Lookup(x1 , Rain1)
         For X2 = 17 To 1 Step -1
          X = X2 + 1
          Pwm(x) = Pwm(x2)
         Next X2
         Waitms 40
       Next X1
       For X1 = 0 To 34
         Pwm(1) = Lookup(x1 , Rain2)
         For X2 = 17 To 1 Step -1
          X = X2 + 1
          Pwm(x) = Pwm(x2)
         Next X2
         Waitms 40
       Next X1
       For X1 = 0 To 24
         Pwm(1) = Lookup(x1 , Rain3)
         For X2 = 17 To 1 Step -1
          X = X2 + 1
          Pwm(x) = Pwm(x2)
         Next X2
         Waitms 40
       Next X1
       For X1 = 1 To 24
         Pwm(17) = Lookup(x1 , Rain1)
         For X2 = 1 To 16
          X = X2 + 1
          Pwm(x2) = Pwm(x)
         Next X2
         Waitms 40
       Next X1
       For X1 = 0 To 34
         Pwm(17) = Lookup(x1 , Rain2)
         For X2 = 1 To 16
          X = X2 + 1
          Pwm(x2) = Pwm(x)
         Next X2
         Waitms 40
       Next X1
       For X1 = 0 To 24
         Pwm(17) = Lookup(x1 , Rain3)
         For X2 = 1 To 16
          X = X2 + 1
          Pwm(x2) = Pwm(x)
         Next X2
         Waitms 40
       Next X1
       For X3 = 1 To 3
         For X1 = 0 To 13
          For X2 = 1 To 7
            X = X2 + 1
            Pwm(x2) = Pwm(x)
          Next X2
          For X2 = 17 To 10 Step -1
            X = X2 - 1
            Pwm(x2) = Pwm(x)
          Next X2
          Pwm(8) = Lookup(x1 , Rain1)
          Pwm(9) = Lookup(x1 , Rain1)
          Waitms 40
         Next X1
       Next X3
       For X3 = 1 To 3
         For X1 = 0 To 13
          For X2 = 8 To 2 Step -1
            X = X2 - 1
            Pwm(x2) = Pwm(x)
          Next
          For X2 = 9 To 16
            X = X2 + 1
            Pwm(x2) = Pwm(x)
          Next
          Pwm(17) = Lookup(x1 , Rain1)
          Waitms 40
          Pwm(1) = Lookup(x1 , Rain1)
         Next
       Next
       For X3 = 0 To 3
         For X1 = 0 To 18
          For X2 = 1 To 7
            X = X2 + 1
            Pwm(x2) = Pwm(x)
          Next
          For X2 = 17 To 10 Step -1
            X = X2 - 1
            Pwm(x2) = Pwm(x)
          Next
          Pwm(8) = Lookup(x1 , Rain4)
          Pwm(9) = Lookup(x1 , Rain4)
          Waitms 40
         Next
       Next
       For X3 = 0 To 3
         For X1 = 0 To 18
          For X2 = 8 To 2 Step -1
            X = X2 - 1
            Pwm(x2) = Pwm(x)
          Next
          For X2 = 9 To 17
            X = X2 - 1
            Pwm(x2) = Pwm(x2 + 1)
          Next
          Pwm(1) = Lookup(x1 , Rain2)
          Pwm(17) = Lookup(x1 , Rain2)
          waitms 40
         Next
       Next
    
      Loop
    End                             'end program
    
    
     T0:
      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
       If A = Pwm(9) Then LED9 = 1
       If A = Pwm(10) Then LED10 = 1
       If A = Pwm(11) Then LED11 = 1
       If A = Pwm(12) Then LED12 = 1
       If A = Pwm(13) Then LED13 = 1
       If A = Pwm(14) Then LED14 = 1
       If A = Pwm(15) Then LED15 = 1
       If A = Pwm(16) Then LED16 = 1
       If A = Pwm(17) Then LED17 = 1
       If A = Pwm(18) Then LED18 = 1
       If A = Pwm(19) Then LED19 = 1
       If A = Pwm(20) Then LED20 = 1
       If A = Pwm(21) Then LED21 = 1
       If A = Pwm(22) Then LED22 = 1
       If A = Pwm(23) Then LED23 = 1
       If A = Pwm(24) Then LED24 = 1
       If A = Pwm(25) Then LED25 = 1
       If A = Pwm(26) Then LED26 = 1
       If A = Pwm(27) Then LED27 = 1
       If A = Pwm(28) Then LED28 = 1
       If A = Pwm(29) Then LED29 = 1
       If A = Pwm(30) Then LED30 = 1
       If A = Pwm(31) Then LED31 = 1
       If A = Pwm(32) Then LED32 = 1
       If A = Pwm(33) Then LED33 = 1
       If A = Pwm(34) Then LED34 = 1
       If A = Pwm(35) Then LED35 = 1
       If A = Pwm(36) Then LED36 = 1
       If A = Pwm(37) Then LED37 = 1
       If A = Pwm(38) Then LED38 = 1
       If A = Pwm(39) Then LED39 = 1
       If A = Pwm(40) Then LED40 = 1
       If A = Pwm(41) Then LED41 = 1
       If A = Pwm(42) Then LED42 = 1
       If A = Pwm(43) Then LED43 = 1
       If A = Pwm(44) Then LED44 = 1
       If A = Pwm(45) Then LED45 = 1
       If A = Pwm(46) Then LED46 = 1
       If A = Pwm(47) Then LED47 = 1
       If A = Pwm(48) Then LED48 = 1
       If A = Pwm(49) Then LED49 = 1
       If A = Pwm(50) Then LED50 = 1
       If A = Pwm(51) Then LED51 = 1
       If A = Pwm(52) Then LED52 = 1
       If A = Pwm(53) Then LED53 = 1
      End If
      Decr A
      If A = 255 Then
       A = Max_var_pwm
       Porta = 0
       Portb = 0
       Portc = 0
       Portd = 0
       Porte = 0
       Portf = 0
       Portg = 0
      End If
    Return
    
     Rain1:
     Data 0 , 99 , 70 , 40 , 20 , 10 , 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
     Rain2:
     Data 0 , 1 , 2 , 3 , 4 , 5 , 10 , 20 , 40 , 70 , 99 , 70 , 40 , 20 , 10 , 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
     Rain3:
     Data 0 , 1 , 2 , 3 , 4 , 5 , 10 , 20 , 40 , 70 , 99 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
     Rain4:
     Data 1 , 2 , 3 , 4 , 5 , 10 , 20 , 40 , 70 , 99 , 70 , 40 , 20 , 10 , 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    به دلیل درخواست زیاد برنامه برای ATmega8 ، این برنامه در تاریخ 93/2/11 اضاف شد
    سورس کد برای ATmega8 به زبان بیسیک(بسکام)
    کد:
    $regfile = "m8def.dat"
     $crystal = 8000000
    
    
     Led1 Alias portd.0
     Led2 Alias portd.1
     Led3 Alias portd.2
     Led4 Alias portd.3
     Led5 Alias portd.4
     Led6 Alias Portb.6
     Led7 Alias Portb.7
     Led8 Alias Portd.5
     Led9 Alias Portd.6
     Led10 Alias Portd.7
     Led11 Alias Portb.0
     Led12 Alias Portb.1
     Led13 Alias Portb.2
     Led14 Alias Portb.3
     Led15 Alias Portb.4
     Led16 Alias Portb.5
     Led17 Alias Portc.0
     Led18 Alias Portc.1
     Led19 Alias Portc.2
     Led20 Alias Portc.3
     Led21 Alias Portc.4
     Led22 Alias Portc.5
    
     Max_var_pwm Alias 99
     Max_led Alias 22
     Delay1 Alias 20
     'ms
     Delay2 Alias 200
     'ms
     Dim Pwm(35) As Byte , A As Byte , _
     Y2 As Byte , _
     X1 As Byte , X2 As Byte , X3 As Byte
     Y2 = Max_led + Max_led
     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
       Ddrb = 255
       Ddrc = 63
       Ddrd = 255
      'End Config ============================================
    
      Do
       X1 = 0
       While X1 < Y2
         X2 = Max_led
         While X2 > 1
          X3 = X2 - 1
          Pwm(x2) = Pwm(x3)
          Decr X2
         Wend
         Pwm(1) = Lookup(x1 , Rain)
         Waitms Delay1
         Incr X1
       Wend
       Waitms Delay2
      Loop
    End                             'end program
    
    
    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
       If A = Pwm(9) Then Led9 = 1
       If A = Pwm(10) Then Led10 = 1
       If A = Pwm(11) Then Led11 = 1
       If A = Pwm(12) Then Led12 = 1
       If A = Pwm(13) Then Led13 = 1
       If A = Pwm(14) Then Led14 = 1
       If A = Pwm(15) Then Led15 = 1
       If A = Pwm(16) Then Led16 = 1
       If A = Pwm(17) Then Led17 = 1
       If A = Pwm(18) Then Led18 = 1
       If A = Pwm(19) Then Led19 = 1
       If A = Pwm(20) Then Led20 = 1
       If A = Pwm(21) Then Led21 = 1
       If A = Pwm(22) Then Led22 = 1
    
      End If
      Decr A
      If A = 255 Then
       A = Max_var_pwm
       Portb = 0
       Portc = 0
       Portd = 0
      End If
    Return
    
     Rain:
     Data 99 , 80 , 70 , 60 , 40 , 20 , 15 , 9 , 7 , 5 , _
        3 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , _
        0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,_
        0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,_
        0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    یه موضوع خیلی مهم
    دقیقا دو برنامه مثل هم هستند ولی موقع کامپایل کردن ، حافظه فلشی که برنامه بسکام اشغال میکنه تقریبا" دو برابر کدویژن هست
    چراااااااا ؟؟؟؟

    دوستان
    اگر اشتباهی دیدید حتما بگید :applause:
    با سپاس

    موفق باشید
    درود خدمت شما استاد عزیز :smile:
    داداش ببخشید من این برنامه رو کپی کردم کامپایل کردم ریختم تو اتمگا 8 اما جوابی نگرفتم میشه یه بررسی کنید راستش با pwm کار نکردم از منطق برنامه زیاد سر در نمیارم اگه میشه الگوریتمشم توضیح بدید سپاس فراوان :nerd:
    در روزگاري که لبخند ادم ها بخاطر شکست توست برخيز تا بگيرند.........

    دیدگاه


      پاسخ : (برنامه بسکام)چگونه تمام پایه های ATmega16-32-64-128 ر&#

      نوشته اصلی توسط الکترو70
      درود خدمت شما استاد عزیز :smile:
      داداش ببخشید من این برنامه رو کپی کردم کامپایل کردم ریختم تو اتمگا 8 اما جوابی نگرفتم میشه یه بررسی کنید راستش با pwm کار نکردم از منطق برنامه زیاد سر در نمیارم اگه میشه الگوریتمشم توضیح بدید سپاس فراوان :nerd:
      سلام
      ممنونم ... لطف دارید ...
      عزیز من توی این تاپیک خیلی درباره برنامه توضیح دادم ... تو رو خدا تاپیک رو مطالعه کنید ... والا به خدا خیلی سخت نیستا ....
      این برنامه رو کپی پست کن توی بسکام
      [code=qbasic]$regfile = "m8def.dat"
      $crystal = 8000000


      Led1 Alias portd.0
      Led2 Alias portd.1
      Led3 Alias portd.2
      Led4 Alias portd.3
      Led5 Alias portd.4
      Led6 Alias Portb.6
      Led7 Alias Portb.7
      Led8 Alias Portd.5
      Led9 Alias Portd.6
      Led10 Alias Portd.7
      Led11 Alias Portb.0
      Led12 Alias Portb.1
      Led13 Alias Portb.2
      Led14 Alias Portb.3
      Led15 Alias Portb.4
      Led16 Alias Portb.5
      Led17 Alias Portc.0
      Led18 Alias Portc.1
      Led19 Alias Portc.2
      Led20 Alias Portc.3
      Led21 Alias Portc.4
      Led22 Alias Portc.5

      Max_var_pwm Alias 99
      Dim Pwm(35) 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
      Ddrb = 255
      Ddrc = 63
      Ddrd = 255
      'End Config ============================================

      Do



      Loop
      End 'end program


      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
      If A = Pwm(9) Then Led9 = 1
      If A = Pwm(10) Then Led10 = 1
      If A = Pwm(11) Then Led11 = 1
      If A = Pwm(12) Then Led12 = 1
      If A = Pwm(13) Then Led13 = 1
      If A = Pwm(14) Then Led14 = 1
      If A = Pwm(15) Then Led15 = 1
      If A = Pwm(16) Then Led16 = 1
      If A = Pwm(17) Then Led17 = 1
      If A = Pwm(18) Then Led18 = 1
      If A = Pwm(19) Then Led19 = 1
      If A = Pwm(20) Then Led20 = 1
      If A = Pwm(21) Then Led21 = 1
      If A = Pwm(22) Then Led22 = 1

      End If
      Decr A
      If A = 255 Then
      A = Max_var_pwm
      Portb = 0
      Portc = 0
      Portd = 0
      End If
      Return[/code]
      خوب الان 5تا LED که آند هر کدوم از LED ها رو به میکرو و کاتد هرکدوم از LED ها رو به مقاومت وصل کن ...(330 تا 470 اهم) و سر دیگه مقاومتها رو به زمین (GND) وصل کن ...
      بعد بیا توی برنامه به هر کدوم از آرایه ها یه مقداری بین 0 تا 99 بدید ... مثلا
      [code=qbasic]
      Pwm(1) = 10
      Pwm(2) = 20
      Pwm(3) = 30
      Pwm(4) = 70
      Pwm(5) = 99[/code]
      میبینید که نور هر کدام از LED ها کم و زیاد هستند ...
      همین ...
      این کار رو هم برای بقیه PWM های دیگه انجام بدید ...

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

      دیدگاه


        پاسخ : (برنامه بسکام)چگونه تمام پایه های ATmega16-32-64-128 را PWM کنیم ؟؟!!! [آموزشی]

        نوشته اصلی توسط سامان اسدی
        سلام
        ممنونم ... لطف دارید ...
        عزیز من توی این تاپیک خیلی درباره برنامه توضیح دادم ... تو رو خدا تاپیک رو مطالعه کنید ... والا به خدا خیلی سخت نیستا ....
        این برنامه رو کپی پست کن توی بسکام
        [code=qbasic]$regfile = "m8def.dat"
        $crystal = 8000000


        Led1 Alias portd.0
        Led2 Alias portd.1
        Led3 Alias portd.2
        Led4 Alias portd.3
        Led5 Alias portd.4
        Led6 Alias Portb.6
        Led7 Alias Portb.7
        Led8 Alias Portd.5
        Led9 Alias Portd.6
        Led10 Alias Portd.7
        Led11 Alias Portb.0
        Led12 Alias Portb.1
        Led13 Alias Portb.2
        Led14 Alias Portb.3
        Led15 Alias Portb.4
        Led16 Alias Portb.5
        Led17 Alias Portc.0
        Led18 Alias Portc.1
        Led19 Alias Portc.2
        Led20 Alias Portc.3
        Led21 Alias Portc.4
        Led22 Alias Portc.5

        Max_var_pwm Alias 99
        Dim Pwm(35) 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
        Ddrb = 255
        Ddrc = 63
        Ddrd = 255
        'End Config ============================================

        Do



        Loop
        End 'end program


        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
        If A = Pwm(9) Then Led9 = 1
        If A = Pwm(10) Then Led10 = 1
        If A = Pwm(11) Then Led11 = 1
        If A = Pwm(12) Then Led12 = 1
        If A = Pwm(13) Then Led13 = 1
        If A = Pwm(14) Then Led14 = 1
        If A = Pwm(15) Then Led15 = 1
        If A = Pwm(16) Then Led16 = 1
        If A = Pwm(17) Then Led17 = 1
        If A = Pwm(18) Then Led18 = 1
        If A = Pwm(19) Then Led19 = 1
        If A = Pwm(20) Then Led20 = 1
        If A = Pwm(21) Then Led21 = 1
        If A = Pwm(22) Then Led22 = 1

        End If
        Decr A
        If A = 255 Then
        A = Max_var_pwm
        Portb = 0
        Portc = 0
        Portd = 0
        End If
        Return[/code]
        خوب الان 5تا LED که آند هر کدوم از LED ها رو به میکرو و کاتد هرکدوم از LED ها رو به مقاومت وصل کن ...(330 تا 470 اهم) و سر دیگه مقاومتها رو به زمین (GND) وصل کن ...
        بعد بیا توی برنامه به هر کدوم از آرایه ها یه مقداری بین 0 تا 99 بدید ... مثلا
        [code=qbasic]
        Pwm(1) = 10
        Pwm(2) = 20
        Pwm(3) = 30
        Pwm(4) = 70
        Pwm(5) = 99[/code]
        میبینید که نور هر کدام از LED ها کم با زیاد هستند ...
        همین ...
        این کار رو هم برای بقیه PWM های دیگه انجام بدید ...

        موفق باشید
        عزیز من الکترونیکی نیستم گرایش قدرتم آشنایی کامل ندارم واسه همین پرسیدم :nerd: داخل برنامه شما این تکه برنامه رو گذاشتید:

        کد:
          Do
           X1 = 0
           While X1 < Y2
             X2 = Max_led
             While X2 > 1
              X3 = X2 - 1
              Pwm(x2) = Pwm(x3)
              Decr X2
             Wend
             Pwm(1) = Lookup(x1 , Rain)
             Waitms Delay1
             Incr X1
           Wend
           Waitms Delay2
          Loop
        End
        جای این هرچیزی میشه نوشت که برنامه درست کار کنه؟چون منطق کار رو نمیدونم
        در روزگاري که لبخند ادم ها بخاطر شکست توست برخيز تا بگيرند.........

        دیدگاه


          پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWMکنیم؟ (ساخت PWM 5 با ATtiny13A)

          نوشته اصلی توسط الکترو70
          عزیز من الکترونیکی نیستم گرایش قدرتم آشنایی کامل ندارم واسه همین پرسیدم :nerd: داخل برنامه شما این تکه برنامه رو گذاشتید:

          کد:
            Do
             X1 = 0
             While X1 < Y2
               X2 = Max_led
               While X2 > 1
                X3 = X2 - 1
                Pwm(x2) = Pwm(x3)
                Decr X2
               Wend
               Pwm(1) = Lookup(x1 , Rain)
               Waitms Delay1
               Incr X1
             Wend
             Waitms Delay2
            Loop
          End
          جای این هرچیزی میشه نوشت که برنامه درست کار کنه؟چون منطق کار رو نمیدونم
          امیدوارم که بهتون بر نخورده باشه ... :redface:
          ==========================================
          بله ... این که برنامه LED بارانی هست ...
          این رو میتونید حذف کنید ... تازه اون بالا رو هم به دلخواه خودتون حذف میکنید ...
          ولی کلیات کار همین جوریه ...

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

          دیدگاه


            پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWMکنیم؟ (ساخت PWM 5 با ATtiny13A)

            نوشته اصلی توسط سامان اسدی
            امیدوارم که بهتون بر نخورده باشه ... :redface:
            ==========================================
            بله ... این که برنامه LED بارانی هست ...
            این رو میتونید حذف کنید ... تازه اون بالا رو هم به دلخواه خودتون حذف میکنید ...
            ولی کلیات کار همین جوریه ...

            موفق باشید
            نه داداش ولی من خودم اگه چیزی رو بلد باشم به کسی که ازم میپرسه کنایه نمیزنم از کار کردن یا دنبال اون موضوع رفتن پشیمون شه :biggrin: کامل بهش توضیح میدم حتی شده چند ساعت وقتمو بگیره :nice:
            بازم ممنون اما اون برنامه که واسه ال ای دی بارانی بود رو کامل کپی کردم فیوز بیتشم فعال کردم اما رو میکرو جواب نگرفتم قبلا ساعت یا مدارای دیگه رو با میکرو کار کردم زیادم ناشی نیستم :mrgreen:
            در روزگاري که لبخند ادم ها بخاطر شکست توست برخيز تا بگيرند.........

            دیدگاه


              پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWMکنیم؟ (ساخت PWM 5 با ATtiny13A)

              نوشته اصلی توسط الکترو70
              نه داداش ولی من خودم اگه چیزی رو بلد باشم به کسی که ازم میپرسه کنایه نمیزنم از کار کردن یا دنبال اون موضوع رفتن پشیمون شه :biggrin: کامل بهش توضیح میدم حتی شده چند ساعت وقتمو بگیره :nice:
              بازم ممنون اما اون برنامه که واسه ال ای دی بارانی بود رو کامل کپی کردم فیوز بیتشم فعال کردم اما رو میکرو جواب نگرفتم قبلا ساعت یا مدارای دیگه رو با میکرو کار کردم زیادم ناشی نیستم :mrgreen:
              فیوزبیتها رو اینجوری تنظیم کردید ؟؟
              [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
              معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
              معرفی نرم افزار Codewizard PWM
              با من بیشتر آشنا شوید

              دیدگاه


                پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWMکنیم؟ (ساخت PWM 5 با ATtiny13A)

                نوشته اصلی توسط سامان اسدی
                فیوزبیتها رو اینجوری تنظیم کردید ؟؟
                اشتباه کردم باید CKCEL2 رو یک میکردم بالاییشو یک کردم یعنی CKCEL3 حواس برام نمونده :mrgreen: دوباره پروگرم کردم جواب گرفتم خبرشو میدم
                فیوز بیت بشه 8مگا حله دیگه؟رو فرکانس های دیگه برم سرعتش تغییر میکنه یا کلا میریزه بهم؟ :nerd:
                در روزگاري که لبخند ادم ها بخاطر شکست توست برخيز تا بگيرند.........

                دیدگاه


                  پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWMکنیم؟ (ساخت PWM 5 با ATtiny13A)

                  نوشته اصلی توسط الکترو70
                  اشتباه کردم باید CKCEL2 رو یک میکردم بالاییشو یک کردم یعنی CKCEL3 حواس برام نمونده :mrgreen: دوباره پروگرم کردم جواب گرفتم خبرشو میدم
                  فیوز بیت بشه 8مگا حله دیگه؟رو فرکانس های دیگه برم سرعتش تغییر میکنه یا کلا میریزه بهم؟ :nerd:
                  روی 8 باشه بهتره ... ولی اگر خواستید کمتر یا بیشترش کنید باید به نسبت همون باید این خط رو تغییر بدید
                  Tcnt0 = 105
                  خط 39 و 55
                  برای 16 مگا باید بشه 58
                  برای 8 مگا باید بشه 105
                  برای 4 مگا باید بشه 210

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

                  دیدگاه


                    پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWMکنیم؟ (ساخت PWM 5 با ATtiny13A)

                    نوشته اصلی توسط سامان اسدی
                    روی 8 باشه بهتره ... ولی اگر خواستید کمتر یا بیشترش کنید باید به نسبت همون باید این خط رو تغییر بدید
                    Tcnt0 = 105
                    خط 39 و 55
                    برای 16 مگا باید بشه 58
                    برای 8 مگا باید بشه 105
                    برای 4 مگا باید بشه 210

                    موفق باشید
                    سپاس
                    این اعداد رو دقیق نمیدونم مربوط به تایمر و محاسباتش میشه؟مثلا همین Tcnt0 فکر کنم نوع نوشتن برنامه اتون بعضی جاها یکم به c میخوره چون با c کار میکنید :nerd:
                    در روزگاري که لبخند ادم ها بخاطر شکست توست برخيز تا بگيرند.........

                    دیدگاه


                      پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWMکنیم؟ (ساخت PWM 5 با ATtiny13A)

                      نوشته اصلی توسط الکترو70
                      سپاس
                      این اعداد رو دقیق نمیدونم مربوط به تایمر و محاسباتش میشه؟مثلا همین Tcnt0 فکر کنم نوع نوشتن برنامه اتون بعضی جاها یکم به c میخوره چون با c کار میکنید :nerd:
                      بله ... من از روی کدویژن کپی پست کردم توی بسکام و تغییراتی دادم ...
                      توی این پستم سه نرم افزار کدویژن و بسکام و اتمل استودیو با هم مقایسه کردم
                      نتیجه اش هم اینه که کدویژن خیلی بهینه تر تولید کد میکنه ...
                      [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                      معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                      معرفی نرم افزار Codewizard PWM
                      با من بیشتر آشنا شوید

                      دیدگاه


                        پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWMکنیم؟ (ساخت PWM 5 با ATtiny13A)

                        دوست عزیز، جناب آقای اسدی... از آموزش بسیار خوبتون کمال تشکر و قدردانی را دارم. برنامه نوشته شده شما را روی میکروکنترلر برنامه ریزی کردم، بسیار عالی بود. لطفا در صورت امکان به منظور تفهیم کامل موضوع برای افرادی مثل من که از سطح هوشی بسیار پایین بهره مند هستن :biggrin: برنامه PWM را برای یک LED در صورت امکان بنویسید و کمی در خصوص رجیستر TCNT0 نیز توضیح بفرمایید. با تشکر فراوان
                        STM32 واقعا یه چیز دیگه است...

                        دیدگاه


                          پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWMکن&

                          نوشته اصلی توسط Atlantis Engineering
                          دوست عزیز، جناب آقای اسدی... از آموزش بسیار خوبتون کمال تشکر و قدردانی را دارم
                          سلام ...
                          خیلی ممنون ... لطف دارید ...


                          نوشته اصلی توسط Atlantis Engineering
                          برنامه نوشته شده شما را روی میکروکنترلر برنامه ریزی کردم، بسیار عالی بود. لطفا در صورت امکان به منظور تفهیم کامل موضوع برای افرادی مثل من که از سطح هوشی بسیار پایین بهره مند هستن :biggrin: برنامه PWM را برای یک LED در صورت امکان بنویسید
                          خوب ... برای کدوم میکرو میخواهید ... کدوم زبان ... و کدام برنامه ...
                          اگر با برنامه بسکام میخواین این پست رو نگاه کنید قبلا چنین کاری انجام شده ...
                          http://www.eca.ir/forum2/index.php?topic=90246.msg604502#msg604502

                          نوشته اصلی توسط Atlantis Engineering
                          و کمی در خصوص رجیستر TCNT0 نیز توضیح بفرمایید
                          رجیستر در حقیقت تنظیمات سخت افزاری را بر عهده دارد و اگر آن را تغییر بدهیم تنظیمات سخت افزار نیز تغییر میکند و هر موقع که رجیستری که مربوط به قسمتی از بخش میکروکنترلر هست را تغییر دهیم ، آن قسمت میکرو با توجه به رجیسترش تغییر کار میدهد ...
                          این تا اینجا ...
                          حالا تایمری که ما به کار بردیم نیاز به تنظیم داره و باید آن را تنظیمش کنیم ...
                          ما احتیاج داریم که یه تایمری تعریف کنیم که سر وقت پرش به یک زیر برنامه کند ... زمانش هم محاسبه خاص خودش رو داره ...
                          برای این منظور باید رجیستر تایمر را تنظیم کرد ... مدی که ما در اینجا میخواهیم مد CTC است ... (Clear Timer on Compare Match (Auto Reload
                          توی این مد تایمر پس از شمردن به آن عددی که خودمان برایش تعییم میکنیم ریست میکنه و دوباره تایمر صفر میشه ...
                          خوب ... حالا چه چیزی را میشمارد ... قبل از شمارش باید به تایمر پالس داد تا شمارش کند ... منبع پالس از دو جا قابل دسترسی است ... یکی داخل میکرو و دیگری بیرون میکرو ... که ما در اینجا از منبع کلاک داخلی استفاده کردیم ...
                          این تا اینجا ... فرکانسی که خودمان برایش تعییم میکنیم بسته به فرکانس اصلی میکرو و تقسیمات کلاک تعیین می شود ...
                          رجیستر TCCR0 تمامی این تنظیمات را در خود نگه میدارد ...
                          تایمر 0 میکروکنترلرهای مگا16 و 32 و 64 و 128 مد CTC را دارند ... ولی میکروکنترلر مگا8 این مد را ندارد و فقط مد سر ریزی دارد و باید آن را به طور دستی به آن مقدار دهیم ...
                          البته تایمر های 1 و 2 میکروکنترلر مگا 8 این مد را دارند ولی پیش خودم گفتم شاید کسی با تایمر یک و دو کارهای دیگری را بخواهد انجام دهد ...
                          وظیفه رجیستر TCNT0 شمارش پالسهاست ... و باید موقع سرریزی به آن را مقدار دهیم ... ولی در مدهای CTC دیگر نیازی به این کارها نیست زیرا خود تایمر به صورت خودکار رجیستر TCNT0 را ریست میکند ...

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

                          دیدگاه


                            چگونه بعضی از پایه های میکروکنترلر AVR را به صورت دلخواه PWM کنیم ؟؟

                            نوشته اصلی توسط کوروش بزرگ
                            درود
                            سامان جان تو میکرو اتمگا 8 که 22تا pwm ساختی برای حذف pwm هایی که نیاز ندارم یعنی از 22تا مثلا 5تاشو فقط بخوام چیکار باید بکنم؟داخل برنامه اون قسمت هایی که مربوط به پایه های دیگه است رو پاک کنم یا عددهای مربوط به ریجسترهم باید تغییر کنه؟البته میشه داخل loop طوری نوشت که فقط از پایه هایی که میخوام استفاده کنم و بقیه بی استفاده بمونن ولی خب خواستم بدونم چطوریاس مثلا در مواقعی که بخوام از پایه های دیگه برای کارای دیگه استفاده کنم درکنارش pwm هم داشته باشم
                            درود کورش جان

                            دوستمون سوال خوبی پرسیدند ...
                            ببینید دوستان
                            اگر بخواهیم هر چند تا PWM که از پایه های میکروکنترلر بگیریم باید سه قسمت برنامه را تغییر داد :

                            1 - قسمت تعاریف اولیه پایه ها
                            [code=c]
                            #define Set_LED1 PORTC.5 = 1
                            #define Set_LED2 PORTC.4 = 1
                            #define Set_LED3 PORTC.3 = 1
                            #define Set_LED4 PORTC.2 = 1
                            #define Set_LED5 PORTC.1 = 1
                            #define Set_LED6 PORTC.0 = 1
                            #define Set_LED7 PORTB.5 = 1
                            #define Set_LED8 PORTB.4 = 1
                            #define Set_LED9 PORTB.3 = 1
                            #define Set_LED10 PORTB.2 = 1
                            #define Set_LED11 PORTB.1 = 1
                            #define Set_LED12 PORTB.0 = 1
                            #define Set_LED13 PORTD.7 = 1
                            #define Set_LED14 PORTD.6 = 1
                            #define Set_LED15 PORTD.5 = 1
                            #define Set_LED16 PORTB.7 = 1
                            #define Set_LED17 PORTB.6 = 1
                            #define Set_LED18 PORTD.4 = 1
                            #define Set_LED19 PORTD.3 = 1
                            #define Set_LED20 PORTD.2 = 1
                            #define Set_LED21 PORTD.1 = 1
                            #define Set_LED22 PORTD.0 = 1[/code]
                            اون پایه هایی که نیاز هست رو تعریف کنیم

                            2 - قسمت شرط ها
                            [code=c] if(a)
                            {
                            if(a == pwm[22])Set_LED22;
                            if(a == pwm[21])Set_LED21;
                            if(a == pwm[20])Set_LED20;
                            if(a == pwm[19])Set_LED19;
                            if(a == pwm[18])Set_LED18;
                            if(a == pwm[17])Set_LED17;
                            if(a == pwm[16])Set_LED16;
                            if(a == pwm[15])Set_LED15;
                            if(a == pwm[14])Set_LED14;
                            if(a == pwm[13])Set_LED13;
                            if(a == pwm[12])Set_LED12;
                            if(a == pwm[11])Set_LED11;
                            if(a == pwm[10])Set_LED10;
                            if(a == pwm[9 ])Set_LED9;
                            if(a == pwm[8 ])Set_LED8;
                            if(a == pwm[7 ])Set_LED7;
                            if(a == pwm[6 ])Set_LED6;
                            if(a == pwm[5 ])Set_LED5;
                            if(a == pwm[4 ])Set_LED4;
                            if(a == pwm[3 ])Set_LED3;
                            if(a == pwm[2 ])Set_LED2;
                            if(a == pwm[1 ])Set_LED1;
                            }[/code]
                            در این قسمت هم با توجه به نیاز آنها را تعریف میکنیم

                            3 - شرط ریست کلی پایه ها
                            [code=c] if(--a == 255)
                            {
                            a = max_var_PWM;
                            PORTB=0;
                            PORTC=0;
                            PORTD=0;
                            }[/code]
                            این قسمتش چون یه خورده درکش سخته یه مثال میزنم
                            مثلا میخواهیم پایه های D0 , D1 , D2 , D7 را PWM کنیم
                            پس باید از دستور زیر استفاده کرد .
                            [code=c]PORTD = PORTD & 0b01111000;[/code]

                            نکته :
                            در این مثال حالتی است که بخواهیم با یک شدن پایه ها باعث ایجاد PWM شود و اگر بخواهیم که با صفر شدن پایه ها باعث ایجاد PWM شود بایستی دو قسمت برنامه را به صورت زیر نوشت ...

                            1 - یکها را به صفر تبدیل میکنیم
                            [code=c]
                            #define Set_LED1 PORTC.5 = 0
                            #define Set_LED2 PORTC.4 = 0
                            #define Set_LED3 PORTC.3 = 0
                            #define Set_LED4 PORTC.2 = 0
                            #define Set_LED5 PORTC.1 = 0
                            #define Set_LED6 PORTC.0 = 0
                            #define Set_LED7 PORTB.5 = 0
                            #define Set_LED8 PORTB.4 = 0
                            #define Set_LED9 PORTB.3 = 0
                            #define Set_LED10 PORTB.2 = 0
                            #define Set_LED11 PORTB.1 = 0
                            #define Set_LED12 PORTB.0 = 0
                            #define Set_LED13 PORTD.7 = 0
                            #define Set_LED14 PORTD.6 = 0
                            #define Set_LED15 PORTD.5 = 0
                            #define Set_LED16 PORTB.7 = 0
                            #define Set_LED17 PORTB.6 = 0
                            #define Set_LED18 PORTD.4 = 0
                            #define Set_LED19 PORTD.3 = 0
                            #define Set_LED20 PORTD.2 = 0
                            #define Set_LED21 PORTD.1 = 0
                            #define Set_LED22 PORTD.0 = 0[/code]

                            2 - شرط ریست کلی پایه ها را به صورت زیر می نویسیم
                            [code=c]PORTD = PORTD | 0b10000111;[/code]

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

                            دیدگاه


                              پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWM کنیم ؟؟

                              درود
                              سپاس از پاسخوگییت سامان جان این تغییرات رو انجام میدم ایشالله که درست بشه :nice: :rolleyes:
                              در روزگاري که لبخند ادم ها بخاطر شکست توست برخيز تا بگيرند.........

                              دیدگاه


                                پاسخ : چگونه همه پایه های میکروکنترلر AVR را PWM کنیم ؟؟

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

                                دیدگاه

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