Board.KolibriOS.org

Official KolibriOS board
It is currently Tue May 21, 2019 4:34 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 196 posts ]  Go to page Previous 110 11 12 13 14 Next
Author Message
PostPosted: Thu Jun 06, 2013 4:42 pm 
Offline
User avatar

Joined: Thu May 30, 2013 5:56 pm
Posts: 31
А как проверить ...

function chtenie_iz_porta(pdw:dword):byte;
var by:byte;
begin
pdw:=$80000000+pdw;
asm
mov eax,43
mov ecx,pdw
int $40
mov by,bl
end;
chtenie_iz_porta:=by;
end;

... наиболее простыми средствами, или
тут на 100% всё в порядке?


Last edited by VitZ on Sat Jun 15, 2013 4:25 pm, edited 1 time in total.

Top
   
PostPosted: Thu Jun 06, 2013 5:08 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
mov [by],bl

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Thu Jun 06, 2013 5:14 pm 
Offline
User avatar

Joined: Thu May 30, 2013 5:56 pm
Posts: 31
... thanks.


Top
   
PostPosted: Fri Jun 07, 2013 11:07 am 
Offline
User avatar

Joined: Thu May 30, 2013 5:56 pm
Posts: 31
procedure rc(var s:string);
Spoiler: Show
Code:
procedure rc(var s:string);
var c:char; i,t:dword;
begin s:=''; i:=1; t:=0;
  repeat
    while (In1021 and 1)<>1 do begin
      t:=t+1;
      if (t>2000) then exit;
    end;
    c:=chr(In1016);
    if c=chr(13) then break;
    s[0]:=chr(i);
    s[i]:=c;
    i:=i+1;
    if (i>30) then break;
    t:=0;
  until false;
end;


Last edited by VitZ on Fri Jul 12, 2013 4:46 pm, edited 9 times in total.

Top
   
PostPosted: Sat Jun 08, 2013 8:07 am 
Offline
User avatar

Joined: Thu May 30, 2013 5:56 pm
Posts: 31
... А гадкий LPT при включении компьютера посылает включающий сигнал на все свои выходы ...

ТБ - вот с чего должна была начаться эта тема !!!
(как, кстати, суметь потушить огнетушителем с электропроводящим
содержимым неотключённую от электросети производственную
электроустановку?)


Last edited by VitZ on Wed Jan 29, 2014 8:28 pm, edited 1 time in total.

Top
   
PostPosted: Sat Jun 08, 2013 12:27 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1328
Quote:
... А гадкий LPT при включении компьютера посылает включающий сигнал на все свои выходы ...

Ну а ты куда смотрел?
Да, некоторые BIOSы играют сигналами на LPT-шине, по стандарту IEEE1284.
А Винда в течение первой минуты после начала загрузки периодически опрашивает отклик ECP-устройств по древнему PnP протоколу.

Прежде чем подключать железяку - проверь дефолтные состояния и игру сигналов при включении/выключении, это же азы!

_________________
Узкий специалист подобен флюсу: полнота его - односторонняя.
Козьма Прутков


Top
   
PostPosted: Sun Jun 09, 2013 8:15 am 
Offline
User avatar

Joined: Thu May 30, 2013 5:56 pm
Posts: 31
function In1016:byte;
var by:byte;
begin
asm
mov dx,1016
in al,dx
mov [by],al
end;
In1016:=by;
end;

k.writeNumber(5,125,$33F1F1F1,0,5,In1016) в 3-ем пункте k.waitForEvent'a
- даёт устойчивый приём последовательности одинаковых байтов,
приходящих из второго компа (DOS'a):

DOScom -> comKOS
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, ... или
15, 15, 15, 15, 15, 15, 15, 15, 15, 15 ... и т. пр.


Last edited by VitZ on Mon Aug 26, 2013 8:08 pm, edited 4 times in total.

Top
   
PostPosted: Mon Jun 10, 2013 1:14 pm 
Offline
User avatar

Joined: Thu May 30, 2013 5:56 pm
Posts: 31
function In1021:byte;
var by:byte;
begin
asm
mov dx,1021
in al,dx
mov [by],al
end;
In1021:=by;
end;

procedure open_com;
begin
{}
zapis_v_port(1019,$80);
zapis_v_port(1016, (1 and $FF) );
zapis_v_port(1017, ((1 and $FF00) shr 8 ) );
zapis_v_port(1019,3);
zapis_v_port(1017,0);
zapis_v_port(1018,7);
{}
zapis_v_port(1018,1);
end;

<< open_com; >> надо записать сразу после захвата портов
в основной части программы (между основными BEGIN и END)


Last edited by VitZ on Wed Jun 12, 2013 1:19 pm, edited 1 time in total.

Top
   
PostPosted: Mon Jun 10, 2013 5:09 pm 
Offline
User avatar

Joined: Thu May 30, 2013 5:56 pm
Posts: 31
Всё; работает;
посылаю из компа запрос '$01M' с конечным байтом 13,
а приходит ответ '!017042' с конечным байтом 13
(<<i7042>> - это и есть имя устройства, висящего на адресе 1 ПЛ).


Last edited by VitZ on Wed Sep 04, 2013 8:22 pm, edited 3 times in total.

Top
   
PostPosted: Mon Jun 10, 2013 5:56 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Поздравляю. Теперь можете писать любые драйвера для устройств на EIA485 и EIA232? Думали про USB<->EIA485 и EIA232<->USB?


Top
   
PostPosted: Tue Jun 11, 2013 9:19 am 
Offline
User avatar

Joined: Thu May 30, 2013 5:56 pm
Posts: 31
PPro - это минидельфи в RTOS (KOS).
Следующим шагом подключим устройство i7017
и построим график (напряжения на [Vin0+ __ Vin0-]
его входе).
Spoiler: Show
Code:
program hello96;    uses kolibri;    var k:TKolibri;
const header:string='HelloWorld test'#0;

procedure zapis_v_port(pdw:dword; b:byte);
begin asm
  mov eax,43
  mov bl,b
  mov ecx,pdw
  int $40
end; end;

procedure draw_window;
begin   k.BeginDraw;
   k.DefineWindow(10,40,350,350,$33FFFFFF,0,integer(@header[1]));
   k.DefineButton(5,5,65,25,7,7);
   k.EndDraw; end;

procedure zachvat_portov;
begin asm
  mov eax,46
  mov ebx,0
  mov ecx,1016
  mov edx,1023
  int $40
end; end;

procedure otdatj_porti;
begin asm
  mov eax,46
  mov ebx,1
  mov ecx,1016
  mov edx,1023
  int $40
end; end;

procedure open_com;
begin
  zapis_v_port(1019,$80);
  zapis_v_port(   1016,(1 and $FF)   );
  zapis_v_port(   1017,((1 and $FF00) shr 8)   );
  zapis_v_port(1019,3);
  zapis_v_port(1017,0);
  zapis_v_port(1018,7);
  zapis_v_port(1018,1);
end;

function In1016:byte;
var by:byte;
begin
  asm   
    mov dx,1016
    in  al,dx
    mov [by],al
  end;
  In1016:=by;
end;

function In1021:byte;
var by:byte;
begin
  asm
    mov dx,1021
    in al,dx
    mov [by],al
  end;
  In1021:=by;
end;

procedure sc(s:string);
var i,t:dword;
begin     i:=1;    t:=0;
  if (   (length(s)<1)   or   (length(s)>30)   ) then exit;
  while (i<>length(s)+1) do begin
    while (In1021 and $20)=0 do begin
      {t:=t+1;
      if (t>200000000) then exit;}
    end;
    zapis_v_port(1016,ord(s[i]));
    i:=i+1;  t:=0;
  end;
  while (In1021 and $20)=0 do begin
    {t:=t+1;
    if (t>200000000) then exit;}
  end;
  zapis_v_port(1016,13);     
end;

procedure rc(var s:string);
var  c: char;   i,t:dword;
begin     s:='';  i:=1;  t:=0;
  repeat
    while (In1021 and 1)<>1 do begin
      {t:=t+1;
      if (t>200000000) then exit;}
    end;
    c:=chr(In1016);         
    if c=chr(13) then break;
    s[0]:=chr(i);
    s[i]:=c;
    i:=i+1;
    if (i>30) then break;
    t:=0;
  until false;
end;

var  s1,s2:string;   key,j:dword;
BEGIN   draw_window;   j:=1;
  zachvat_portov;
  open_com;
  s1:='$02M';
  while true do case k.waitforevent of
    1:draw_window;
    2:k.getkey(key);
    3:begin
      if j=1 then begin
        j:=2;
        sc(s1);
        rc(s2);
        k.writeText(5,125,0,0,s2);
      end;      
    end;
  end;   
  otdatj_porti; 
END.

При запуске этой программы и нажатии на кнопку в окне
должна появиться строка (чуть ниже в окне) -
!027017
- а это значит: устройство многоканального АЦП
подключено к ПЛ (115200) и имеет адрес 02.


Last edited by VitZ on Mon Aug 26, 2013 8:06 pm, edited 3 times in total.

Top
   
PostPosted: Fri Jun 14, 2013 2:50 pm 
Offline
User avatar

Joined: Thu May 30, 2013 5:56 pm
Posts: 31
График будем рисовать прямоугольничками (DrawBar(x,y,width,height,color)):
каждые 3 секунды надо
посылать строковый запрос устройству i7017: <<каково напряжение на твоём нулевом входе?>>,
принимать ответ (в строку s2),
вышифровывать из s2 пришедшее число вольтов (0 .. 10В) в переменную chislo_voltov_1 (integer),
масштабировать его по оси <<- y>> на наш график (chislo_voltov_2: integer)
(при повторении этого алгоритма через следующие 3 с - надо отступить вправо на 10 пикселей).
[Снаружи - необходим реостатик, задающий напряжение - по известной схеме].
Процесс этот желательно как-то закончить при <<дохождении>>
прямоугольничками самописца до правого края окна.


Last edited by VitZ on Mon Aug 26, 2013 8:03 pm, edited 4 times in total.

Top
   
PostPosted: Sun Jun 16, 2013 10:25 am 
Offline
User avatar

Joined: Thu May 30, 2013 5:56 pm
Posts: 31
function sch_vr:dword;
var t:dword;
begin
asm
mov eax,26
mov ebx,9
int $40
mov [t],eax
end;
sch_vr:=t;
end;

...
sch_vr_2:=sch_vr;
if (sch_vr_2 > (sch_vr_1+299)) then {прошло 3 секунды} begin sch_vr_1:=sch_vr_2; Alg1; end;
...


Last edited by VitZ on Thu Jun 20, 2013 2:04 pm, edited 1 time in total.

Top
   
PostPosted: Sun Jun 16, 2013 2:48 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1328
Кроме "прямоугольничков" график можно рисовать любыми ASCII-маркерами
Code:
☼  ►  ¤  ◄  ▲  ▼ ♥ ♦ ♣ ♠ • ○ Ж W o 

с помощью 4-й функции (ecx=0x00RRGGBB, esi = 1)


Top
   
PostPosted: Sun Jun 16, 2013 5:32 pm 
Offline
User avatar

Joined: Thu May 30, 2013 5:56 pm
Posts: 31
... http://www.icpdas.com/download/7000/manual.htm - страница с документацией по i7, некоторые файлы перепутаны местами ...

(В случае управления мотором ПК лишь посылает <<число_угловых_градусов_в_секунду>>,
а одно из устройств серии i7000 (контроллер) выполняет <<шимовую>>
функцию - для пущей реальности времени.
Хотя, поначалу управление техпроцессом лучше осуществлять
контроллерами, и по месту, так, чтобы крах системы был невозможен
из-за отказа сервера сбора инфы (колибри) - при отказе сервера (колибри)
потеряется только инфа (при этом управление сохранится по месту)
).

На запрос '#020' устройство i7017 ответит '>+001.23'.
(То есть на нулевом входе устройства АЦП сейчас 1,23 В и
коль оно пришло в комп - его можно как-то визуализировать на экран.)
Chislo_voltov_1:=str5_to_num(s2[3]+s2[4]+s2[5]+s2[7]+s2[8]).


Last edited by VitZ on Sun Nov 02, 2014 4:10 pm, edited 22 times in total.

Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 196 posts ]  Go to page Previous 110 11 12 13 14 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited