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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2009, 10:07   #21
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Э, уважаемый, как любит говорить mihali4, это форум программистов, а не экстрасенсов.
Что за девайс? Как именно подключен? Какие регистры используются для приема, а какие для передачи? И еще с десяток вопросов будет. Короче нужна конкретизация.
Не можете изложить суть устройства (бывает, а вдруг спецзаказ, оборонка, конкуренты на "хвосте" сидят и т.п.), используйте симулятор, упрощенный аналог или что то подобное. Но в любом случае надо иметь что либо материальное, что бы помочь Вам.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 18.11.2009, 18:47   #22
Karp_13
Всё знать хотяка!
Пользователь
 
Аватар для Karp_13
 
Регистрация: 21.04.2009
Сообщений: 67
Вопрос

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

Вообщем, вот выкладываю отрывок кода(используется библиотека WINIO)(код переписан мной с языка С++ и в некоторые нюансы я не свосем вник -поверил им на слово))):

Код:
procedure Set_Bit(var X:byte; Y:byte); //простенькая операция с битом в байте - зажигаем/гасим
begin
X:=x xor (1 shl Y);
end;

function Test_Bit(X:byte; Y:byte):byte; //проверка горит ли нужный бит
begin
Result:=(X shr Y) and $01;
end;
///////////////////////
//функция чтения с порта - выдаёт все единички на моём компе, зараза, вместо того что нужно и что выдавалось на другом компе
function Read_Reg(reg:byte):byte;
var ConfigByte,d:byte; dat: integer;
begin
 ConfigByte:=$04;
 SetPortVal($037A,ConfigByte,1);
 SetPortVal($0378,$FF,1);
 case reg of
  $00: begin
       Set_Bit(ConfigByte,1);
       Set_Bit(ConfigByte,3);
       end;
  $01: Set_Bit(ConfigByte,1);
  $02: Set_Bit(ConfigByte,3);
 end;
 Set_Bit(ConfigByte,0);
 Set_Bit(ConfigByte,5);
 SetPortVal($037A,ConfigByte,1);
 Sleep(1);     //спим одну милисекунду, ждём когда изменится "положение дел" на порту
 GetPortVal($0378,dat,1); //считываем
 d:=byte(dat);
 ConfigByte:=$04;
 SetPortVal($037A,ConfigByte,1);
 result:=d;
end;
///////////////
/// а вот функция проверки подключён ли девайс
function CheckOnline():integer;
begin
if (Read_Reg($03) = $83) then result:=1 else result:=0;
end;
////А эта зараза всегда выдаёт нолик - т.е. девайс по её мнению не подключён
Ну а что насчёт девайса - небольшая машинка(лабораторная установка), состоящая из датчиков и моторчиков. Наша цель запускать моторчики и считывать состояние датчиков - которые, в свою очередь, пищат единицами, когда моторчик доехал до определённого состояния.

Конечно, по этому сообщению думаю всё равно будет трудно вникнуть в суть работы всего "Этого", но прошу лишь примерно прикинуть почему на одном компе(кстати, он довольно старый) всё читалось и опознавалось, а на другом(он не сильно новее того, но всё таки чуть лучше) ничего не опознаётся и соответственно не читается.
Вот как то так ...

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

Последний раз редактировалось Karp_13; 18.11.2009 в 18:59.
Karp_13 вне форума Ответить с цитированием
Старый 18.11.2009, 20:25   #23
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Как вариант, у Вас на разных компах разные адреса портов. Адрес порта совпадает с адресом регистра "data"/Последующие регистры имеют адреса с увеличением на еденицу.Могут быть следующие адреса:
- $278; $ 279; $27A;
- $378; $379: $37A;
- $3BC; $3BD; $3BE;
Вот их и пробуйте. В придачу Вам две утилитки для проверки и управления состояниянием регистров. В программке "Упр-ие портом LPT"
введите адреса (указанные выше) и смотрите сам порт.
Вложения
Тип файла: rar Управление портами LPT.rar (165.3 Кб, 131 просмотров)
Тип файла: rar Состояние LPT .rar (164.3 Кб, 91 просмотров)
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 21.11.2009, 09:25   #24
Karp_13
Всё знать хотяка!
Пользователь
 
Аватар для Karp_13
 
Регистрация: 21.04.2009
Сообщений: 67
По умолчанию

И это снова я. Почти, почти уже приблизился к завершению задачи минимум свалившихся на меня за эти пол года дел.))) Скоро перестану доставать этот форум... хотя бы на время сессии))

Итак, с портами я думаю не ошибся - у меня LPT1 и порты $378; $379: $37A ... Вышеизложенные мной процедуры должны считывать с них данные... Но не считывают, как я уже писал...
Но!!! Покопавшись по инету(по глупым запросам типа "скачать драйвер для LPT") наткнулся вот на это http://figozavr.ru/samodelnyj-oscill...za-200-rublej/ или это(тож самое по идее) http://aes.at.ua/publ/28-1-0-102
Как-то машинально скачал прогу LPTScope ... И о эврика - если запустит её и мою программу - моя программа начинает прекрасно всё считывать, прекрасно и покладисто выдавать то что нужно... Потом можно LPTScope закрыть - моя программа продолжает всё читать с порта и записывать в порт(управлять девайсом)... Но вот если закрыть и мою программу, то после этого с LPT портом теряется всякая связь - девайс перестаёт реагировать на действия с компа... хотя комп пишет, что девайс подсоединён... требуется перезагрузка, после которой фокус можно повторить...
(ещё вместе с LPTScope я понаставил разной чуши... пытался поставить некую dx4.1.5 ... и т.д. ... но думаю благотворное, но непродолжительное, влияние оказала именно LPTScope)

