Модераторы: PILOT, ManiaK, Mazzi

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Присоеденить железо к компу, Изучение основ. С чего начинать? 
V
    Опции темы
new_web
Дата 2.2.2008, 05:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Представте себе некоторый станок, которыцй пиляет. скажем доски. Припустим, что все механизмы работают и управляются релейной системой. Также есть система контроллеров. Всё  управляется электричеством. 
Припустим. что разработана вся логика устройства, все детали надёжно пропаяны и необходимый "туда-сюда" сигнал со стандартными параметрами для какого-нибуть порта(LTP, илиUSB) есть!
Разработать логику работы программы нетрудно, зная. что она должна делать...
проблема в том. что я понятия зелёного не имею, как пишутся драйвера  и вообще, какие термины применяются для такого типа програмирования, с чего вообще начать, чтобы можно было постепенно  научиться подключать к компу разные девайсы собственного производства...
Одним словом. как подключить лампочку в гостиннойк компу?, для начала?)))
PM MAIL   Вверх
Den64
Дата 2.2.2008, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 6.4.2006
Где: Курск

Репутация: 1
Всего: 2



Цитата(new_web @  2.2.2008,  05:56 Найти цитируемый пост)
Одним словом. как подключить лампочку в гостиннойк компу?
 
  Через LPT порт.
  Я бы так зделал:
  1. Ношол бы инфу по эл. интерфейса LPT, гденить..
  2. И с помощью функций CreaceFile, WriteFile и т.д. в си написал бы прогу.

Кадат делал такое..

--------------------
Инагда пишу звуками.
PM WWW ICQ   Вверх
G24_tec
Дата 2.2.2008, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 3.9.2007

Репутация: нет
Всего: нет



На счет USB может тут посмотреть
http://forum.vingrad.ru/index.php?showtopi...t&p=1400493
примеры к плате есть на сайте фирмы G24-tec.
PM WWW   Вверх
new_web
Дата 3.2.2008, 04:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Спасибо, КОНЕЧНО, всем, но всё это для  меня поэзия научно-фантастической мысли...пока!
А где можно посмотреть схемы чипов. контроллеров? Эта информация доступна, или, компании-производители скрывают...?
Как увидеть сигнал? - можно сделать осцилограф из компьютера?
true =это сколько вольт? smile 

Абстрагируясь от всех заумностей языков, думаю так - кажый датчик говорит да - нет
Пошаговый искатель, -пусть даже электромеханический smile  - проходит по всем датчикам поочерёдно, снимая сигнал с датчиков. 
Значит ,
1 надо к одной ножке LTP припаять сигнал от пошагового искателя[индекс датчика]
2 с другой ножки подаём управление на переключатель датчиков (в нашем случае, это будет катушка реле))))) - это же и будет индекс датчика ,тоесть тактовый генератор
3  подать сигнал на исполняющее реле1 с третьей ножки
4  подать сигнал на исполняющее реле2 с четвёртой ножки
5 и так дальше? а сколько там ножек можно задействовать, по которым идёт сигнал??
  Можно тем же индексом датчика - тактовый генератор - переключать тем же искателем ,сигнал на управление реле.
Тоесть, обобщая этот "псевдопсевдокод" подключить к LTP три сигнала и матушку землю.
Если бы программа опрашива датчики кажду секунду, она вполне бы могла контролировать контролировать не очень быстрые технические и не только  процессы(рост цветов, брожение вина))
а если употребить такое чудо техники, как КТ155ЛА3...то возможности для фантазии просто безграничны...потом мне, конечно, может и будет проще  покупать готовые контроллеры, но сейчас я был бы просто счастлив, если бы я поместил на форму кнопу, над собой лампочку. и включал-выключал её кнопкой... smile 

Как усстановить сигнал на каком то выводе true?
С чего начать учиться. чтобы это понять?



Это сообщение отредактировал(а) new_web - 3.2.2008, 07:09
PM MAIL   Вверх
cardinal
Дата 3.2.2008, 04:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Цитата(new_web @  3.2.2008,  03:30 Найти цитируемый пост)
А где можно посмотреть схемы чипов. контроллеров?

Нигде.
Цитата(new_web @  3.2.2008,  03:30 Найти цитируемый пост)
Эта информация доступна, или, компании-производители скрывают...?

Эта информация тебе не нужна. Тебе нужно знать как пользоваться контроллером. Ты же не видел чертежей коробки передач в твоей машине, а пользуешься без проблем...
Цитата(new_web @  3.2.2008,  03:30 Найти цитируемый пост)
Как увидеть сигнал?

Осцилографом (и на худой конец вольтметром).
Цитата(new_web @  3.2.2008,  03:30 Найти цитируемый пост)
можно сделать осцилограф из компьютера?

Можно, но это не проще и не дешевле чем приобрести осцилограф.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
new_web
Дата 3.2.2008, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Цитата(cardinal @  3.2.2008,  04:56 Найти цитируемый пост)
Эта информация тебе не нужна. Тебе нужно знать как пользоваться контроллером. Ты же не видел чертежей коробки передач в твоей машине, а пользуешься без проблем...

Я видел чертежи, только ничего не понял. а коробку разбирал-собирал.
Встану рано утром. возьму кусок железа, приварю к  нему другой, прикреплю  пару двигателей, цилиндров, и т д - и будут они туда-сюда что-то делать -
 это я умею  уже.
плотно пообедав можно попробовать всё это поподключать
вечером. усердно помолившись. ударив в бубен начать писать код.
Мне всё интересно самому попробовать smile 

И конечно, что Вы правы. что быстрее выгодней и надёжней будет пользовать готовым чипом, програмируемым, и так дальше! Но изучение електротехники начинают с лампочки, 
а вдруг я захочу контроллеры делать?

PM MAIL   Вверх
Gordon
Дата 3.2.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 9.7.2006

Репутация: 1
Всего: 6



new_web, посмотри тут
Может найдешь что нужно... И есили нетрудно, отпишись (я тоже хочу просмотреть это параллельно). 


--------------------

  
     
PM MAIL WWW   Вверх
cardinal
Дата 3.2.2008, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Цитата(new_web @  3.2.2008,  06:31 Найти цитируемый пост)
а вдруг я захочу контроллеры делать?

Как хобби не получится! Если захочешь, то настраивайся на 5 лет универа. И то получишь только начальные знания, которые на практике еще применить надо.
Да и "контроллер делать" имеет смысл в кол-ве от 10000 штук (а то и гораздо больше). Остальное невыгодно и врятли сможет с чем-то конкурировать...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Den64
  Дата 3.2.2008, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 6.4.2006
Где: Курск

Репутация: 1
Всего: 2



