THE BELL

Есть те, кто прочитали эту новость раньше вас.
Подпишитесь, чтобы получать статьи свежими.
Email
Имя
Фамилия
Как вы хотите читать The Bell
Без спама

Эта статья – подробная инструкция как запрограммировать AVR микроконтроллер при помощи LPT программатора и программы UniРrof.

Сначала обязательно прочитайте , многое станет понятней.
Скачайте программу UniРrof .
- Программатор для AVR. Смотрим avr.nikolaew.org

нажимаем «ОК» (в следующий раз устанавливать не придется – программа запомнит установки). Все — программатор «прописан».

2 Подключаем программатор к LPT порту.

3 Подключаем программатор к плате микроконтроллера, подаем питание на микроконтроллер.

4 Запускаем UniРrof (если уже не запущен), выбираем в поле LPT порт. Синим должно отобразиться . Для проверки надежности связи тыкаем несколько раз в . Если на каком либо этапе выпадает , то связь ненадежна – ставим галочку — и проверяем заново.

5 Нажимаем кнопку загрузить , выбираем нужный . В окошке появятся цифры – наша программа.


P.S. Нужно прошить кроме Flash еще и EEPROM?
Все просто! Сначала ставим галочку EEPROM — появится окошко EEPROM (Галочку «тормоз» нужно поставить до этого!). Далее открываем HEX-файл, автоматически программа найдет и загрузит EEP-файл (заполнятся данными оба окошка PROGRAM и EEPROM). Если юнипроф сам не определил EEP-файл откроется диалог выбора файла. Далее действуем как описано выше. При нажатии кнопки «Prog» программируется и Flash и EEPROM. Вот и все!

(Visited 22 098 times, 3 visits today)

Раздел: Метки: ,

Навигация по записям

027-UniProf-программируем AVR через LPT порт. : 47 комментариев

  1. alexandershahbazov

    Почему-то с миросхемой SN74HC244N не пошло, а с 5 проводками пошло.
    Пишет «МК не откликнулся …» . Только кнопка «Read» заработала. И очень долго шло.
    Правда отладочная плата моя на ATmega8 .
    С обеими программаторами у меня все идет без запинок на CodeVisionAVR и
    avrdude 5.8 .

    Повторюсь, что с 5 проводками работает.


  2. GetChiper Автор записи

    Пробовали ставить галочку «Тормоз»?
    Не нужно привязываться к UniProf. Программа имеет определенные недостатки. Основное ее достоинство — с ней легко начать работать, даже если до этого Вы никогда не прошивали контроллеры. Неизбежно Вы будете расти в профессиональном плане — поменяете программатор, поменяются и программы.
    Avrdude — очень хорошая альтернатива — пользуйтесь ею!

  3. alexandershahbazov

    «027-UniProf – программируем AVR через LPT порт» прочитал внимательно,
    галочку «Тормоз» ставил.
    avrdude 5.8 попробовал одновременно с UniProf и PonyProg v207c .
    Коммандная строка непривычна для меня, хотя свой самый первый светодиод зажег именно с помощью avrdude на Linux-e RHEL 4 AS .

  4. ec

    аха, с буфером не работает, по всей видимости, потому что юнипроф не дружит с STK, для котором на лпт-разъеме замыкаются 3-11 и 2-12 выводы.
    Зато у понипрог есть файл автоматизации — чудная вещь, если не хочется думать, какие куда ставить фьюзы и быстро прошить.


  5. GetChiper Автор записи

    Ну вот — еще плюс в копилку Юнипрофа. Но вот над помехоустойчивостью я бы, на месте автора программы, поработал. Хотя, если скорость не критична, режим «тормоз» решает все проблемы.

  6. ankar

    А мне он просто нравится тем, что не надо выбирать кристалл.Если не видит ищи косяк.В поньке записываешь, а только потом понимаешь, что потратил даром время. Не, если надо с кучей процов работать, то, конечно, берешь другой побыстрее. А если 1 или там 5 штук, то, для меня Унька (спасибо Николаеву) самое то. Кстати на своем аттлоне ХР3 2.2 гига ни разу не ставил «тормоз».LPT кабель длиной 1.5 метра. Безо всяких наворотов.

  7. Николай

    Успешно прошил ATmegu8 через LPT, но вот второй раз прошить не удаётся, программка пишит «МК неоткликнулся». Пожалуйста, подскажите, что нужно сделать чтоб прошить второй раз! кнопку рессет, на плату не вводил.


  8. GetChiper Автор записи

    А фьюзы шили?

  9. Николай

    Фьюзы шил, по инструкции. Везде понажимал Read, а затем Write. Сам галочки не менял. Контроллер работает, светодиод моргает по прошитому hex, но программа не находит его.

  10. Николай

    Проблема решена! Фьюзы в порядке. Проблема в некачественной пайке, оторвался MOSI на плате. Паяйте добротно и не спеша 🙂 !!!


  11. GetChiper Автор записи

    Слушайте Николая — дело говорит! 🙂

  12. NikAndrew

    А когда фиюзы прописываеш отмеченные галочной 0 или 1?

  13. NikAndrew

    все разобрался 0 нет галочки, 1 есть галочка)

  14. zhenya1995

    Здраствуйте, у меня программатор 5 проводков, также у меня не стандартный LPT порт я его докупал к компьютеру, и у этого порта другой адрес (С880) подскажите пожайлуста программу где можно задать именно этот адрес или еще способ какой, чтобы запрограммировать?


  15. GetChiper Автор записи

    Разве винда его не видит?

  16. ankar
  17. Greider

    А программа в конце прошивки должна выдать какое-то подтверждение, мол все успешно?
    И обязательно ли прошивать фьюзы, если достаточно их значений по-умолчанию?


  18. GetChiper Автор записи

