[FY6900][Pascal] Zdalne sterowanie generatorem chińskich przebiegów - szkic/POC

Tutaj umieszczamy tematy związane z językami programowania niepasującymi do innych działów.
Regulamin forum
Temat prosimy poprzedzić nazwą języka umieszczonego w nawiasach kwadratowych np. [Pascal].
Awatar użytkownika
tasza
Geek
Geek
Posty: 1082
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

[FY6900][Pascal] Zdalne sterowanie generatorem chińskich przebiegów - szkic/POC

Postautor: tasza » sobota 14 lis 2020, 23:36

Nooo, paczucha dziś nadeszła długo oczekiwana, prosto z Chinowa, ale przez Holandię i rychło w czas.
Kotu się daje papierek na sznurku, aby czymś zająć jak go roznosi, no a mnie generatorek przysłali, ale czad!
Domownicy oczywiście asystują przy unboxingu w kuchni i słyszę Seniora z nagła - Natuśka, ale ty chyba tak od razu nie będziesz tego rozkręcała? #JPDL, jednak mam nabazgrane w papierach. Nie, od razu nie. Wszystko w swoim czasie <demoniczny śmiech>.

O generatorach przebiegów arbitralnych rodziny FY6xxx jest w sieci masa informacji więc pisanie `tutoriala` uważam za zbędne.
Detalicznie rozpracowane są oczko starsze modele FY6800 i klony, o 6900 dopiero zaczynają się materiały pojawiać, proponuje na początek:

:arrow: https://drive.google.com/file/d/1eD85N9 ... sp=sharing - instrukcja obsługi
:arrow: https://youtu.be/FaNvHQW_CsQ - pokaż kotku, co masz w środku

Na chwilę obecną powstrzymuje się od oceny parametrów i ergonomii urządzenia, na to trzeba dłuższej chwili i sprawdzenia urządzenia w tak zwanym praniu. Wygląd za to mogę podsumować natychmiast - jest tak samo landrynkowo-dżenderuśny jak Rigol, no masakra. Czy kiedyś wrócą czasy tajemniczo-czarnych, drapieżnie i technicznie wyglądających obudów? Jak ZOPAN na przykład robił, ech...

Po wstępnym obklikaniu funkcji i stwierdzeniu, że pudełko ma wszelkie znamiona działania - zabrałam się za eksperymenty ze zdalnym dostępem do urządzenia, w końcu właśnie po to sprawiłam sobie tę zabawkę. Opis protokołu jest dostępny: :arrow: https://supereyes.ru/img/instructions/F ... otocol.pdf i coś czuję, że będą zagadki wszechświata z Morganem F.
O, proszę pierwsze na co się nadziałam przy zmianie kształtu przebiegu:

WMV_vs_WFW.png


Polecenie WMW (dla kanału 1, głównego) i WFW (kanał 2, pomocniczy) mają niekonsekwentnie ustawione wartości parametrów. To akurat zauważyłam, ponieważ programik napisany na intuicję durnoty mi wysyłał do generatora, jak się okazało CH1 i CH2 mają różne zestawy wartości. No i jak się spodziewam, takich kwiatków będzie więcej, ale spoko, to jest do ogarnięcia.

W załączniki szkic w Lazarus jak zagadać do FY6900, tam nie ma żadnej filozofii. Otwieramy port szeregowy /dev/ttyUSB0 na 115kbaud i piszemy proste polecenia w/g rozpiski, kończąc je 0x0A. Aha, może komuś to oszczędzi frustracji - eksperymenty z terminalem szeregowym typu GTK Term słabo wychodzą, generator nie chce współpracować. Mam wrażenie, że wpisywane ręcznie znaczki są w zbyt dużych odstępach czasowych i pudełko dostaje jakiś timeout w środku i nie rozpoznaje polecenia. Wysłane ciurkiem, programowo - są skutecznie odbierane i urządzenie wykonuje komendy. O, a tak działa kadłubek programu na żywo, śmieszne to:

https://youtu.be/hjwLUS5wi40

Państwo z FeelElec machnęli wprawdzie aplikację sterującą, ale ona jest pod za przeproszeniem Windows, a ja mam alergię.
Tak więc, chcąc nie chcąc, czeka mnie przypomnienie sobie Object Pascala. A czy to się skończy na zabudowaniu w Malinę czy ESP32 to czas pokaże...

Aha, w Linux generator melduje się następująco:

Kod: Zaznacz cały

[46889.963200] usb 5-2: new full-speed USB device number 4 using uhci_hcd
[46890.150211] usb 5-2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.64
[46890.150215] usb 5-2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[46890.150217] usb 5-2: Product: USB Serial
[46890.153262] ch341 5-2:1.0: ch341-uart converter detected
[46890.160258] usb 5-2: ch341-uart converter now attached to ttyUSB0