Цитата(new_web @  3.2.2008,  04:30 Найти цитируемый пост)
 но сейчас я был бы просто счастлив, если бы я поместил на форму кнопу, над собой лампочку. и включал-выключал её кнопкой...  


Простейшая задача! Для этого нужно:
  1. Оптопара (например MOC3051 в гугле найти легко, стоит до 50р. точно нипомню)
  2. LPT - шнут (до 80р.)
  3. LPT - порт на кампе.
  4. Среда программирования (например MS VC++, C++Builder или типа).
  5. Описание электрическое LPT (полно, если ненайдёш то подключай ко второму выводу порта).
  6. Книжку скачать по основам электроники (главное чтоб тонкая была страниц до 200, меньше вобы будет)
  7. Инструмент всякий, типо нож, отвёртка, маток изоленты и тд (догадаешся).
  8. Светильник с лампочкой ват на 25 (как в советском холодильнике)

Прога строк в 60 получится. Пользы мало зато опыт.

Или самый простой вариант купить 8 светодиодов, вставить в LPT и поигратся с ними..


--------------------
Инагда пишу звуками.
PM WWW ICQ   Вверх
cardinal
Дата 3.2.2008, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Самый классный пример, который мне попадался в сети это вот этот
http://www.myrobot.ru/stepbystep/mc_first_project.php
Все ясно и понятно! smile

Потом уже добавишь кнопку и все такое... smile 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
new_web
Дата 4.2.2008, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Gordon, огромное спасибо за дельную ссылку! - я прочитал только пару страниц. и понял, что это то. что искал! Даже формулировка вопроса, о лампочке совпала!
 
Сегодня влом уже. а завтра побегу светодиод искать....у меня и оптопары имеются где-то. и тиристоры к ним, реле... так что я теперь одной кнопкой буду включать свет...другой вентилятор, отопление, угол наклона кровати...
Ещё раз спасибо!

cardinal
Спасибо! Контроллеры будут моим следующим этапом.
Только я бы никому не советовал делать так, как на рисунке
http://www.myrobot.ru/stepbystep/images/mc_first2.gif
провода запутаются, ножки отвалятся - для этих целей надо запастись гнездом специальным, в которую микросхема и втыкается.
Я когда-то радиотехнике учился....

 

Это сообщение отредактировал(а) new_web - 4.2.2008, 03:02
PM MAIL   Вверх
new_web
Дата 4.2.2008, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Побывал на
http://www.pcports.ru/articles/2.php
Там, правда пример для среды VC++ 6., а я на Билдере - может, из-за этого глюк?
Вроде всё понятно, и скачал что надо, только компилятор тревожится, недостижимый код у него, а  при запуске выдаёт такое
[Linker Error] 'C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\НОВАЯ ПАПКА\INPOUT32.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
PM MAIL   Вверх
Gordon
Дата 4.2.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 9.7.2006

Репутация: 1
Всего: 6



Цитата(new_web @  4.2.2008,  02:40 Найти цитируемый пост)
Gordon, огромное спасибо за дельную ссылку!


Пожалуйста!!!  smile 


Цитата(new_web @  4.2.2008,  06:35 Найти цитируемый пост)
Побывал на
http://www.pcports.ru/articles/2.php
Там, правда пример для среды VC++ 6., а я на Билдере - может, из-за этого глюк?
Вроде всё понятно, и скачал что надо, только компилятор тревожится, недостижимый код у него, а  при запуске выдаёт такое
[Linker Error] 'C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\НОВАЯ ПАПКА\INPOUT32.LIB' contains invalid OMF record, type 0x21 (possibly COFF)


Да, на VC++ 6 работает (сам пробовал), а вот Билдер smile - не хочет (ту же ошибку прописал... ) 

Цитата

[Linker Error] 'C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\TLP\32\INPOUT32.LIB' contains invalid OMF record, type 0x21 (possibly COFF)





--------------------

  
     
PM MAIL WWW   Вверх
cardinal
Дата 4.2.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Цитата(new_web @  4.2.2008,  01:40 Найти цитируемый пост)
провода запутаются, ножки отвалятся - для этих целей надо запастись гнездом специальным

Ну конечно это будет на соплях, но зато картинка наглядная... smile 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
xvr
Дата 4.2.2008, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(new_web @ 4.2.2008,  06:35)
Побывал на
http://www.pcports.ru/articles/2.php
Там, правда пример для среды VC++ 6., а я на Билдере - может, из-за этого глюк?
Вроде всё понятно, и скачал что надо, только компилятор тревожится, недостижимый код у него, а  при запуске выдаёт такое
[Linker Error] 'C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\НОВАЯ ПАПКА\INPOUT32.LIB' contains invalid OMF record, type 0x21 (possibly COFF)

У VS и BCB разные форматы файлов библиотек. Возьми утилиту implib из BCB она сделает тебе библиотеку из .dll

PM MAIL   Вверх
new_web
Дата 4.2.2008, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



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

cardinal, а как я контроллер подключу к компу, если ХР не позволяет напрямую обратиться к портам, с контроллером идёт драйвер какой-то, или, там совсем иной принцип какой-то?

А кто-то пробовал на windows 98 такое попробовать? у меня есть старенький компик, но, вряд-ли он билдер потянет, а создать ехе не получается -  линкер еррор! smile 
Что делать? Есть же выход из ситуации?
PM MAIL   Вверх
cardinal
Дата 4.2.2008, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Цитата(new_web @  4.2.2008,  18:35 Найти цитируемый пост)
cardinal, а как я контроллер подключу к компу, если ХР не позволяет напрямую обратиться к портам, с контроллером идёт драйвер какой-то, или, там совсем иной принцип какой-то?

RS-232: сдандартное решение в VB
USB: взяв FT232RL и драйвер, который можно скачать на сайте производителя ты превратишь USB в RS-232, то есть программа на компе даже не изменится, хотя ты будешь пользоваться USB шнуром... smile 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
xvr
Дата 4.2.2008, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(new_web @ 4.2.2008,  19:35)
И что тогда делать? у меня есть VC5, но он устарел, да и ключа нет...

Я же уже писал - напустить implib из Borland'а на inpout32.dll из комплекта, она сделает INPOUT32.LIB для Bulder'а
Цитата

Но, ведь как-то же должно работать в билдере, ведь как-то приложения, созданные в билдере обращаются к портам, пусть даже через виндовс как-то...
Windows к портам не пускает - ни напрямую, ни через драйвер (свой). Поэтому все обращаются к портам через свои драйвера, и имя им легион  smile  
Цитата

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

Может, стоит написать такой компонент? Мне это не под силу. но, Вы, господа опытные програмисты. и програмисты эксперты могли бы что-то придумать, наверное, вам делов то, что два пальца...
Может и стоит, только у тех, кто это может сделать обычно свободного времени не бывает   smile 
Цитата

