Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Плавное включение диода


Плавное включение диода

Сообщений 1 страница 11 из 11

1

Подскажите как организовать плавное включение диода при нажатии кнопки?

Код:
 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

0

2

Конфигурируешь таймер в режим PWM. Затем обнаруживаешь нажатие кнопки и запускаешь таймер со значением в регистре PWM=0. В цикле инкрементируешь этот регистр на 1 до достижения им значения 255. Выключаешь таймер. Если нужно плавно гасить, то тоже самое, но декремент с 255 до 0. Все.

0

3

Этот код будет плавно зажигать и гасить светодиод.

Код:
$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 увеличиваем яркость светодиода и наоборот.

0

4

PWM = Pulse-width modulation. ШИМ!  ^^  Спасибо!

0

5

можно и программно:
в цикле от 0 до Х
отображать Х
пауза У-Х

т.е., как бы шим с длительностью Х
время свечения свдиода растёт, а пауза между вспышками - падает

Это упрошенно, но, надеюсь, понятно :)

могу поискать код, но на Бейсике, но под PIC

0

6

max а как кнопки пришпиндюлить для этого кода? я просто новичок !

Отредактировано rave402 (2013-07-16 23:02:28)

0

7

rave402 написал(а):

max а как кнопки пришпиндюлить для этого кода? я просто новичок !

Отредактировано rave402 (Вчера 22:02:28)


Пожалуйста, один из множества вариантов:

http://s4.uploads.ru/t/RtaTV.jpg

Исходник

'-------------------------------------------------------------------------------
  $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
'-------------------------------------------------------------------------------

Эмуляция в "Протеус" - скачать

Отредактировано sasha_1973 (2013-07-17 05:18:35)

0

8

Спасибо огромное Саша ! очень пригодилось !...

0

9

это опять я новичок ! помогите плиз делаю плавную регулировку яркости от пульта горизонт не получается с кодом тоесть как в слове 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
'-------------------------------------------------------------------------------

0

10

rave402 написал(а):

это опять я новичок ! помогите плиз делаю плавную регулировку яркости от пульта горизонт не получается с кодом тоесть как в слове 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 Плюс
    Elseif Command = 2 Then
        Rcall Минус
'    Elseif Command = 3 Then
'        Rcall третья подпрграмма
'    Elseif Command = 4 Then
'        Rcall четвертая подпрограмма
    End If

  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
'-------------------------------------------------------------------------------

Отредактировано sasha_1973 (2013-08-01 17:41:41)

0

11

А как, чтоб регулировка в памяти оставалась и при первом включении плавно загоралось!

Код:
Исходник
'-------------------------------------------------------------------------------
  $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)

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Плавное включение диода