widzimy w logu znany i lubiany chiński konwerterek typu CH341, system zauważa go bez żadnych ceregieli i instaluje jako pierwszy wolny ttyUSBx. I można się pudełkiem bawić.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

Awatar użytkownika
tasza
Geek
Geek
Posty: 1082
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

Re: [FY6900][Pascal] Zdalne sterowanie generatorem chińskich przebiegów - szkic/POC

Postautor: tasza » poniedziałek 23 lis 2020, 18:47

Dręczenia generatorka ciąg dalszy, była przerwa pewna, ale tu poboczna inicjatywa się intensywnie toczy w temacie ESP32, o tym kiedyś.
Najpierw dwa słowa dezaprobaty na kitajskij dizajn, a mianowicie zastanowiło mnie, że generatorek mimo stanu czuwania jakiś taki ciepły był.
Nie bardzo, ale jak na niby-stan-uśpienia to jednak niepokoił. No to zmierzyłam mu pobór prądu w stanie aktywności oraz stand-by, napięcie sieciowe mamy aktualnie jakieś 225V

0_15mA.jpg
1_18mA.jpg


No i proszę - 15 mA na śpiocha, ale 18 mA gdy działa. No to jest 3.4VA kontra 4VA. Niech tam nawet zjada sobie te 20mA - no to jest mniej niż 5VA.
To kolejne argumenty za tym, aby jednak zastanowić się nad przeróbką (podmianą) części zasilającej na coś bardziej sensownego, tym bardziej, że będę potrzebowała zaniedługo skubnąć mu nieco prądu na +5V, nawet nie wiem (i czy ktoś wie?) jakie realne parametry prądowe ma to ustrojstwo zasilające w środku. No to tyle kwękania.

Nooo, jak po Ostrowcu zacznie krążyć Czarna Wołga to znaczy że jednak ujawniłam jakieś chińskie tajemnice państwowe, a póki co - proszę: inżynieria odwrotna w temacie ładowania własnych przebiegów do tego uroczego generatorka.
Heh, dopiero potem wpadłam na to repo GitHub: https://github.com/mattwach/fygen/, ale co sobie podłubałam to moje.
I tak, generatorek na zadku ma oprócz dużego USB jeszcze małą złączkę 2x4 pin, z niej najważniejsze aktualnie sygnały to Rx,Tx, oczywiście GND i +5V też są. I co ciekawe, na tych pinach komunikacyjnych pojawia się dokładnie to samo, co idzie przez USB, możliwe, że to po prostu wydobyte na zewnątrz piny nadawczy/odbiorczy kostki CH341. Skoro tak, to można chińskim windowsowym programem posterować urządzeniem, a korzystając z tych sygnałów - podsłuchać detalicznie komunikację. A podsłuchać dlatego, że dokumentacja do urządzenia skrzętnie pomija temat ładowania wzorców sygnałów. Podsłuchiwać można albo nadawanie, albo odbiór - do tego wystarcz kolejny gadżet z Chinowa - kabelek USB/TTL. Gdy mamy już rozeznanie co mniej więcej jest nadawane i odbierane - można pokusić się o połączenie tych strumieni. Zauważając, że nieaktywny stan logiczny na Tx, Rx to 1 - wystarczy na sygnałach owych wykonać iloczyn logiczny i to dać na przelotkę USB/TTL na wejście RxD, będzie ona wtenczas odbierała sumę strumieni danych - nadawczego i odbiorczego. Ot, żarcik taki, a do jego realizacji wystarczą dwie bramki NAND z 7400 :)

2_rxtxspy.jpg