cardinal, а как я контроллер подключу к компу, если ХР не позволяет напрямую обратиться к портам, с контроллером идёт драйвер какой-то, или, там совсем иной принцип какой-то?
Либо драйвер, либо целый SDK
Цитата

А кто-то пробовал на windows 98 такое попробовать? у меня есть старенький компик, но, вряд-ли он билдер потянет, а создать ехе не получается -  линкер еррор! smile 
Для Win98 можно напрямую в порты писать

Цитата

Что делать? Есть же выход из ситуации?
Есть, причем их много и все разные  smile 
PM MAIL   Вверх
Den64
Дата 4.2.2008, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 6.4.2006
Где: Курск

Репутация: 1
Всего: 2



Из WinXP к LPT обращался обычно используя функции CreaceFile, WriteFile. (в билдере)

Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   char bufer = 0xFF; // значение которое будет передано
   int count;
   HANDLE h = CreateFile(Edit1->Text.c_str(),                //имя порта
                     GENERIC_READ|GENERIC_WRITE, //чтение и запись
                     0,                          //
                     NULL,                       //
                     OPEN_EXISTING,              //открыть если есть
                     FILE_ATTRIBUTE_NORMAL,      //
                     0);                         //
  Edit2->Text = (int)h;
  WriteFile(h, //
                  bufer,  //что передать
                  1,   //сколько передать
                  &count,       //сколько передано
                  NULL);   //
  CloseHandle(h);
}



Писал тут, непроверял. Это под билдер.
Должно быть 2 эдита Edit1 и Edit2.
И кнопка по событию от которой FF передать в порт.
Светодиодом проверять на втором выводе ЛПТ. (или на 3, 4, ... 9.)

В Edit1 записать имя порта LPT. Если порт найден и откроется в Edit2 будет какоето значение, если неоткроется то -1. Значит порта нет в системе (смотри диспечер устройств) или ни правильно написано имя порта.

Добавлено @ 23:16
Результат напиши. Интересно что получица.  smile 

Это сообщение отредактировал(а) Den64 - 4.2.2008, 23:18
--------------------
Инагда пишу звуками.
PM WWW ICQ   Вверх
xvr
Дата 4.2.2008, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(Den64 @ 4.2.2008,  23:10)
Из WinXP к LPT обращался обычно используя функции CreaceFile, WriteFile. (в билдере)

Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   char bufer = 0xFF; // значение которое будет передано
   int count;
   HANDLE h = CreateFile(Edit1->Text.c_str(),                //имя порта
                     GENERIC_READ|GENERIC_WRITE, //чтение и запись
                     0,                          //
                     NULL,                       //
                     OPEN_EXISTING,              //открыть если есть
                     FILE_ATTRIBUTE_NORMAL,      //
                     0);                         //
  Edit2->Text = (int)h;
  WriteFile(h, //
                  bufer,  //что передать
                  1,   //сколько передать
                  &count,       //сколько передано
                  NULL);   //
  CloseHandle(h);
}



Писал тут, непроверял. Это под билдер.
Должно быть 2 эдита Edit1 и Edit2.
И кнопка по событию от которой FF передать в порт.
Диодом проверять на втором выводе ЛПТ. (или на 3, 4, ... 9.)

Не будет работать  smile Windows расчитывает найти на LPT порту принтер, а у него обмен синхронный, т.е. запрос/ответ (ноги порта STB/ACK, насколько я помню мнемоники). Без ответа обмена не получится.

PM MAIL   Вверх
Den64
Дата 4.2.2008, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 6.4.2006
Где: Курск

Репутация: 1
Всего: 2



Цитата(xvr @  4.2.2008,  23:16 Найти цитируемый пост)
Не будет работать  

Щас проверю..
--------------------
Инагда пишу звуками.
PM WWW ICQ   Вверх
Den64
Дата 5.2.2008, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 6.4.2006
Где: Курск

Репутация: 1
Всего: 2



В 14 строчке перед буфер забыл поставить &. Без неё некомпилит.

Начал проверять, LPT1 открывает нормально. Затем на функции WriteFile виснет.

Когдато делел такую хрень в институте на научную работу smile . Работала.

Можно спросить на ветке форума системное программирование в чём проблема..
--------------------
Инагда пишу звуками.
PM WWW ICQ   Вверх
xvr
Дата 5.2.2008, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(Den64 @ 5.2.2008,  00:01)
В 14 строчке перед буфер забыл поставить &. Без неё некомпилит.

Начал проверять, LPT1 открывает нормально. Затем на функции WriteFile виснет.

Когдато делел такую хрень в институте на научную работу smile . Работала.

Можно спросить на ветке форума системное программирование в чём проблема..

Проблема именно в этом - нет ответа от принтера. Можно сэмулировать принтер - замкнуть пару выводов (каких именно и как сейчас не скажу), выводить в D0-D7 будет, вводить - нет, и дополнительные выходы тоже использовать не удастся - нет в WriteFile такой функциональности  smile 
PM MAIL   Вверх
new_web
Дата 6.2.2008, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Господа. был в офлайн. много пропустил.
Цитата(xvr @  4.2.2008,  22:35 Найти цитируемый пост)
Я же уже писал - напустить implib из Borland'а на inpout32.dll из комплекта, она сделает INPOUT32.LIB для Bulder'а

Простите. нк увидел в первый раз. Можете подсказать, как конктретно делать это? Я ведь новичёк всё-таки. Даже не думал, что мой вопрос вызовет такой интерес.

Спасибо за детальные ответы!

Но вопрос остался нерешённым, или как? получилось у кого-то?

Счас попробую сам понять. скомпилировать, дай-бог - запустить....
Не обязательно, тогда. наверное LPT мучать, может USB  будет попроще. хотя. о чём я разсуждаю, мне. по всей вероятности. надо ещё подучиться. чтобы понимать ответы на свои вопросы.
Ещё раз спасибо. что  приняли активное участие в обсуждении этого топика!

Но. вопрос. я так понял. пока не решён!

PM MAIL   Вверх
xvr
Дата 6.2.2008, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(new_web @ 6.2.2008,  07:24)
Господа. был в офлайн. много пропустил.
Цитата(xvr @  4.2.2008,  22:35 Найти цитируемый пост)
Я же уже писал - напустить implib из Borland'а на inpout32.dll из комплекта, она сделает INPOUT32.LIB для Bulder'а

Простите. нк увидел в первый раз. Можете подсказать, как конктретно делать это? Я ведь новичёк всё-таки. Даже не думал, что мой вопрос вызовет такой интерес.


1) Открываешь консоль (Пуск->Программы->Стандартные->Коммандная строка)
2) Идешь в директорию, где у тебя лежит inpout32.dll (комманда cd путь...)
3) Набираешь implib inpout32.lib inpout32.dll
Цитата