Одним из самых простых программаторов AVR является программатор для LPT порта. Это обусловлено тем, что уровни сигналов LPT порта совместимы с уровнями сигналов необходимыми для программирования АВР. Поэтому сигналы с LPT порта можно напрямую подать на микроконтроллер (резисторы нужны лиш для защиты порта от случайных замыканий). Такой программатор можно собрать из подручных материалов буквально за 5 минут!


Как Вы видите схема LPT программатора для AVR предельно проста:

Для изготовления LPT программатора нам понадобится:


Резисторы можно использовать любые, какие найдете в пределах от 100 до 150 Ом. Можно программатор собрать вообще без резисторов, но тогда спалить порт станет еще легче. В качестве шлейфа можно заюзать IDE шлейф. При подключении шлейфа, для более устойчивой работы программатора, каждый «сигнальный» провод должен чередоваться с «земляным» проводом. Это позволит уменьшить уровень помех наводимых в линиях и за счет этого увеличить длину программирующего провода. Длина шлейфа должна быть в пределах 50 см. Еще нужен разъем для подключения к программируемому устройству.
Для внутрисхемного программирования Atmel рекомендует стандартные разъемы:


Если Вы планируете серьезно заняться микроконтроллерами, сделайте разъемы стандартными. Для разового программирования устройства я рекомендую использовать на программаторе (такими разъемами к материнской плате подключаются кнопки и светодиоды корпуса компьютера) и штырьки PLS «папы» на плате. Это позволяет максимально упростить разводку платы устройства, так как штырьки для программатора устанавливаются в непосредственной близости возле ножек микроконтроллера. Ножки MOSI, MISO, SCK у микроконтроллеров AVR всегда расположены вместе, поэтому для них можно применить строенный разъем. Отдельно делаем подключение для «земли»-GND и «сброса»-Reset.


Сборка LPT программатора за 5 шагов:


Перемычки между ножками разъема 2-12 и 3-11 нужны для того, чтобы наш программатор был виден для программ как программатор STK200/300 (STK200/300 своего рода стандарт и поэтому наш программатор станет виден для многих программами).

Для того чтобы наш LPT программатор заработал нужна , к которой мы подключим программатор и для микроконтроллера.

