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

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

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

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


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


Переключение кнопкой цвета на RGB ленте

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

1

Здравствуйте.

Есть плата на AtTiny13, тактовая кнопка, RGB лента.
Цель - переключать основные цвета на ленте по кругу.
Программа написана и всё работает:

$regfile = "attiny13.dat"

Config Portb.0 = Output                                   'Red
Config Portb.1 = Output                                   'Blue
Config Pinb.3 = Input                                       'Button
Config Portb.4 = Output                                    'Green

Dim Wtime As Byte                                           'Pause

Portb.0 = 0
Portb.1 = 0
Portb.4 = 0
Portb.3 = 0
Wtime = 1

Do
'Green:
   Do
   Portb.4 = 0
   Portb.1 = 1
   Portb.0 = 0
   Wait Wtime
   Loop Until Pinb.3 = 0
'Blue:
   Do
   Portb.4 = 1
   Portb.1 = 0
   Portb.0 = 0
   Wait Wtime
   Loop Until Pinb.3 = 0
'Red:
   Do
   Portb.4 = 0
   Portb.1 = 0
   Portb.0 = 1
   Wait Wtime
   Loop Until Pinb.3 = 0
'Yellow:
   Do
   Portb.4 = 0
   Portb.1 = 1
   Portb.0 = 1
   Wait Wtime
   Loop Until Pinb.3 = 0
'White:
   Do
   Portb.4 = 1
   Portb.1 = 1
   Portb.0 = 1
   Wait Wtime
   Loop Until Pinb.3 = 0
'Purple:
   Do
   Portb.4 = 1
   Portb.1 = 0
   Portb.0 = 1
   Wait Wtime
   Loop Until Pinb.3 = 0

Loop

Внимание вопрос (в порядке приоритетности):

1. Что добавить/изменить чтобы при включении запоминался номер позиции - цвет, на котором остановились?
2. Сейчас стоит пауза после нажания кнопки чтобы цвета не менялись с космической скоростью. Как установить разовое срабатывание от нажатия кнопки независимо от длительности удержания?

Заранее большое спасибо за подсказки!

0

2

Есть возможность поменять местами PinB.3 и PortB.4 ?

0

3

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

Есть возможность поменять местами PinB.3 и PortB.4 ?

Да, сейчас ещё ничего не запаяно.

0

4

Без изменения распиновки

Код:
$regfile = "attiny13.dat"

$crystal = 1200000
$hwstack = 16
$swstack=16
$framesize = 16

Config Portb.0 = Output                                   'Red
Config Portb.1 = Output                                   'Blue
Config Pinb.3 = Input                                       'Button
Config Portb.4 = Output                                    'Green


Dim Color As Byte                                                               '
Dim Color_eeprom As Eram Byte At &H02

Red Alias Portb.0                                                               ' Ссылка битов переменной на пины порта В
Green Alias Portb.1
Blue Alias Portb.4

Button Alias Pinb.3                                                             ' Даем название пину с кнопкой

Color = Color_eeprom                                                            ' Чтение из EEPROM

If Color = &HFF Then                                                            ' При первом чтении пустой ячейки eeprom считывается 255
   Color = 0
   Color_eeprom = 0
End If


Do

   If Button = 0 Then                                                           ' Если было нажатие кнопки

      Incr Color                                                                ' Увеличиваем на 1 переменную
      If Color > &B00000111 Then Color = 0                                      ' Если больше 7, обнуляем
      Color_eeprom = Color                                                      ' Запись в EEPROM

      Bitwait Button , Set                                                      ' Ждем отжатия кнопки
   End If

   Red = Color.0                                                                ' Управление RGB
   Green = Color.1
   Blue = Color.2

Loop



$regfile = "attiny13.dat"

$crystal = 1200000
$hwstack = 16
$swstack=16
$framesize = 16

Config Portb.0 = Output                                   'Red
Config Portb.1 = Output                                   'Blue
Config Pinb.3 = Input                                       'Button
Config Portb.4 = Output                                    'Green


