Skocz do zawartości

FlyingDutch

Użytkownicy
  • Zawartość

    865
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    33

Wszystko napisane przez FlyingDutch

  1. Cześć, według mnie to zwykły rezystor, a miernik jest produkcji ZSRR (litery na mikro-amperomierzu są rosyjskie). Pozdrawiam
  2. Cześć, w językach HDL trochę inaczej się do tego podchodzi. Każdy moduł ma swój interface , czyli porty wejściowe i wyjściowe. Wystarczy cyklicznie za pomocą zegara pobudzać porty wejściowe i w oknie symulatora obserwować interesujące nas sygnały (wejściowe i wyjściowe). Musisz utworzyć instancje testowe swoich modułów i jako sygnały wejściowe podawać im pobudzenia (wartości generowane w teście). Zaprezentuję przykład na jednym prostym module, ale różnica przy wielu modułach jest taka, że tworzymy instancje wszystkich modułów i cyklicznie (z okresem zegara) generujemy dla nich wartości sygnałów wejściowych. Oto przykład - prosty moduł stopera w Verilogu (moduł stopwatch): `timescale 1ns / 10ps module stopwatch( input clock, input reset, input start, output a, b, c, d, e, f, g, dp, output [3:0] an, output [3:0] d0, output [3:0] d1, output [3:0] d2, output [3:0] d3 ); // 4 zmienne przechowujące 1 cyfrę : reg [3:0] reg_d0, // częsci dziesiętne sekundy reg_d1, // sekundy reg_d2, // sekundy*10 reg_d3; // minuty // przepisanie wartości na wyjście na potrzeby testbench assign d0 = reg_d0; assign d1 = reg_d1; assign d2 = reg_d2; assign d3 = reg_d3; reg [22:0] ticker; //zmienna potrzebna do podziały częstotliwości, aby otrzymać zegar 10hz wire click; // always, w którym następuje podział częstotliwości 50Mhz przez 5.000.000 aby otrzymać 10Hz (12 MHz przez 1200000) always @ (posedge clock or posedge reset) begin //ten always wywołuje się na narastającym zboczu zegara "clock" lub wejścia "reset" if(reset) // jeżeli reset = 1 ticker <= 0; // zerujemy licznik, który służy do dzielenia częstotliwoci else if(ticker == 1_199_999) // jeżeli licznik == 4.999.999 | 1 199 999 ticker <= 0; // zerujemy go (liczymy od 0 do 4.999.999, czyli 5mln), tak jak od 0 do 1 to 2, bo (0, 1) else if(start) // jeżeli ticker różne od 4.999.999 i start == 1 ticker <= ticker + 1; // dodajemy 1 do zmiennej ticker end assign click = ((ticker == 1_199_999)?1'b1:1'b0); // zmienna 'click' = 1 raz co 0.1s (10Hz), always @ (posedge clock or posedge reset) begin // ten always wywołuje się na narastającym zboczu zegara "clock" lub wejścia "reset" if (reset) begin // jeżeli reset == 1 reg_d0 <= 0; // zerujemy wszystkie cyfry reg_d1 <= 0; reg_d2 <= 0; reg_d3 <= 0; end else if (click) begin if(reg_d0 == 9) begin // jeżeli reg_d0 == 9, znaczy że reg_d0 <= 0; // zerujemy reg_d0 (najmłodsza cyfra)(9 -> 0) // teraz będziemy musieli dodać 1 do cyfry sekund if (reg_d1 == 9) begin // jeżeli ta cyfra sekund to 9 reg_d1 <= 0; // to ją zerujemy (9 -> 0) // jeżeli (9 ->0) cyfra sekund, to musimy dodać 1 na 2 pozycji sekund if (reg_d2 == 5) begin // jeżeli ta cyfra == 5 reg_d2 <= 0; // to zerujemy ją (5 -> 0) bo liczymy sekundy do (59 -> 00) // musimy dodać 1 do minut if(reg_d3 == 9) // jeżeli licznik minut == 9 reg_d3 <= 0; // to zerujemy licznik minut else // jeżeli jednak licznik minut różny od 9 reg_d3 <= reg_d3 + 1; // dodajemy 1 do licznika minut end else //else_3 // jeżeli 2 cyfra sekund różna od 5 reg_d2 <= reg_d2 + 1; // dodajemy do niej 1 end else //else_2 // jeżeli 1 cyfra sekund różna od 9 reg_d1 <= reg_d1 + 1; //dodajemy do niej 1 end else //else_1 // jeżeli cyra dziesiętnych sekund różna od 9 reg_d0 <= reg_d0 + 1; // dodajemy do niej 1 end end reg [17:0]count; // dzielnik częstotliwości zrealizowany na liczniku always @ (posedge clock or posedge reset) begin // always wywołuje się na narastającym zboczu zegara (50MHz) lub resetu if (reset) // jeżeli reset == 1 count <= 0; // zerujemy licznik else // w pzreciwnym wypadku count <= count + 1; // dodajemy do licznika 1 50mln razy na sekundę end reg [6:0]sseg; reg [3:0]an_temp; reg reg_dp; always @ (*) begin case(count[17:16]) // sprawdzamy 2 najstarsze bity licznika 2'b00 : begin // jeżeli równe 00 sseg = reg_d0; // konwersji poddajemy najmłodszą cyfrę an_temp = 4'b1110; // włączamy do wyświetlania najmłodszą cyfrę reg_dp = 1'b1; // wyłączamy kropkę end 2'b01 : begin // jeżeli równe 01 sseg = reg_d1; // konwersji poddajemy cyfrę sekund an_temp = 4'b1101; // włączamy do wyświetlania 2 od prawej strony cyfrę reg_dp = 1'b0; // włączamy kropkę end 2'b10 : begin // jeżeli równe 10 sseg = reg_d2; // konwersji poddajemy cyfrę dziesiątek sekund (10*s) an_temp = 4'b1011; // włączamy do wyświetlania 3 od prawej strony cyfrę reg_dp = 1'b1; // wyłączamy kropkę end 2'b11 : begin // jeżeli równe 11 sseg = reg_d3; // konwersji poddajemy cyfrę minut an_temp = 4'b0111; // włączamy do wyświetlania 4 od prawej strony cyfrę reg_dp = 1'b0; // włączamy kropkę end endcase end assign an = an_temp; // dekodowanie cyfry zawartej w zmiennej "sseg" na taką, aby można było wyświetlić na wyświetlaczy 7-seg reg [6:0] sseg_temp; always @ (*) begin case(sseg) 4'd0 : sseg_temp = 7'b1000000; 4'd1 : sseg_temp = 7'b1111001; 4'd2 : sseg_temp = 7'b0100100; 4'd3 : sseg_temp = 7'b0110000; 4'd4 : sseg_temp = 7'b0011001; 4'd5 : sseg_temp = 7'b0010010; 4'd6 : sseg_temp = 7'b0000010; 4'd7 : sseg_temp = 7'b1111000; 4'd8 : sseg_temp = 7'b0000000; 4'd9 : sseg_temp = 7'b0010000; default : sseg_temp = 7'b0111111; //dash endcase end assign {g, f, e, d, c, b, a} = sseg_temp; assign dp = reg_dp; endmodule Jak widzimy mnoduł ma tylko trzy porty wejściowe i te musimy w teście pobudzać: input clock, input reset, input start, A oto test dla tego modułu: `timescale 1ns / 10ps //////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 08:29:26 06/19/2018 // Design Name: stopwatch // Module Name: C:/Users/MGabryelski/Documents/Xilinx/_DEV/Stopwatch_Verilog01/stopwatchTest.v // Project Name: Stopwatch_Verilog01 // Target Device: // Tool versions: // Description: // // Verilog Test Fixture created by ISE for module: stopwatch // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // //////////////////////////////////////////////////////////////////////////////// module stopwatchTest; // Inputs reg clock; reg reset; reg start; // Outputs wire a; wire b; wire c; wire d; wire e; wire f; wire g; wire dp; wire [3:0] an; wire [3:0] d0; wire [3:0] d1; wire [3:0] d2; wire [3:0] d3; // Instantiate the Unit Under Test (UUT) stopwatch uut ( .clock(clock), .reset(reset), .start(start), .a(a), .b(b), .c(c), .d(d), .e(e), .f(f), .g(g), .dp(dp), .an(an), .d0(d0), .d1(d1), .d2(d2), .d3(d3) ); initial begin clock = 0; forever #42 clock = ~clock; end initial begin // Wait 100 ns for global reset to finish #100; reset = 1; #100; reset = 0; #100; start = 1; // Add stimulus here //tutaj dajemy dalsze pobudzenia end endmodule To jest generacja zegara (sygnał: clock): initial begin clock = 0; forever #42 clock = ~clock; end , a dalej są generowane pobudzenia dla sygnałów reset i start. Odpalamy symulację i możemy obserwować przebiegi czasowe dla naszych modulów. Pozdrawiam
  3. Cześć, ja ją widzę pierwszy raz. Na Aliexpress jest dodatkowo z "USB Blaster" (zresztą w Banggood też) co czyni ten zestaw naprawdę wart zakupu (przynajmniej w mojej ocenie) . Dzięki za ten link Pozdrawiam
  4. Cześć, właśnie w przedsprzedaży pojawiła się w chińskim sklepie Banggood.com ciekawa płytka FPGA oparta na układzie FPGA Cyclone IV w cenie 115 PLN. Oto link do tego zestawu FPGA: https://www.banggood.com/ALTERA-Cyclone-IV-EP4CE6-FPGA-Development-Board-Kit-Altera-EP4CE-NIOSII-FPGA-Board-and-USB-Downloader-Infrared-Controller-p-1622523.html?rmmds=search&cur_warehouse=CN Co najciekawsze płytka ma bardzo dużo fajnych peryferiów na pokładzie i zawiera kostkę 64Mbit SDRAM co pozwala zaimplementować soft-procesor NIOSII z dużą pamięcią. Poza tym dużo fajnych interfejsów jak : PS2, RS232, VGA, AS-interface. Uważam, że stosunek ceny do wyposażenia zestawu FPGA jest bardzo dobry. Problemem może być dobra dokumentacja, ale z reguły dla chińskich wyrobów w stosunkowo krótkim czasie pojawia się dokumentacja pozwalająca korzystać z tych wyrobów. Pozdrawiam
  5. Cześć, jeśli kolega założyciel wątku może się podzielić pełnym kodem rozwiązania to niech go dołączy do wątku. Na pewno się przyda wielu innym użytkownikom forum Pozdrawiam
  6. Cześć, widać, że robot ma nawet zapas mocy. Spróbuj tak, jak kolega wyżej napisał ustawić współczynnik P na te 20 i wyzeruj D i I. D - odpowiada za niwelowanie "szybkich" zmian a I za "powolnych". Postaraj się stopniowo zwiększać te wartości (o ile pamiętam jak robiłem PID'a to te wartości końcowe były małe w porównaniu do P). Najlepiej z podanych linków wybierz jedną metodę ustawiania parametrów i staraj się postępować zgodnie z jej opisem. Pozdrawiam
  7. Cześć, trzeba by wszystko policzyć - jakie masz momenty silników, jakie masy są umieszczone "na robocie" i jaki jest ich rozkład. Musiałbyś też zobaczyć jak wyglądają wyniki z filtru Kalmana. Wydaje mi się, że powinieneś poczytać więcej teorii - dobór parametrów regulatora PID jest trudny i najlepiej zastosować jakąś sprawdzoną metodę. Pozdrawiam
  8. Cześć, może w otwartej pętli sprzężenia zwrotnego masz za małe wzmocnienie, wtedy to już kaplica. Pozdrawiam
  9. Hej, to najpierw sprawdź jaka jest odpowiedź układu przy otwartej pętli. 20 dla członu P może być, ale dla członu D to trochę dużo. Tutaj masz kilka linków jak dobierać parametry dla regulatora PID: https://termoregulatory.pl/pl/blog/p-dobor-nastaw-pid-w-praktyce https://automatykab2b.pl/technika/46618-strojenie-pid-metody-doboru-nastaw-czesc-1 https://eia.pg.edu.pl/documents/1113028/0/KSS_Dobor_nastaw_PID.pdf Pozdrawiam
  10. Cześć, czy używasz regulatora PID ze wszystkimi członami ? Jakie masz współczynniki do tych członów? Próbowałeś zobaczyć jak robot się zachowuje w otwartej pętli sprzężenia zwrotnego? Tutaj masz cały kurs dot. regulacji PID: https://iautomatyka.pl/kurs-regulacji-pid-wstep-cz-1-34/ obszerny ale bardzo dobrze napisany. Pozdrawiam
  11. Zapewne ułatwioną cyrkulację powietrza. Pozdrawiam
  12. Cześć @ethanak, ja w takiej sytuacji mówię nieodmienie: "Zamiast realizować wyprawy do krawędzi spróbujcie przekopać się przez ten naleśnik". Wtedy płaskoziemca zaczyna analizować ten pomysł, a że nie grzeszy inteligencją zajmuje mu to trochę czasu, a ja mam spokój Pozdrawiam
  13. Cześć, czy projektujesz i wykonujesz biżuterię? Te prace z twojej strony www są bardzo ciekawe. Pozdrawiam
  14. Cześć, zobacz ten link: https://electronics.stackexchange.com/questions/404040/uart-expander-5-ports-to-11-ports są tam wymienione podobne expandery tylko zamiast I2C jest tam SPI ale to chyba nie powinien być problem. Pozdrawiam Hej: linie SPI są wspólne dla wszystkich urządzeń podłączanych, tylko linie CS jest potrzebna jedna taka linia na każde urządzenie (mogą to być wolne linie )
  15. Cześć, Błąd 403 protokołu HTTP mówi, żę dostęp do zasobu sieci jest zakazany - strzelam, że nie założyłeś bezpłatnego konta przed próbą pobrania sterownika. Pozdrawiam
  16. Cześć, dzisiaj miałem chwilkę czasu i sprawdziłem układ VGA na płytce prototypowej - były tam błędy przy wtyczce VGA (pomyłka w pinach linii RGB). Po poprawce cały układ na płytce FPGA działa zupełnie poprawnie (są wszystkie składowe koloru). Pozdrawiam
  17. Cześć, obawiam się, że jednak trzeba będzie używać tego starego oprogramowania. Te linki podsumowują sytuację: http://www.retrotechnology.com/herbs_stuff/gal.html http://elm-chan.org/works/pgal/report_e.html http://www.armory.com/~rstevew/Public/Pgmrs/GAL/_ClikMe1st.htm http://www.brouhaha.com/~eric/retrocomputing/mmi/palasm/ Pozdrawiam BTW: tutaj jest post dot. programowania GAL'i na EEVBlog: https://www.eevblog.com/forum/microcontrollers/gal-design-software/
  18. Cześć, pytanie jak w tytule. Robił to ktoś praktycznie? Czy można jakoś pobrać (w łatwy sposób) kursy akcji polskich spółek na naszej giełdzie z ostatnich np. 2 lat?, Jakie struktury danych? planowałem: 1) dzień (numer próbki), 2) czas z danego dnia pracy (co minutę, może rzadziej co kilka minut) 3) dla danej minuty cechy: kurs początkowy, kurs końcowy, ile akcji sprzedanych, ile akcji kupionych Czyli ogólnie 3 osiowy tensor . Jakie warstwy dobrać najlepiej w modelu? Jaki optymalizator i funkcja straty? Czy takie prognozowanie ma w ogóle sens (może jest to zjawisko tak losowe, że takie predykcje nie mają sensu)? A może jeszcze inne dane powinny być uwzględnione? Pozdrawiam
  19. Cześć, daj znać jak kupisz jakiś zestaw uruchomieniowy FPGA i jak zaczniesz swój projekt. Chętnie bym tutaj poczytał o projektach innych użytkowników bo ogólnie mało się dzieje w tym dziale pozdrawiam
  20. Cześć, nie - u jakiegoś dystrybutora chyba to był Farnell. Pozdrawiam
  21. Niestety jak chcesz robić ciekawsze projekty to Elbert ma za mało zasobów - to jest świetna płytka dla kogoś zupełnie początkującego (ja też od niej zaczynałem), ale nie nadaje się do większych projektów. Jego dużą zaletą jest fakt iż jest nieźle wyposażony w układy peryferyjne i jest do niego kurs VHDL - nie musisz się bawić w czytanie schematów. Pozdrawiam
  22. Cześć, są różnice pomiędzy SDRAM a DDR RAM (v.2 i v.3) główna polega na tym, że odczyt danych jest na jednym zboczu zegara a nie obu. Tutaj masz dokładniejsze porównanie: https://www.diffen.com/difference/DDR_vs_SDRAM Tak do programowania programator JTAG. Ja wcześniej używałem takiego programatora Digilent'a: https://kamami.pl/programatory/234563-digilent-jtag-hs3-programator-ukladow-fpga.html I miałem z nim ciągłe kłopoty, przy zakupie tego zestawu FPGA QMTECH kupiłem chiński klon "Xilinx cable" : https://pl.aliexpress.com/item/32805986808.html?spm=a2g0s.9042311.0.0.70934c4dpK7I3S i ten programator działa bardzo dobrze (testowany ogólnie z czterema zestawami FPGA). Pozdrawiam
  23. Cześć, nic się nie zmieniło i sprawuje się bardzo dobrze Pozdrawiam
  24. Cześć, z zestawów FPGA dostępnych w polskich sklepach poleciłbym - Xilinx: https://kamami.pl/zestawy-uruchomieniowe/560134-artix-7-35t-arty-zestaw-ewaluacyjny-dla-fpga-artix-7.html https://kamami.pl/zestawy-uruchomieniowe/562401-digilent-cmod-a7-35t-modul-uruchomieniowy-z-fpga-artix-7-410-328-35.html Intel - SoC (z hard procesorem): https://kamami.pl/zestawy-uruchomieniowe/558403-terasic-de0-nano-soc-kit-p0286-zestaw-startowy-z-ukladem-altera-cyclone-v-soc.html Niestety ostatnio jest bardzo niekorzystny dla kupujących kurs dolara i wszystkie tu podane zestawy przekraczają podany budżet. Dlatego bardziej opłacają się zakupy w chińskim sklepie. Polecam Xilinx: https://pl.aliexpress.com/item/1000006630084.html?spm=a2g17.12010612.8148356.2.25967fb20oPfiK https://pl.aliexpress.com/item/32964497318.html?spm=a2g17.12010612.8148356.4.25967fb20oPfiK https://pl.aliexpress.com/item/4000170003461.html?spm=a2g17.12010612.8148356.6.25967fb20oPfiK https://pl.aliexpress.com/item/4000170042795.html?spm=a2g17.12010612.8148356.8.25967fb20oPfiK Tą ostatnią z płytek posiadam i opisywałem jej cechy we wcześniejszych postach. Użycie chińskich płytek jest trudniejsze - nie ma przykładowego pliku "constraints" (xdc) i dużo szczegółów trzeba doczytać ze schematu. Tutaj jeszcze link do ciekawej płytki z układem intela Cyclone V (planuje jej zakup za jakiś czas): https://pl.aliexpress.com/item/1000006622149.html?gps-id=pcStoreJustForYou&scm=1007.23125.137358.0&scm_id=1007.23125.137358.0&scm-url=1007.23125.137358.0&pvid=db56bce2-77fc-44a5-be5e-9000c221c0dd&spm=a2g0o.store_home.smartJustForYou_482569341.5 Pozdrawiam
  25. Hej, fajny projekt. Tak jestem z Bydgoszczy i skończyłem Tech. Elektroniczne w 1986 roku. Pozdrawiam
×
×
  • Utwórz nowe...