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

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

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

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


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


управление одной кнопкой

Сообщений 31 страница 60 из 85

31

Этот блок вообще в принципе не может работать.

Код:
Main_program:
   Do
      If Change = 1 Then Change = 0
      If M = 1 Then
         Label1:
         ' тут управляем огоньками в 1 режиме
         For I = 1 To 8
         Portb = Efect1(i)
         Waitms Dl
         Next I

         If Change = 0 Then Goto Label1
      End If

      If M = 2 Then
         Label2:
         ' тут управляем огоньками во 2 режиме
         For I = 8 To 1 Step -1
         Portb = Efect1(i)
         Waitms Dl
         Next I

         If Change = 0 Then Goto Label2
      End If

      If M = 3 Then
         Label3:
         ' тут управляем огоньками в 3 режиме
         Portb = 255
         ' Задержка
         Waitms Dl
         Portb = 0
         ' Задержка
         Waitms Dl
         If Change = 0 Then Goto Label3
      End If

       If M = 4 Then
         Label4:
         ' тут управляем огоньками в 4 режиме
          For I = 1 To 6
          Portb = Efect2(i)
          Waitms Dl
          Next I
          If Change = 0 Then Goto Label4
      End If

       If M = 5 Then
         Label5:
         ' тут управляем огоньками в 3 режиме
         Portb = 240
         ' Задержка
         Waitms Dl
         Portb = 15
         ' Задержка
         Waitms Dl
         If Change = 0 Then Goto Label5
      End If

   Loop Until Change = 1
Change = 0
Goto Main_program
'End

Рассмотрим почему?

0

32

Например:
If Change = 1 Then Change = 0
      If M = 1 Then
         Label1:
         ' тут управляем огоньками в 1 режиме
         For I = 1 To 8
         Portb = Efect1(i)
         Waitms Dl
         Next I
If Change = 0 Then Goto Label1
      End If
Это бесконечный цикл, который никогда не закончится. Предположим сработало прерывание и установился флаг Change=1.
Сразу следом этот флаг сбросится командой If Change = 1 Then Change = 0 и затем команда If Change = 0 Then Goto Label1 зациклет этот кусок навечно. Также и остальные кусочки.

Отредактировано sva-don (2012-01-12 16:23:04)

0

33

Далее. посмотрим на все тело программы. Я убрал для наглядности внутренности циклов.

Код:
Main_program:
   Do
      If Change = 1 Then Change = 0
      If M = 1 Then
        .....
      End If

      If M = 2 Then
        .....
      End If

      If M = 3 Then
        .....  
      End If

       If M = 4 Then
         .....
      End If

       If M = 5 Then
        .....
      End If

   Loop Until Change = 1
Change = 0
Goto Main_program
'End

Как будет работать цикл DO если флаг Change в самом начале устанавливается в 0?
Кстати, end не желательно комментировать, пусть стоит нормально.
Готовые ответы не привожу. Лучше все продумать самому. ОК?

0

34

sva-don я пробовал ставить больше 50 мс. 100-120. было заметно. но дребезг не изчез.

как ни странно но программа работает, меняет режимы и скорость :)

на оператор End после (Goto Main_program) компилятор ругается. Пробовал в версиях: 1.11.9.8, 2.0.7.1

0

35

Кстати  после
Button:
   Waitms 60
значительно лучше начал работать. Спасибо за информацию! Читал есть микрухи которые убирают дребезг (фирмы MAXIM например) но они стоят не дешего, около 400руб. Не разумно использовать такие. Тем более для практики.

0

36

