Поочерёдное включение светодиодов

Тема в разделе "Микроконтроллеры AVR", создана пользователем Джалил, 4 мар 2018.

Метки:
  1. Джалил

    Джалил Нуб

    Нужно каждые 0.5 секунд поочерёдно включать светодиоды на 1 секунду, затем выключать. Светодиодов 9. Как реализовать с помощью таймера?
     
  2. Airbus

    Airbus Радиохулиган Модератор

    Именно таймер нужен?delay не?
     
  3. b707

    b707 Гуру

    Джалил, какая оценка у тебя по арифметике? :)
    "9 светодиодов почередно на одну секунду " и "каждые 0.5 сек" - как-то не стыкуются :)

    Это я к тому. что задача сформулирована нечетко.
    А с точки программирования ничего сложного - можно хоть через delay, хоть через millis, можно таймеры
     
    Airbus нравится это.
  4. mcureenab

    mcureenab Гуру

    Как я понял диод включается и горит 1 сек. Следующий включается через 0.5 сек. и горит 1 сек. Потом ещё через 0.5 сек выключается первый и включается третий. И т.д.
     
  5. parovoZZ

    parovoZZ Гуру

    А надо ровно 9 светодиодов? 0.5 секунд таймером ровно не отмерить. А вообще, делаешь так:
    рисуешь на бумаге светодиоды в ряд. Под ними в столбцах составляешь таблицу состояния - 0-выключен, 1-включён. Один ряд в столбце - это каждые 0.5 секунд. Как закончишь, то увидишь, что задача решается через сдвиговый регистр. А каждые 0.5 сек производишь сдвиг (влево или вправо). Дерзай!
     
  6. Airbus

    Airbus Радиохулиган Модератор

    Ну Вы его загрузили не по деццки....
     
  7. parovoZZ

    parovoZZ Гуру

    У любого программиста булева алгебра должна от зубов отскакивать.
     
  8. parovoZZ

    parovoZZ Гуру

    Есть же вачдог, епрст)))) На нем можно полсекунды отмерить))) Токмо камень надо смотреть какой - не у всех вачдоги прерывания лепят.
     
  9. mcureenab

    mcureenab Гуру

    Без вачдога можно сделать. Нужно отсчитывать некоторое количество тиков/прерываний таймера, чтобы 0.5 сек получилось и тогда переключать.
    Вот с сигналом переключения может быть сложнее. Если отклонение в +- 1 мс допустимо, то можно просто в прерывании от таймера переключение диодов делать.
     
  10. parovoZZ

    parovoZZ Гуру

    Да это очередная бесполезная байда типа контрошки. Там и 100 мс допустимо))) Лучше б посчитал, какой предделитель выставлять и сколько тиков таймеру считать. И каким - 8 или 16 разрядов.
    Чем вачдог не нравится? Не умеешь его готовить?
     
  11. b707

    b707 Гуру

    Да че там считать. Берем Таймер2 (обычно самый ненужный), предделитель 64, начальное значение 5, прерывание по переполннению. Получаем таймер ровно на 1 КГц. В векторе прерывания инкрементируем свой счетчик - при значении 500 меняем статус светодиода. Полный аналог миллис.
     
    Airbus нравится это.
  12. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    люди добрый да и не добрый. пожалуйста бросте ссылку. реально не могу найти материал где было бы доступным языком описана работа со всеми таймерами. хочу осмыслленно с ними работать а не собирать скетч из кусков чужих скетчей. Гуглил но ничего внятного не нашел. даташит смотрел, но как оно работает досконально тоже уразуметь не могу
     
  13. ELITE

    ELITE Гик

    ну тут задача простая на 2 части
    1) - таймер , который каждые 0.5с будет увеличивать счетчик на 1 (дойдя до 9, обнулить)
    2) кейс с перечнем какой диод включить а какой погасить....
     
  14. issaom

    issaom Гуру

    http://microsin.net/programming/avr/atmega2560-timers-counters.html
    Я по этой статье изучал - там правда для Ардуино мега
     
    CYITEP_BAC9I нравится это.
  15. Джалил

    Джалил Нуб

    Моя ошибка - неправильно описал задачу. Задача такая: нужно сделать автоматический детонатор для фейверков. Вместо светодиодов будет использоваться MOSFET транзистор для проволоки из нихрома. Нужно автоматически подавать единицу на MOSFET на 1 секунду, и интервал между такими включениями - 1 секунда.
     
    Последнее редактирование: 5 мар 2018
  16. Джалил

    Джалил Нуб

    Для меня главным вопросом остаётся момент реализации. То есть, у Atmega328, которая используется в проекте, имеется только 2 таймера. Нужно реализовать переключение 9 ног у микроконтроллера с интервалом в 0.5 секунд и длительностью импульса в 1 секунду.
     
  17. CYITEP_BAC9I

    CYITEP_BAC9I Гик

  18. mcureenab

    mcureenab Гуру

    Как написали, так поняли. Для этой задачи таймер не нужен.
    Задача 1 сек через 0.5 немного сложнее.
     
  19. mcureenab

    mcureenab Гуру

    Зачем тут таймер?
    Переключили пины. Задержка 0.5 сек. Следующие пины переключили. Ещё задержка. В конце программы уход в вечный цикл.
     
  20. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    дык если задача Дуни только в этом, как писал уважаемый Эйрбас, delay() -я вполне хватит.
     
    Airbus нравится это.