Не обязательно, тогда. наверное LPT мучать, может USB  будет попроще. хотя. о чём я разсуждаю, мне. по всей вероятности. надо ещё подучиться. чтобы понимать ответы на свои вопросы.
Зажигание лампочки на LPT потребует 1 транзистора, резистор и лампочку, зажигание того же через USB потребует как минимум все то же плюс 1 м/сх с обвязкой.
Кстати, если делать самому, то лучше брать FT245 - из нее получится LPT порт, а у него ног для зажигания лампочек больше, чем у RS232  smile 
PM MAIL   Вверх
new_web
Дата 6.2.2008, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Цитата(xvr @  6.2.2008,  09:01 Найти цитируемый пост)
1) Открываешь консоль (Пуск->Программы->Стандартные->Коммандная строка)2) Идешь в директорию, где у тебя лежит inpout32.dll (комманда cd путь...)3) Набираешь implib inpout32.lib inpout32.dll


Сделал. Изменил. Скомпилировал. В предвкушении праздника запускаю и

[Linker Error] Unresolved external '__stdcall Out32(short, short)' referenced from E:\CPLUSPLUS\CONTROLS\UNIT1.OBJ

что тут не так?
Код

//---------------------------------------------------------------------------
#include "iostream.h"
#include "conio.h"
#include "stdlib.h"
#include "h.h"
#include <vcl.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
 int Address=888;
 cout<<"Test LPT port in Windows NT."<<endl;
 cout<<"Press '1' to activate and '0' to disactivate lightdiod."<<endl;
 cout<<"To exit press 'e'."<<endl;
 cout<<" "<<endl;

        switch(getch())
        {
            case '0':    cout<<"Disactivate...."<<endl;
                        Out32(Address, 0);
                        break;                      
                
            case '1':    cout<<"Activate...."<<endl;
                        Out32(Address, 1);
                        break;
            case 'e': exit(1);
        }


   getch();


        return 0;
}
//---------------------------------------------------------------------------



В этом коде я убрал while(1)// компилятор предупреждал о недостижимом коде. а пример брал с http://www.pcports.ru/articles/2.php
он. для VC++ 6

Подкиньте работающий код на билдере плиз. 
Ведь так мало до мечты осталось!
 smile 


Цитата(xvr @  6.2.2008,  09:01 Найти цитируемый пост)
Зажигание лампочки на LPT потребует 1 транзистора, резистор и лампочку......,

Наверное. я где-то в самом начале слишком много внимания акцентировал на лампочке, имея ввиду лишь получить выход на порте. увидеть это с помощью светодиода. я знаю, как потом с помощью оптопары подключить лампочку, 10 лампочек, 100 лампочек.
Паяльник работает, у меня программа не работает. Компилируется, но не запускается, чувствую, что тут разницав диалектах билдера и VC++ 6 или...?

PM MAIL   Вверх
Den64
Дата 6.2.2008, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 6.4.2006
Где: Курск

Репутация: 1
Всего: 2



Поищи на ветке системное программирование, наверняка подобная задача решена.. 
--------------------
Инагда пишу звуками.
PM WWW ICQ   Вверх
xvr
Дата 6.2.2008, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(new_web @ 6.2.2008,  10:22)
Цитата(xvr @  6.2.2008,  09:01 Найти цитируемый пост)
1) Открываешь консоль (Пуск->Программы->Стандартные->Коммандная строка)2) Идешь в директорию, где у тебя лежит inpout32.dll (комманда cd путь...)3) Набираешь implib inpout32.lib inpout32.dll


Сделал. Изменил. Скомпилировал. В предвкушении праздника запускаю и

[Linker Error] Unresolved external '__stdcall Out32(short, short)' referenced from E:\CPLUSPLUS\CONTROLS\UNIT1.OBJ

что тут не так?

Замени в программе #include "h.h" на
Код

extern "C" {
#include "h.h"
}

PM MAIL   Вверх
new_web
Дата 6.2.2008, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Цитата(xvr @  6.2.2008,  18:34 Найти цитируемый пост)
Замени в программе #include "h.h" накод C++
Код