No i proszę garstka faktów - aby załadować własny przebieg robimy tak:
- wysyłamy napis DDS_WAVEnn gdzie nn to numer przebiegu (01...64)
- czekamy aż generator odpowie literką W
- ciurkiem wysyłamy (binarnie, nie ASCII) 8192 16-bitowe słowa danych z próbkami kolejność bajtów LO, HI
- wysyłamy kolejne siedem 0x00 ... nie wiem po co, program z Chinowa tak robi, bez tego mi nie działało :(
- czekamy aż generator odpowie literkami HN co oznacza, że niby utrwalił próbki w pamięci

Tu niestety pascalowy program paskudny wyszedł, ponieważ tak ogólnie komunikacja z generatorem jest w ASCII i ogarnia to całościowo komponent TSdpoSerial, szybkie wysłanie surowych bajtów wymagało dostania się do jego niskopoziomowych wnętrzności - obiektu klasy TBlockSerial, szczęściem był publicznie dostępny, bez prucia komponentu.
Taki bazgroł testowy zatem - na zmianę podsyła dwie serie danych. Zwróćmy też uwagę na cudaczne sprawdzanie czy generator zapisał przebieg, tam nie ma 0x0A na końcu, ale za to potrzeba mu je podesłać - aby dalsza łączność była drożna.

Kod: Zaznacz cały

procedure TForm1.sendWaveFormData;
var n : integer;
    wave : array [ 1 .. 8192 ] of Word;
begin
  shape := shape xor true;
  for n := 1 to 8192 do
  begin
    if shape then
    begin
         if (n mod 2) = 0  then
            wave [ n ] := 0
         else
            wave [ n ] := n;
    end
    else
          wave [ n ] := n * (n mod 3);
  end;
  for n := 1 to 8192 do
  begin
    self.SdpoSerial1.SynSer.SendByte( Lo ( wave [ n ] ) );
    self.SdpoSerial1.SynSer.SendByte( Hi ( wave [ n ] ) );
  end;
  // a-po-co-to?
  for n := 1 to 7 do
  begin
    self.SdpoSerial1.SynSer.SendByte( $00 );
  end;
end;


Kod: Zaznacz cały

procedure TForm1.SdpoSerial1RxData(Sender: TObject);
var
   tempStr : String;
begin
    rxBuffer := rxBuffer + SdpoSerial1.ReadData;
    if RightStr( rxBuffer, 2) = 'HN' then
       begin
         rxBuffer := '';
         self.SdpoSerial1.WriteData( #$0A#$0A ); // czary mary
         self.Memo1.Lines.Add( '>>saved!' );
       end;
    if RightStr( rxBuffer, 1) = #$0A then
    begin
      tempStr := Trim( LeftStr( rxBuffer, Length( rxBuffer ) - 1 ) );
      if tempStr <> '' then
         begin
           if tempStr = 'W' then
              sendWaveFormData
           else
               self.Memo1.Lines.Add( tempStr );
          end;
      rxBuffer := '';
    end;
end;


Kod: Zaznacz cały

procedure TForm1.Button8Click(Sender: TObject);
begin
    self.SdpoSerial1.WriteData( 'DDS_WAVE01' + #$0A);
end;


tak statycznie, potworki z eksperymentów ARB1

3_moje1.jpg


Tu dręczenie urządzenia z firmowym oprogramowaniem, to jakiś Visual Basic? Normalnie, tnie się jak emo po śmierci chomika, ale jakoś działa.

https://youtu.be/MzpBPVD6hjo

https://youtu.be/AA4aZmSwBSU

Tu w akcji aplikacja pascalowa

https://youtu.be/Da7lEpsUyHo

A tak na ekraniku generatora

https://youtu.be/NITdpQKa1UA
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

Awatar użytkownika
phill2k
User
User
Posty: 272
Rejestracja: niedziela 18 paź 2015, 00:12

Re: [FY6900][Pascal] Zdalne sterowanie generatorem chińskich przebiegów - szkic/POC

Postautor: phill2k » poniedziałek 23 lis 2020, 23:53

To kolejne argumenty za tym, aby jednak zastanowić się nad przeróbką (podmianą) części zasilającej na coś bardziej sensownego, tym bardziej, że będę potrzebowała za niedługo skubnąć mu nieco prądu na +5V, nawet nie wiem (i czy ktoś wie?) jakie realne parametry prądowe ma to ustrojstwo zasilające w środku. No to tyle kwękania.

Posiadam FY6800-60 zasilacz to to ma kiepski pod względem wydajnościowym (przy dłuższym użytkowaniu generatora grzeje się paskudnie i z tego powodu sam sobie potrafi zrobić "kuku" ;) ) oraz pod względem parametrów (podobno sporo sieje zakłóceniami). W najbliższej przyszłości będę go wymieniał na coś bardziej konkretnego (trafo + regulatory liniowe).
Myślałem że "majfręd" wyciąga wnioski śledząc opinie kupujących i kolejne wersje będą coraz lepsze, albo co najmniej pozbawione wad poprzednich ale po tym co piszesz widzę że to tylko chłyt marketingowy :) , co do parametrów to znalazłem w sieci info że wydajność wbudowanej przetwornicy to +12V, -12V -> 135mA, +5V -> 500mA dla FY6800 ale podejrzewam że dla FY6900 jest podobnie, jak nie tak samo.

Awatar użytkownika
tasza
Geek
Geek
Posty: 1082
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

Re: [FY6900][Pascal] Zdalne sterowanie generatorem chińskich przebiegów - szkic/POC

Postautor: tasza » wtorek 24 lis 2020, 00:02

co do zakłóceń, to jeszcze nie sprawdzałam, nie chcę się wkurzać na zapas...
a zasilacze ludzie po prostu wymieniają na samoróbki, to chyba już klasyki gatunku:
https://sdgelectronics.co.uk/fy6900-sig ... fications/
https://www.youtube.com/watch?v=ZxxFSSdewHw
i tak się pomału w sobie zbieram, aby podobną akcję wykonać kiedyś, bo urządzonko w sumie fajne, a w takim miejscu suchar, no wstyd po prostu....
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)


Wróć do „Inne języki programowania”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość