Thread View: pl.comp.lang.delphi
23 messages
23 total messages
Started by stchebel
Tue, 15 Nov 2016 22:47
Raspberry/Lazarus/FTDI - prośba o pomoc
Author: stchebel
Date: Tue, 15 Nov 2016 22:47
Date: Tue, 15 Nov 2016 22:47
93 lines
4882 bytes
4882 bytes
Witam,
Jakiś czas temu zaprojektowałem urządzenie, które komunikuje się z pecetem poprzez USB z wykorzystaniem kostki FT2232H. Działa bez problemu pod różnymi wersjami Windows. Soft pisany w D6, algorytmicznie niezbyt skomplikowany, ale nazbierało się tego 10k+ linii kodu. Jest pomysł, aby to urządzenie zminiaturyzować i "zbaterializować". Pierwszy pomysł, to wykorzystać RPi.
Tyle wstępu, teraz zaczynają się "schody"..
Po kolei:
1) Ponieważ Lazarus jest najbliższy koncepcyjnie do GUI D6, więc zassałem i zainstalowałem w zeszłym tygodniu zajnowszą dostępną wersję Lazarusa dla Windows.
Kilka eksperymentów z wykorzystaniem banalnych komponentów, są jakieś tam kosmetyczne różnice, można się przyzwyczaić, ale ogólnie jest OK !!
2) Aby poprawnie komunikować się z układem FT2232H, trzeba zainstalować odpowiednie drivery dostępne tutaj:
http://www.ftdichip.com/Drivers/D2XX.htm
Pod mojego Windowsa(Vista) pobieram z dołu strony:
http://www.ftdichip.com/Drivers/CDM/CDM%202.08.24%20WHQL%20Certified.zip
3) "Roz_zipowuję" to ostatnie, na wszelki wypadek wrzucam wszystkie rozpakowane pliki do katalogu w którym będzie projekt. No i piszemy soft w Lazarusie:
Na Formie jest Button i Label. Soft wygląda tak:
===============================
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
FT_HANDLE:DWord=0;
ftresult:integer;
implementation
function FT_Open(PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Open';
function FT_Close(ftHandle:Dword) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Close';
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
ftresult:=FT_Open(0,@FT_HANDLE);
Label1.Caption:=IntToStr(ftresult);
ftresult:=FT_Close(FT_HANDLE);
end;
end.
==============================
No i zgodnie z tym co piszą tutaj:
http://www.ftdichip.com/Support/Documents/ProgramGuides/D2XX_Programmer's_Guide(FT_000071).pdf , wszystko jest OK pod Windowsem.
4 ) Pod Raspbiana (patrz pkt.2) pobieram :
http://www.ftdichip.com/Drivers/D2XX/Linux/libftd2xx-arm-v6-hf-1.3.6.tgz
i cały proces instalacji przeprowadzam zgodnie z instrukcją zawartą w pliku Readme.txt z powyższego. Nie jest źle, po całym upierdliwym procesie instalacji, po odpaleniu zgodnie z instrukcją programu "read" z examples/EEPROM, na konsoli wyświetla mi prawidłową zawartość EEPROM'a z zaprogramowanymi prze ze mnie danymi (Witaj Stachu !!) w polu 'device description'.
5) Tymczasem program napisany w Lazarusie pod Raspbiana, identyczny jak w pkt.3, z wyjątkiem :
a) W prototypie funkcji FT_Open mamy : External 'ftd2xx.so'
b) W Button1.Click, w ogóle nie wywołuję funkcji FT_Open i FT_Close
6) Efekt jest taki, że kompilacja przechodzi na RPi/Lazarus bez błędów, ale forma się nie otwiera. Po kompilacji od razu pojawia się okno dialogowe zamknięcia procesu debuggowania: "Execution Stopped"
=============================
Wiem, dłuugi post, ale już 2 dni nad tym ślęczę i starałem się w miarę precyzyjnie opisać problem.
Gdzie do cholery popełniam błąd?!
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: konsul41
Date: Wed, 16 Nov 2016 07:37
Date: Wed, 16 Nov 2016 07:37
20 lines
1684 bytes
1684 bytes
>
> implementation
> function FT_Open(PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Open';
> function FT_Close(ftHandle:Dword) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Close';
> {$R *.lfm}
>
Potrzebujesz aż tak?
FT232 to konwersja UART-USB-COM i dostajesz port COM w systemie.
Po co używasz dll od FTD jeżeli możesz używać urządzenia jako "czarnej
skrzynki" poprzez COM?
Daj więcej szczegółów.
---
Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast.
https://www.avast.com/antivirus
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: konsul41
Date: Wed, 16 Nov 2016 09:13
Date: Wed, 16 Nov 2016 09:13
21 lines
2093 bytes
2093 bytes
>5) Tymczasem program napisany w Lazarusie pod Raspbiana, identyczny >jak w pkt.3, z wyjątkiem : > > a) W prototypie funkcji FT_Open mamy : External 'ftd2xx.so' > b) W Button1.Click, w ogóle nie wywołuję funkcji FT_Open i FT_Close > >6) Efekt jest taki, że kompilacja przechodzi na RPi/Lazarus bez >błędów, ale forma się nie otwiera. Po kompilacji od razu pojawia się >okno dialogowe zamknięcia procesu debuggowania: "Execution Stopped" Forma bez tych funkcji się otwiera? Jeżeli nie to problem nie leży w urządzeniu, a w lazarusie. Jeżeli się otwiera to sprawdź czy biblioteka została znaleziona lub ładuj dll dynamicznie i sprawdzaj czy jest dosępna. Często w takich wypadkach przy linkowaniu statycznym nie ma żadnej informacji, że nie znalazło biblioteki i program się nie uruchamia (zdarza się w Delphi). --- Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast. https://www.avast.com/antivirus
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: stchebel
Date: Wed, 16 Nov 2016 09:22
Date: Wed, 16 Nov 2016 09:22
17 lines
2194 bytes
2194 bytes
W dniu środa, 16 listopada 2016 08:37:52 UTC+1 użytkownik kons...@wp.pl napisał:
> >
> > implementation
> > function FT_Open(PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Open';
> > function FT_Close(ftHandle:Dword) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Close';
> > {$R *.lfm}
> >
>
>
> Potrzebujesz aż tak?
> FT232 to konwersja UART-USB-COM i dostajesz port COM w systemie.
> Po co używasz dll od FTD jeżeli możesz używać urządzenia jako "czarnej
> skrzynki" poprzez COM?
> Daj więcej szczegółów.
>
>
Niestety, takie rozwiązanie odpada, bo muszę korzystać z maksymalnej prędkości transferu (tryb FT245 synch. FIFFO).
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: stchebel
Date: Wed, 16 Nov 2016 09:30
Date: Wed, 16 Nov 2016 09:30
23 lines
2761 bytes
2761 bytes
W dniu środa, 16 listopada 2016 10:13:42 UTC+1 użytkownik kons...@wp.pl napisał: > >5) Tymczasem program napisany w Lazarusie pod Raspbiana, identyczny > >jak w pkt.3, z wyjątkiem : > > > > a) W prototypie funkcji FT_Open mamy : External 'ftd2xx.so' > > b) W Button1.Click, w ogóle nie wywołuję funkcji FT_Open i FT_Close > > > >6) Efekt jest taki, że kompilacja przechodzi na RPi/Lazarus bez > >błędów, ale forma się nie otwiera. Po kompilacji od razu pojawia się > >okno dialogowe zamknięcia procesu debuggowania: "Execution Stopped" > > Forma bez tych funkcji się otwiera? > Jeżeli nie to problem nie leży w urządzeniu, a w lazarusie. > Jeżeli się otwiera to sprawdź czy biblioteka została znaleziona lub > ładuj dll dynamicznie i sprawdzaj czy jest dosępna. Często w takich > wypadkach przy linkowaniu statycznym nie ma żadnej informacji, że nie > znalazło biblioteki i program się nie uruchamia (zdarza się w Delphi). > Sytuacja jest taka, że wystarczy by prototyp funkcji był zadeklarowany: function FT_Open(PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Open'; i już forma się nie otwiera. Niezależnie czy w dalszej części programu jest polecenie wywołania tej funkcji czy nie.
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: Piotr S.
Date: Wed, 16 Nov 2016 11:11
Date: Wed, 16 Nov 2016 11:11
15 lines
1745 bytes
1745 bytes
W dniu 2016-11-16 o 10:30, stchebel@gmail.com pisze: > > Sytuacja jest taka, że wystarczy by prototyp funkcji był zadeklarowany: > function FT_Open(PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Open'; > > i już forma się nie otwiera. Niezależnie czy w dalszej części programu jest polecenie wywołania tej funkcji czy nie. > A procedura FT_Open na pewno istnieje w tej dllce? Może nazwę trzeba poprzedzić znakiem "_"? Albo może trzeba użyć innej konwencji wywoływania niż stdcall? Spróbuj jeszcze poprzez dynamiczne ładowanie dllki tj. LoadLibrary, GetProcAddress itd. Wtedy może łatwiej dojdziesz gdzie jest problem. P.S.
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: stchebel
Date: Wed, 16 Nov 2016 11:54
Date: Wed, 16 Nov 2016 11:54
20 lines
3516 bytes
3516 bytes
W dniu środa, 16 listopada 2016 12:11:27 UTC+1 użytkownik Piotr S. napisał: > W dniu 2016-11-16 o 10:30, stchebel@gmail.com pisze: > > > > Sytuacja jest taka, że wystarczy by prototyp funkcji był zadeklarowany: > > function FT_Open(PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Open'; > > > > i już forma się nie otwiera. Niezależnie czy w dalszej części programu jest polecenie wywołania tej funkcji czy nie. > > > > A procedura FT_Open na pewno istnieje w tej dllce? Może nazwę trzeba > poprzedzić znakiem "_"? Albo może trzeba użyć innej konwencji > wywoływania niż stdcall? > Spróbuj jeszcze poprzez dynamiczne ładowanie dllki tj. LoadLibrary, > GetProcAddress itd. Wtedy może łatwiej dojdziesz gdzie jest problem. > > P.S. Zakładam, że funkcja FT_Open istnieje w dllce (*.so) pod RPi, bo jak nie otworzę portu, to cała reszta jest bezużyteczna. Jak pisałem w głównym wątku (przeczytaj jeszcze raz, jest tam bardziej szczegółowo) pod Windowsem wszystko jest OK. Problemy są tylko pod Lazarusem na RPi. Co do Twojej koncepcji dynamicznego ładowania biblioteki, to też o tym myślałem, bo kiedyś, gdzieś, coś o tym czytałem/słyszałem. Problem w tym, że informatyk/programista ze mnie jak z koziej **** wuwuzela, coś tam umiem nabazgrać, ale to nie moja główna profesja. Ja jestem od plątania drutów (HW), na tym się znam, no ale czasem trza coś samemu podłubać w sofcie. Przynajmniej w podstawach kompatybilności komunikacji/koncepcji SW-HW. W związku z tym prośba, wracając do dynamicznego ładowania czegoś tam z dllki. Mógłbyś tak bardzo łopatologicznie mi to podać "jak się to robi w D6/Lazarus", a jeżeli zbyt dużo tłumaczenia, to prośba o linka gdzie jest to opisane z przykładami. Aha!! FT_Open z całą pewnością jest w ftd2xx.so, bo odpalenie programu "read" z katalogu Examples powoduje prawidłowe wyplucie zawartości EEPROM'a. Źródła w C też są tam dostępne. Problem jest gdzieś na styku Lazarus(Raspbian)/FTDI
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: Piotr S.
Date: Wed, 16 Nov 2016 12:20
Date: Wed, 16 Nov 2016 12:20
10 lines
1480 bytes
1480 bytes
W dniu 2016-11-16 o 12:54, stchebel@gmail.com pisze: > > Mógłbyś tak bardzo łopatologicznie mi to podać "jak się to robi w D6/Lazarus", a jeżeli zbyt dużo tłumaczenia, to prośba o linka gdzie jest to opisane z przykładami. > > Link gdzie to jest ładnie opisane dla Lazarusa: http://wiki.freepascal.org/Lazarus/FPC_Libraries P.S.
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: Piotr S.
Date: Wed, 16 Nov 2016 12:47
Date: Wed, 16 Nov 2016 12:47
8 lines
1387 bytes
1387 bytes
W dniu 2016-11-16 o 12:54, stchebel@gmail.com pisze: > > Zakładam, że funkcja FT_Open istnieje w dllce (*.so) pod RPi, [...] Podejrzewam, że, jak napisałem wcześniej, może być winna konwencja wywołania. Spróbuj zmienić stdcall na cdecl. P.S.
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: Roman Tyczka
Date: Wed, 16 Nov 2016 13:03
Date: Wed, 16 Nov 2016 13:03
21 lines
1845 bytes
1845 bytes
On Wed, 16 Nov 2016 01:30:24 -0800 (PST), stchebel@gmail.com wrote: >> > a) W prototypie funkcji FT_Open mamy : External 'ftd2xx.so' >> > b) W Button1.Click, w ogóle nie wywołuję funkcji FT_Open i FT_Close > Sytuacja jest taka, że wystarczy by prototyp funkcji był zadeklarowany: > function FT_Open(PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Open'; > > i już forma się nie otwiera. Niezależnie czy w dalszej części programu jest polecenie wywołania tej funkcji czy nie. Skoro w raspbianie używasz nie dllek (dynamic link library, to stricte windowsiany patent) tylko plików so (shared objects - to patent linuxowy) to powinieneś mieć deklarację: function FT_Open(PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ; External 'ftd2xx.so' name 'FT_Open'; -- pozdrawiam Roman Tyczka
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: stchebel
Date: Wed, 16 Nov 2016 13:06
Date: Wed, 16 Nov 2016 13:06
14 lines
1986 bytes
1986 bytes
W dniu środa, 16 listopada 2016 13:47:29 UTC+1 użytkownik Piotr S. napisał: > W dniu 2016-11-16 o 12:54, stchebel@gmail.com pisze: > > > > Zakładam, że funkcja FT_Open istnieje w dllce (*.so) pod RPi, [...] > > Podejrzewam, że, jak napisałem wcześniej, może być winna konwencja > wywołania. Spróbuj zmienić stdcall na cdecl. > > P.S. Error Project project1 raised exception class 'External: SIGSEGV'. Tak jest pod Windowsem na moim laptoku. Na RPi dalej tak samo jak wcześniej.
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: Piotr S.
Date: Wed, 16 Nov 2016 13:09
Date: Wed, 16 Nov 2016 13:09
11 lines
1526 bytes
1526 bytes
W dniu 2016-11-16 o 14:06, stchebel@gmail.com pisze: > Error Project project1 raised exception class 'External: SIGSEGV'. > Tak jest pod Windowsem na moim laptoku. > > Na RPi dalej tak samo jak wcześniej. > Pod Windowsem ma być dalej stdcall. Spróbuj w takim razie z dynamicznym ładowaniem. P.S.
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: stchebel
Date: Wed, 16 Nov 2016 13:11
Date: Wed, 16 Nov 2016 13:11
20 lines
2433 bytes
2433 bytes
W dniu środa, 16 listopada 2016 14:03:37 UTC+1 użytkownik Roman Tyczka napisał: > On Wed, 16 Nov 2016 01:30:24 -0800 (PST), stchebel@gmail.com wrote: > > >> > a) W prototypie funkcji FT_Open mamy : External 'ftd2xx.so' > >> > b) W Button1.Click, w ogóle nie wywołuję funkcji FT_Open i FT_Close > > > Sytuacja jest taka, że wystarczy by prototyp funkcji był zadeklarowany: > > function FT_Open(PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Open'; > > > > i już forma się nie otwiera. Niezależnie czy w dalszej części programu jest polecenie wywołania tej funkcji czy nie. > > Skoro w raspbianie używasz nie dllek (dynamic link library, to stricte > windowsiany patent) tylko plików so (shared objects - to patent linuxowy) > to powinieneś mieć deklarację: > > function FT_Open(PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ; > External 'ftd2xx.so' name 'FT_Open'; > > No i tak mam. Przeczytaj powyżej. Gdyby było inaczej, to nawet kompilacja by nie przeszła.
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: stchebel
Date: Wed, 16 Nov 2016 13:15
Date: Wed, 16 Nov 2016 13:15
13 lines
2228 bytes
2228 bytes
W dniu środa, 16 listopada 2016 14:09:19 UTC+1 użytkownik Piotr S. napisał: > W dniu 2016-11-16 o 14:06, stchebel@gmail.com pisze: > > Error Project project1 raised exception class 'External: SIGSEGV'. > > Tak jest pod Windowsem na moim laptoku. > > > > Na RPi dalej tak samo jak wcześniej. > > > > Pod Windowsem ma być dalej stdcall. > Spróbuj w takim razie z dynamicznym ładowaniem. > OK, ale teraz obiadek, następnie poczytam jak ładować dynamicznie, marudzić zacznę ponownie wieczorem.
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: Roman Tyczka
Date: Wed, 16 Nov 2016 14:27
Date: Wed, 16 Nov 2016 14:27
29 lines
2224 bytes
2224 bytes
On Wed, 16 Nov 2016 05:11:53 -0800 (PST), stchebel@gmail.com wrote: >>>> > a) W prototypie funkcji FT_Open mamy : External 'ftd2xx.so' >>>> > b) W Button1.Click, w ogóle nie wywołuję funkcji FT_Open i FT_Close >> >>> Sytuacja jest taka, że wystarczy by prototyp funkcji był zadeklarowany: >>> function FT_Open(PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Open'; >>> >>> i już forma się nie otwiera. Niezależnie czy w dalszej części programu jest polecenie wywołania tej funkcji czy nie. >> >> Skoro w raspbianie używasz nie dllek (dynamic link library, to stricte >> windowsiany patent) tylko plików so (shared objects - to patent linuxowy) >> to powinieneś mieć deklarację: >> >> function FT_Open(PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ; >> External 'ftd2xx.so' name 'FT_Open'; >> >> > No i tak mam. Przeczytaj powyżej. Dokładnie czytałem i Twój przykład zawiera odwołanie do dll a nie so. > Gdyby było inaczej, to nawet kompilacja by nie przeszła. Nieprawda, kompilator nie sprawdza istnienia pliku dll czy so. -- pozdrawiam Roman Tyczka
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: stchebel
Date: Wed, 16 Nov 2016 16:57
Date: Wed, 16 Nov 2016 16:57
13 lines
1864 bytes
1864 bytes
W dniu środa, 16 listopada 2016 15:27:54 UTC+1 użytkownik Roman Tyczka napisał: > > Dokładnie czytałem i Twój przykład zawiera odwołanie do dll a nie so. Przeczytaj punkt 5b) > > > Gdyby było inaczej, to nawet kompilacja by nie przeszła. > > Nieprawda, kompilator nie sprawdza istnienia pliku dll czy so. > Fakt.
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: konsul41
Date: Wed, 16 Nov 2016 16:57
Date: Wed, 16 Nov 2016 16:57
40 lines
2620 bytes
2620 bytes
W dniu 2016-11-16 o 10:22, stchebel@gmail.com pisze:
> W dniu środa, 16 listopada 2016 08:37:52 UTC+1 użytkownik kons...@wp.pl napisał:
>>>
>>> implementation
>>> function FT_Open(PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Open';
>>> function FT_Close(ftHandle:Dword) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Close';
>>> {$R *.lfm}
>>>
>>
>>
>> Potrzebujesz aż tak?
>> FT232 to konwersja UART-USB-COM i dostajesz port COM w systemie.
>> Po co używasz dll od FTD jeżeli możesz używać urządzenia jako "czarnej
>> skrzynki" poprzez COM?
>> Daj więcej szczegółów.
>>
>>
> Niestety, takie rozwiązanie odpada, bo muszę korzystać z maksymalnej prędkości transferu (tryb FT245 synch. FIFFO).
>
Ładuj DLL dynamicznie i w tedy sprawdzisz czy program widzi bibliotekę.
Rozejrzyj się za LoadLibrary
coś takiego
hBibl: THandle;
fMenuWhere : function(): WideString;//<-twoja funkcja
...
hBibl := LoadLibrary('pełna_ścieżka_do.dll');
if hBibl = 0 then
begin
RaiseLastOSError();
Abort()
end;
@fMenuWhere := GetProcAddress(hBibl, 'fMenuWhere');
if @fMenuWhere <> nil then
begin
//tutaj na pewno funcja/procedura istnieje
end;
Tak to się robi w Delphi pow Windows
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: krolikbest
Date: Thu, 17 Nov 2016 18:34
Date: Thu, 17 Nov 2016 18:34
100 lines
5058 bytes
5058 bytes
W dniu 2016-11-15 o 23:47, stchebel@gmail.com pisze:
> Witam,
> Jakiś czas temu zaprojektowałem urządzenie, które komunikuje się z pecetem poprzez USB z wykorzystaniem kostki FT2232H. Działa bez problemu pod różnymi wersjami Windows. Soft pisany w D6, algorytmicznie niezbyt skomplikowany, ale nazbierało się tego 10k+ linii kodu. Jest pomysł, aby to urządzenie zminiaturyzować i "zbaterializować". Pierwszy pomysł, to wykorzystać RPi.
>
> Tyle wstępu, teraz zaczynają się "schody"..
>
> Po kolei:
>
> 1) Ponieważ Lazarus jest najbliższy koncepcyjnie do GUI D6, więc zassałem i zainstalowałem w zeszłym tygodniu zajnowszą dostępną wersję Lazarusa dla Windows.
> Kilka eksperymentów z wykorzystaniem banalnych komponentów, są jakieś tam kosmetyczne różnice, można się przyzwyczaić, ale ogólnie jest OK !!
>
> 2) Aby poprawnie komunikować się z układem FT2232H, trzeba zainstalować odpowiednie drivery dostępne tutaj:
>
> http://www.ftdichip.com/Drivers/D2XX.htm
>
> Pod mojego Windowsa(Vista) pobieram z dołu strony:
>
> http://www.ftdichip.com/Drivers/CDM/CDM%202.08.24%20WHQL%20Certified.zip
>
> 3) "Roz_zipowuję" to ostatnie, na wszelki wypadek wrzucam wszystkie rozpakowane pliki do katalogu w którym będzie projekt. No i piszemy soft w Lazarusie:
>
> Na Formie jest Button i Label. Soft wygląda tak:
>
> ===============================
>
> unit Unit1;
>
> {$mode objfpc}{$H+}
>
> interface
>
> uses
> Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
>
> type
>
> { TForm1 }
>
> TForm1 = class(TForm)
> Button1: TButton;
> Label1: TLabel;
> procedure Button1Click(Sender: TObject);
> private
> { private declarations }
> public
> { public declarations }
> end;
>
> var
> Form1: TForm1;
> FT_HANDLE:DWord=0;
> ftresult:integer;
>
> implementation
> function FT_Open(PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Open';
> function FT_Close(ftHandle:Dword) : integer ; stdcall ; External 'ftd2xx.dll' name 'FT_Close';
> {$R *.lfm}
>
> { TForm1 }
>
> procedure TForm1.Button1Click(Sender: TObject);
>
> begin
> ftresult:=FT_Open(0,@FT_HANDLE);
> Label1.Caption:=IntToStr(ftresult);
> ftresult:=FT_Close(FT_HANDLE);
> end;
>
> end.
>
> ==============================
>
> No i zgodnie z tym co piszą tutaj:
>
> http://www.ftdichip.com/Support/Documents/ProgramGuides/D2XX_Programmer's_Guide(FT_000071).pdf , wszystko jest OK pod Windowsem.
>
> 4 ) Pod Raspbiana (patrz pkt.2) pobieram :
>
> http://www.ftdichip.com/Drivers/D2XX/Linux/libftd2xx-arm-v6-hf-1.3.6.tgz
>
> i cały proces instalacji przeprowadzam zgodnie z instrukcją zawartą w pliku Readme.txt z powyższego. Nie jest źle, po całym upierdliwym procesie instalacji, po odpaleniu zgodnie z instrukcją programu "read" z examples/EEPROM, na konsoli wyświetla mi prawidłową zawartość EEPROM'a z zaprogramowanymi prze ze mnie danymi (Witaj Stachu !!) w polu 'device description'.
>
> 5) Tymczasem program napisany w Lazarusie pod Raspbiana, identyczny jak w pkt.3, z wyjątkiem :
>
> a) W prototypie funkcji FT_Open mamy : External 'ftd2xx.so'
> b) W Button1.Click, w ogóle nie wywołuję funkcji FT_Open i FT_Close
>
> 6) Efekt jest taki, że kompilacja przechodzi na RPi/Lazarus bez błędów, ale forma się nie otwiera. Po kompilacji od razu pojawia się okno dialogowe zamknięcia procesu debuggowania: "Execution Stopped"
>
> =============================
>
> Wiem, dłuugi post, ale już 2 dni nad tym ślęczę i starałem się w miarę precyzyjnie opisać problem.
>
> Gdzie do cholery popełniam błąd?!
>
>
>
Zainstaluj lazarusa pod windą. Spróbuj skompilować i uruchomić to na
windowsie. Potem sie zobaczy ;)
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: konsul41
Date: Fri, 18 Nov 2016 10:28
Date: Fri, 18 Nov 2016 10:28
9 lines
1393 bytes
1393 bytes
> Zainstaluj lazarusa pod windą. Spróbuj skompilować i uruchomić to na > windowsie. Potem sie zobaczy ;) Przecież pisał, że na Windows działa. --- Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast. https://www.avast.com/antivirus
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: krolikbest
Date: Fri, 18 Nov 2016 19:38
Date: Fri, 18 Nov 2016 19:38
14 lines
1553 bytes
1553 bytes
W dniu 2016-11-18 o 11:28, konsul41@wp.pl pisze: > >> Zainstaluj lazarusa pod windą. Spróbuj skompilować i uruchomić to na >> windowsie. Potem sie zobaczy ;) > > Przecież pisał, że na Windows działa. > > --- > Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie > antywirusowe Avast. > https://www.avast.com/antivirus > Tak, ale jakoś nie doczytałem, czy kompilował to w Lazarusie zainstalowanym na Windowsach.
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: stchebel
Date: Mon, 21 Nov 2016 14:37
Date: Mon, 21 Nov 2016 14:37
15 lines
2375 bytes
2375 bytes
W dniu piątek, 18 listopada 2016 11:28:07 UTC+1 użytkownik kons...@wp.pl napisał: > > Zainstaluj lazarusa pod windą. Spróbuj skompilować i uruchomić to na > > windowsie. Potem sie zobaczy ;) > > Przecież pisał, że na Windows działa. > > --- Spokojnie Koledzy, nie ma się o co kłócić.. Istotnie problem nadal nie jest rozwiązany, przez łikend dałem sobie z tym spokój, no i ponownie podchodzę do tego jak tzw. "pies do jeża". W 2-ch słowach, wszystko jest OK pod Windowsem w temacie komunikacji "Moje badziewie"<=>FT2232H (USB- tryb FT245 synch. FIFO (34-35MB/s))<=>Pecet . Jeszcze raz zaznaczam : WINDOWS (D6) !! Urządzenie po prostu działa "bez pudła". Jutro mam czas, przekompiluję wszystkie możliwe sugestie opisane w tym wątku, opiszę swoje spostrzeżenia. Tymczasem zrobiłem kilka drobnych eksperymentów z dynamicznym ładowaniem dllek pod Win D6. Ze statycznym chyba nie mam problemów, ale z dynamicznym robią mi się "cuda_wianki". Jutro szczegóły .. Tak czy inaczej, dzięki Wszystkim obecnym w moim problemie.
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: stchebel
Date: Mon, 21 Nov 2016 15:24
Date: Mon, 21 Nov 2016 15:24
13 lines
2221 bytes
2221 bytes
W dniu poniedziałek, 21 listopada 2016 15:37:05 UTC+1 użytkownik stch...@gmail.com napisał: > W dniu piątek, 18 listopada 2016 11:28:07 UTC+1 użytkownik kons...@wp.pl napisał: > > > Zainstaluj lazarusa pod windą. Spróbuj skompilować i uruchomić to na > > > windowsie. Potem sie zobaczy ;) > > > > Przecież pisał, że na Windows działa. > > > > --- > > Spokojnie Koledzy, nie ma się o co kłócić.. Istotnie problem nadal nie jest rozwiązany, przez łikend dałem sobie z tym spokój, no i ponownie podchodzę do tego jak tzw. "pies do jeża". W 2-ch słowach, wszystko jest OK pod Windowsem w temacie komunikacji "Moje badziewie"<=>FT2232H (USB- tryb FT245 synch. FIFO (34-35MB/s))<=>Pecet . Jeszcze raz zaznaczam : WINDOWS (D6) !! Urządzenie po prostu działa "bez pudła". > Pod Lazarusem/Linux/RPi nadal jest problem..
Re: Raspberry/Lazarus/FTDI - prośba o pomoc
Author: mmm
Date: Tue, 22 Nov 2016 13:24
Date: Tue, 22 Nov 2016 13:24
24 lines
2029 bytes
2029 bytes
> > Pod Lazarusem/Linux/RPi nadal jest problem.. > Ja bym zrobił tak: 1) na konsoli dmesg i obejrzał bym co się dziele jak podłączasz urządzenie do komputer-a , jak odłączysz i podłączysz ponownie. Czasami pojawiają sie podpowiedzi w postaci braku pliku firmware , albo inne kwiatki 2) lsusb obejrzał bym jak przedstawia się sprzet USB na linux i na windows (usbview.exe) jakie sa endpointy jak sa skonfigurowane itp. nie znam tego układu wiec nie wiem gdzie jest konfiguracja USB czy eeprom , czy sterownik czy oprogramowanie, może to nie ma prawa działać jak nie ustawisz sprzetu a na windowsie dzieje sie to automatycznie ? 3) poszukał bym najprostszego przykładu w C i sprawdził bym czy to zadziała , najpierw na normalnym linux a potem na na arm 4) support FTDI , ja koresponduje z support5@ftdichip.com Odpowiadają szybko i po tamtej stronie ktoś ma pojecie M
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads