Страница 1 из 1

LPT не по назначению

СообщениеДобавлено: 27.07.2011 19:31:05
ostrog17
Пытаюсь через порт ЛПТ поморгать светодиодом. Не получается поряду причин
1. Не работает метод открытия файла принтера f:=TFileStream.Create('/dev/parport0',fmOpenReadWrite)
Уже и права выставлял все что можно. Я так понимаю чтот при пересылке данных в файл принтера, размер файла должен изменится, а у меня ноль.
Помогите плиз

Re: LPT не по назначению

СообщениеДобавлено: 27.07.2011 19:41:08
Brainenjii
Тоже когда-то моргал светодиодом ^_^
Код: Выделить всё
program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, ports, x86, sysutils, Crt
  { you can add units after this };

{$R *.res}

Var
  i, j: Integer;
  aTime: TDateTime;

begin
  fpIOperm($9c00, 8, 1);
  For i := 0 To 10 Do
    Begin
      aTime := Now;
      For j := 1 To 50 + (10 - i) * 10 Do
        Begin
          port[$9c00] := 255;
          Sleep(i);
          port[$9c00] := 0;
          Sleep(5);
          If KeyPressed Then
            Begin
              Port[$9c00] := 0;
              Break;
            End;
        End;
      WriteLn(FormatDateTime('ss:zz', Now - aTime));
      WriteLn('Step: ' + IntToStr(i));
    End;
  For i := 9 DownTo 0 Do
    Begin
      aTime := Now;
      For j := 1 To 150 + (10 - i) * 10 Do
        Begin
          port[$9c00] := 255;
          Sleep(i);
          port[$9c00] := 0;
          Sleep(5);
          If KeyPressed Then
            Begin
              Port[$9c00] := 0;
              Break;
            End;
        End;
      WriteLn(FormatDateTime('ss:zz', Now - aTime));
      WriteLn('Step: ' + IntToStr(i));
    End;
  fpIOperm($9c00, 8, 0);
end.


// у меня это был второй LPT в системе, у первого адрес другой

Re: LPT не по назначению

СообщениеДобавлено: 28.07.2011 00:26:22
ostrog17
Да выдал такую ошибку
project1.lpr(57,5) Error: Can't open resource file: /tmp/project1.res

Может у меня что с прогой не так.
LAZARUS Версия #: 0.9.26.2-2 beta
Дата 2009-06-08
Версия FPC: 2.2.4
Ревизия SVN:18898
i386-linux-gtk 2 beta

На машине линукс 9.10
может чего то не хватает?
---------------------------------------------------------
мои шаги
При запуске нового проэкта выбираю "Программа"
стер все что там было и вставил Ваш код
изменил номер порта принтера на 0378
при запуске выдал ошибку
P.S просто мигнуть диодом - такой головняк
( в чистом DOS - нет проблем, а здесь)
не откажите провести за ручку через дорогу.

Re: LPT не по назначению

СообщениеДобавлено: 28.07.2011 04:47:22
sign
ostrog17 писал(а):LAZARUS Версия #: 0.9.26.2-2 beta
Дата 2009-06-08
Версия FPC: 2.2.4
Ревизия SVN:18898

:shock: :shock: :shock:
Заляните сюда, скачайте посвежей версию

Re: LPT не по назначению

СообщениеДобавлено: 28.07.2011 11:13:08
v-t-l
ostrog17 писал(а):project1.lpr(57,5) Error: Can't open resource file: /tmp/project1.res

Удалите строчку:
Код: Выделить всё
{$R *.res}

Re: LPT не по назначению

СообщениеДобавлено: 28.07.2011 16:31:16
serg_iv

Re: LPT не по назначению

СообщениеДобавлено: 30.07.2011 12:40:15
ostrog17
Установил версию 0.9.30. Вро ди бы стала нормально. При попытке запустить код первый раз пишет что не доступен файл /dev/parport0 Устанавливаю права через магнитик командер на чтение и запись файлу, идет компиляция, запускается форма и какое бы число не вводил диод как молчал так и молчит
P.S. посмотрел nano /proc/ioports за паралельный порт отвечает именно parport0.
Начинает жаба давить гдеже у меня глюк. очень хочется докопатся.
---------------------------------------------------------------------------------------------------
var
Form1: TForm1;
f:TfileStream ;//
n, g:integer;
ch, a:byte;