Общие рекомендации:
— LPT порт довольно нежен — его очень легко «пальнуть», поэтому при работе с портом будьте аккуратны.
— Отдельное подключение для «земли» я бы рекомендовал делать во всех программаторах. Это нужно для того, чтобы «землю» можно было подключить первой и уравнять потенциалы «земли» программируемого устройства и компьютера. (Для тех кто не знает — если у Вас компьютер включен в обычную розетку без заземляющего контакта, то в виду особенности фильтра блока питания компьютера, на корпусе компьютера всегда присутствует потенциал в 110В. При «удачном» подключении программатора этого вполне достаточно для того чтобы сжечь микроконтроллер или LPT порт компьютера.

Заключение:
-Если Вы надумали собрать свой первый программатор и у Вашего компьютера есть LPT порт, то программатор «5 проводков» лучший вариант! Он предельно прост и его повторить не составит труда. Кроме того, программатор совместим с классическими программаторами STK200/300, а значит, он будет поддерживаться многими программами для программирования AVR.
-Если Вы планируете программировать довольно часто, с целью обезопасить LPT порт, рекомендую собрать LPT программатор с буферными элементами (неплохой вариант LPT программатора можно посмотреть на изиэлектроникс) или собрать такой же простой (COM порт гораздо выносливей и сжечь его трудней).

(Visited 66 789 times, 19 visits today)

Управление выходами по заранее заданному сценарию (скрипту)

Программа управляет выходами LPT порта компьютера в соответствии с заранее заданным сценарием. В версиях, начиная с 0.2.9 есть возможность управления устройствами через COM порт (или USB-COM) с управлением до 32 выходов.Сценарий (скрипт) представляет собой текстовый файл (ASCII или Unicode), в котором последовательно записаны управляющие команды и значения, которые следует вывести в порт.
Программа идеально подходит для управления панелью из двенадцати светодиодов , непосредственно подключенных к порту.

Кроме того, благодаря WndLpt LPT порт может быть использован для управления шаговым двигателем, блоками реле, неответственными процессами, которые управляются дискретными сигналами.

Светомузыка через LPT-порт

К LPT-порту подключены 8 или 12 светодиодов?

— В таком случае легким движением руки WndLpt превращается... в светомузыкальюную установку. В этом режиме программа записывает звук с выбранного источника звуковой карты и превращает его в светомузыку. Рекомендуется выбирать источник «Стерео микшер» или «Моно выход».

Вам по душе плагины к плеерам Winamp/AIMP2/WMP?

— Да, WndLpt умеет работать как плагин визуализации для трех популярнейших плееров Winamp, AIMP2, WMP! При этом светомузыка может работать как от звука плеера, так и от любого доступного источника звуковой карты.

Интерактивное управление выходами LPT порта с помощью клавиатуры или мыши

— На вкладке «Manual » изображена схема клавиатуры; на ней отмечены кнопки, которыми можно пользоваться для управления светодиодами. Впрочем, нажимать на них можно и мышью.

— На вкладке «Pins » находятся 12 флажков (Out pins), соответствующих 12-ти выходным пинам LPT-порта. Кроме того присутствуют 5 дополнительных флажка (Input pins) не доступных для изменения. Они являются индикаторами логического уровня, подаваемого на пять входных пинов LPT порта. Правее изображен и сам порт. Красным цветом показаны пины, на которые подано напряжение соответствующее уровню логической единицы. Синим — соответствующее уровню логического нуля. Бледн ым цветом отображены входные пины; когда к ним ничего не подключено — они находятся в состоянии логической единицы. Бел ым цветом показаны «общие» пины.

Состояние выходных пинов можно менять кликая мышкой либо по флажкам, либо прямо по пинам схематично изображенного LPT порта.

Примеры управления светодиодами

О том, как подключить 12 (или 8) светодиодов к LPT порту читаем в статье «Подключение двенадцати светодиодов к LPT порту ».

О том, как заставить WndLpt управлять светодиодной иллюминацией рассказано в статье «Светодиодная иллюминация с помощью WndLpt ».


Быстрый старт

Работа WndLpt по сценарию

1. Запустить исполняемый файл wndlpt.exe из главного меню или папки с программой.

3. Сценарий будет автоматически откомпилирован и запущен. Можно наблюдать за светодиодами или другим устройством, подключенным к LPT порту.

Работа WndLpt в качестве самостоятелной светомузыки

1. Запустить исполняемый файл wndlpt.exe.

2. Выбрать вкладку «Music».

3. Клик левой или правой кнопкой мыши по изображению визуализации приводит к смене эффекта.

4. Клик левой кнопкой по картинке панели светодиодов меняет предполагаемый цвет светодиодов. Правой кнопкой — расположение светодиодов.

Работа WndLpt в качестве плагина визуализации Winamp, AIMP2, WMP

1. Установить WndLpt Plugin for Winamp/AIMP2/WMP.

3. Запустить плеер и активировать плагин визуализации WndLpt.

Прочее

* При запуске без параметров командной строки программа выполняет скрипт autorun.txt, в случае, если таковой присутствует в папке исполняемого файла.

* Окно программы можно скрыть (фоновый режим) и обратно показать — эти действия можно выполнить при помощи контекстного меню иконки, появляющейся в панели задач . Скрытие и показ окна могут быть заложены в сценарии.

* Можно выполнить перезапуск сценария (в любое время) при помощи функциональной клавиши F6 или соответствующей кнопки в системном меню, при этом файл сценария будет считан и откомпилирован заново.

* Отладчика открывается по кнопке F12.

* Исправлено: Stroboscope длина паузы обновляется при изменении с клавиатуры

* Новое: WndLpt SDK

* Новое: Команда: random call Function1 Function2 Function3 ; вызов произвольной функции

* Новое: Команда: random jump Label1 Label2 Label3 ; переход на произвольную метку

* Новое: Команда: 00??00??00?? ; ? - бит, устанавливаемый случайным образом

* Новое: Команда: ? (3,4,7,8,11,12) ; биты, устанавливаемые случайным образом

* Улучшено: Команда: call Func1 Func2 Func3 Func4 последовательно вызывает указанные функции

* Новое: Библиотека wndlpt_remap.dll для переназначения пинов порта (шаблон для C++ и Delphi)

* Новое: Проект wndlpt_gate как шаблон программы (C++, VB.NET) использующей WndLpt для прямого доступа к LPT порту

* Новое: Stepdrive для управления с помощью произвольных систем

* WndLpt plugin: Добавлена поддержка AIMP3

* Утилиты LPT Buttons, Stroboscope, EasyDrive работают в Windows Vista/Seven/7

* LPT Buttons: добавлена возможность редактирования положения кнопок

* EasyDrive: добавлены кнопки для ручного выполнения шагов, добавлены новые системы управления

* Исправлены надписи «Pin 2, 3, 4» на вкладке «Pins»

* Исправлена работа мышкой с кнопками виртуальной клавиатуры

### Добавлены новые утилиты ###

* LPT Buttons - новое средство для управления пинами порта

* Stroboscope - удобное управление стробосткопом

* EasyDrive - управление шаговым двигателем

* Реакция на 5 входных сигналов LPT порта «test i 1»

* Реакция на 12 выходных сигналов LPT порта «test q 3»

* Реакция на состояние пинов порта "test pin 12"

* Синтаксис: test

* Ветвления по командам jz , jnz

* На вкладке «Manual» флажок «Arrows like 1, 2, 3, 4» - стрелки работают как кнопки 1, 2, 3, 4

* На вкладке «Manual» флажок «Not fix digital buttons» - меняет логику работы цифровых кнопок

* Эмуляция часов с минутной и часовой стрелкой «cmd enable_clock 1»

* Установка нового состояния числом в десятичной системе $ 95

* Установка нового состояния числом в шестнадцатеричной системе $ 5Fh, $ 0xFED

* Добавлена настройка степени фильтрации (вызывается правым кликом по слову Filter)

* Добавлены ярлыки для запуска плееров в Windows Vista и 7

* Добавлены ярлыки для помещения в автозапуск (папка WndLpt => Links в меню Пуск )

* Добавлены исполняемые файлы для работы в Windows 98/ME (wndlpt98.exe, vis_wl98.dll, lptport98.exe)

* Добавлена новая утилита для управления стробоскопом (stroboscope.exe)

* Новые вкладки: Manual, Pins, Settings

* Новая команда "cmd enable_music 1"

* Новая команда "cmd music_preset [+num | -num | num]"

* Новая команда "shift [=num | +num | -num]"

* Доработана команда "cmd switch_to_music"

* Доработан плагин визуализаци vis_wndlpt.dll для WMP 11 (Windows Media Player)

* wndlpt.exe является загрузчиком для vis_wndlpt.dll

* Вкладка Manual для управления выходами с клавиатуры

* Вкладка Pins для управления выходами с помощью мыши

* Вкладка Settings для выбора базового адреса LPT-порта

* Добавлен плагин визуализаци vis_wndlpt.dll для Winamp 5

* Добавлен плагин визуализаци vis_wndlpt.dll для WMP 10 (Windows Media Player)

* Добавлен плагин визуализаци vis_wndlpt.dll для AIMP2

* Файл vis_wndlpt.dll одинаков для всех плееров.

* Добавлен выбор источника звука для светомузыки

* Добавлена автоподстройка светомузыки под уровень звука

* Добавлено переключение режимов Моно/Стерео

* Добавлена фильтрация

* Добавлена возможность изменения количества светодиодов

* Добавлена визуализация музыки — светомузыка

* Добавлена картинка, отображающая ожидаемое состояние светодиодов

Начало:

Все началось с того что я случайно наткнулся на необычный сетевой фильтр от братьев наших китайцев. Это был обычный сетевой фильтр, но с управлением каждой розеткой отдельно и через программную оболочку с ПК по LPT-порту.

Меня заинтересовала сама идея управления мощными нагрузками с ПК. Тогда и было решено создать что-то подобное. Покопавшись в интернете, нашел много схем позволяющих реализовать подобную задачу. В итоге оставалось только произвести корреляцию собранного материала и объединение его в единое целое для создания рабочего прототипа схемы.

Несколько слов об LPT- порте. Данный порт имеет множество выводов. Нас будут интересовать только регистры данных, ибо управление ими просто и можно задавать на их выходах лог. «1» или лог. «0». Которые легко преобразуются в другие формы сигналов.

Рисунок 1 – LPT - порт

Схема:

За исходную была взята одна из найденных схем имеющая следующий вид:

Рисунок 2 – Вид исходной схемы

Как видно из приведенной схемы для гальванической развязки порта используется оптопара типа 4N25 (DD1), она обеспечивает защиту порта ПК.

Посути можно было бы подключить и напрямую, но это было бы не безопасно для порта и самого ПК и любой бы скачек или пробой напряжения мог бы привести к непредсказуемым последствиям.

В качестве исполнительного устройства выбран транзистор типа КТ 815Г (VT 1), но можно использовать и аналогичные ему марки. На его выход можно подключить любое исполнительно устройство.

В имеющуюся схему был внесен ряд изменений для повышения надежности её работы и безопасности.

Во-первых между 1-ым пином оптопары 4N25 (DD1) и пином LPT-порта был добавлен резистор на 390 Ом (R1), так же добавлен светодиод КИПД 21 (HL 2) с токоограничивающим резистором на 100 Ом (R3), для индикации наличия сигнала на конкретном выводе порта. Также был добавлен диод защиты 1N4007 (VD1) от обратного импульса катушки реле. Катушка реле это индуктивность, а индуктивность старается сохранять постоянным протекающий через нее ток. Поэтому при отключении реле катушка разрядится обратным выбросом высокого напряжения, которое может доходить до нескольких сонет вольт, а в мощных реле - до киловольт. Транзисторы от таких импульсов могут сгореть, а еще могут сгореть другие устройства, подключенные к блоку питания (импульсы проникают в питание), а при особой неудачливости может пробить оптрон и тогда сгорит вообще все, включая порты ПК. Поэтому данный диод не будет лишним.

Так же был добавлен светодиод для индикации КИПД 21 (HL1) наличия напряжения питания схемы c резистором R2 (1к, подбирается эксперементально в зависимости от напряжения питания схемы).

Итоговый вариант доработанной схемы приведен ниже:

Рисунок 3 – Вид доработанной схемы прототипа

Устройство и Печатная плата:

Было решено сделать устройство для управления 4-мя нагрузками.

Хотя сам порт позволят реализовать и больше. По приведенному принципу можно было реализовать и 8-мь устройств, но пока решено было остановиться на 4-х.

Реализовывать печатную плату, по опыту и ввиду простоты и наглядности, было решено в sprint layout 5 (далее SL5).
Сам процесс создания я расписывать сильно не буду, ибо при желании разобраться можно.

Для удобства устройство было разделено на несколько блоков. В данной статье описан основной блок устройства (управляющий), остальные блоки сильного интереса не представляют, ибо они могут меняться в зависимости от поставленных конкретных задач.

Ниже приведена блок схема всего устройства:

Рисунок 4 – Блок схема устройства


где:
ПК – персональный компьютер;
УУ – управляющее устройство;
БП – блок питания;
ИУ – исполнительное устройство.

В качестве блока питания (БП) был использован стандартный (готовый) блок питания с выходным напряжением 12В 2А.

Параметры исполнительного блока могут быть различными.
В моем варианте это блок реле на 12В и с контактными парами способными коммутировать 220В.

Перейдем к печатной плате. Она была реализована в SL5. Плата была задумана с учетом подключения других блоков.

Рисунок 5 – Плата устройства в SL5

Плата и её описание приведена ниже на рисунке 6:

Рисунок 6 – Плата устройства в SL5

На плате видно, что присутствуют перемычки обозначенные красным цветом.
Вход с LPT-порта обозначен оранжевым с указанием нужных пинов.
Выход указан желтым цветом. На выходе четыре управляющих сигнала для реле или другого исполнительного устройства и общий для них провод.
Для Ввода питания был использован широко распространенный разъем, но можно использовать любой по необходимости.

Травление данной платы осуществлялось по так называемому «лазерно-утюжному» методу, который подробно описывать я не буду. При необходимости сведения о нем можно найти.

Управление:

Для управления данным устройством вначале использовали громоздкие системные программы, рассчитанные на тест LPT-порта. Потом было решено написать свой soft, простой и надежный, без ненужный функций, что в последствии и было сделано:

Рисунок 7 – Интерфейс ПО

Программа имеет удобный и информативный интерфейс. Есть индикация включенного устройства. А так же кнопка, отключающая все устройства.

Программа находится на страничке посвященной .

Программа надежна и проста и свои функции выполняет. На момент написания статьи были задумки сделать WEB-интерфейс для управления. Что было бы более актуально и удобно ибо если данное устройство ставить на сервер, не имеющий визуальной оболочки, то это было бы более актуально.

Эпилог:

В итоге было создано полностью готовое и функционально устройство способно коммутировать мощную нагрузку, мощность ограничивается только параметрами исполнительных элементов. Так же количество управляемых элементов тоже варьируется от 1 до 8 и по желанию можно сделать столько, сколько необходимо для выполнения конкретной задачи.

PS: все картинки кликабельные с зумом

Недавняя реализация простой на FreeBSD, дала почву для развития этой темы. По сути это ее продолжение но немного отделенное по смыслу.
В статье описан способ мониторинга наличия напряжения 220 вольт в электросети через LPT порт.

Статья будет полезна тем, у кого есть ПК с LPT портом, UPS без возможности управления с ПК, желающим корректного завершения работы ОС, вырубания соседних машин и уведомления при отсутствии электричества.

Дано:

UPS без возможности подключения к ПК.
Сервер FreeBSD с LPT портом
Простейшая безопасная схема для подключения 220 к LPT =).
Программа lptmon