Заменил ещё 1 глюк. Кнопка выбора резима срабатываеь как надо. на 99%. а вот прибавление скорости и уменьшение срабатывают не всегда. И самое не хорошее периодически 50% меняется и режим :(

0

37

А я об этом и говорю. У тебя все циклы выполнены неправильно. ПОдумай, а если не получится, то будем разбираться вместе.

0

38

sva-don написал(а):

Это бесконечный цикл, который никогда не закончится

Из этого цикла он выходит когда заканчивается выполнение прогарммы. Например при сдвиге в 1 сторону когда дойдет до последненго светодиода то сработает. всё же как то он выходит из этого цикла для опроса по прерыванию On Int0 Button
А если вообще убрать строки If Change = 1 Then Change = 0 и If Change = 0 Then Goto Label1
По идее переменная М будет равна тому же числу например M=1 и после выполнения программы обратится в начало и будет выполнятся та же программа если не нажали на кнопку смены программы. Под рукой макетки нет, дома попробую поэкспериментировать

Отредактировано Gavrilov_S (2012-01-13 13:14:32)

0

39

Ещё интересует другой вопрос: есть ли разница в этих действиях:
Portd = 255 - тут я так понимаю на порт подается напряжение лог "1" на все порты D
Set Portd.2 - а тут лог "1" на одну ножку порта D2. Равнозначна ли такая программа установке подтягивающего резистора?
Т.е. установка резистора 10К на +5В в этом случае не обязательна?

0

40

Да, если порт настроен на ввод, то установка бита порта в 1 подключает внутренний подтягивающий резистор на шину питания, что равнозначно подключению внешнего резистора.
Необходимо только отслеживать чтобы ток через него не превышал допустимый.
Я тут поковырялся с твоей программой на досуге и вот что получил.
1. Для того, чтобы компилятор не ругался на END, блоки DATA нужно выносить за него.
Вот мой код. Сравни со своим и все встанет на свои места.
В основном цикле происходит проверка режима и в зависимости от его состояния выполняется та или иная программа.
После одного выполнения переходим в начало на метку Main_program, что равнозначно проверке изменения флага M и переменной Dl.
Если ничего не изменилось, выполняется та же программа, что и до этого, а если изменилось, то другая или меняется скорость.
Внутри цикла выполнения программы происходит проверка нажатия на кнопку. Если такое нажатие осуществлялось, то происходит досрочный выход из пронраммы управления эффектом и переход на другой или изменение скорости.
Добавил режим 0, когда ничего не выводится.

Код:
$regfile = "attiny2313.dat"
$crystal = 10000000
$framesize = 16
$hwstack = 24
$swstack = 16

Config Int0 = Falling
On Int0 Button
Enable Int0

Config Portb = Output
Portb = 0

Config Portd = Input
PORTD = &B00111100

Enable Interrupts

Dim M As Byte                                               Dim Dl As Long
Dim I As Integer
Dim Efect1(8) As Byte
Dim Efect2(6) As Byte
Dim Change As Byte

Restore Effect1
 For I = 1 To 8
  Read Efect1(i)
 Next I

Restore Effect2
 For I = 1 To 6
  Read Efect2(i)
 Next I

Dl = 250
M = 1

Main_program:
 Do
      If M = 0 Then
       PORTB = 0
       GoTo Main_program
      End If

      If M = 1 Then
         'Первый эффект
        For I = 1 To 8
         Portb = Efect1(i)
         'Проверим нет ли нажатия на кнопки?
          If Change = 1 Then
         'Было нажатие, сбросим флаг нажатия и идем в начало.
           Change = 0
           GoTo Main_Program
          End If
         'Нажатия не было работаем дальше.
         Waitms Dl
        Next I
         'Цикл закончен, перейдем в начало, чтобы проверить изменения M или Dl
        GoTo Main_program
      End If

      If M = 2 Then
        For I = 8 To 1 Step -1
         Portb = Efect1(i)
         Waitms Dl
          If Change = 1 Then
           Change = 0
           GoTo Main_Program
          End If
        Next I
        GoTo Main_program
      End If

      If M = 3 Then
         Portb = 255
         Waitms Dl
         Portb = 0
         Waitms Dl
        GoTo Main_program
      End If

       If M = 4 Then
         Label4:
         For I = 1 To 6
          Portb = Efect2(i)
          If Change = 1 Then
           Change = 0
           GoTo Main_Program
          End If
         Waitms Dl
        Next I
        GoTo Main_program
       End If

       If M = 5 Then
         Label5:
         Portb = 240
         Waitms Dl
         Portb = 15
         Waitms Dl
        GoTo Main_program
       End If
   Loop
End

Effect1:
Data 128 , 64 , 32 , 16 , 8 , 4 , 2 , 1

Effect2:
Data 129 , 66 , 36 , 24 , 36 , 66

'Прерывание от кнопок
Button:
 Waitms 60
 Change = 1

   If Pind.5 = 0 Then
      Incr M
      If M > 5 Then M = 0
   End If

   If Pind.4 = 0 Then
      Dl = Dl + 10
      If Dl > 3000 Then Dl = 3000
   End If

   If Pind.3 = 0 Then
      Dl = Dl - 10
      If Dl < 10 Then Dl = 10
   End If
Return

+1

41

sva-don, Спасибо за разъяснение! Логику работы понял. После работы дома проверю на приактике. Посмотрю будет ли дребезг и корректное срабатывание на кнопки.

0

42

sva-don Прога работает не корректно. На кнопки не реагирует пока их не ужерживать около 1 сек. , после нажатия на кнопку перезапускается програма 1. Скорость не меняется и режим тоже. Я нашел в программе некоторые ошибки. Начиная с частоты кварца. Изменил на 1мгц и убрал некоторые поля и программа пока работает как часы. Выкладываю:

$regfile = "attiny2313.dat"
$crystal = 1000000
'$framesize = 16
'$hwstack = 24
'$swstack = 16

Config Int0 = Falling
On Int0 Button
Enable Int0

Config Portb = Output
Portb = 0

Config Portd = Input
Set Portd.5
Set Portd.4
Set Portd.3

Enable Interrupts

Dim M As Byte
Dim Dl As Long
Dim I As Integer
Dim Efect1(8) As Byte
Dim Efect2(6) As Byte
Dim Change As Byte

Restore Effect1
For I = 1 To 8
  Read Efect1(i)
Next I

Restore Effect2
For I = 1 To 6
  Read Efect2(i)
Next I

Dl = 20
M = 1

Main_program:
Do
        If M = 1 Then
         'Первый эффект
        For I = 1 To 8
         Portb = Efect1(i)
         'Проверим нет ли нажатия на кнопки?
          If Change = 1 Then
         'Было нажатие, сбросим флаг нажатия и идем в начало.
           Change = 0
           GoTo Main_Program
          End If
         'Нажатия не было работаем дальше.
         Waitms Dl
        Next I
         'Цикл закончен, перейдем в начало, чтобы проверить изменения M или Dl
        GoTo Main_program
      End If

      If M = 2 Then
        For I = 8 To 1 Step -1
         Portb = Efect1(i)
         Waitms Dl
          If Change = 1 Then
           Change = 0
           GoTo Main_Program
          End If
        Next I
        GoTo Main_program
      End If

      If M = 3 Then
         Portb = 255
         Waitms Dl
         Portb = 0
         Waitms Dl
        GoTo Main_program
      End If

       If M = 4 Then
         Label4:
         For I = 1 To 6
          Portb = Efect2(i)
          If Change = 1 Then
           Change = 0
           GoTo Main_Program
          End If
         Waitms Dl
        Next I
        GoTo Main_program
       End If

       If M = 5 Then
         Label5:
         Portb = 240
         Waitms Dl
         Portb = 15
         Waitms Dl
        GoTo Main_program
       End If
   Loop
End

Effect1:
Data 128 , 64 , 32 , 16 , 8 , 4 , 2 , 1

Effect2:
Data 129 , 66 , 36 , 24 , 36 , 66

'Прерывание от кнопок
Button:
Waitms 60
Change = 1

   If Pind.5 = 0 Then
      Incr M
      If M > 5 Then M = 1
   End If

   If Pind.4 = 0 Then
      Dl = Dl + 20
      If Dl > 3000 Then Dl = 3000
   End If

   If Pind.3 = 0 Then
      Dl = Dl - 20
      If Dl < 20 Then Dl = 20
   End If
Return

Отредактировано Gavrilov_S (2012-01-13 23:18:07)

0

43

Не вижу изменений кроме частоты кварца. Там лоханулся, не уследил.

0

44

sva-don я ещё убрал не нужный режим
If M = 0 Then
       PORTB = 0
       GoTo Main_program
      End If
изменил на M = 1
но эти изменения на работу не вляли.

Mrshilov на кнопки реагирует отлично, дребезга нет. Если поможете переделать, проверю работоспособность по Вашему способу.
В данный момент моя программа выглядит так:

$regfile = "attiny2313.dat"
$crystal = 1000000

Config Int0 = Falling
On Int0 Button
Enable Int0

Config Portb = Output : Portb = 0

Config Portd = Input : Set Portd.5 : Set Portd.4 : Set Portd.3

Enable Interrupts

Dim M As Byte : Dim Dl As Long : Dim I As Integer : Dim Change As Byte
Dim Efect1(8) As Byte : Dim Efect2(8) As Byte : Dim Efect3(8) As Byte : Dim Efect4(8) As Byte

Restore Effect1
For I = 1 To 8
Read Efect1(i)
Next I
Restore Effect2
For I = 1 To 6
Read Efect2(i)
Next I
Restore Effect3
For I = 1 To 8
Read Efect3(i)
Next I
Restore Effect4
For I = 1 To 8
Read Efect4(i)
Next I

Dl = 200 : M = 1

Main_program:
Do
        If M = 1 Then
         For I = 1 To 8
         Portb = Efect1(i)
         'Проверим нет ли нажатия на кнопки?
          If Change = 1 Then
         'Было нажатие, сбросим флаг нажатия и идем в начало.
           Change = 0
           Goto Main_program
          End If
         'Нажатия не было работаем дальше.
         Waitms Dl
        Next I
         'Цикл закончен, перейдем в начало, чтобы проверить изменения M или Dl
        Goto Main_program
      End If

      If M = 2 Then
        For I = 8 To 1 Step -1
         Portb = Efect1(i)
         Waitms Dl
          If Change = 1 Then
           Change = 0
           Goto Main_program
          End If
        Next I
        Goto Main_program
      End If

      If M = 3 Then
         Portb = 255
         Waitms Dl
         Portb = 0
         Waitms Dl
        Goto Main_program
      End If

       If M = 4 Then
          For I = 1 To 6
          Portb = Efect2(i)
          If Change = 1 Then
           Change = 0
           Goto Main_program
          End If
         Waitms Dl
        Next I
        Goto Main_program
       End If

       If M = 5 Then
         Portb = 240
         Waitms Dl
         Portb = 15
         Waitms Dl
        Goto Main_program
       End If

      If M = 6 Then
          For I = 1 To 8
          Portb = Efect3(i)
          If Change = 1 Then
           Change = 0
           Goto Main_program
          End If
         Waitms Dl
        Next I
        Goto Main_program
       End If

      If M = 7 Then
         For I = 1 To 8
         Portb = Efect1(i)
           If Change = 1 Then
           Change = 0
           Goto Main_program
          End If
          Waitms Dl
        Next I
         For I = 7 To 2 Step -1
         Portb = Efect1(i)
         If Change = 1 Then
           Change = 0
           Goto Main_program
          End If
         Waitms Dl
        Next I
        Goto Main_program
       End If

Loop
End

Effect1:
Data 128 , 64 , 32 , 16 , 8 , 4 , 2 , 1                     'Бегущие огни
Effect2:
Data 129 , 66 , 36 , 24 , 36 , 66
Effect3:
Data 0 , 129 , 195 , 231 , 255 , 231 , 195 , 129
Effect4:
Data 0 , 24 , 60 , 126 , 255 , 126 , 60 , 24

'Прерывание от кнопок
Button:
Waitms 60
Change = 1

   If Pind.5 = 0 Then
      Incr M
      If M > 7 Then M = 1
   End If

   If Pind.4 = 0 Then
      Dl = Dl + 10
      If Dl > 3000 Then Dl = 3000
   End If

   If Pind.3 = 0 Then
      Dl = Dl - 10
      If Dl < 10 Then Dl = 10
   End If
Return

0

45

Mrshilov сейчас нормально работает. Это было до изменения программы.
Всегда хотел собрать светомузыку на микроконтроллере. Эффекты выбирать и менять скорость научился. Сейчас нужно научиться принимать прерывание с порта и чтобы он управлял эффектами, на вход подать обычные прямоугольные импульсы и подасть сигнал с микрофона чтобы он переделал его в прямоуголные.
Схема у меня такая есть на 561ЛН2 от светомузыки Электроника СДУ-3

На 2313 памяти скорее всего не хватит для такой светомузыки. У меня есть мега48. там 4кб.

Отредактировано Gavrilov_S (2012-01-14 22:57:04)

0

46

Mrshilov, ищё интересует вопрос как сделать управление от кнопок не использую порт INT0 через диоды от кнопок а напрямую каждую кнопку на массу ?

0

47

Смотри пост №9.

0

48

sva-don, жаль примеров там нет. Прерывание int0 нужно отключить при таком подключении? Макетка дома находится. Тольк вечером могу поэксперименитровать. 

Евгений86, получилось у Вас управление кнопками по посту №8? Если да, то можете поделиться кодом?

0

49

Все очень просто. Убираем диоды и шину INT0. Вместо прерывания по INT0 используем прерывание по переполнению TIMER0. Конфигурируем его, как таймер и включаем предделитель на 256, что при частоте 1 МГц даст частоту прерывания примерно 65 мс. Думаю, что этого будет достаточно для сканирования. В п/п прерывания переменную Change занесем внутрь каждой конструкции IF и добавим команду ожидания отпускания кнопки Bitwait PIND.x , SET иначе при длительном нажатии на кнопку будет бардак. Правда при нажатии на любую кнопку вывод эффектов будет приостановлен до ее отпускания, но это уже издержки программы. Можно конечно что нибудь наворочать, но думаю, что это не самый плохой недостаток.

Код:
$regfile = "attiny2313.dat"
$crystal = 1000000
$framesize = 16
$hwstack = 24
$swstack = 16

STOP TIMER0
CONFIG TIMER0 = TIMER , PRESCALE = 256
ON TIMER0 Button
ENABLE TIMER0

Config Portb = Output
Portb = 0

Config Portd = Input
PORTD = &B00111000

Enable Interrupts

Dim M As Byte
Dim Dl As Long
Dim I As Integer
Dim Efect1(8) As Byte
Dim Efect2(6) As Byte
Dim Change As Byte

Restore Effect1
 For I = 1 To 8
  Read Efect1(i)
 Next I

Restore Effect2
 For I = 1 To 6
  Read Efect2(i)
 Next I

Dl = 250
M = 1

START TIMER0

Main_program:
 Do

      If M = 1 Then
        For I = 1 To 8
         Portb = Efect1(i)
          If Change = 1 Then
           Change = 0
           GoTo Main_Program
          End If
         Waitms Dl
        Next I
        GoTo Main_program
      End If

      If M = 2 Then
        For I = 8 To 1 Step -1
         Portb = Efect1(i)
         Waitms Dl
          If Change = 1 Then
           Change = 0
           GoTo Main_Program
          End If
        Next I
        GoTo Main_program
      End If

      If M = 3 Then
         Portb = 255
         Waitms Dl
         Portb = 0
         Waitms Dl
        GoTo Main_program
      End If

       If M = 4 Then
         Label4:
         For I = 1 To 6
          Portb = Efect2(i)
          If Change = 1 Then
           Change = 0
           GoTo Main_Program
          End If
         Waitms Dl
        Next I
        GoTo Main_program
       End If

       If M = 5 Then
         Label5:
         Portb = 240
         Waitms Dl
         Portb = 15
         Waitms Dl
        GoTo Main_program
       End If
   Loop
End

Effect1:
Data 128 , 64 , 32 , 16 , 8 , 4 , 2 , 1

Effect2:
Data 129 , 66 , 36 , 24 , 36 , 66

Button:

   If Pind.5 = 0 Then
    Change = 1
      Incr M
      If M > 5 Then M = 0
     Bitwait PIND.5 , SET
   End If

   If Pind.4 = 0 Then
    Change = 1
      Dl = Dl + 10
      If Dl > 3000 Then Dl = 3000
     Bitwait PIND.4 , SET
   End If

   If Pind.3 = 0 Then
    Change = 1
      Dl = Dl - 10
      If Dl < 10 Then Dl = 10
     Bitwait PIND.3 , SET
   End If
Return

0

50

sva-don программу проверил на макетной плате. Всё работает на отлично!
А как сейчас сделать прерывание с порта? Например подаем туда прямоугольные импульсы схему собранную например на К155ЛА3. И чтобы менялись эффекты с подачи сигнала.
У 2313 прерывания INT0 порт PD2, INT1 порт PD3.

0

51

Кто программу пишет?  :D
Все весьма просто. В программе конфигурируем прерывание INT0 или INT1. Определяем п/п обработки прерывания и подаем импульсы от внешнего генератора.
Правда в нашей программе есть один не приятный недостаток. Дело в том, что в тиньке 2313 всего 2К памяти, а мы тупо пишем On TIMER0 Button. В этом случае компилятор сохраняет в стеке все 30 регистров, а потом восстанавливает их, а это не много не мало 60 байт в КАЖДОЙ п/п прерывания. Для оптимизации кода лучше писать On TIMER0 Button Nosave. Правда в этом случае используемые регистры должны быть сохранены программистом. Как узнать, какие регистры сохранять? Ведь BASCOM не дает ассемблерного листинга. Я поступаю так. Запускаю AVR Studio и открываю в ней файл проекта с расширением obj. Потом в студии открываю дизассемблер и нахожу п/п обработки прерывания в которой можно найти имена используемых регистров. Дальше все просто. В самом начале п/п прерывания заносим их в стек командой PUSH R24, а в конце извлекаем POP R24. R24 для примера, они могут быть другими и их может быть несколько. Вот такая песня. Конечно для "больших" контроллеров типа М128 и небольших проектах это все можно упустить, но для тинек все серьезнее. Да, забыл сказать, что обработка 60 команд занимает еще и время и при критичных по времени программах это может быть весьма существенным. Также необходимо отметить, что код в п/п прерывание должен быть максимально коротким. Все, что можно вытащить оттуда, нужно вытащить. В идеале должно быть примерно так:
Int0_ISR:
PUSH R24
   Change=1
POP R24
Return
Понятно, что хочется быстрее получить готовое изделие, но нужно еще и привыкать писать пооптимальнее. Вот такое небольшое отступление.

0

52

sva-don эксперименты провожу с тинкой. а светомузыкальное устройство хочу сделать на mega48, есть и мега8 и мега 16. но их жалко пускать на такое устройство :)
программирование мне тяжело дается. я электронщик. на таком уровне никогда программы не писал. Потихонечку вникаю в программы которые Вы мне пишете :) За это Большое Спасибо!