implementation

{ TForm1 }

procedure TForm1.Timer1Timer(Sender: TObject);
begin
n:=$378;
ch:=strtoint(edit1.Text);
f:=TFileStream.Create('/dev/parport0',fmOpenReadWrite); // открываем файл для записи и чтения
f.Seek(n, soFromBeginning);// смещаемся на величину n
f.Write(ch,1);// записываем в порт величину введенную в edit1
f.Seek(n+1, soFromBeginning);// смещаемся еще на 1 относительно n
f.Read(a,1);// читаем байт по адресу n+1
f.Free; // освобождаем память
edit2.Text:=inttostr(a);// в edit2 пишем значения байта по адресу n+1
end;

Re: LPT не по назначению

СообщениеДобавлено: 30.07.2011 13:56:46
Sergei I. Gorelkin
В примере по ссылке используется /dev/port, а не /dev/parport0.

Re: LPT не по назначению

СообщениеДобавлено: 30.07.2011 16:04:39
serg_iv
и устройство /dev/port доступно только от суперпользователя.
в убунте это судо путь к программе
в других линуксах su а потом путь к программе.
Хотя может я чего то и упустил.

Re: LPT не по назначению

СообщениеДобавлено: 31.07.2011 11:07:45
ostrog17
Большое спасибо за понимание и помощь.
Все получилось. Программу нужно с правами админа SUDO. Теперь бы вот настроить сам лазарь на запуск с правами админа (что бы режим отладки был с правами супер) а то не получается виполнить пошагово. И второе как настроить скомпилированную программу (которую написал), что бы запускалась с правами админа. А то каждый раз через консоль весьма не удобно. А так все норм. Теперь пойдет. Хочу еще также разобрать гейм порт. Весьма отличная штука для контроля состояния различных датчиков.
P.S. Сам лет 10 назад прошел микроконтроллеры на асме, а вот связывать с компом приходится сейчас.

Да чуть не забыл: при чтении данных с порта все время почему то 127 ??? Кто может прокоментировать почему?

Re: LPT не по назначению

СообщениеДобавлено: 04.08.2011 15:10:18
Kitayets
не надо работать в лазарус от root'а.

настройте свой линукс таким образом:
1. создайте новою группу
2. с помощью chown сделайте новою группу - группой владельца файла .dev/port
3. с помощью сhmod дайте группе разрешение на чтение/запись в dev/port
4. включите своего пользователя в созданную группу

----------
небольшая проблема, с тем что в современных GNU/Linux системах, файлы устройств создаются динамически при загрузке системы с помощью системы UDEV, таким образом изменение прав на устройство нужно прописывать в конфигах этого самого UDEV, иначе после перезагрузки системы права опять будут принадлежать root:root.

Re: LPT не по назначению

СообщениеДобавлено: 10.08.2011 00:15:48
ostrog17
Большое спасибо за очень дельные советы.
Есть интересный вопрос: у меня на порту LPT висит 8 светодиодов (пока имитируют исполнительные устройства). Так вот при старте системы ubuntu 9.10 происходит инициализация всех восьми линий порта (может и остальные тоже), при окончательной загрузке на порту остается код 04 тоесть горит один диод. Ситуация не совсем приятная по причине безконтрольного включения агрегатов. Может кто знает как этот недостаток побороть. Буду весьма признателен за ответ.

Re: LPT не по назначению

СообщениеДобавлено: 10.08.2011 14:20:01
serg_iv
я использую сторожевой таймер на трех транзисторах, но он отъест один пин.

Re: LPT не по назначению

СообщениеДобавлено: 13.08.2011 00:17:53
ostrog17
Уважаемый serg_iv если не трудно чуть по подробнее о сторожевом таймере (принцип действия). Как это у Вас организовано.

Re: LPT не по назначению

СообщениеДобавлено: 13.08.2011 15:02:19
serg_iv
Дык оно все в открытом доступе на сайте:
http://www.freepascal.ru/article/raznoe/20070808002100/