Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2011, 15:27   #1
clone_
 
Регистрация: 06.04.2011
Сообщений: 3
По умолчанию Счетчик импульсов на LPT. Delphi

Добрый день!
Подскажите как можно реализовать подсчет импульсов на регистре статуса LPT порта? Например для отображения количества оборотов вентилятора (3 пиновый). За один оборот выдается 2 импульса с вентилятора.
clone_ вне форума Ответить с цитированием
Старый 07.04.2011, 16:55   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

Считать можно библиотекой INPOUT32 или Giveo, примеры есть на форуме и в инете. Поиском пользовались?

Что касается самого подключения вентилятора, то третий его пин - это выход с открытым коллектором, подключите его (средний вывод, как правило желтый или белого цвета провод) последовательно с сопротивлением на 1 кОм вход (катод светодиода) оптрона, скажем TLP621 и анод на плюс питания вентилятора, т.е. + 12V, а выход оптрона (фототранзистор) - переход К-Э через сопротивление на землю (эмиттер к земле) LPT и сопротивлением на любой из к.регистра статуса LPT/
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 07.04.2011 в 16:58.
raxp вне форума Ответить с цитированием
Старый 07.04.2011, 17:19   #3
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,759
Хорошо

Цитата:
Сообщение от raxp Посмотреть сообщение
Считать можно библиотекой INPOUT32 или Giveo, примеры есть на форуме и в инете. Поиском пользовались?

Что касается самого подключения вентилятора, то третий его пин - это выход с открытым коллектором, подключите его (средний вывод, как правило желтый или белого цвета провод) последовательно с сопротивлением на 1 кОм вход (катод светодиода) оптрона, скажем TLP621 и анод на плюс питания вентилятора, т.е. + 12V, а выход оптрона (фототранзистор) - переход К-Э через сопротивление на землю (эмиттер к земле) LPT и сопротивлением на любой из к.регистра статуса LPT/
Точно профессионал! Уважаю.
FaTaL вне форума Ответить с цитированием
Старый 07.04.2011, 21:09   #4
clone_
 
Регистрация: 06.04.2011
Сообщений: 3
По умолчанию

поиском пользовался, но все что находил относилось к установлению сигналов на выходах LPT, генераторы и тому подобное. Хотелось бы найти пример счетчика с использованием inpout32.dll.
За аппаратную часть конечно спасибо, но в электронике я разбираюсь, а вот в программировании оч слабовато. Вот и хотелось бы увидеть код, для примера.
clone_ вне форума Ответить с цитированием
Старый 07.04.2011, 21:26   #5
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> третий его пин - это выход с открытым коллектором

Какие нафих "коллекторы" в заведомо пассивном устройстве, коим является компутерный кулер, если конечно же о нем идет речь, судя по "трехпиновый" ?)
mss вне форума Ответить с цитированием
Старый 07.04.2011, 23:41   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

mss, не разбираетесь - лучше промолчите

Цитата:
но все что находил относилось к установлению сигналов на выходах LPT, генераторы и тому подобное. Хотелось бы найти пример счетчика с использованием inpout32.dll.
а что собственно непонятного? либа также позволяет и читать, поиском не пользовались:
Код:
function Inp32(PortAdr: word): byte; stdcall; external 'inpout32.dll';

type TMas = array[0..7] of byte;

  var mas_bit: TMas; // массив битов - двоичное число соответствующее байту в регистре порта

  function Dec_Bin(N_dec: byte): TMas;

implementation

function Dec_Bin(N_dec: byte): TMas; // перевод десятичного числа в двоичное (массив битов)
var i: byte;
    weight: byte;
begin
  weight:= 128; // "вес" старшего разряда
  for i:= 7 downto 0 do
  begin
    mas_bit[i]:= N_dec div weight;
    if mas_bit[i] = 1 then N_dec:= N_dec - weight;
    weight:= weight div 2;
  end;
  Result:= mas_bit;
end;


...использование:
Код:
...
в таймере
...
 if  Dec_Bin(Inp32($379))[3] = 0 then inc(счетчик);  // 3-БИТ РЕГИСТРА "Status"  (конт. 15)
смысл ясен? и что искать и читать тоже ясно?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 12.04.2011, 21:59   #7
clone_
 
Регистрация: 06.04.2011
Сообщений: 3
По умолчанию

Спасибо за помощь! Со счетчиком inc у меня почему-то не заработало, выскакивает сразу длинное число и все тут, но я сделал по счетчику count, сним заработало, но есть одно но. Как сделать так чтобы считались именно импульсы, либо нажатия, в момент отпускания( если говорить о нажатии на кнопку), т.е. если я кнопку не отпустил он будет продолжать считать со скоростью счета таймера.
clone_ вне форума Ответить с цитированием
Старый 29.04.2011, 01:29   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

подумайте над фразой "инверсия бита"/
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование LPT-порта на DELPHI Vova777 Компьютерное железо 5 05.02.2011 19:27
Программирование LPT-порта на DELPHI Vova777 Общие вопросы Delphi 0 31.01.2011 17:37
Определенная последовательность импульсов на ком порт antinup C++ Builder 3 27.05.2010 09:29
Счетчик импульсов stanik123 Общие вопросы Delphi 11 09.10.2009 10:10
счетчик Dimati87 Microsoft Office Excel 3 09.04.2009 10:02