extern "C" {#include "h.h"}



Не работает, к сожалению - компилируется но, всё таже ошибка!
[Linker Error] Unresolved external 'Out32' referenced from E:\CPLUSPLUS\CONTROLS\UNIT1.OBJ

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

Это сообщение отредактировал(а) new_web - 6.2.2008, 23:08
PM MAIL   Вверх
xvr
Дата 6.2.2008, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(new_web @ 6.2.2008,  21:52)
Цитата(xvr @  6.2.2008,  18:34 Найти цитируемый пост)
Замени в программе #include "h.h" накод C++1:2:3:extern "C" {#include "h.h"}


Не работает, к сожалению - компилируется но, всё таже ошибка!
[Linker Error] Unresolved external 'Out32' referenced from E:\CPLUSPLUS\CONTROLS\UNIT1.OBJ

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

Это уже другая ошибка. Позови implib с ключем -a: implib -a inpout32.lib inpout32.dll
PM MAIL   Вверх
new_web
Дата 6.2.2008, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Цитата(xvr @  6.2.2008,  23:04 Найти цитируемый пост)
Это уже другая ошибка. Позови implib с ключем -a: implib -a inpout32.lib inpout32.dll

Спасибо. пробую...
Попробовал всё тоже
[Linker Error] Unresolved external 'Out32' referenced from E:\CPLUSPLUS\CONTROLS\UNIT1.OBJ



Это сообщение отредактировал(а) new_web - 6.2.2008, 23:25
PM MAIL   Вверх
new_web
Дата 7.2.2008, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Помню, когда-то, я с помощью нескольких транзисторов, резонатора мог получить  любой сигнал, а цифровой - так и подавно! 
Я не понимал тогда, почему так трудно из компьютера, в котором миллиарды транзисторов, извлечь один простой сигнал, чтобы светодиод 
засветился! smile  - Потух smile  - Засветился smile  - Потух smile 
не понимаю и сейчас...
Есть простое решение - удалить старые фильмы - скопировать диск С на D by Acronis,  format C fat32...
windows 98 install
Builder6 install
Осуществить мечту, а если нет, то значит. проблема в железе!

Но! это проще на другом компике попробовать, могу на трёх, где билдер стоит! Но не сейчас, ибо 
застрял далеко дома - насморк и работа несовместимы!
Но, может, проблема в железе? В настройках BIOS?

Кому-то удалось засветить светодиод на LTP с помощью Builder6 в ХР?

 smile  smile  smile 

PM MAIL   Вверх
xvr
Дата 8.2.2008, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(new_web @ 7.2.2008,  23:34)
Но! это проще на другом компике попробовать, могу на трёх, где билдер стоит! Но не сейчас, ибо 
застрял далеко дома - насморк и работа несовместимы!
Но, может, проблема в железе? В настройках BIOS?

Кому-то удалось засветить светодиод на LTP с помощью Builder6 в ХР?

 smile  smile  smile 

Кому то удалось  smile Авторам inpout32 В архиве пример (в том числе и для Bulder'а)


Присоединённый файл ( Кол-во скачиваний: 40 )
Присоединённый файл  inpout32_source_and_bins.zip 65,38 Kb
PM MAIL   Вверх
Gordon
Дата 8.2.2008, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 9.7.2006

Репутация: 1
Всего: 6



new_web, посмотри тут, правда не inpout32, но светодиод зажигает... smile



Присоединённый файл ( Кол-во скачиваний: 64 )
Присоединённый файл  _____.rar 19,82 Kb


--------------------

  
     
PM MAIL WWW   Вверх
new_web
Дата 9.2.2008, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



 smile  smile  smile 

Цитата(Gordon @  8.2.2008,  18:58 Найти цитируемый пост)
new_web, посмотри тут, правда не inpout32, но светодиод зажигает...  

Присоединённый файл ( Кол-во скачиваний: 2 )


 _____.rar 19,82 Kb



Работает! Огромное спасибо!


Для тех. кому интересно выложу код,(и он работает) участника 
Gordon,  - который мне помог!
Код

//---------------------------------------------------------------------------
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include "winio.h"
#include <vcl.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
system("PAUSE");
        int key = 1;
        bool bResult;
    
    bResult = InitializeWinIo(); cout << bResult << endl;
    if(bResult)
    {
          while(key != -1)
              {
                cin >> key;
                switch(key)
                {
                case 0:
                 SetPortVal(0x378, 0, 4);//потух
                        break;
                case 1:
                        SetPortVal(0x378, 1, 4);//включился
                        break;
                }
              }
    }
         else cout<< "false" << endl;

         ShutdownWinIo();
         system("PAUSE");
       return 0;
}



Теперь, только фантазия может ограничить меня, как я могу это использовать! Если кому интересно. для чего мне это - пишите в личку!
Спасибо всем, я многое узнал, многому научился, также узнал. что мне ещё учиться и  учиться!
Очень интересный и нужный форум, и его подраздел Программирование контроллеров.
Так-или иначе у меня будет много вопросов на эту тему, а пока - пока - ибо
ВОПРОС РЕШЁН

PM MAIL   Вверх
new_web
Дата 19.2.2008, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Сделал ДЕМО програмку. которая устанавливает по-клику напряжение на любом выводе порта Data, Control, а также читает состояние всех портов. ведёт лог изменений состояний портов, с возможностью сохранения и печати.
Вот скрин:
user posted image
а вот и сама ссылка на программу, вместе с исходниками
http://new-web.ucoz.ua/ltp_demo.rar
Обновлён 20.02.08

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

Вопрос! А как записать значение в порт Data извне?
Пробовал подавать "+" на выводы, пробовал "землю" ничего не меняется! Даже, если Control замкнуть на "землю ", то значение на нём поменяется.

А ещё странный "каприз" - если переключать старший регистр Data, то на выводах Control напряжение инвертируется.
На самом деле, состояние Control при изменении любого регистра  Data обнуляется(отредактировано мной позже)

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

Буду рад видеть ваши отклики!

Теперь осталось только железо подсоеденить, да и програмно описать мудрую мысль... smile 

Склонен считать своё первоё знакомство с контроллерами удачным! smile 

Это сообщение отредактировал(а) new_web - 20.2.2008, 06:39
PM MAIL   Вверх
xvr
Дата 19.2.2008, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(new_web @ 19.2.2008,  10:41)
Вопрос! А как записать значение в порт Data извне?
Пробовал подавать "+" на выводы, пробовал "землю" ничего не меняется! Даже, если Control замкнуть на "землю ", то значение на нём поменяется.

Стандартный LPT не поддерживает ввод данных через Data  smile Не совсем стандартный (а сейчас все такие) позволяет переключить шину Data на ввод, записав 1 в бит 5 Control регистра (номер бита точно не помню, надо смотреть доку). Что касается замыкания Control'ов на землю, то они на это совершенно точно не расчитанны  smile Кстати, почти все порты допускают работу в EPP и ECP режимах, EPP выглядит очень привлекательно  smile 

Цитата

А ещё странный "каприз" - если переключать старший регистр Data, то на выводах Control напряжение инвертируется.

Действительно странный - такого быть не должно

Цитата

 А если замкнуть Status на землю (там всегда 1 на выводах) то вообще все порты бесятся, мигают. - это драйвер виндовс думает, что ему всунули что-то, потом успокаивается. 
Но,  надо спросить. а где действие этого  драйвера заканчивается, на что он влияет.,и как его можно деактивировать?
Деинсталировать принтер и драйвер LPT порта, но это черевато  smile В принципе в Windows драйвер LPT позволяет захватить притерный порт в монопольное использование, увы позволяет он это только другому драйверу, можно ли это сделать из пользовательской программы не знаю (наверное можно)


PM MAIL   Вверх
new_web
Дата 19.2.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Цитата(xvr @  19.2.2008,  11:41 Найти цитируемый пост)
позволяет переключить шину Data на ввод, записав 1 в бит 5 Control регистра

в 5 бит? тоесть надо писать значение в тот бит, который недоступен на выводе? их там 4 всего, но ещё 4 без выводов, старшие...

И как оно тогда должно записаться в Data? если на выводах ноль, и подам плюс, то на том выводе будет один, по-идее. а если там 1, то надо ноль подать, чтобы изменить?

Где можно почитать  доку, разный хелп по этой теме?


Цитата(xvr @  19.2.2008,  11:41 Найти цитируемый пост)
Кстати, почти все порты допускают работу в EPP и ECP режимах, EPP выглядит очень привлекательно   

Помедленней. пожалуйста. я записываю  smile 

Если серьёзно. то как это понимать? Что это значит?






Это сообщение отредактировал(а) new_web - 19.2.2008, 12:53
PM MAIL   Вверх
xvr
Дата 19.2.2008, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(new_web @ 19.2.2008,  12:51)
Цитата(xvr @  19.2.2008,  11:41 Найти цитируемый пост)
позволяет переключить шину Data на ввод, записав 1 в бит 5 Control регистра

в 5 бит? тоесть надо писать значение в тот бит, который недоступен на выводе? их там 4 всего, но ещё 4 без выводов, старшие...

Да, именно так

Цитата

И как оно тогда должно записаться в Data? если на выводах ноль, и подам плюс, то на том выводе будет один, по-идее. а если там 1, то надо ноль подать, чтобы изменить?
Оно никак, но сам порт Data переключится на ввод - т.е. в него можно будет подавать сигнал извне и читать из порта.

Цитата

Где можно почитать  доку, разный хелп по этой теме?
 В google вестимо  smile Вот первая попавшаяся ссылка
http://www.thaiio.com/parallelportinfo.html

Цитата

Цитата(xvr @  19.2.2008,  11:41 Найти цитируемый пост)
Кстати, почти все порты допускают работу в EPP и ECP режимах, EPP выглядит очень привлекательно   

Помедленней. пожалуйста. я записываю  smile 

Если серьёзно. то как это понимать? Что это значит?
Это режимы работы LPT порта. Описанны в стадарте IEEE 1284
Ищи в google IEEE 1284 - получишь МОРЕ ссылок

PM MAIL   Вверх
new_web
Дата 20.2.2008, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



ДА, действительно, ссылок море, правда, подавляющее большинство всё на английском, его я читаю куда медленней...

Есть где-нибуть толковая спецификация на русском?

И пока я не нашёл примера, как оно будет записываться в Data порт, нужно мне ещё много прочитать ,чтобы понять, разобраться...


Я пробовал Control 5 бит. и 4 бит, перепробовал вс комбинацию... ни разу подача напряжения на Data не срабатывала, чтобы там сигнал изменился... а ещё получается. что в Control  можно записать не больше 63, тоесть 2 старших бита недоступны


А ещё я ошибся выше 
Цитата

А ещё странный "каприз" - если переключать старший регистр Data, то на выводах Control напряжение инвертируется.

 состояние Control при изменении любого регистра  Data обнуляется - я немного обновил програмку. теперь она корректней работает, но я чувствую. что там ещё есть баги. посмотрел бы кто???)))




Было бы проще на каком нибуть конкретном примере увидеть работу, пощупать светодиодом...
 smile 


Это сообщение отредактировал(а) new_web - 20.2.2008, 05:04
PM MAIL   Вверх
xvr
Дата 20.2.2008, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(new_web @ 20.2.2008,  00:15)
Я пробовал Control 5 бит. и 4 бит, перепробовал вс комбинацию... ни разу подача напряжения на Data не срабатывала, чтобы там сигнал изменился... а ещё получается. что в Control  можно записать не больше 63, тоесть 2 старших бита недоступны



У тебя в программе запись в control ограничена 5ю битами 

Цитата

А ещё я ошибся выше 
Цитата

А ещё странный "каприз" - если переключать старший регистр Data, то на выводах Control напряжение инвертируется.

 состояние Control при изменении любого регистра  Data обнуляется - я немного обновил програмку. теперь она корректней работает, но я чувствую. что там ещё есть баги. посмотрел бы кто???)))


Посмотрел, в методах ResetDataValueLtp и ResetControlValueLtp написан полный бред  smile Что они должны были делать?

PM MAIL   Вверх
new_web
Дата 20.2.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Цитата(xvr @  20.2.2008,  08:42 Найти цитируемый пост)
Посмотрел, в методах ResetDataValueLtp и ResetControlValueLtp написан полный бред   Что они должны были делать?


Ну, я согласен, что идею, реализованную в вышеприведённых методах можно было оформить лучшим образом.

Теперь. собственно, что он делает:
Он, метод, принимает клик от соответствующего Shape, изменяет состояние соответствующего вывода порта. Если  Shape светит, и на нём кликнуть, то он потухнет, и наоборот, в зависимости. от значения порта 
Код


int __fastcall TImageLtpControll::ResetDataValueLtp(
int nData,//принимаем текущее состояние порта Data
int Tag//это есть номер регистра. номер бита
)
{
  int nGetData=nData;
 int i,b;
 if(Tag>=0&&Tag<=7)//на всякий случай проверяем диапазон - всего регистров 8
 {
  for(i=0,b=1;i!=Tag;i++,b*=2);//призвание этого пустотелого цикла в поиске соответствующего          регистра, тоесть, если, к примеру, кликнуть на D2, то слагаемое "b" будет 8 - третий бит.

  if((nGetData&b)==0)//используем побитовое умножение - сравниваем текущее состояние  бита (D2)Data с ноль
nGetData=nGetData+b;//если в регистре ноль изменяем регистр, добавляя к значению порта значение b - этот бит становится  -  true
  else nGetData=nGetData-b; //изменяем регистр, отнимая от значения порта значение b этот бит становится  - false
 }
 return  nGetData;
}
}



Смею уверить. это не бред ,пусть вся прога бредовая, но, именно эта часть кода
Код

  for(i=0,b=1;i!=Tag;i++,b*=2);
  if((nGetData&b)==0)nGetData=nGetData+b;
  else nGetData=nGetData-b;


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

Вы можете покликать на кружочках Shape, чтобы всё понять...

Весьма поверхостные знания битовых операторов я подчерпнул из книги Р.Дэвиса "С++ для чайников", ст 52  Глава 4 "Зачем придуманы эти глупые операторы".

Поскольку программа притерпела изменения, благодаря знаниям из 
http://forum.vingrad.ru/forum/topic-196064...y1417670/0.html

то методы ResetDataValueLtp и ResetControlValueLtp стало возможным объеденить в один, но это уже из серии "Для НУБОВ - Теория постороения классов" - поскольку у меня своих классов, созданных, за душой несколько голодных сирот, то я имею радость от надежды, что мои классы, со временем, станут похожи на классы. smile 


Цитата(xvr @  20.2.2008,  08:42 Найти цитируемый пост)

У тебя в программе запись в control ограничена 5ю битами 

Верю, но никак не могу найти где... smile 
Не подскажете? smile 


Это сообщение отредактировал(а) new_web - 20.2.2008, 13:21
PM MAIL   Вверх
xvr
Дата 20.2.2008, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(new_web @ 20.2.2008,  13:05)
Цитата(xvr @  20.2.2008,  08:42 Найти цитируемый пост)
Посмотрел, в методах ResetDataValueLtp и ResetControlValueLtp написан полный бред   Что они должны были делать?


Ну, я согласен, что идею, реализованную в вышеприведённых методах можно было оформить лучшим образом.

Теперь. собственно, что он делает:
Он, метод, принимает клик от соответствующего Shape, изменяет состояние соответствующего вывода порта. Если  Shape светит, и на нём кликнуть, то он потухнет, и наоборот, в зависимости. от значения порта 
Код


