Заведите счетчик, по которому будет меняться благ. Флагом может служить переменная типа БИТ. По состоянию блага приравнивайте для М1 - А или В Как то так..
Код:
dim counter as word , flag as bit
do incr counter if counter = 500 then : toggle flag: counter = 0 : end if
A = Getadc(5) B = Getadc(0) if flag = 1 then : M1 = A * 5 : else : M1 = B * 5 : end if M2 = M1 M3 = M1
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Не знаю, у меня такой вариант в часах уже 5 лет работает. Код ниже. Понимаю, что код может показаться не оптимальным, но он рабочий, без таймеров и прерываний.
Dim Count As Byte , T As Byte , C As Byte Dim Disp As String * 4 Dim W(4) As String * 1 Dim Pak(4) As String * 2 Dim T1 As Byte , Byte0 As Byte , Byte1 As Byte Dim T2 As Byte Dim Viv As Bit
Сделал небольшой эксперимент. Помигал светодиодом. Понадобилось узнать разницу в частоте мигания при разных подходах к делу. Использовал BascomAVR и AVR Studio7. Все остальное на скринах.
Странно что toggle в баскоме отрабатывает медленнее чем set reset. Примечательно что выходной HEX баскома = 192 байта, а студии - 142 байта.
Странно что toggle в баскоме отрабатывает медленнее чем set reset.
Если посмотреть на дизасм, то становится понятно, почему так происходит:
А для инверсии бита в Си, можно сделать так:
Код:
PORTB ^= (1 << 5);
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Дизасм с кода баскома и студии должен быть одинаковым при простом Set, Reset bit. Кажется, но сейчас посмотрю. Но видно что код баскома делает мигание это с частотой 2,4 МГц, а студия 2,66МГц.
здрассьте, уважаемые. решил вот открыть для себя чудный мир микроконтроллеров и сходу заимел прикладную задачу, с которой и прошу помощи. итак, задача - линейка из 9 (лучше 11) светодиодов, поочередно вспыхивающих и плавно гаснущих. т.е. форма сигнала по сути - убывающая пила. из гугля я понял, что надо лудить ШИМ, но аппаратный ШИМ весь на таймерах, а где их взять такую палестину? не лучше ли будет использовать программный ШИМ, благо кроме этой задачи МК больше ничего делать не будет (ну почти. там еще пара фенечек). так как я твердо решил стоять на бейсике, то на нем и стою, но вот примеров программного ШИМа на нем не нашел. не подкинете хоть на 1-2 канала, а дальше я может и сам справлюсь?
Добавлено after 7 hours 22 minutes 12 seconds: долго смотрел в код, пока он не начал смотреть в меня. но вопросы остались:
Цитата:
Config Portd.2 = Output : Led Alias Portd.2 Config Timer0 = Timer , Prescale = 1 : On Timer0 Pulse : Enable Timer0 : Enable Interrupts Dim Z As Byte , Y As Integer
Do Y = 10 Loop End
Pulse: Incr Z If Z >= Y Then : Reset Led : Z = 0 Else : Set Led : End If Return
што должен делать в данном случае цикл Do\Loop и где в теле программы вызов подпрограммы Pulse?
В Do\Loop вы должны менять значение яркости переменной Y. Pulse срабатывает по таймеру 0 - On Timer0 Pulse
тысяча извинений, я сварщик пока не настоящий, но я там вижу бесконечный пустой цикл без надежды на выход и до подпрограммы дело не доходит да и симулятор Баскома тоже по циклу крутится и не хочет выходить
барин, я там половины слов не понимаю! но все равно спасибо, буду на мелкой проге отрабатывать. ну и риторический вопрос - два эффекта одновременно (на разных выходах, ессно) я ж не запущу, да? пошаговость, как она есть?
два эффекта одновременно (на разных выходах, ессно) я ж не запущу, да?
Почему? В приведенном примере 8 работает. Если, конечно, МК будет чем то еще занят, то эта самая "занятость" может тормозить, но в целом все работает. Если частота МК 8 МГц, таймер срабатывает по переполнению(можно сократить время срабатывания), то есть в 256 раз медленнее. Получается 31250 Гц. Дискретность ШИМа то же 256. Частота мигания диодов 122 Герца, что глазом не заметно. Ну и можно дальше развлекаться. Частоту поднять до 16-20 МГц, таймер заставить срабатывать по совпадению, дискретность ШИМа уменьшить до 64 градаций яркости. Этим можно еще удвоить каналы.
Привет! Намедни была нужда поиграться с вводом/выводом, так в шпорах нета обнаружил нестыковку - одне пишут:
Цитата:
К примеру нам надо сконфигурировать порт B таким образом
CONFIG PORTB = OUTPUT CONFIG PORTB.3 = INPUT CONFIG PORTB.4 = INPUT CONFIG PORTB.5 = INPUT То есть – 3,4 и 5 выводы порта настроены на вход, а остальные на выход. С помощью DDR то же самое можно сделать одной строчкой… вот так…
Можно также устанавливать направление соответствующих линий порта с помощью установки регистра DDRB. Для примера инструкция:
DDRB = &B00001111
повлечет запись числа 15 в регистр направления порта B, и 4 старших бита (PORTB.7 до PORTB.4) будут выходами, а 4 младшие (PORTB.3 до PORTB.0) входами.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения