Форум самогонщиков Сайт Барахолка Магазин Помощь солдатам

Управление LPT портом из Excel. Инструкция. + продолжение

Форум самогонщиков Автоматика
1 2 3 4 1
Altair Научный сотрудник Омск 322 75
10 Мая 08, 18:34
Мой мощный мозг, путем подглядывания у разных умных людей, разрешил задачу управления LPT портом из под EXCEL.

Делается так:
Ставим драйвер DLPortIO, который качаем отсюда:
http://www.driverlinx.com/ftp/unsupported/port95nt.exe

В Экселе рисуем форму. В начале кода формы подключаем установленный драйвер:
Private Declare Function DlPortReadPortUchar Lib "dlportio.dll" (ByVal Port As Long) As Byte
Private Declare Sub DlPortWritePortUchar Lib "dlportio.dll" (ByVal Port As Long, ByVal Value As Byte)

Читаем и пишем в порт соответственно так:

Записать в порт с адресом FFD8 (у меня нутбук без ЛПТ, использую внешний PCMCIA LPT порт который встает на нестандартный адрес) число 255:

  DlPortWritePortUchar &HFFD8, 255

Прочитать порт по адресу FFD9:
 
  UserForm1.Label1.Caption = DlPortReadPortUchar(&HFFD9)

Подробнее про регистры порта смотрим здесь:

http://sano2000.narod.ru/LPT_main.htm

И еще очень хорошо написано здесь:

http://vbrussian.com/Article.asp?ID=101

Под Вынь ХР работает, проверил на вход и на выход.

Ура мне! ;-))

Пользуйтесь!

З.Ы. Только с портом очень аккуратно - LPT порт хилый. Если мне не изменяет память, нагрузочная способность одного пина - 5 мА.
Игорь Академик - 7.4K 3.7K
Отв.1  11 Мая 08, 19:24
Огромное - преогромное спасибо. С понедельника начинаю шаманить. Вот бы еще с 1-wire разобраться, вообще бы всё было супер.
Игорь Академик - 7.4K 3.7K
Отв.2  31 Июля 08, 04:36
Почти сделал. Теперь мощность нагревателя и интенсивность отбора у меня регулируются через ЛПТ из VBasic-a. Можно и из Экселя используя VBA. Управление отбором двоякое - старт-стоп в случае выпрыгивания температуры в дефлегматоре и плавное изменение по температуре в верхней трети насадки.
Старт-стоп выполняет старый добрый клапан от газобалонной установки автомобиля.
Плавное регулирование обеспечивается подъёмом-опусканием трубки отбора с иглой на конце. Подъём-опускание производит винтовой подъёмник с подвижной кареткой и реверсивным приводом.
Управление шестью киловаттами мощности нагрева тоже двоякое.
Четыре киловатта включаются с помошью 40-амперного реле только на период разгона.
Два киловатта управляются оптосимистором по схеме, которую Аltair предлагал для СОM - порта с тем лишь отличием, что вместо СОM я подключил оптосимистор к LPT, а вместо килоомного R1 поставил 390 ом.

Реверсивный двигатель обслуживают 2 пина ЛПТ, клапан - отсекатель, реле и триак - по одному. В общем итоге задействовано 5 ножек. Есть еще резерв, сделаю ещё управление (вкл-выкл) подачей воды для охлаждения.

Чего бы еше придумать? Есть еще как минимум 2 свободных канала.

LPT использую только для управления исполнительными устройствами. Весь сбор информации будет происходить через com-port по 1-wire. Но с этим еще предстоит работать. Пока получаю только два значения температур и на основе их обработки выстраиваю алгоритм управления. Нужно еще обеспечить как минимум получение данных о давлении в кубе. Главное удобство 1-wire в том, что количество и состав датчиков можно увеличивать, не изменяя схемы устройства, а только изменяя управляющую программу.

ЗЫ. Аltair! Еще раз большое спасибо. Ты здорово мне помог.
seka Студент Котлас 38 2
Отв.3  29 Июня 09, 17:47
Управление посредством ЛПТ-порта
...Я умею плавно рулить мощность ТЕНа с компутера...
Kotische, 23 Дек. 08, 21:52

