Согласно ГОСТ Р 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 , для практического ее закрепления, я не использовал переменные, таймеры и прерывание, так как до конца еще не изучил как они работают и настраиваются, но в данной задаче - микросхема больше не будет выполнять ни каких функций, допишем -

Исходный код программы Скачать архив