Dim Color As Byte                                                               '
Dim Color_eeprom As Eram Byte At &H02

Red Alias Portb.0                                                               ' Ссылка битов переменной на пины порта В
Green Alias Portb.1
Blue Alias Portb.4

Button Alias Pinb.3                                                             ' Даем название пину с кнопкой

Color = Color_eeprom                                                            ' Чтение из EEPROM

If Color = &HFF Then                                                            ' При первом чтении пустой ячейки eeprom считывается 255
   Color = 0
   Color_eeprom = 0
End If


Do

   If Button = 0 Then                                                           ' Если было нажатие кнопки

      Incr Color                                                                ' Увеличиваем на 1 переменную
      If Color > &B00000111 Then Color = 0                                      ' Если больше 7, обнуляем
      Color_eeprom = Color                                                      ' Запись в EEPROM

      Bitwait Button , Set                                                      ' Ждем отжатия кнопки
   End If

   Red = Color.0                                                                ' Управление RGB
   Green = Color.1
   Blue = Color.2

Loop

Модератор, что за мусор в поле Code?

Отредактировано MACTEPok (2016-09-18 13:14:09)

0

5

Спасибо. Переключение работает правильно, независимо от времени удержания кнопки.
Но при вкл/выкл цвет перескакивает, видно как это происходит.
Возможно проблема не программная, а с кнопкой (подтянута сопротивлением 25кОм через землю)

0

6

Прошивка для активного сигнала кнопки "0". Порт МК, на котором кнопка, должен быть подтянут резистором 10к к плюсу питания.
Если у вас порт кнопки подтянут к минусу и активный сигнал кнопки "1", тогда в тексте программы изменить условие для If Button = 0 Then и Bitwait Button , Set  на противоположное.

PS: схемку желательно прилагать, когда вопросы задаете.

0

7

Спасибище!

0

8

Небольшое дополнение, возможно кому-то будет полезно.
Избавиться от "дребезга" больших дешевых кнопок удалось дополнением небольшой паузы сразу после проверки нажатия кнопки.

Код:
$regfile = "attiny13.dat"

$crystal = 1200000
$hwstack = 16
$swstack = 16
$framesize = 16

Config Portb.0 = Output                                     'Red
Config Portb.1 = Output                                     'Blue
Config Pinb.3 = Input                                       'Button
Config Portb.4 = Output                                     'Green


Dim Color As Byte                                           '
Dim Color_eeprom As Eram Byte At &H02

Red Alias Portb.0                                           ' Ññûëêà áèòîâ ïåðåìåííîé íà ïèíû ïîðòà Â
Green Alias Portb.1
Blue Alias Portb.4

Button Alias Pinb.3                                         ' Äàåì íàçâàíèå ïèíó ñ êíîïêîé

Color = Color_eeprom                                        ' ×òåíèå èç EEPROM

If Color = &HFF Then                                        ' Ïðè ïåðâîì ÷òåíèè ïóñòîé ÿ÷åéêè eeprom ñ÷èòûâàåòñÿ 255
   Color = 0
   Color_eeprom = 0
End If


Do

   If Button = 0 Then                                       ' Åñëè áûëî íàæàòèå êíîïêè
      Incr Color                                            ' Óâåëè÷èâàåì íà 1 ïåðåìåííóþ
      If Color > &B00000111 Then Color = 0                  ' Åñëè áîëüøå 7, îáíóëÿåì
      Color_eeprom = Color                                  ' Çàïèñü â EEPROM
      Bitwait Button , Set                                  ' Æäåì îòæàòèÿ êíîïêè
   End If
   Wait 1                                                   ' ïàóçà ïîñëå îòæàòèÿ êíîïêè "àíòèäðåáåçã"
   Red = Color.0                                            ' Óïðàâëåíèå RGB
   Green = Color.1
   Blue = Color.2

Loop

0

9

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

Избавиться от "дребезга" больших дешевых кнопок удалось дополнением небольшой паузы сразу после проверки нажатия кнопки.

Классика. :flirt: Только вот задержка в 1 секунду, как мне кажется, многовато.

0


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