Kotische научи, пожалуйста, как  плавно рулить ТЭНами с компа, это сложно?
Игорь Академик - 7.4K 3.7K
Отв.4  29 Июня 09, 19:12
Управление чере ЛПТ-порт
seka, если есть хоть чуть - чуть начальных знаний в СИ, поможет Котище. Если бейсик ближе - помогу я.
Kotische Академик Саратов 8.1K 2.5K
Отв.5  30 Июня 09, 00:01
Управление чере ЛПТ-порт
Плавно - понятие относительное!
Всегда есть какая то степень плавности, конкретно у меня 256 градаций изменения мощности.
Сделано так: счётчик на микропроцессоре считает полупериоды, 256 полупериодов - это 2.5 секунды.
Алгоритм Брезинхема живущий в микроконтроллере пропускает периоды таким образом, чтобы средние пульсации мощности получались минимальными. Так же Брезинхем позволяет часто менять мощность, без существенного искажения уставляемой мощности.
Длинный ШИМ даст большие пульсации и большие погрешности при частой смене мощности.
Уставка мощности задается посылкой 1 байта (8 бит) в СОМ-порт, что легко сделать как на Си так и на бейсике...
Я посылал с терминала... хи-хи...

Какого рода помощь ты предпологаешь получить?
Схему контроллера? Прошивку контроллера? Ты сможешь его спаять и запрограммировать?
Тут у нас целая тема посвящена употреблению купленного в магазине МастерКит-овского набора.
Там практически всё готово, ничего придумывать не надо и Брезинхема туда Руди встроил  Смеющийся
Возможно целесообразнее и проще её использовать?  Строит глазки
Rudy Академик Питер 5.8K 1K
Отв.6  30 Июня 09, 00:27, через 26 мин
Управление чере ЛПТ-порт
Он хочет компом рулить.
Kotische Академик Саратов 8.1K 2.5K
Отв.7  30 Июня 09, 00:34, через 8 мин
Управление чере ЛПТ-порт
Он хочет компом рулить.Rudy, 30 Июня 09, 00:27
Ииии?
Без микроконтроллера, нормально рулить компом не получится!
Впринципе можно, но ненадёжно, и сложно в настройке...
У меня рулится компом, через СОМ-порт!
У тебя я так понял тоже есть такая возможность!
В чём наши непонятки?

Повторяю:
Уставка мощности задается посылкой 1 байта (8 бит) в СОМ-порт, что легко сделать как на Си так и на бейсике...Kotische, 30 Июня 09, 00:01
Rudy Академик Питер 5.8K 1K
Отв.8  30 Июня 09, 01:03, через 30 мин
Управление чере ЛПТ-порт
Так ему еще контроллер прийдеться делать. И программировать. А он хочет ПРО-О-ООСТО.
seka Студент Котлас 38 2
Отв.9  30 Июня 09, 11:12
Управление чере ЛПТ-порт
...А он хочет ПРО-О-ООСТО.
Rudy, 30 Июня 09, 01:03
Правильно: ОЧЕНЬ ПРО-О-ОСТО ХА-А-АЧУ!!! Смеющийся.
Подкупила простотой схема управления через LPT-опторазвязка-симистор. Такое спаять даже я смогу. А вот контроллер запрограммировать...Тут, мужики, я полный ноль. Я думал что если удаётся "вкл-выкл" через комп делать, то если это делать достаточно часто и вовремя получится относительно плавно мощность регулировать.
Всегда есть какая то степень плавности, конкретно у меня 256 градаций изменения мощности.
Kotische, 30 Июня 09, 00:01
256 это, наверно, даже слишком много.
seka, если есть хоть чуть - чуть начальных знаний в СИ, поможет Котище. Если бейсик ближе - помогу я.
Игорь, 29 Июня 09, 19:12
СИ - вообще терра инкогнита. А VBA , благодаря Игорью, уже не так страшен.
Всех моих познаний в программировании это Синклеровский Бейсик лет так 20 тому назад.
Понимаю что правильней, конечно, собрать что-то автономное. Но в планах "автоматизировать" всё и вся. А точнее прессостат тож через комп сделать. И тут умение управлять мощностью очень пригодиться. Да ещё-б научиться "читать" LPT. Сейчас у меня этим всем датчик уровня занимается, но уж больно часто он клацает, думаю надолго его так не хватит. Вот и захотелось научиться передавая сигнал с датчика на LPT программно выставлять хотя бы два значения мощности.
...ненадёжно, и сложно в настройке...
У меня рулится компом, через СОМ-порт!
У тебя я так понял тоже есть такая возможность!
Kotische, 30 Июня 09, 00:34
Комп с COM-портом есть, а "сложности в настройке" - вот за них вообщем-то я и спрашивал
Игорь Академик - 7.4K 3.7K
Отв.10  30 Июня 09, 11:38, через 26 мин
Управление чере ЛПТ-порт
Чтобы прессостат не грузить большими токами, можно его контактами симистор переключать, или реле с контактами помощнее.
А если хочешь регулятор мощности, управляемыв вручную нажатием кнопок на компе, это несложно.
Предлагаю такой алгоритм. Назначаем длительность цикла нагрева. Допустим 100 единиц времени. Цикл делится на две части - греем и не греем. вЕсли греть 22 единицы, а не греть 78, то мощность нагрева будет 22%.