0

53

Программа должна быть общим достоянием - делаете то сообща.  :D

0

54

radan, если доделаем то конечно! И схему выложу и исходники :)

0

55

Да я не в претензии. Так, прикололся. Сам когда то начинал, поэтому все прекрасно понимаю. Спрашивай, не стесняйся. Чем можем, поможем.

0

56

sva-don наверно стоит создать новую тему по своему устройству. Как нарисую принципиальную схему. По светомузыке. И самая хотелка на весну это инкубатор с Фазо Импульсным Управлением. С плавной регулировкой мощности.

0

57

Всем привет,начал делать Rgb светильник,но с программированием пока туговато и прошу помощи здесь.
Контроллер - тини24,с регулировкой яркости вроде разобрался,осталось прикрутить переключение цветов одной кнопкой,вот тут я и завис,никак не могу сообразить что куда.
Ткните пожалуйста носом,в каком месте исправить
схема:http://sf.uploads.ru/t/zIBwq.png

код

$regfile = "attiny24.dat"
$crystal = 4000000
$hwstack = 32
$swstack = 8
$framesize = 16

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Up , Prescale = 8
Enable Timer1
Config Porta.5 = Output
Config Porta.0 = Output
Config Porta.1 = Output
Config Porta.2 = Output
Config Portb.2 = Input

