LINUX.ORG.RU

Тебе какая-то конкретная нога нужна или любая? Если любая, то тычь вольтметром в порт, но напрямую, а не через шнурок: шнурки, как правило, имеют 4 провода: GND, передача, приём и запрос на передачу. Поэтому для наблюдения через шнурок можно написать, кажется, так:

int fd, status;

fd = open("//dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);

ioctl(fd, TIOCMGET, &(status));

status |= TIOCM_RTS;

ioctl(des->fd, TIOCMSET, &(status));

anonymous
()

И вот это ещё :-)

#include <stdio.h>

#include <unistd.h>

#include <fcntl.h>

#include <termios.h>

#include <sys/ioctl.h>

anonymous
()

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

bloody
() автор топика

если ты мне приведешь пример написания такой программы для LPT то я буду тебе очень благодарен

bloody
() автор топика
Ответ на: комментарий от I3rain

void readlpt()
{
   int i,sock;
   unsigned int tempbt=0, bt;
.
.
.
   ioperm(0x378,10,1);
   outb(32,0x37a);

   while(1){
     sleep(1);
     bt =~((inb(0x379)<<5)&0xF00)+inb(0x378);
      if(tempbt!=bt ) printtable(tempbt=bt);
   }
  sqlite3_close(log_db);
  exit(0);
}


Эта функция читает из LPT порта сототояние 12 ножек. Но если заменить inb на outb то мы сможем писать в порт. Только  в BOIS параметер LPT должен быть что то топа SPP/EPP (тут точно не помню). Если не найдешь инфу то я подниму старые доки.

I3rain
()
Ответ на: комментарий от I3rain

ioperm(0x378,10,1); Это ты получаешь право на запись в порт.

outb(32,0x37a); Кажется установка режима LPT (точно уже не помню). Хотя нет вру. Этим кажется ты переводишь порты которые для вывода в режим в вода. Значит тебе это пропустить.

outb(ЧИСЛО,0x378) за место числа в водишь что тебе нужно. У lpt восемь "стандартный" вывода. Просто содовая нужную маску ты включаешь нужный контакт.

I3rain
()
Ответ на: комментарий от I3rain

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

bloody
() автор топика
Ответ на: комментарий от bloody

Сейчас нет возможности проверить, но на Линуксе должно работать:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
#include <sys/ioctl.h>

void com_rts_set(int *stop)
{
int fd, status_rts, init_status;
fd = open("//dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);// открыть порт
ioctl(fd, TIOCMGET, &(init_status));  // запросить состояние порта
status_rts = init_status | TIOCM_RTS; // состояние с установленным RTS

ioctl(fd, TIOCMSET, &(status_rts));   // установить это состояние

while(!(*stop)){sleep(1);}            // твоё условие работы

ioctl(fd, TIOCMSET, &(init_status));  // вернуть изначальное состояние
close(fd);                            // закрыть порт
}

philip
()

пасиба попробуем все варианты, о результатах напишу

bloody
() автор топика

я как-то баловался подобным - писал мордочку для тестирования самосборного устройства (в будущем програматора ПЗУ) - в итоге появилась глупенькая программка на сях которая читает и пишет в LPT - причем довольно удобная, если многого от неё не хотеть...

могу поделится :)

anonymous
()
Ответ на: комментарий от smartly

А если еще точнее, то по стандарту от 3 до 12. А конкретное значение зависит от мамки/карточки на которой реализован порт.

kpanic ★★
()

Просто открываешь на чтение файл /dev/ttyS0, и поднимается DTR (положительное напряжение), закрываешь файл, DTR падает (отрицательное напряжение).

DTR на 9-контактном порту - 4-й контакт, мерить напряжение относительно 5-го контакта (земля). Если нужно одно из напряжений нулевое, воткни диод.

И программировать ничего не надо, сработает даже так: "cat /dev/ttyS0 >/dev/null"

ansky ★★★★★
()

получилось! если копировать на /dev/ttyS0 какой-нить текстовый файл, то на 4(DTR) и 7 контактах появляется напряжение 12 вольт. Круто, всем спасибо за помощь.

bloody
() автор топика
Ответ на: комментарий от kpanic

>А если еще точнее, то по стандарту от 3 до 12. А конкретное значение зависит от мамки/карточки на которой реализован порт.

Ну и? я указал с вероятное значение на большинстве материнок с точностью пол вольта, а ты с точностью 9 вольт? Кто точнее указал?

smartly ★★★
()
Ответ на: комментарий от bloody

> поделись, буду благодарен

http://slil.ru/23566618

там есть README, но если вкратце то:

- распаковываешь, переходишь в директорию
- меняешь в файле pioui.c в строке "#define PORT    0x378" адрес порта
0x378 на тот что используется у тебя (чаще всего это как раз 0x378)
- меняешь в файле pioui.c строки "inport_empty.c" и "outport_empty.c"
на соответственно "linux/inport.c" и "linux/outport.c" (нужно для
реальной работы, иначе это просто эмуляция)
- компилируешь (команда make)
- запускаешь ./pioui
- на экране видишь три региста представленные побитно с обозначением
выводов на разъеме
- управление такое: D+Enter,S+Enter,C+Enter - соответственно для ввода
байта в регистр данных, состояния или управления (байт вводить следует
побитно, например "00001111"). R+Enter - для чтения из всех регистров. Q+Enter - выход.

для работы понадобится текстовая консоль размером 80х25 (именно так)

з.ы.: это чудо я написал после прочтения половины первой главы K&R - поэтому просьба смеяться не громко :)))

Удачи!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.