Odtwarzanie sygnałów logicznych.

Cześć.

Czasami przydałby się jakiś prosty przyrząd, potrafiący "odtworzyć" pewna sekwencję logiczną na wyjsciach.

Obecnie mam taki problem, że musze zdebugować dość złożony problem, na około 16 liniach logicznych. Częstotliwości rzędu pojedynczych MHz. W zasadzie potrzebuję tylko sterować liniami, bez czytania (ale z czytaniem, przynajmniej kilku, była by bajka).

Widział ktoś może jakiś projekt takiego "odtwarzacza", do którego mogę wrzucić "nagranie" w formacie VCD oraz, najlepiej, miałby jakieś API do pythona lub C++?

To jest o rząd wielkości bardziej skomplikowane niż taki BusPirate.

Szukam bardziej projektu DIY niż gotowca.

Nie chcę tego robić samodzielnie. To ciężka orka jest. Ostatecznie wezmę Pi Pico, ale dalej: to jest ogrom pracy, może ktoś już to zrobił.

Reply to
heby
Loading thread data ...

W dniu 21.01.2024 o 22:56, heby pisze:

Moze czegos nie dostrzegam, dlaczego ma to byc ogrom (przy jakiejs amatorskiej rozdzielczosci)?

Reply to
Ghost

1) trzeba zaprojektować trasport USB na zasadzie double buffer i sensowny koncept kompresji w locie. To jest tygodnie pracy, w jakiejś prostej wersji, głównie po stronie uC. To nie jest machanie 2 drutami, tylko, powiedzmy, naście sekund "nagrania", czyli pewnie grube megabajty danych. 2) Trzeba zaprojektować sprytnie elektronike, być może potrzebna będzie translacja poziomów, dwukierunkowa, jakies kreatywne wykorzystanie przerwań, zatrzasków itd do uzyskania dużej rozdzielczości czasowej. 3) Trzeba wykombinować abstrakcyjny clock distribution w środku uC aby odtwarzanie eventów odbywało się w precyzyjny sposób, zgodny z czasem rzeczywistym. 3) Trzeba stworzyc jakąs namiastkę aplikacji, choćby prosty player z konsoli, jakies API itd. 4) Trzeba poprawić dziesietki bugów.

Na oko pół roku walki aby uzyskac jako tako uniwersalne narzędzie i to w jakiejś kompromisowej wersji. Pełnie: ciężko ocenić.

Zapewne, do jednego zastosowania dało by radę odpierniczyć byle jak, zahardkodować "nagranie" w Flashu i napisać na kolanie machanie drutami.

Rzecz w tym, że ja chce symulować w *HDL jakąs magistrale, wynikowy plik VCD załadować do takiego magnetofonu i odtworzyć, majac za kazdym razem stabilne warunki do debugowania kodu w prawdziwym hardware.

To by się mi przydało już kilka razy, więc przyda się pewnie kilka nastepnych razy.

Stąd pytanie o uniwersalny. Jestem zmęczony programowaniem kolejnego AVR na "jeden raz" udającego master magistrali ISA, czy coś w tym guście.

Reply to
heby

ale tak na prawde brakuje ci tylko playera

Reply to
Ghost

Tak, "tylko" playera.

Reply to
heby

Kiedyś (jakieś 8-10 lat temu) do podobnych celów używałem płytki z FT2232H a dokładnie do odczytywania i pisania pamięci równoległych NAND.

Jest tam opcja synchronicznego bit-bang i do tego dość dobre biblioteki w pythonie. Ma też funkcję typu "Host Bus Emulation Mode" gdzie może emulować szynę AT lub dowolnego MCU / CPU

formatting link

Gotowe płytki są do dostania:

formatting link
- Z tego co pamiętam to każdy kanał można osobno ustawić na 3.3 lub 5V więc odpada robienie level shiftera

c.

Reply to
Cezar

no moim zdaniem analizator to wieksza czesc roboty

Reply to
Ghost

Hmmm tam jest chyba trochę mało drutów. Zastanowie się nad tym jako opcją awaryjną.

Reply to
heby

ZTCP tam są cztery 8-bitowe porty

Reply to
Cezar

W dniu 2024-01-21 o 22:56, heby pisze:

Gdy komputery były na etapie 386 i DOS zrobiłem z PC analizator stanów logicznych. Zapełniałem RAM próbkami ze złącza Centronix. Było tam 5 linii wejściowych. Jeśli mnie pamięć nie myli to próbkowanie wtedy wyszło mi prawie równe 1MHz.

Centronix ma więcej linii wyjściowych. Jeśli to jeszcze istnieje (może w formie jakiejś przejściówki) to może jest szansa uzyskać większą prędkość i równomierne wystawiania kolejnych stanów. Przypuszczam, że to jest zły kierunek, ale może nasunie komuś coś innego.