Так вот каким боком и что чёрт побери происходит в этом странном мире? О_о У кого нибудь идеи есть...

зы1: в принципе и без решения этой проблемы я смогу закончить работу(девайс в итоге будет опдсоединён к компу, где моя прога всё читает как надо), но я ж спать не могу О_о ... помогите докопаться до истины...
зы2: DeKot твои программки у меня не запустились... процесс появляется в диспетчере задач, но не более...
Я вредный и нервный, но бдобр.
Karp_13 вне форума Ответить с цитированием
Старый 21.11.2009, 12:27   #25
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Цитата:
DeKot твои программки у меня не запустились
Значит у Вас не установлена библиотека Inpout32.dll. Добавте в папку с программами (см. вложение). И еще - очень интересная страничка
http://valery-us4leh.narod.ru/main.html.Неплохой 17-и канальный осциллограф на LPT (все программно), генератор и много вспомогательных схем.
Добавлено :
У меня не устанавливался регистр "data" (h378) на "прием" ( при установке в регистре "contrl" (h379) 5- го бита в '1' или просто '32' записать в регистр). Скачал LPTScope 1.2 по ссылке http://figozavr.ru/samodelnyj-oscill...za-200-rublej/, запустил и выключил программу. Регистр "data" прекрасно стал переключаться в режимы ввод \ вывод. Также пока не понятно, но зато действенно.
Вложения
Тип файла: rar inpout32.rar (10.9 Кб, 49 просмотров)
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 21.11.2009 в 12:55.
DeKot вне форума Ответить с цитированием
Старый 25.11.2009, 11:42   #26
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Так как Вы говорите, что устройство подключено к LPT тремя проводами (2,3 контакты - это выходы , а 25 - GND), то попробуйте переключить на COM порт (скорей всего TXD и RXD контакты и общий), и работать через программу SMC-3. Там в комплекте есть Word файл с руководством по использованию.
Так как у меня нет подобного блока управления ШД, то, к сожалению, практических советов не могу Вам дать.
Все выше сказанное - это чисто теоретические советы. Но судя по прилагаемым программам и документам все можно отстроить.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 24.09.2010, 00:32   #27
Kerzoll
Новичок
Джуниор
 
Регистрация: 24.09.2010
Сообщений: 2
По умолчанию

Доброго времени суток, уважаемые форумчане!
Почитал сию тему и решил ее поднять дабы не засорять форум похожей. Дело в том, что в недалеком прошлом пришлось столкнутся с изучением аппаратного программирования по долгу работы. А именно передача данных с устройства на ПК по средствам ЛПТ порта. Долго лазил по сети, перелистал много материала. Освоил и диоды и сегментные индикаторы и прочую практику, которую предлагает сеть. Но! Эта вся практика практически всегда касалась выхода с порта на регистры данных. А вот мне нужна практика совсем на оборот - перевести порт в режим прослушивания шины данных и извлекать из нее биты.
Для практики пользовался драйвером inpout32.dll. Для тестирования пинов использовал программу LPT 3D HARD ANALYZER 1.6. Для физического теста использовал схему из этой статьи.
И вот на чем я зашел в полный ступор: при попытке считать каким либо способом данные с шины данных - я получаю отрицательный результат. На шине находятся именно те уровни, которые были выставлены программно, скажем, программой анализатора.
С этой проблемой облазил интернет - информации по считыванию шины даных очень мало, соответствено и "грабли" мало где описаны. А тут наткнулся на этот форум где точь в точь описана моя проблема:
Цитата:
У меня не устанавливался регистр "data" (h378) на "прием" ( при установке в регистре "contrl" (h379) 5- го бита в '1' или просто '32' записать в регистр). Скачал LPTScope 1.2 по ссылке http://figozavr.ru/samodelnyj-oscill...za-200-rublej/, запустил и выключил программу. Регистр "data" прекрасно стал переключаться в режимы ввод \ вывод. Также пока не понятно, но зато действенно.
Вот и возникает вопрос.. Есть ли решение этой проблемы? Если есть - опишите пожалуйста.
Kerzoll вне форума Ответить с цитированием
Старый 24.09.2010, 17:32   #28
Kerzoll
Новичок
Джуниор
 
Регистрация: 24.09.2010
Сообщений: 2
По умолчанию

Решение проблемы найдено. В настройках БИОСа режим передачи стоял НОРМАЛ. После того, как я указал режим явным образом, выбрав режим EPP - все заработало. Биты побежали из устройства в порт по 378 порту после внесения в регистр контроля $20 (или 32).
Kerzoll вне форума Ответить с цитированием
Старый 14.12.2010, 13:07   #29
Lotse
 
Регистрация: 14.12.2010
Сообщений: 4
По умолчанию

DeKot, всё и вся как нельзя кстати ! Респект полный, а то я сам не великий программист, но прогу надо было написать для программирования микросхем Atmel через LPT. А Delphi, я считаю, более прост в понимании нежели C
Работаем по-старинке !
Lotse вне форума Ответить с цитированием
Старый 15.12.2010, 20:15   #30
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

А как отправить сигнал на определенный пин LPT-порта? Знаю про inpout32.dll, написал уже прогу, ток мне надо например 1 из 5 св. диодов вкл/выкл кнопками 1-5 из программы. На подскажете как это примерно можно реализовать?
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление LPT портом nikleb Паскаль, Turbo Pascal, PascalABC.NET 5 27.05.2010 19:40
Управление LPT портом Kuzmichinishe Помощь студентам 3 28.09.2009 11:07
Не получается управлять LPT-портом NikVE Общие вопросы C/C++ 3 06.04.2009 12:50
Работа с LPT портом chingiz Паскаль, Turbo Pascal, PascalABC.NET 1 17.11.2007 21:21