Осталось только определиться с длительностью цикла в секундах. Мои наблюдения позволяют предположить, что благодаря высокой тепловой инерции заполненного куба, 5 секунд - вполне
подходящая длительность. Тогда для достижения шага изменения 1%, дискретность по времени составит 50 миллисекунд. Это в 5 раз длиннее полупериода, так что работать будет.
Чуть позже прицеплю экселевский файл.
Игорь Академик - 7.4K 3.7K
Отв.11  30 Июня 09, 16:03
Вот, сваял.
Для того, чтобы было видно как оно работает, возьми светодиод и резистор, соедини их как показано на схеме и без душевного трепета воткни в ЛПТ. Если трепет ощущуешь, сделай жто при выключенном компьютере.
Порт показан так, как будто он стоит на компьютере.
Контакты 18-25 соединены внутри компа, так что не имеет значения в какую именно воткнешь резистор.
Анод светодиода вставь в любой из контактов от 2-го до 9-го. Они не соединены, поэтому запомни куда вставил.
Делай пока, а я продолжу.
LPT.jpg
LPT.jpg Управление LPT портом из Excel. Инструкция. + продолжение. Автоматика.
Игорь Академик - 7.4K 3.7K
Отв.12  30 Июня 09, 16:14, через 12 мин
Бейсик - так это и я могу.:) Управлять ЛПТ меня давно научил Альтаир, за что ему большое спасибо.

Решил остановиться на VBA - он есть в экселе, поэтому многие смогут полазить - попробовать - посмотреть.
Во-первых, надо установит драйвер ЛПТ.
Качайте здесь.
http://absinthe.ho.ua/port95nt.zip
Почти два мегабайта.

А вот файл на экселе. Для его работы нужно, чтобы зацита от макровирусов была средняя или низкая. Высокая блокирует выполнение всех сценариев.

Приложенный файл потерялся Улыбающийся Перезалил. Теперь должно быть нормально.

Открыв файл, жмите где указано.
Откроётся формочка с тремя регулировками.
Первая и вторая регулируют длительность цикла и процент открытого состояния, третья выбирает контакт ЛПТ, на котором будет появляться и исчезать напряжения.

Есть еще три кнопки. Описывать не буду. Всё просто.

Небольшое замечание.
Если вместо светодиода будет подключен оптрон с привязкой к нулю сетевого напряжения (МОС3063 или подобные), при длительности меньше 2-х секунд при проценте меньше 10 или больше 90 будет большая погрешность.

Пробуйте, залезайте в коды, спрашивайте. там всё очень просто. Расписал бы построчно, но не хочу тратить время если народ подкован и сам всё поймт, или если это никому не нужно.


Rudy Академик Питер 5.8K 1K
Отв.13  30 Июня 09, 16:36, через 22 мин
Правильно: ОЧЕНЬ ПРО-О-ОСТО ХА-А-АЧУ!!! Смеющийся.seka, 30 Июня 09, 11:12
Вот хорошо и просто - не получится. С компом под виндами есть проблема - он в любой момент времени может заняться собой на несколько секунд, забыв о том, что нужно периодически переключать порт. Поэтому ШИМ получится сильно драный по времени. Это не очень страшно, для нагрева бака сойдет, но проблема есть.

Игорь, тут есть немного другой очень простой способ избежать этих проблем и обойтись без усложнения схемы. Сделать из LPT ЦАП (генератор заданного напряжения - цифро-аналоговый преобразователь).

Делается очень просто. Все 8 выходов LPT подключаются через соответствующие резисторы в одну точку (выход). Старший (7) разряд - через 1 кОм (например), следующий - через 2 кОм, потом, соответственно, серез 4,8,16,32,64 и 128 кОм. В результате, если на выходе LPT выставить код = 0 - на выходе (общей точке всех резисторов) будет напряжение равное нулю, а если код равен 255 - то примерно 5 В. Выставляя другие коды - будешь получать все промежуточные значения напряжения.

Иными словами, напряжение на выходе будет равно 5В*код/255. Не обязательно использовать 8 бит, чаще всего нужно только 4 - будет 16 уровней напряжения, но можно независимо управлять двумя каналами.

Полученное напряжение (или ток, что правильнее) можно запузырить в аналоговый (обычный) оптрон и подключить его выход к фазовой регулилке - типа К1182ПМ1. Понятно, что линейности особой не будет, и, возможно пару деталей прийдеться подобрать, но для нагрева с поддержанием давления этого хватит.