Пример работы:

Гдето работает сервер, внезапно пропадает электричество. Cервер и его друзья: конвертер, маршрутизатор, серверы и пр. продолжают работать от UPS.
Cервер, почуяв неладное отправляет об этом смс админу, пишет лог, ждет минуту (вдруг это 5ти секундный сбой) и вырубает другие серверы. Все корректно завершено, данные не утеряны, админ в курсе.
Если электричество появилось, но минута не прошла и сервер не успел вырубиться, он отправляет смс админу что все впорядке и продолжает работать.
Если сервер успел вырубиться, и электричество появилось например через час, то при появлении 220 сервер врубается (через опцию в биосе), загружается, врубает другие сервера через Wake on LAN (прим: настройка Wake on LAN в статье не описывается) и отправляет смс админу о том что все ок.

Инструменты:

FreeBSD + mysql (второе не обязательно, только для лога)
LPT порт
Паяльник, припой, канифоль, провода
Cхема мониторинга 220 (блок питания и оптрон)
программа lptmon

Суть:

У LPT порта есть 5 ног чтения (они же пины) 10,11,12,13 и 15, заметьте 14й тут нет!. Они являются входами и используются принтерами как тумблеры, при событиях например:
кончилась бумага,
принтер занят,
ошибка печати, итд итп.

