В данном случае рассматривается вариант реализации включения/выключения нагрузки лабораторного блока питания. Итак, небольшое ТЗ.
- После включения блока питания нагрузка должна быть отключена в независимости от последнего состояния.
- О выключенной нагрузке должен сообщать мигающий красный светодиод.
- О включенной нагрузке должен сообщать постоянно горящий зеленый светодиод.
- Подключение нагрузки происходит при помощи реле.
- Аппаратное подавление дребезга контактов.
Схема построена на дешевом микроконтроллере Atmel ATtiny2313 и триггере Шмитта 74HC14.
Запитана схема от 12 вольт, необходимых для работы реле. Для питания микросхем использован линейный преобразователь 7805.
После включения мигает красный светодиод VD2. Триггер шмитта 74HC11 позволяет окончательно и бесповоротно избавиться от дребезга контактов. При нажатии кнопки, светодиод VD2 гаснет, а VD1 (зеленый) загорается, одновременно с ним открывается транзистор VT1 и включается реле K1. При следующем нажатии нагрузка и зеленый светодиод VD1 отключаются, красный светодиод VD2 начинает мигать. Диод VD1 защищает транзистор от всплесков напряжения на катушке реле. Собрана схема на макетной плате.
Скетч написан в Bascom.
В основном цикле мигает красный светодиод, при условии, что на выходе PB2 низкий уровень, т.е. нагрузка отключена, а зеленый светодиод не горит. По прерыванию Int1 вызывается подпрограмма Swbutton. Оператор Toggle переключает состояния выхода PB2 (если был 1 то станет 0 и наоборот). После переключения выхода программа возвращается в основной цикл, до следующего прерывания.
$regfile = "attiny2313.dat"
$crystal = 4000000
Config Portb.1 = Output
Config Portb.2 = Output
Config Pind.3 = INPUT
Config Int1 = Falling
Dim Wtime As Byte
On Int1 Swbutton
Cls
Wtime = 255
Enable Interrupts
Enable Int1
Do
if pinb.2 = 0 Then
Set Portb.1
Waitms Wtime
Reset Portb.1
Waitms Wtime
Else
'Pinb.4 = 0
End If
Loop
End
Swbutton:
Toggle Portb.2
Return
End
И на всякий случай совсем простая схема, найденная в Интернете:
Уважаемый автор прошивку в hex файле можно у вас попросить. (vocha61@gmail.com)