Зато время реакции компа становится неважно - записал код в LPT и все - заданная мощность стоит.
seka Студент Котлас 38 2
Отв.14  30 Июня 09, 17:00, через 24 мин
Игорь и Rudy, спасибо за такой обстоятельный ответ!
Всё по полочкам!
Я почему с чтением LPT пристаю, комп ведь всё одно возле колонны стоит Пень166 - практически музейный экспонат, достался практически даром, зато честные LPT- и COM-порты на борту, а это теперь такая редкость! На ноуте их уже нет! БП крутит моторчик, который воду качает, а комп просто так стоит пока, как БП. Пусть чего-нибудь регулирует Веселый
А тут уже практически готовый автомат по перегонке браги! В смысле, управление мощностью в зависимости от температуры
Спасибо большое! Пойду "переваривать" и экспериментировать!
Игорь Академик - 7.4K 3.7K
Отв.15  30 Июня 09, 17:12, через 13 мин
Блин, не сдержался и выписал ремарки к коду. Кому интересно - перезакачивайте  РЕГУЛЯТОР.rar здесь, или парой постов выше
Игорь Академик - 7.4K 3.7K
Отв.16  30 Июня 09, 17:35, через 24 мин
Вот хорошо и просто - не получится. С компом под виндами есть проблема - он в любой момент времени может заняться собой на несколько секунд, забыв о том, что нужно периодически переключать порт. Поэтому ШИМ получится сильно драный по времени. Это не очень страшно, для нагрева бака сойдет, но проблема есть.Rudy, 30 Июня 09, 16:36
Rudу, наверное такая проблема действительно существует, и при решении каких-то задач эта проблема может привести к фатальным последствиям.
Но при решении наших задач....
Не считал, но уже наверное года два я пользуюсь старт-стопом, а последние три месяца - шим-регулированием отбора. По ШИМ - варианту получил вёдер 15 спирта. Все эти варианты у меня рулятся именно по такому принципу, через ЛПТ-порт. Проблемы если были, я их не заметил. А раз они незаметны и не влияют на результат, бог с ними. Особенно в ситуации seka, когда комп используется в роли блока питания.
seka хочет с его помощью управлять при перегонке, а там уж точно задержки управления в единицы секунд никак не повлияют на результат.

Но зато какой опыт! А сколько положительных эмоций, когда система работает!
Игорь Академик - 7.4K 3.7K
Отв.17  30 Июня 09, 17:46, через 11 мин
Все 8 выходов LPT подключаются через соответствующие резисторы в одну точку (выход). Старший (7) разряд - через 1 кОм (например), следующий - через 2 кОм, потом, соответственно, серез 4,8,16,32,64 и 128 кОм. В результате, если на выходе LPT выставить код = 0 - на выходе (общей точке всех резисторов) будет напряжение равное нулю, а если код равен 255 - то примерно 5 В. Выставляя другие коды - будешь получать все промежуточные значения напряжения.

Иными словами, напряжение на выходе будет равно 5В*код/255.Rudy, 30 Июня 09, 16:36
Не понимаю, что значит "напряжение
Бля... я таки да тупой. Никак не пойму. Не понимаю, что значит "напряжение в общей точке всех резисторов". Если мерить вольтметром, то при появлении единицы на любом контакте, напряжение будет 5 вольт. (Или нет - напряжения на ЛПТ не ровно пять). Или эту точку нужно подключить к светодиоду оптрона? Но ведь до 1-го вольта он не начнет светиться вообще, а при трёх сгорит к какой-то матери. А через те килоомы, которые ты рекомендуешь, он вообще не загорится, даже при 255 на порту.
Может напряжение на каком-то резисторе? какого номинала?

Допустим, есть источник 5 вольт и нагрузка 1 кОм.
Я могу дать 5 вольт на нагрузку через 1, 2 и 4 кОм. Шас посчитаю и выложу варианты напряжения на этом килооме.


Rudy Академик Питер 5.8K 1K
Отв.18  30 Июня 09, 18:13, через 28 мин
Ага, вот удивишься! Только припаяй резисторы между общей точкой и ножками ЛПТ так:
1к - между 2 ногой и общей
2к - между 3 ногой и общей
4к - между 4 ногой и общей
Подключи вольтметр между землей и общей. Выставь на ЛПТ коды от 0 до 7 - получишь напряжения U=5*код/7.
На всякий случай вид и цоколевка - в файлах
LPTportPins1.JPG
LPTportPins1.JPG Управление LPT портом из Excel. Инструкция. + продолжение. Автоматика.
LPTportPins.JPG
LPTportPins.JPG Управление LPT портом из Excel. Инструкция. + продолжение. Автоматика.
Игорь Академик - 7.4K 3.7K
Отв.19  30 Июня 09, 18:30, через 17 мин
Руди. ты меня наверное дуришь.
Вот мои выкладки на резисторе 1 кОм
port.jpg
port.jpg Управление LPT портом из Excel. Инструкция. + продолжение. Автоматика.