Они то нам и нужны, к ним можно подключить 5 разных устройств.

Распиновка LPT порта

Под FreeBSD работает программа lptmon которая мониторит эти пины.
Если взять кусок проволоки и замкнуть любой из вышеперечисленных
пинов на землю. (земля - любой с 18 по 25 пин этого же LPT порта) то программа
будет считать что пин включился. Каждый пин, через программу lptmon, может вызывать 3 события при которых можно выполнять комманды или запускать скрипты:
1. Пин включился
2. Пин работает (срабатывает каждую секунду пока пин замкнут)
3. Пин выключился

Собстно lptmon выполняя комманды при событиях от пинов запускает скрипты которые пишут в базу лог срабатывания, текущее состояние устройств подключенных к lpt порту, сохраняет скриншоты с камеры на винт, отправляют смс если нада итд.

План действий

1. Собрать схему, подключить ее к LPT
2. Настроить lptmon
3. Настроить скрипты.

1. Сборка и подключение схемы

Т.к мы будем подключать 220 к порту, необходимо позаботиться о его безопасности. Для этого нужно использовтаь небольшое напряжение, для чего берем блок питания (я нашел на 5в, 2.5А от конвертера) подключаем его к оптрону через резистор и потом уже к LPT.
Оптрон, грубо говоря, работает по принципу: если есть достаточное напряжение и сила тока на 1 и 2 ногах то он замыкает 5 и 4 ноги. Если силы и напряжения не достаточно (когда БП выключен) то он не замыкает 4 и 5 ноги. А если более чем достаточные (например бп переглючил и он стал давать 120вольт) то оптрон сгарает и это не влияет на 4 и 5 ноги (т.е на вторую цепь).
Поскольку оптрон (4n35) штука защитная, имеющая две цепи не связанные между собой, он еще и призван умирать при силе тока большей чем 60мА (это 0.06А, а у моего БП аж 2.5А). То есть, силы тока 2.5А более чем достаточно для того чтоб он испугался и умер. По этому, для того чтобы ограничить силу тока используем резистор. В моем случае это 500ом. Резистор подбирается индивидуально под блок питания. Вычислить резистор можно формулой R=U/I где U - напряжение дающее БП (вольты), I - нужная оптрону сила тока (Амперы) для работы. Сила тока нужная оптрону для замыкания второй цепи лежит в пределах от 0 до 60 мА, Допустим решили подавать ему 1мА для чего расчитаем резистор: R=5в/0.01А, R = 500 следовательно нам нужен резистор 500ом. Можно взять и меньше, 400, 300 ом главное чтоб сила тока не получилась больше 60мА.