int __fastcall TImageLtpControll::ResetDataValueLtp(
int nData,//принимаем текущее состояние порта Data
int Tag//это есть номер регистра. номер бита
)
{
  int nGetData=nData;
 int i,b;
 if(Tag>=0&&Tag<=7)//на всякий случай проверяем диапазон - всего регистров 8
 {
  for(i=0,b=1;i!=Tag;i++,b*=2);//призвание этого пустотелого цикла в поиске соответствующего          регистра, тоесть, если, к примеру, кликнуть на D2, то слагаемое "b" будет 8 - третий бит.

  if((nGetData&b)==0)//используем побитовое умножение - сравниваем текущее состояние  бита (D2)Data с ноль
nGetData=nGetData+b;//если в регистре ноль изменяем регистр, добавляя к значению порта значение b - этот бит становится  -  true
  else nGetData=nGetData-b; //изменяем регистр, отнимая от значения порта значение b этот бит становится  - false
 }
 return  nGetData;
}
}



Смею уверить. это не бред ,пусть вся прога бредовая, но, именно эта часть кода
Код

  for(i=0,b=1;i!=Tag;i++,b*=2);
  if((nGetData&b)==0)nGetData=nGetData+b;
  else nGetData=nGetData-b;


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


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

int __fastcall TImageLtpControll::ResetDataValueLtp(
int nData,//принимаем текущее состояние порта Data
int Tag//это есть номер регистра. номер бита
)
{
 return  nData ^ (1<<Tag);
}

И вообще рекомендую ГЛУБОКО ознакомится с битовыми операциями, мир стане проще  smile 

Цитата

Цитата(xvr @  20.2.2008,  08:42 Найти цитируемый пост)

У тебя в программе запись в control ограничена 5ю битами 

Верю, но никак не могу найти где... smile 
Не подскажете? smile

Я немного не прав - не запись, а инициализация массива (это ошибка, но на работу с control регистром влиять не должна)

UnitImageLPT.cpp
55: for(int i=0;i<[B]4
;i++)bControlIndicator[i]=false;[/B]

Кстати, ЧИТАТЬ control регистр дело совершенно бесполезное - он не обязан возвращать то, что в него было записано  smile Может по этому установить 5й бит и не получается.
PM MAIL   Вверх
new_web
Дата 21.2.2008, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Цитата(xvr @  20.2.2008,  20:37 Найти цитируемый пост)
Код

return  nData ^ (1<<Tag);


 smile  smile 
Действительно, очень красиво! Очевидно, мне стоило быть более сдержанным в оценке своих достижений, но как говорится,- "что написано топором..."

Цитата(xvr @  20.2.2008,  20:37 Найти цитируемый пост)
55: for(int i=0;i<4;i++)bControlIndicator[i]=false;

да, но это всего лишь конструктор, в котором они обнуляются при загрузке програмы.
 А дальше они(индикаторы) должны реагировать, по логике работы програмы, если значение Control будет > 63?

Цитата(xvr @  20.2.2008,  20:37 Найти цитируемый пост)
Кстати, ЧИТАТЬ control регистр дело совершенно бесполезное - он не обязан возвращать то, что в него было записано   Может по этому установить 5й бит и не получается.
...

Тоесть, надо самому помнить значение? Но, ведь до 63 читает исправно!

И самая главная проблема, как записать в Data извне?

Результат - надо читать инфу


PM MAIL   Вверх
xvr
Дата 21.2.2008, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(new_web @ 21.2.2008,  01:06)
Цитата(xvr @  20.2.2008,  20:37 Найти цитируемый пост)
Код

return  nData ^ (1<<Tag);


 smile  smile 
Действительно, очень красиво! Очевидно, мне стоило быть более сдержанным в оценке своих достижений, но как говорится,- "что написано топором..."

Цитата(xvr @  20.2.2008,  20:37 Найти цитируемый пост)
55: for(int i=0;i<4;i++)bControlIndicator[i]=false;

да, но это всего лишь конструктор, в котором они обнуляются при загрузке програмы.
 А дальше они(индикаторы) должны реагировать, по логике работы програмы, если значение Control будет > 63?


Должны, но лучше инициализировать  smile 

Цитата

Цитата(xvr @  20.2.2008,  20:37 Найти цитируемый пост)
Кстати, ЧИТАТЬ control регистр дело совершенно бесполезное - он не обязан возвращать то, что в него было записано   Может по этому установить 5й бит и не получается.
...

Тоесть, надо самому помнить значение? Но, ведь до 63 читает исправно!
Да, надо помнить самому. И то, что до 63 он читает - чистая случайность - не обязан

Цитата

И самая главная проблема, как записать в Data извне?
Поставить 5 бит control в 1. После этого запись в Data будет игнорироваться, а читаться будет то, что приходит в LPT порт снаружи (порт будет переведен на ввод)

PM MAIL   Вверх
new_web
Дата 21.2.2008, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Цитата(xvr @  21.2.2008,  09:03 Найти цитируемый пост)
Поставить 5 бит control в 1. После этого запись в Data будет игнорироваться, а читаться будет то, что приходит в LPT порт снаружи (порт будет переведен на ввод)


Как оно должно придти снаружи?

По идее, если я подам 5 Вольт на любой регистр Data, при включённым режиме ввода, если там 0, то там должна случиться еденица, и читаться еденица в этом регистре? Если там 1, то надо подать ноль? Так? Я правильно считаю?

Пробовал, ставил, и не раз! Что надо подать в Data?
Я пробовал "+" от Status, пробовал "+" от Control,   пробовал "+" от другого регистра Data даже!
Ничего в Data не меняется. 
Пробовал на заведомо  trueрегисты Data подавать ноль - соединял с землёй - тоже никакого эффекта.

Может. просто надо взять отдельные 5 вольт - логическая 1 - с отдельного источника, с батарейки?
Хотя. какая тут разница, ведь, если 1 пришёл, то неважно, откуда он пришёл...или порт так устроен, что нельзя с одного вывода одного порта подавать напряжение на другие?

Думая. что в программе остались баги, пробовал в консоли smile 
безрезультатно!

Может, в самих биллиотеках winio  замут?

PM MAIL   Вверх
xvr
Дата 21.2.2008, 11:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(new_web @ 21.2.2008,  10:29)
Цитата(xvr @  21.2.2008,  09:03 Найти цитируемый пост)
Поставить 5 бит control в 1. После этого запись в Data будет игнорироваться, а читаться будет то, что приходит в LPT порт снаружи (порт будет переведен на ввод)


Как оно должно придти снаружи?

По идее, если я подам 5 Вольт на любой регистр Data, при включённым режиме ввода, если там 0, то там должна случиться еденица, и читаться еденица в этом регистре? Если там 1, то надо подать ноль? Так? Я правильно считаю?


Если перевести Data в режим чтения, то на них не будет ни 0 ни 1 - они станут ВХОДАМИ. Какое напряжение на них подашь (от чего угодно, хоть от батарейки) - такой сигнал и прочтется.

Цитата

