پاسخ : (برنامه بسکام)چگونه تمام پایه های ATmega16-32-64-128 را PWM کنیم ؟؟!!! [آموزشی]
درود خدمت شما استاد عزیز :smile:
داداش ببخشید من این برنامه رو کپی کردم کامپایل کردم ریختم تو اتمگا 8 اما جوابی نگرفتم میشه یه بررسی کنید راستش با pwm کار نکردم از منطق برنامه زیاد سر در نمیارم اگه میشه الگوریتمشم توضیح بدید سپاس فراوان :nerd:
نوشته اصلی توسط سامان اسدی
پیش خودم گفتم که این سورس که اینقدر خوب جواب داده چرا با زبانهای دیگه (مثل بیسیک) ارائه ندادم ؟؟؟
به خاطر همین رفتم کدها رو به زبان بیسیک تبدیل کردم
با این وجود که خیلی وقت بود طرف بیسیک نرفته بودم و کلا" یادم رفته بود ولی آخرش موفق شدم کدها رو تبدیل کنم
سورس کد برای میکروهای ATmega16-32 به زبان بیسیک (بسکام)
سورس کد برای ATmega64-128 به زبان بیسیک(بسکام)
به دلیل درخواست زیاد برنامه برای ATmega8 ، این برنامه در تاریخ 93/2/11 اضاف شد
سورس کد برای ATmega8 به زبان بیسیک(بسکام)
یه موضوع خیلی مهم
دقیقا دو برنامه مثل هم هستند ولی موقع کامپایل کردن ، حافظه فلشی که برنامه بسکام اشغال میکنه تقریبا" دو برابر کدویژن هست
چراااااااا ؟؟؟؟
دوستان
اگر اشتباهی دیدید حتما بگید :applause:
با سپاس
موفق باشید
به خاطر همین رفتم کدها رو به زبان بیسیک تبدیل کردم
با این وجود که خیلی وقت بود طرف بیسیک نرفته بودم و کلا" یادم رفته بود ولی آخرش موفق شدم کدها رو تبدیل کنم
سورس کد برای میکروهای 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
کد:
$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 به زبان بیسیک(بسکام)
کد:
$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:
با سپاس
موفق باشید

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