Для подключения к LPT был разобран старый шнур от принтера. В корпусе от шнура собраны гнездо для подключения БП и оптрон.
Вот что получилось:

Готовый lpt разьем и черный кабель от БП.


Оптрон с резистором, они внутри разъема


2. Настройка lptmon

Создаем директорию /usr/local/etc/lptmon
качаем архив lptmon.tar.gz с программой lptmon и примерами скриптов и распаковываем:

#mkdir /usr/local/etc/lptmon #cd /usr/local/etc/lptmon #fetch http://zgbox.ru/files/notes/lptmon.tar.gz #tar -xzvf lptmon.tar.gz

Зеркало:

313 26.3kb 2011-06-29 lptmon, скрипты, исходники

В архиве лежит lptmon.c - это исходники программы, писал я ее сам, это моя первая программа на С++ под FreeBSD как и в прочем первая на C =) так что если есть примечения, дополнения - в студию.
Также там лежит сам уже откомпелированный файл lptmon, можно юзать его, установив chmod 777 lptmon если необходимо, а можно откомпелировать исходники коммандой

Теперь программа lptmon будет стартовать с системой, также ее можно стартовать вручную как просто запустив./lptmon так и выполнив rc.d скрипт /usr/local/etc/rc.d/lptmon start или stop
В запуске нет ничего особенного, просто запускается /usr/local/etc/lptmoon/lptmon а при stop убивается коммандой killall lptmon
Но пока не нужно ничего запускать, сначала нужно настроить конфиг, об этом чуть пожже.
Директория testlpt, в ней лежит программа pr22 и ее исходник для тестирования lpt порта. Работает просто: запускается, получает состояния с 10 по 15 пинов и если какойто пин замкнут на землю то выдает pin10 on
у меня в данный момент 10й пин замкнут на что программа отвечает