Config Int0 = Falling
On Int0 Button
Enable Int0
Enable Interrupts

Dim M As Byte
Dim Change As Byte
M = 1
Change = 0

Do
Pwm1b = Getadc(7) / 4
Waitms 10
Loop

Main_program:

Do
      If Change = 1 Then Change = 0
      If M = 1 Then
      Label1:
      Porta.0 = 1
      Porta.1 = 1
      Porta.2 = 1

      End If
      If M = 2 Then
         Label2:
         Porta.0 = 1
         Porta.1 = 0
         Porta.2 = 1

      End If
      If M = 3 Then
         Label3:
         Porta.0 = 0
         Porta.1 = 0
         Porta.2 = 1

          End If
      If M = 4 Then
         Label4:
         Porta.0 = 0
         Porta.1 = 1
         Porta.2 = 1

      End If
      If M = 5 Then
         Label5:
         Porta.0 = 0
         Porta.1 = 1
         Porta.2 = 0

          End If
      If M = 6 Then
         Label6:
         Porta.0 = 1
         Porta.1 = 1
         Porta.2 = 0

       End If
      If M = 7 Then
         Label7:
         Porta.0 = 1
         Porta.1 = 0
         Porta.2 = 0

      End If
       Loop Until Change = 1
Change = 0
Goto Main_program
End
Button:
   Change = 1
   Incr M
   If M > 7 Then M = 1
Return

Ссылка на протеус и прошивку

0

58

Доброго здоровья!

Переключать  RGB по кругу?

Чото-то Ваш вариант никак не работает?

Модель RGB для Протеуса  -  здесь

Отредактировано sasha_1973 (2014-12-24 19:32:09)

0

59

Да,переключение по кругу.
Вариант да,не работает,не могу организовать переключение кнопкой,да и с потенциометром то я не сам разобрался

Отредактировано SimBB (2014-12-24 19:45:22)

0

60

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

Модель RGB для Протеуса

Там первая версия модели с общим катодом. А в этом устройстве нужна с общим анодом. Доработанная модель. http://pure-basic.narod.ru/forum_files/ … _ok_oa.zip

+1


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