A może pamiętać 'nagranie' w komputerze a na zewnątrz tylko mały bufor niezbędny do równomiernego wystawiania stanów. Może komunikacja Ethernet a nie USB. P.G.

Reply to
Piotr Gałka

Wszystkie współczesne komputery sprzetowo ograniczają prędkosc czytania z LPT (o ile mają, ale to sam jak wsadzisz np. wersję na PCIe), nie wykluczam że na poziomie haltowania procesora, bo cieżko to inaczej wyjaśnić.

Jesli napiszesz prosty program w asm robiący out w pętli na i7-12xx, dostaniesz taką samą częstotliwość jak na P1. Mowa o gołym DOSie. Około

500kHz<>1MHz. W dodatku jest to mocno niestabilne, w zależności od wersji chipsetu.

Sprawdzałem to kiedyś, nawet może i na grupie jakiś ślad po tym się pozostał, bo kiedyś pytałem, z resztą nie ja jeden.

To wszystko kosztuje czas na dev.

Reply to
heby

Ale w jakim trybie był skonfigurowany port? SPP? ECP? Tych trybów było trochę i każdy pracował z inną prędkością max. Ze 25 lat temu robiłem coś w asm z lpt1 w trybie rzeczywistym (domyślam się, że to masz na myśli pisząc "goły dos") i na pewno osiągałem powyżej 1MHz (coś mi się kojarzy ~8Mhz) na Pentium 200 MHz.

Reply to
Marek

Sprawdzałem to. Chyba wszystkie działały tak samo, czyli nie przeraczały jakiejś arbitralnej prędkości.

Nie wykluczone, że stare chipsety nie miały w ogóle funkcji haltowania CPU lub miały ją inaczej zrobioną. Mnogoś chipsetów i sposoby podpięcia też robią swoje. Nie wyklcuzam, że istnieje gdzieś płyta która nie haltuje CPU, ale używanie P200 ze specyficzną płytą do jakiegoś zastosowania dzisiaj, nie ma sensu.

Ba, nawet nie wiem jak to haltowanie było realizowane sprzętowo.

Ostatnia płyta, na której bawiłem się z LPT i nie udało się wyskoczyć poza 1MHz to był jakieś coś z Duronem i miagistralą PCI. Najstarszy, to był jakiś system na P1 (acz z końca produkcji, z wypasami) i tam nie pamiętam precyzyjnie, ale prędkość na pewno nie była kilka MHz.

Mam w domu Della SSF, który ma dedykowany port LPT. Jak znajdę chwię to odpale FreeDOSa z jakimś TurboC i zobaczymy co on potrafi, tam w środku jest bodaj i5-4xxx.

Reply to
heby

Gdzies tam w okolicach ISA pojawiały sie cykle oczekiwania na magistrali, i z grubsza pamietam, ze własnie ok 1us to trwało dla I/O.

Calkiem sporo strat, jak procesor ma zegar 33 .. 50 .. 100 .. 200 Mhz. Albo GHz.

Pózniejsze płyty główne, co miały port na pokładzie, moze i potrafiły być szybsze - nie wiem. Drukarka swoją szybkość ma, i za szybko tez nie ma sensu. W ECP pojawiło się DMA, to i sporo się zmieniło.

Niedawno mi chodził pomysł - konwerter USB-Centronics, i dorobić zewnętrzne taktowanie na linii Busy i/lub ACK.

Moze by dało radę szybko wypluwać.

Z drugiej strony - jakis atmega troche pamięci ma, i jak mu nie przeszkadzać, to wypluwać potrafi dosc szybko. PIC tez szybkie.

kilkanascie MHz sie chyba nie da, ale kilka wyrobi .. tu przykład generacji video

formatting link
J.

Reply to
J.F

Gdybym chciał to zrobić samodzielnie, wziąłbym Pi pico. Tam jest bardzo interesujacy koprocesor IO. Nawet kilka. Zrobienie dziesiątek MHz nie stanowi problemu.

Samo Pi "normalne" imho się średnio nadaje z uwagi na ciężkie programowanie bare-metal.

Reply to
heby

Jest jeszcze opcja AM335x od TI. W środku jest PRU (Programmable Real-Time Unit), który jest osobnym MCU taktowanym 200MHz z bezpośrednim dostępem do pamięci i GPIO.

Analizator zbudowany na czymś takim potrafi samplować 100MS/s

formatting link
tutaj udający PDP-11
formatting link
Tutaj gadający z 6502:
formatting link
Emulator Motorola 6805:
formatting link

płytki beaglebone używam w swoich projektach i są mega stabilne.

c.

Reply to
Cezar

Dzieki, zabawna sprawa: wczoraj wysoczyły mi dwa filmy na YT o "digita discovery". AI wie więcej, niż myślałem :)

Reply to
heby

Szkoda,że tylko 3.3Vmax

Reply to
Marek

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.