Пробовал, ставил, и не раз! Что надо подать в Data?
Я пробовал "+" от Status, пробовал "+" от Control,   
И что читалось? Не забудь на остальные входы Data подать 0 (соединить их с землей)

Цитата

пробовал "+" от другого регистра Data даже!
Это не пройдет - другие входы Data так же переключатся на ввод и на них не будет никакого напряжения, ни + ни -

Цитата

Может. просто надо взять отдельные 5 вольт - логическая 1 - с отдельного источника, с батарейки?
Можно

Цитата

Хотя. какая тут разница, ведь, если 1 пришёл, то неважно, откуда он пришёл...или порт так устроен, что нельзя с одного вывода одного порта подавать напряжение на другие?
Можно.

Есть вариант, что LPT не поддерживает чтение (посмотри, какой режим LPT стоит в BIOS'е - должен быть EPP или ECP)

Цитата

Может, в самих биллиотеках winio  замут?
Врядли  smile 

Выложи код, как пробовал в консоли, посмотрю.


PM MAIL   Вверх
new_web
Дата 22.2.2008, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Да! Попробовал на другом компе, на работе  - при установке 5-го бита Control в 1 все биты
Data становятся 1 и записать в них можно извне smile  smile ! - 
Они начинают работать подобно порту Status!

 Значит причина была в BIOS
или в старом железе, у меня дома старенький компик, в BIOS не смотрел. так как прочёл сообщение 
Цитата(xvr @  21.2.2008,  11:41 Найти цитируемый пост)
Есть вариант, что LPT не поддерживает чтение (посмотри, какой режим LPT стоит в BIOS'е - должен быть EPP или ECP)

уже здесь!


И, если бы не один ньюанс, то вопрос можно было бы считать окончательно закрытым! - 

Переключаем регистр Data на приём.
Все они(регистры, биты) устанавливаются в один.
Работает Data, в режиме приёма,  подобно порту Status - если подать землю -будет ноль - убрать землю - становится еденица! 

так ведь должно быть?

А вот, собственно, и ньюанс -  в своей программе, посредством ввода кликом по UpDown мне не получается записать в Data ничего, если флаг  С4 Control включён - так оно и должно быть. по-идее.
Но, когда я кликаю по Shape я меняю значение Data, а флаг C4 в Control обнуляется.
Как это понимать? Это опять баг программы? - Но, ведь для доступа я использую одну и туже функцию.  
И ещё один - теперь в Control минимальное значение 192
а максимальное 255  -просто два крайних регистра засветились - но доступу к ним, похоже, что нет.
Кажется, именно от спецификации здесь всё зависело.

Но, в любом случае,  я могу писать в Data! smile !

Огромное спасибо всем!
 
Вопрос решён, но тема, думаю не закрыта, так как многое пока не ясно!
Какая максимальная частота Data, Status,Control? С какой скоростью можно писать/читать?


PM MAIL   Вверх
xvr
Дата 22.2.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(new_web @ 22.2.2008,  10:41)
Переключаем регистр Data на приём.
Все они(регистры, биты) устанавливаются в один.
Работает Data, в режиме приёма,  подобно порту Status - если подать землю -будет ноль - убрать землю - становится еденица! 

так ведь должно быть?

Так может быть (но не гарантируется). Что бы было так гарантированно - в порт Data надо подавать напряжения 0 или +5В (а не оставлять их болтаться в воздухе)

Цитата

А вот, собственно, и ньюанс -  в своей программе, посредством ввода кликом по UpDown мне не получается записать в Data ничего, если флаг  С4 Control включён - так оно и должно быть. по-идее.
Но, когда я кликаю по Shape я меняю значение Data, а флаг C4 в Control обнуляется.
Как это понимать? Это опять баг программы?
 Похоже

Цитата

Какая максимальная частота Data, Status,Control? С какой скоростью можно писать/читать?
При прямом доступе к портам (не из под Windows) можно получить килобайт 200-300 в секунду. При доступе через WinIO - в несколько раз меньше. (Померяй экспериментально)
В режиме EPP обещают до 2MB/s (реально получается меньше)

PM MAIL   Вверх
new_web
Дата 26.2.2008, 06:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



  
Цитата(xvr @  22.2.2008,  11:38 Найти цитируемый пост)
При прямом доступе к портам (не из под Windows) можно получить килобайт 200-300 в секунду. При доступе через WinIO - в несколько раз меньше. (Померяй экспериментально)В режиме EPP обещают до 2MB/s (реально получается меньше)


Вообще-то, только на WinIO у меня заработало, на других не шло..смотри выше...

А как получить прямой доступ, не из под виндовс?


PM MAIL   Вверх
xvr
Дата 26.2.2008, 11:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(new_web @ 26.2.2008,  06:10)
Цитата(xvr @  22.2.2008,  11:38 Найти цитируемый пост)
При прямом доступе к портам (не из под Windows) можно получить килобайт 200-300 в секунду. При доступе через WinIO - в несколько раз меньше. (Померяй экспериментально)В режиме EPP обещают до 2MB/s (реально получается меньше)


Вообще-то, только на WinIO у меня заработало, на других не шло..смотри выше...

"Вы не любите кошек?! Да полно, вы просто не умеете их готовить!"  smile 
Через любой драйвер из вышеперечисленных можно получить доступ к портам, и то, что 'не получилось' говорит о 'коэффициенте кривизны рук', а не о рабостоспособности драйверов  smile 
Впрочем, любой другой драйвер не будет быстрее, чем WinIO, так что разници тут никакой нет.

Впрочем, я не прав - есть 2 драйвера, которые могут дать более быстрый доступ:
  • GiveIO - Дает прямой доступ к портам (не через драйвер)
  • Драйвер из Uniprog'а - Дает возможность поместить последовательности обращения к порту на уровень драйвера

Цитата

А как получить прямой доступ, не из под виндовс?
Снести Windows и поставить DOS  smile Или см. выше. Или написать свой драйвер и ВСЮ работу с портом поместить в него.

PM MAIL   Вверх
new_web
Дата 29.2.2008, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



  
Цитата(xvr @  26.2.2008,  11:28 Найти цитируемый пост)
"Вы не любите кошек?! Да полно, вы просто не умеете их готовить!"   Через любой драйвер из вышеперечисленных можно получить доступ к портам, и то, что 'не получилось' говорит о 'коэффициенте кривизны рук', а не о рабостоспособности драйверов   

true
Ибо это так((... Кто ж знал, что я не знаком с азбучными истинами, а подключил WinIO потому, что читал инструкцию:
Gordon
Цитата

Файлы кинь в папку с твоим проектом. WinIo.h  и WinIo.lib файлы 
добавь к проекту...

Вот я и додумался добавить inpout32...
 smile 
 
inpout32-Решён smile 



xvr, Спасибо!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.2010 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.