Skocz do zawartości

FlyingDutch

Użytkownicy
  • Zawartość

    810
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    32

Wszystko napisane przez FlyingDutch

  1. Cześć, ja tutaj żadnego hejtu nie widzę. @Elvis ma po prostu wątpliwości, które niestety podzielam. Jeśli uważasz, że nie używanie klasy string zapewni, że program nie będzie działał wadliwie - np. zawieszał się to gratuluję pomysłu Pozdrawiam BTW: @Elvis jest akurat użytkownikiem tego forum, który potrafiłby zrealizować to zlecenie bez problemów
  2. Cześć, nie chciałem się wtrącać bo to nie moja sprawa, ale dyskusja poszła w takim kierunku, że się odezwę.. @atMegatona, czy myślisz, że za pomocą Arduino spełnisz wymagania standardu "MISRA" (właściwie to jest kilka wersji tego standardu z róźnych lat). Wiesz ile kosztują narzędzia software'owe pozwalające stwierdzić zgodność kodu źródłowego z jedną z wersji tego standardu (dla konkretnego standardu języka C++ i przeważnie jedne ściśle określonej wersji kompilatora).? Myślę tu głównie o statycznych analizatorach kodu w języku C++. - jeśli nie wiesz to tym lepiej , bo często na nie nie stać firm. Po drugie zgodzę się tu niestety z kolegą @Elvis - nie podpisanie się z imienia i nazwiska jest podejrzane. Po trzecie, jak ktoś podaje tyle szczegółów i ma takie wymagania odnośnie jakości oprogramowania to niech się wysili na opis software'u w jakimś używanym technicznym standardzie np. w języku UML (no bo jak później rozstrzygać czy software jest zgodny ze specyfikacją). Tu link do jednego z narzędzi pozwalających stwierdzić zgodność ze standardem MISRA: https://www.perforce.com/solutions/audit-and-compliance?utm_leadsource=cpc-googleadwords&utm_campaign=QAC-CODINGSTANDARDS-RoW&utm_source=googleadwords&utm_medium=cpc&utm_adgroup=MISRA Pozdrawiam
  3. Cześć, dzisiaj zrobiłem próby z płytką uruchomieniową z ATMega128 i mogę stwierdzić, że nie są to błędy w implementacji procesora na układzie FPGA, ani błędnie działający klon programatora. Są to błędy w oprogramowaniu pod Windows 10 - niestety nie mogę na 100 % stwierdzić, czy to błąd w programie avrdude, czy bibliotece usblib, czy może w narzędziu "pyserial" (napisanym w Pythonie). Niestety chwilowo nie mam działającego Linuksa (padł mi dysk z Linuksem), żeby sprawdzić, czy tam działa wszystko poprawnie. Pozdrawiam
  4. Cześć, bardzo powoli posuwam się do przodu, teraz "avrdude" przynajmniej poprawnie rozpoznaje chińskiego klona "AVR JTAG-ICE". Teraz korzystając z tej skompilowanej przeze mnie (ze źródeł) wersji "avrdude" mam błąd podczas próby wysyłania pakietu do urządzenia: avrdude: Version 6.3, compiled on Mar 14 2020 at 11:11:00 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "C:\Users\mgabr\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino8/etc/avrdude.conf" Using Port : usb Using Programmer : jtag3 Setting bit clk period : 0.1 pgm->usbvid=0x1a86 pgm->usbpid=0x283c150 " avrdude: usbdev_open(): Found USB2.0-Serial, serno: ? avrdude: max packet size expected 512, but found 32 due to EP 0x82's wMaxPacketSize avrdude: usbdev_send(): wrote -22 out of 7 bytes, err = libusb0-dll:err [submit_async] submitting request failed, win error: The parameter is incorrect. avrdude: jtag3_send(): failed to send command to serial port avrdude done. Thank you. the selected serial port does not exist or your board is not connected Błąd: avrdude: usbdev_send(): wrote -22 out of 7 bytes, err = libusb0-dll:err /* * Split the frame into multiple packets. It's important to make * sure we finish with a short packet, or else the device won't know * the frame is finished. For example, if we need to send 64 bytes, * we must send a packet of length 64 followed by a packet of length * 0. */ do { tx_size = (mlen < fd->usb.max_xfer)? mlen: fd->usb.max_xfer; if (fd->usb.use_interrupt_xfer) rv = usb_interrupt_write(udev, fd->usb.wep, (char *)bp, tx_size, 10000); else rv = usb_bulk_write(udev, fd->usb.wep, (char *)bp, tx_size, 10000); if (rv != tx_size) { avrdude_message(MSG_INFO, "%s: usbdev_send(): wrote %d out of %d bytes, err = %s\n", progname, rv, tx_size, usb_strerror()); return -1; } bp += tx_size; mlen -= tx_size; } while (mlen > 0); Jest w tym fragmencie kodu pliku źród.: usb_libusb.c (od linii 342)
  5. Cześć, dzisiaj spróbowałem skompilować program do obsługi programatorów dla MCU AVR "avrdude" ze źródeł (dla Windows10 - ale wersja programu 32-bit). Źródła "avrdude" (wersja 6.3) pobrałem z tej strony WWW: http://download.savannah.gnu.org/releases/avrdude/ A kompilację przeprowadziłem według tego tutoriala: https://tomeko.net/other/avrdude/building_avrdude.php?lang=en Wszystko przebiegło bez problemów (screenshot po ./configure): Sama kompilacja (polecenie make) zajęła kilka minut, ale skompilowany program "avrdude.exe" został stworzony zgodnie z oczekiwaniami. Tutaj screenshot z testowego uruchomienia (środowisko MINGW32) skompilowanego "avrdude" exe: Teraz będę próbował osadzić tą wersję "avrdude.exe" w ArduinoIDE i sprawdzić, czy działa poprawnie (jeśli tak to będę edytował kod źródłówy). Program "avrdude" został skompilowany z symbolami debugger'a, zastanawiam się tylko jakiego debuggera można by użyć ? w MINGW mam zainstalowany "gdb", tylko nie wiem jak to połączyć z pracą "avrdude" razem z ArduinoIDE (pod kontrolą Windows)? Gdy będę miał jakieś rezultaty to napiszę w tym wątku. Pozdrawiam Update1: Pierwsze próby przeprowadzone ze skompilowaną ze źródeł wersją "avrdude"(6.3) z ArduinoIDE (1.9.0 beta) wskazują, że ta wersja działa poprawnie (OS Windows10 64-bit).
  6. Cześć, walczę dalej z zaprogramowaniem AVR-core za pomocą programatora opisanego w poście powyżej(klon ICE JTAG AVR) i ArduinoIDE pod Windows10. Dla wersji ArduinoIDE niższej niż 1.9.0 Beta - ArduinoIDE "nie widzi" programatora. Dla wersji Arduino 1.9.0 beta mam następujący błąd: Tutaj zrzut ekranu: Dla informacji - programator JTAG ICE podłączony do zestawu FPGA poprzez translatory poziomów logicznych. Poprawiłem też obsługę pinu "nrst" (reset AVR-core), dałem zewnętrzny rezystor 10 K jako "pulldown" do masy i przeniosłem ten sygnał na zewnętrzny pin (reset poziomem wysokim). Jest to zmiana jednej linijki w pliku constraints: ## Buttons set_property -dict { PACKAGE_PIN U7 IOSTANDARD LVCMOS33 } [get_ports { nrst }]; #IO_L19P_T3_34 Sch=pio[45] Co do samego programowania to edytowałem plik konfiguracyjny "avrdude.conf" zmieniając VID i PID (USB) dla mojego programatora (odczytane z Managera urządzeń Windows) ale te próby nie zakończyły się powodzeniem. Aktualnie planuję następujące działania: 1) Spróbować zaprogramować AVR-Core pod Linuksem korzystając z Arduino 2) Poszukać jakiejś starszej wersji "AVR Studio" i spróbować z niego zaprogramować układ (Windows) Jeśli komuś nasuwają się jakieś uwagi, lub podpowiedzi będę wdzięczny za podzielenie się nimi. Pozdrawiam mały update: 1) Linux na razie odpada bo definitywnie padł mi dysk z partycjami Linuksowymi 2) Zrobiłem próbę z Windows 7 (64) na VirtualBox'ie : zainstalowałem driver do "Atmel JTAG ICE" i "AVR Studio 4.13" skomplilowałem program "Blink" i próbowałem uruchomić "Debug'a" z "AVR Studio" - niestety ten sam problem co z Arduino (PID urządzenia się nie zgadza) - patrz zrzut ekranu: Ma ktoś pomysł jak to obejść ? Update 2: Po próbach z kilkoma sterownikami, kilkoma wersjami "AVR Studio" i grzebaniu w plikach konfiguracy6jnych "avrdude" (Arduino) doszedłem do wniosku, że nie obejdzie się bez zmian w kodzie źródłowym programu "AVRDude" i jego kompilacji. Ewidentnie ten chiński klon "AVR JTAG ICE" ma inne ID sprzętu niż oryginalny programator a właśnie "AVRDude" oraz "AVR Studio" oczekują konkretnych ID sprzętowych (zmiany w pliku konfiguracyjnym avrdude nie usuwają problemu). Pobrałem źródła "AVRDude" z tej strony i je analizuję: http://download.savannah.gnu.org/releases/avrdude/ Tutaj strona projektu "AVRDude": https://savannah.nongnu.org/projects/avrdude/ Pobrałem wersję avrdude 6.3 z podanej wyżej strony. W pliku źródłowym "jtag3.c" (Fragment zaczynający się od linii 1322) znalazłem komunikat wyświetlany przez ArduinoIDE: if (strncmp(port, "usb", 3) != 0) { avrdude_message(MSG_INFO, "%s: jtag3_open_common(): JTAGICE3/EDBG port names must start with \"usb\"\n", progname); return -1; } serdev = &usb_serdev_frame; if (pgm->usbvid) pinfo.usbinfo.vid = pgm->usbvid; else pinfo.usbinfo.vid = USB_VENDOR_ATMEL; /* If the config entry did not specify a USB PID, insert the default one. */ if (lfirst(pgm->usbpid) == NULL) ladd(pgm->usbpid, (void *)USB_DEVICE_JTAGICE3); for (usbpid = lfirst(pgm->usbpid); rv < 0 && usbpid != NULL; usbpid = lnext(usbpid)) { pinfo.usbinfo.flags = PINFO_FL_SILENT; pinfo.usbinfo.pid = *(int *)(ldata(usbpid)); pgm->fd.usb.max_xfer = USBDEV_MAX_XFER_3; pgm->fd.usb.rep = USBDEV_BULK_EP_READ_3; pgm->fd.usb.wep = USBDEV_BULK_EP_WRITE_3; pgm->fd.usb.eep = USBDEV_EVT_EP_READ_3; strcpy(pgm->port, port); rv = serial_open(port, pinfo, &pgm->fd); } if (rv < 0) { avrdude_message(MSG_INFO, "%s: jtag3_open_common(): Did not find any device matching VID 0x%04x and PID list: ", progname, (unsigned)pinfo.usbinfo.vid); int notfirst = 0; for (usbpid = lfirst(pgm->usbpid); usbpid != NULL; usbpid = lnext(usbpid)) { if (notfirst) avrdude_message(MSG_INFO, ", "); avrdude_message(MSG_INFO, "0x%04x", (unsigned int)(*(int *)(ldata(usbpid)))); notfirst = 1; } fputc('\n', stderr); return -1; } Podejrzewam, że ten if jest odpowiedzialny za niepowodzenie moich prób z edycją pliku konfiguracyjnego: if (pgm->usbvid) pinfo.usbinfo.vid = pgm->usbvid; else pinfo.usbinfo.vid = USB_VENDOR_ATMEL; , jak widać jest tu nadawany VID Atmel'a (chyba warunek z jakichś powodów nie był spełniony, chociaż w pliku konfiguracyjnym avrdude podawałem VID mojego programatora). Muszę jeszcze znaleźć jakiś opis jak skompilować te żródła pod Windows. Dzisiaj niestety muszę na tym zakończyć, ale będę drążył temat od poniedziałku. BTW: nie rozumiem dlaczego z tymi darmowymi projektami Soft-procesorów jest tak trudno: z projektem RISC-V to była droga przez mękę, a teraz z tym "AVR Core" jest podobnie. Nie orientuje się ktoś, czy są jakieś komercyjne IP-Core z soft-procesorami AVR dostępnymi dla FPGA Xilinx'a lub Intel'a ? Pozdrawiam
  7. Cześć, dopiero dzisiaj dotarł do mnie klon programatora/debuggera ICE/JTAG dla MCU AVR kupiony na AliExpress. To taki model: https://www.aliexpress.com/item/32871295257.html?spm=a2g0s.9042311.0.0.38364c4dJomjd4 Niestety wcześniej nie posiadałem żadnego programatora JTAG dla procesorów AVR (przez epidemię koronawirusa paczka była mocno opóżniona). Dzisiaj spróbuję zaprogramować ten soft-processor na zestawie FPGA CmodA7. Przewiduję sporo trudności bo jest to dość zabytkowy model programatora (jak i sama AtMega128 jest leciwa) i nie wiem jaka wersja kompilatora będzie poprawnie obsługiwała ten programator. Pozdrawiam BTW: robiłem próby z Arduino i "MegaCore", ale na razie nieudało mi się zaprogramować "AVR core".
  8. Cześć, jeśli chodzi o architekturę X86-64 to możesz też spróbować meta-dystrybucji Gentoo-Linux. Kilka razy robiłem za jej pomocą Linux'a "szytego na miarę" (łącznie z dostosowaniem jądra).. Niestety nie wiem jak to wygląda aktualnie - ostatnio taką okrojoną dystrybucję robiłem około 2010 roku. Jeśli nic nie zostało "spartaczone" w Gentoo w ostatnich latach to jest to według mnie dobry wybór. Niestety nauki i czytania dokumentacji jest sporo. Pozdrawiam
  9. Cześć, jeśli masz zainstalowaną aplikację "STM32CubeMX" to ona tworzy repozytorium kodu dla pobranych pakietów software (np. dla serii STM32F4x) w katalogu (Windows): C:\Users\TwojUser\STM32Cube\Repository\ i tam też należy szukać przykładów kodu. Np dla serii STM32F4x w katalogu: C:\Users\Twoj user\STM32Cube\Repository\STM32Cube_FW_F4_V1.24.1\Middlewares\ST\STM32_USB_Host_Library - patrz zrzut ekranu: Pozdrawiam BTW: nie wszystkie modele STM32 mają USB host'a.
  10. Powinny być bardzo zbliżone. Pozdrawiam
  11. Da się, ale i tak musisz napisać równania dla tego regulatora i je zrozumieć, w podanych linkach znajdziesz dane jak te równania wyglądają. pozdrawiam BTW: to są dość skomplikowane równania, zawierają całki i różniczki (o ile wiem takie równania można rozwiązywać w Excelu) - patrz artykuł: https://automatykaonline.pl/Aplikacje/Energetyka/metoda-symulacji-procesow-dynamicznych-finn-excel-2007 ale dużo łatwiej zrobić to w MATLAB/Simulink. Możesz też zrobić fizyczny regulator (sprzętowy) z użyciem Arduino i biblioteki PID i opisać wyniki korzystając np. z "Arduino processing".
  12. Cześć, Podstawowy algorytm i równania regulatora PID są ogólnodostępne - patrz link: https://pl.wikipedia.org/wiki/Regulator_PID A tu np. masz kod MATLAB regulatora PID do pobrania (musisz mieć założone konto w Mathworks): https://uk.mathworks.com/matlabcentral/fileexchange/22150-pid-controller-matlab-code https://uk.mathworks.com/matlabcentral/fileexchange/35163-matlab-based-pid-controller https://uk.mathworks.com/discovery/pid-control.html A tutaj trochę wi\ecej teorii: https://eia.pg.edu.pl/documents/184139/28374603/LAB_3_Material_pomocniczy_Czesc_1.pdf https://www.mathworks.com/videos/pid-control-in-matlab-simulink-117949.html https://uk.mathworks.com/videos/getting-started-with-simulink-part-4-tuning-a-pid-controller-1508444927396.html https://www.researchgate.net/post/How_could_I_make_a_MATLAB_code_to_design_a_PID_controller
  13. Cześć, mały update: oryginalnie ATMega103 nie miała interfejsu programowania JTAG, więc ten soft-procesor najprawdopodobniej trzeba programować jako ATMega128 (ATMega103 i ATMega128 są do siebie bardzo podobne i ATMege128 można za pomocą fuse-bits ustawić w trybie zgodności z ATMega103). Niestety obowiązki w pracy i brak czasu nie pozwoliły mi jeszcze tego sprawdzić. Pozdrawiam
  14. Cześć, najłatwiej jest to zasymulować korzystając z Arduino i biblioteki PID. Chba, że masz Matlab'a i Simulinka i chcesz w tych narzędziach zrobić symulację jako model matematyczny. Pozdrawiam
  15. Cześć @Treker, to dobry pomysł, aby wykorzystać te materiały, lecz niektóre z ćwiczeń dadzą się uruchomić tylko na płytce Mimas V.2 (ze Spartanem6), ale postaram się to jakoś podzielić miedzy dwie płytki ?Mimas/Elbert. Pozdrawiam
  16. Cześć, ja miałbym dwa pomysły na artykuły dotyczące tematów, które są dla mnie interesujące ze względu na technologie z którymi pracuję na co dzień: 1) Symulacje w LTSpice - chodzi mi o bardziej zaawansowane symulacje z użyciem wzmacniaczy operacyjnych. Interesowałyby mnie filtry wyższego rzędu oraz np. wzmacniacze izolacyjne (z izlolacją opto-galwaniczną). Ostatnio pracowałem nad wzmacniaczem izolacyjnym (unipolarne zasilanie napięcia dodatnie) o liniowej charakterystyce( Uin 0-10V, Uwy 0-3V) w oparciu o transoptror IL300 i wzmacniacze op. TLC272. Dosyć dużo czasu zajęło mi ustalenie odpowiedniego punktu pracy, gdybym to wcześniej przesymulował za pomocą LTSpice skończyłbym dużo szybciej to zadanie. 2) Programowanie procesorów STM32MP1 - chodzi mi głównie o komunikację miedzy rdzeniami Cortex-A7 i Cortex-M4. Oraz programowanie pod Linuxem w języku C\C++ (rdzenie Cortex-A7) dla tych CPU (np. framework GTK).. Sam mam kilka tematów opanowanych dla STM32MP1 np "CAN FD" i jego współpraca w jednej magistrali z CAN 2.0.(zarówno rdzenie A7 jak i M4), Dotychczas bazowałem na artykułach użytkownika @Elvis dotyczących tego tematu - niestety na innym forum Mam nadzieję, że @Elvis nie obrazi się na mnie za ujawnienie tego faktu? Sam mógłbym napisać artykuł na temat wstępu do języka HDL Verilog (ostatnio używam go coraz częściej), nie wiem tylko, czy miałby to być wstęp do omówienia składni, czy też bardziej bazować na serii prostych przykładów - eksperymentów? Pozdrawiam
  17. Cześć, pomyliłem się, powinno być: /*##-4- Put UART peripheral in reception process ###########################*/ if(HAL_UART_Receive_IT(&UartHandle, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK) { Error_Handler(); } gdzie RXBUFFERSIZE możesz podstawić dyrektywą preprocesora #define. Reszta uwag pozostaje w mocy Pozdrawiam
  18. Cześć, spróbuj wczytać do bufora więcej niż jeden bajt: /*##-3- Put UART peripheral in reception process ###########################*/ if(HAL_UART_Receive(&UartHandle, (uint8_t *)aRxBuffer, RXBUFFERSIZE, 5000) != HAL_OK) { Error_Handler(); } Dobrze jest też przerzutować bufer na (uint8_t *)aRxBuffer Przykład z CubeMX repository.. Pozdrawiam
  19. Cześć, rozwiązałem problem z pinem zegara dla programatora JTAG. Przeniosłem pin TCK z lokalizacji : set_property -dict { PACKAGE_PIN W2 IOSTANDARD LVCMOS33 } [get_ports { TCK }]; #IO_L5N_T0_34 Sch=pio[32] na pin W5 Artix'a (pin 36 GPIO) - jest to pin typu MRCC i ma odpowiedni routing pomiędzy zegarem a portem I/O: set_property -dict { PACKAGE_PIN W5 IOSTANDARD LVCMOS33 } [get_ports { TCK }]; #IO_L12P_T1_MRCC_34 Sch=pio[36] Teraz mogłem z pliku 'user constraints" xdc usunąć dyrektywę: #set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets TCK_IBUF] i nie ma żadnych ostrzeżeń związanych z pinem zegara dla programatora JTAG. Tak więc poprawny plik "user constraints" xdc dla mojej płytki FPGA jest następujący: ## Clock signal 12 MHz set_property -dict { PACKAGE_PIN L17 IOSTANDARD LVCMOS33 } [get_ports { clk }]; #IO_L12P_T1_MRCC_14 Sch=gclk create_clock -add -name sys_clk_pin -period 83.33 -waveform {0 41.66} [get_ports {clk}]; ## Buttons set_property -dict { PACKAGE_PIN A18 IOSTANDARD LVCMOS33 } [get_ports { nrst }]; #IO_L19N_T3_VREF_16 Sch=btn[0] ## GPIO Pins ## Pins 15 and 16 should remain commented if using them as analog inputs set_property -dict { PACKAGE_PIN M3 IOSTANDARD LVCMOS33 } [get_ports { rxd }]; #IO_L8N_T1_AD14N_35 Sch=pio[01] set_property -dict { PACKAGE_PIN L3 IOSTANDARD LVCMOS33 } [get_ports { txd }]; #IO_L8P_T1_AD14P_35 Sch=pio[02] set_property -dict { PACKAGE_PIN A16 IOSTANDARD LVCMOS33 } [get_ports { porta[7] }]; #IO_L12P_T1_MRCC_16 Sch=pio[03] set_property -dict { PACKAGE_PIN K3 IOSTANDARD LVCMOS33 } [get_ports { porta[6] }]; #IO_L7N_T1_AD6N_35 Sch=pio[04] set_property -dict { PACKAGE_PIN C15 IOSTANDARD LVCMOS33 } [get_ports { porta[5] }]; #IO_L11P_T1_SRCC_16 Sch=pio[05] set_property -dict { PACKAGE_PIN H1 IOSTANDARD LVCMOS33 } [get_ports { porta[4] }]; #IO_L3P_T0_DQS_AD5P_35 Sch=pio[06] set_property -dict { PACKAGE_PIN A15 IOSTANDARD LVCMOS33 } [get_ports { porta[3] }]; #IO_L6N_T0_VREF_16 Sch=pio[07] set_property -dict { PACKAGE_PIN B15 IOSTANDARD LVCMOS33 } [get_ports { porta[2] }]; #IO_L11N_T1_SRCC_16 Sch=pio[08] set_property -dict { PACKAGE_PIN A14 IOSTANDARD LVCMOS33 } [get_ports { porta[1] }]; #IO_L6P_T0_16 Sch=pio[09] set_property -dict { PACKAGE_PIN J3 IOSTANDARD LVCMOS33 } [get_ports { porta[0] }]; #IO_L7P_T1_AD6P_35 Sch=pio[10] set_property -dict { PACKAGE_PIN J1 IOSTANDARD LVCMOS33 } [get_ports { portb[7] }]; #IO_L3N_T0_DQS_AD5N_35 Sch=pio[11] set_property -dict { PACKAGE_PIN K2 IOSTANDARD LVCMOS33 } [get_ports { portb[6] }]; #IO_L5P_T0_AD13P_35 Sch=pio[12] set_property -dict { PACKAGE_PIN L1 IOSTANDARD LVCMOS33 } [get_ports { portb[5] }]; #IO_L6N_T0_VREF_35 Sch=pio[13] set_property -dict { PACKAGE_PIN L2 IOSTANDARD LVCMOS33 } [get_ports { portb[4] }]; #IO_L5N_T0_AD13N_35 Sch=pio[14] set_property -dict { PACKAGE_PIN M1 IOSTANDARD LVCMOS33 } [get_ports { portb[3] }]; #IO_L9N_T1_DQS_AD7N_35 Sch=pio[17] set_property -dict { PACKAGE_PIN N3 IOSTANDARD LVCMOS33 } [get_ports { portb[2] }]; #IO_L12P_T1_MRCC_35 Sch=pio[18] set_property -dict { PACKAGE_PIN P3 IOSTANDARD LVCMOS33 } [get_ports { portb[1] }]; #IO_L12N_T1_MRCC_35 Sch=pio[19] set_property -dict { PACKAGE_PIN M2 IOSTANDARD LVCMOS33 } [get_ports { portb[0] }]; #IO_L9P_T1_DQS_AD7P_35 Sch=pio[20] set_property -dict { PACKAGE_PIN N1 IOSTANDARD LVCMOS33 } [get_ports { INTx[7] }]; #IO_L10N_T1_AD15N_35 Sch=pio[21] set_property -dict { PACKAGE_PIN N2 IOSTANDARD LVCMOS33 } [get_ports { INTx[6] }]; #IO_L10P_T1_AD15P_35 Sch=pio[22] set_property -dict { PACKAGE_PIN P1 IOSTANDARD LVCMOS33 } [get_ports { INTx[5] }]; #IO_L19N_T3_VREF_35 Sch=pio[23] set_property -dict { PACKAGE_PIN R3 IOSTANDARD LVCMOS33 } [get_ports { INTx[4] }]; #IO_L2P_T0_34 Sch=pio[26] set_property -dict { PACKAGE_PIN T3 IOSTANDARD LVCMOS33 } [get_ports { INTx[3] }]; #IO_L2N_T0_34 Sch=pio[27] set_property -dict { PACKAGE_PIN R2 IOSTANDARD LVCMOS33 } [get_ports { INTx[2] }]; #IO_L1P_T0_34 Sch=pio[28] set_property -dict { PACKAGE_PIN T1 IOSTANDARD LVCMOS33 } [get_ports { INTx[1] }]; #IO_L3P_T0_DQS_34 Sch=pio[29] set_property -dict { PACKAGE_PIN T2 IOSTANDARD LVCMOS33 } [get_ports { INTx[0] }]; #IO_L1N_T0_34 Sch=pio[30] set_property -dict { PACKAGE_PIN U1 IOSTANDARD LVCMOS33 } [get_ports { TMS }]; #IO_L3N_T0_DQS_34 Sch=pio[31] set_property -dict { PACKAGE_PIN W5 IOSTANDARD LVCMOS33 } [get_ports { TCK }]; #IO_L12P_T1_MRCC_34 Sch=pio[36] set_property -dict { PACKAGE_PIN V2 IOSTANDARD LVCMOS33 } [get_ports { TDI }]; #IO_L5P_T0_34 Sch=pio[33] set_property -dict { PACKAGE_PIN W3 IOSTANDARD LVCMOS33 } [get_ports { TDO }]; #IO_L6N_T0_VREF_34 Sch=pio[34] set_property -dict { PACKAGE_PIN V3 IOSTANDARD LVCMOS33 } [get_ports { TRSTn }]; #IO_L6P_T0_34 Sch=pio[35] Pozdrawiam
  20. Tak, zgadzam się w pełni - zewnętrzny interfejs do debugowania CPU i bootloade r(działający np. na UART'cie) umożliwiający wczytanie programu dla procesora to bardzo pomocne i ważne części projektu CPU. TMS9900 niestety nie znam i nie miałem z nim do czynienia. Pozdrawiam
  21. Cześć, z tych wymienionych znam Z80 i PDP11 (dokładnie zwalona jednostka centralna z PDP [rosyjski układ scalony] była w sterownikach dysków twardych z krajów RWPG - chyba bułgarskich). PDP-11 miał bardzo ciekawą listę rozkazów, szczególnie rozkazy dwu-adresowe to było coś fajnego (gdzie rozkaz mógł działać nawet na dwóch lokalizacjach w pamięci). Co do reszty przemyśleń to się zgadzam, miło powspominać tamte czasy Kto wie może masz rację, że Rafał napisze kiedyś jakiś assembler lub kompilator dla swojego CPU. Pozdrawiam
  22. Hej, tutaj masz np. ten największy silnik: https://www.ebmia.pl/silniki-krokowe/214562-silnik-krokowy-86cm120-12nm.html a pod tym linkiem sterownik z dokładnym opisem działania sterownika ( w trybie "Pulse and direction"): https://www.ebmia.pl/sterowniki-silnikow-krokowych/626-sterownik-silnika-krokowego-ssk-b04-m880a-78a.html Przeczytaj sobie dokładnie działanie sterownika (odezwę się jutro - na dzisiaj muszę już kończyć). Pozdrawiam
  23. Cześć, łatwiej by było, gdybyś podał typy silników, wtedy mielibyśmy pod ręką wszystkie ich parametry i można by było dobrać jakieś sterowniki. Pozdrawiam
  24. Cześć, rozumiem, że podane momenty to momenty (bez przekładni mechanicznej). Komenda: S1 300mm - to ruch liniowy układu, to musiałbyś jeszcze podać jakie są przekładnie mechaniczne i jak jeden pełny obrót silnika przekłada się na ruch liniowy mechanizmu. Moment silnika 12 Nm to już całkiem sporo, czy taki moment jest potrzebny na samym silniku, czy w układzie już po przekładni mechanicznej? Pozdrawiam
×
×
  • Utwórz nowe...