Подскажите как организовать плавное включение диода при нажатии кнопки?
Config Portb.0 = Output
Config Pind.0 = Input
Pind.0 = 1
Do
If Pind.0 = 0 Then
Portb.0 = 1
'Waitms 50
Else
Portb.0 = 0
'Waitms 50
End If
Loop
Программирование ATMEL в BASCOM. |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » Плавное включение диода
Подскажите как организовать плавное включение диода при нажатии кнопки?
Config Portb.0 = Output
Config Pind.0 = Input
Pind.0 = 1
Do
If Pind.0 = 0 Then
Portb.0 = 1
'Waitms 50
Else
Portb.0 = 0
'Waitms 50
End If
LoopКонфигурируешь таймер в режим PWM. Затем обнаруживаешь нажатие кнопки и запускаешь таймер со значением в регистре PWM=0. В цикле инкрементируешь этот регистр на 1 до достижения им значения 255. Выключаешь таймер. Если нужно плавно гасить, то тоже самое, но декремент с 255 до 0. Все.
Этот код будет плавно зажигать и гасить светодиод.
$regfile = "m8def.dat" $crystal = 8000000 Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1 Dim A As Byte Do For A = 0 To 255 Pwm1a = A Waitms 15 For A = 255 To 0 Step -1 Pwm1a = A Waitms 15 Next A Loop End
Увеличивая значение Pwm1a увеличиваем яркость светодиода и наоборот.
PWM = Pulse-width modulation. ШИМ!
Спасибо!
можно и программно:
в цикле от 0 до Х
отображать Х
пауза У-Х
т.е., как бы шим с длительностью Х
время свечения свдиода растёт, а пауза между вспышками - падает
Это упрошенно, но, надеюсь, понятно 
могу поискать код, но на Бейсике, но под PIC
max а как кнопки пришпиндюлить для этого кода? я просто новичок !
Отредактировано rave402 (2013-07-16 23:02:28)
max а как кнопки пришпиндюлить для этого кода? я просто новичок !
Отредактировано rave402 (Вчера 22:02:28)
Пожалуйста, один из множества вариантов:
'-------------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 8000000
$framesize = 32
$hwstack = 40
$swstack = 16
'-------------------------------------------------------------------------------const скорость_изменения_яркости = 10
'-------------------------------------------------------------------------------
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 8
Dim 1_канал As Byte
Dim 2_канал As Byte'-------------------------------------------------------------------------------
Config Pinb.0 = Input
Set Portb.0
Кнопка_плюс Alias Pinb.0Config Pinb.5 = Input
Set Portb.5
Кнопка_минус Alias Pinb.5'-------------------------------------------------------------------------------
Do
If Кнопка_плюс = 0 Then Rcall Плюс
If Кнопка_минус = 0 Then Rcall Минус
Loop
End'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Плюс:
Incr 1_канал
If 1_канал > 254 Then 1_канал = 254
Pwm1a = 1_каналIncr 2_канал
If 2_канал > 254 Then 2_канал = 254
Pwm1b = 2_каналWaitms 10
Return
'-------------------------------------------------------------------------------'-------------------------------------------------------------------------------
Минус:
Decr 1_канал
If 1_канал < 1 Or 1_канал = 255 Then 1_канал = 0
Pwm1a = 1_каналDecr 2_канал
If 2_канал < 1 Or 2_канал = 255 Then 2_канал = 0
Pwm1b = 2_каналWaitms 10
Return
'-------------------------------------------------------------------------------
Эмуляция в "Протеус" - скачать
Отредактировано sasha_1973 (2013-07-17 05:18:35)
Спасибо огромное Саша ! очень пригодилось !...
это опять я новичок ! помогите плиз делаю плавную регулировку яркости от пульта горизонт не получается с кодом тоесть как в слове else вставить такую строку чтобы работало так как в место кнопок ? вот код :
'-------------------------------------------------------------------------------
$regfile = "attiny2313.dat"
$crystal = 8000000
$lib "mcsbyte.lbx"
'-------------------------------------------------------------------------------
Config Rc5 = Pind.2
Config Timer0 = Pwm , Prescale = 8 , Compare B Pwm = Clear Down
Dim A As Byte
Dim Address As Byte
Dim Command As Byte
Enable Interrupts
'-------------------------------------------------------------------------------
Do
Getrc5(address , Command )
If Address <> 255 And Command <> 255 Then
Command = Command And &B01111111
End If
If Command = 1 Then Rcall Плюс
Else
If Command = 2 Then Rcall Минус
Else
Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Плюс:
Incr A
If A > 254 Then A = 254
Pwm0b = A
Waitms 15
Return
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Минус:
Decr A
If A < 1 Or A = 255 Then A = 0
Pwm0b = A
Waitms 15
Return
'-------------------------------------------------------------------------------
это опять я новичок ! помогите плиз делаю плавную регулировку яркости от пульта горизонт не получается с кодом тоесть как в слове else вставить такую строку чтобы работало так как в место кнопок ?
Можно так, а можно и по другому, смотря, что Вы хотите.
'-------------------------------------------------------------------------------
$regfile = "attiny2313.dat"
$crystal = 8000000
$lib "mcsbyte.lbx"
'-------------------------------------------------------------------------------Config Rc5 = Pind.2
Config Timer0 = Pwm , Prescale = 8 , Compare B Pwm = Clear DownDim A As Byte
Dim Address As Byte
Dim Command As ByteEnable Interrupts
'-------------------------------------------------------------------------------
DoGetrc5(address , Command )
If Address <> 255 And Command <> 255 Then
Command = Command And &B01111111
End IfIf Command = 1 Then
Rcall Плюс
Elseif Command = 2 Then
Rcall Минус
' Elseif Command = 3 Then
' Rcall третья подпрграмма
' Elseif Command = 4 Then
' Rcall четвертая подпрограмма
End IfLoop
'-------------------------------------------------------------------------------'-------------------------------------------------------------------------------
Плюс:
Incr A
If A > 254 Then A = 254
Pwm0b = AWaitms 15
Return
'-------------------------------------------------------------------------------'-------------------------------------------------------------------------------
Минус:
Decr A
If A < 1 Or A = 255 Then A = 0
Pwm0b = AWaitms 15
Return
'-------------------------------------------------------------------------------
Отредактировано sasha_1973 (2013-08-01 17:41:41)
А как, чтоб регулировка в памяти оставалась и при первом включении плавно загоралось!
Исходник
'-------------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 8000000
$framesize = 32
$hwstack = 40
$swstack = 16
'-------------------------------------------------------------------------------
const скорость_изменения_яркости = 10
'-------------------------------------------------------------------------------
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 8
Dim 1_канал As Byte
Dim 2_канал As Byte
'-------------------------------------------------------------------------------
Config Pinb.0 = Input
Set Portb.0
Кнопка_плюс Alias Pinb.0
Config Pinb.5 = Input
Set Portb.5
Кнопка_минус Alias Pinb.5
'-------------------------------------------------------------------------------
Do
If Кнопка_плюс = 0 Then Rcall Плюс
If Кнопка_минус = 0 Then Rcall Минус
Loop
End
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Плюс:
Incr 1_канал
If 1_канал > 254 Then 1_канал = 254
Pwm1a = 1_канал
Incr 2_канал
If 2_канал > 254 Then 2_канал = 254
Pwm1b = 2_канал
Waitms 10
Return
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Минус:
Decr 1_канал
If 1_канал < 1 Or 1_канал = 255 Then 1_канал = 0
Pwm1a = 1_канал
Decr 2_канал
If 2_канал < 1 Or 2_канал = 255 Then 2_канал = 0
Pwm1b = 2_канал
Waitms 10
Return
'-------------------------------------------------------------------------------Отредактировано krasser (2015-03-03 17:18:45)
Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » Плавное включение диода