#./pr22 pin10 on

Можно смело использовать в своих скриптах
Итак собсно пробуем замнкть один или несколько из 10,11,12,13,15 пинов на землю (на любой с 18 по 25 пин) и запустить./pr22
Если программа показывает что замкнутые пин(ы) on значит все ок, если нет - то я хз почему не видит ваш lpt порт, ковыряйте исходники %)

Переходим к настройке самого lptmon.
Итак, исходя из того, что у нас будет подключена схема к 12 пину то сконфигурим так чтоб при событиях 12 пина при старте и запуске выполнялись скрипты 12_start, 12_end.

Ложим конфиг lptmon.config из расспакованного архива в /usr/local/etc/lptmon.config и редактируем любимым редактором, у меня это mcedit от mc.

#cp lptmon.config /usr/local/etc/lptmon.config #mcedit /usr/local/etc/lptmon.config

Это сокращенный, необходимый только для этой статьи конфиг, подробный в архиве.

#конфиг файл lptmon.config программы lptmon #должн лежать в /usr/local/etc/ #в параметрах допускаются табы и пробелы #ковычки не допустимы! #каждый пин может вызывать 3 события (выполнять комманды) при смене состояния: #1. при переходе из пассивного состояния в активное #2. при работе в цикле (срабатыват каждый раз при опросе если пин # в активном состоянии) #3. при переходе из активного состояния в пассивное pin12enable = yes pin12onstart = /usr/local/etc/lptmon/220v/12_start pin12oncycle = /usr/local/etc/lptmon/220v/12_cycle pin12onend = /usr/local/etc/lptmon/220v/12_end

