Согласно ГОСТ Р 52289-2019г
Для светофоров Т.1, Т.3 (любых исполнений и вариантов конструкции), Т.2 любых вариантов конструкции и Т.9 соблюдают последовательность включения сигналов: красный - красный с желтым - зеленый - желтый - красный... При этом длительность сигнала "красный с желтым" должна быть не более 2 с, длительность желтого сигнала во всех случаях должна быть 3 с.
Режим работы светофорной сигнализации с использованием светофоров Т.1, Т.3 (любых исполнений и вариантов конструкции), Т.2 и Т.8 любых вариантов конструкции, а также Т.9 может предусматривать мигание зеленого сигнала в течение 3 с непосредственно перед его выключением с частотой одно мигание в секунду (допускается отклонение от указанной частоты ±10%), для светофоров П.1 и П.2 любых вариантов конструкции, а также дополнительных секций светофоров Т.1 и Т.3 такой режим является обязательным.
Будем строить алгоритм работы нашего макета светофора!
1.Включаем зеленый (задаем время 7секунд).
2. Светится зеленый 7секунд, далее начинаем мигать зеленым (мигание зеленого сигнала в течение 3 с непосредственно перед его выключением с частотой одно мигание в секунду) и отключаем.
3. Зеленый отключается и включаем желтый (длительность желтого сигнала во всех случаях должна быть 3 с)!
4. Включаем красный (задаем время 7секунд).
5. Время красного истекает, включаем параллельно красному, желтый (длительность сигнала "красный с желтым" должна быть не более 2 с).
6. Далее включается зеленый и цикл повторяется.
Перейдем к написанию программы и рисованию электрической схемы!
1. Создаем новый проект в Atmel Studio 7 по пути File > New > Projec..., выбираем C/C++ и тип проекта GCC C Executable Project, вводим название проекта (Name: и Solution name:).
2. Выбираем тип микроконтроллера с которым будем работать, в нашем случае Atmega8.
Программа нам выдает код в файле main.c*
Приводим его к читабельному виду, удаляем лишние комментарии.
Рисуем электрическую схему нашего макета светофора:
И так схема у нас есть, на ней обозначены микроконтроллер, источник напряжения 5В, три резистора, три светодиода, а также обозначены выводы для подключения программатора, вернемся к программе.
Светодиоды у нас подключены к порту РD, настроим в программе ножки порта РD0, РD1, РD2 на выход, допишем в программе DDRD = 0b000000111;. Чтобы наши светодиоды замигали, добавим в программу библиотеку задержек #include <util/delay.h>, а для мигания будем использовать функцию _delay_ms(), далее с помощью оператора #define укажем программе, что наш контроллер будет работать от внутреннего генератора с частой 8МГц допишем в код #define F_CPU 8000000UL.
Вот такой получился код:
Осталось дописать немного кода в бесконечный цикл wile, для того чтобы наши светодиоды замигали, задержки не самое лучшее решение для данной программы, так как нагружают микроконтроллер, но этот материал продолжение видео - создание проекта в Atmel Studio, первая программа, мигаем светодиодом Atmega8 , для практического ее закрепления, я не использовал переменные, таймеры и прерывание, так как до конца еще не изучил как они работают и настраиваются, но в данной задаче - микросхема больше не будет выполнять ни каких функций, допишем -
Исходный код программы Скачать архив