3. Настройка скриптов

Листинг 12_start

#!/bin/sh #скрипт срабатывает когда дали электричество #или загрузился комп #двумя запросами пишем лог в базу и устанавливаем статус on для устройства 220v sql="use $db_name ; insert into objects_hist (obname,status ,dt) values \ ("$obname ","on",now());" #echo $sql /bin/echo $sql | /usr/local/bin/mysql -h$db_host -u$db_user -p$db_pass sql="use $db_name ; update objects set status ="on", dtstart=now() \ where obname="$obname ";" /bin/echo $sql | /usr/local/bin/mysql -h$db_host -u$db_user -p$db_pass #отправляем смс админу о том что 220 дали или серв включился /usr/local/etc/lptmon/sms "220v ON "`date +%m.%d-%H:%M:%S`

листинг 12_end

#!/bin/sh #срабатывает когда отключилось 220 db_host=localhost db_pass= db_user=root db_name=security obname=220v #пишем в базу логи и состояние off устройства 220v sql="use $db_name ; insert into objects_hist (obname,status ,dt) values \ ("$obname ","off",now());" #echo $sql sql="use $db_name ; update objects set status ="off", dtend=now() \ where obname="$obname ";" #/bin/echo $sql | /usr/local/bin/mysql -h$db_host -u$db_user -p$db_pass #отправляем смс о том что нет электричества и ставим таймер на 60 сек #по завершению которого скрипт 12_cycle вырубит компы /usr/local/etc/lptmon/sms "220v OFF "`date +%m.%d-%H:%M:%S` echo 60 > /usr/local/etc/lptmon/220v/timer

Эти скрипты выполняют по два Sql запроса к mysql. Запросы обновляют текущее состояие устройства с именем 220v в таблице objects и пишут лог в таблицу objects_hist. Дамп структуры таблиц dump_security.sql также лежит в архиве.
Помимо этого скрипты отправляют смс.
Скрипт 12_end записывает цифру 60 в файл /usr/local/etc/lptmon/220v/timer для того чтобы потом скрипт 12_cycle который будет срабатывай каждую секунду пока нет электричества, брал эту цифру и отнимал по единице. Когда станет 0 он запустит программу wudown которая вырубит по сети комп с windows (ip 192.168.97.52) и вырубит сервак коммандой shutdown -p now.
листинг 12_cycle

#!/bin/sh path=/usr/local/etc/lptmon/220v/timer timer=`cat $path ` timer=`expr $timer - 1`; if [ $timer -gt 0 ]; then echo $timer > $path echo $timer else echo "shuttdowning..." /usr/local/bin/wudown 192 .168 .97 .52 1209 shutdown shutdown -p now fi

размещено: 2011-06-29,
последнее обновление: 2011-08-21,

THE BELL

Есть те, кто прочитали эту новость раньше вас.
Подпишитесь, чтобы получать статьи свежими.
Email
Имя
Фамилия
Как вы хотите читать The Bell
Без спама