[6809] "10099-MBC9 MONOBOARDCOMPUTER 6809" - wiedźmy dłubanie nad uruchomieniem starocia

Kącik dla elektroniki retro - układy, urządzenia, podzespoły, literatura itp.
Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: [6809] "10099-MBC9 MONOBOARDCOMPUTER 6809" - wiedźmy dłubanie nad uruchomieniem starocia

Postautor: gaweł » poniedziałek 05 mar 2018, 23:27

tasza pisze:Widać, że wskaźnik Y jest inicjowany w 1/4 tabelki, cała definicja sinusa ($FF sampli) pokrywa 360', zatem $40 ustawi nas gdzieś na 90°. Potem inkrementacja wskaźników leci jednocześnie - mamy stałe przesunięcie i kółko, ale czad!!!

Krzywe Lissajous, fajne obrazki. Można poeksoerymentować z różnymi przesunięciami fazowymi pomiędzy przebiegami sin.
Lissa_1_1.png
(obrazek wygenerowany analitycznie) gdzie przesunięcie fazowe α=0, α=π/6, α=π/4, α=π/3, α=π/2.
Fajniejsze są obrazki z innym stosunkiem częstotliwości i przesunięcia fazowego. Przykładowo jedna częstotliwość jest dwa razy większe od drugiej:
Lissa_1_2.png
i przesunięcia fazowe są identyczne jak wyżej.

Możesz coś takiego wydusić na oscylku?
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

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

[6809] "10099-MBC9 MONOBOARDCOMPUTER 6809" - wiedźmy dłubanie nad uruchomieniem starocia

Postautor: tasza » wtorek 06 mar 2018, 22:47

♬ ☘ Moja muzyka do kodowania ♬ ♬ ♬ ☘
♫ ♩ ♪ Airbag ⚡ ☘ ⚡ Disconnected ♪ ♩ ♫
https://youtu.be/ECd2D7TufYE


Sinus i piła czyli co wynika z pionowego zygzaka

I w sumie do osiągnięcia ciekawych efektów nie potrzeba aż trzech kubków Grzańca Galicyjskiego, wystarczy jeden i tryb X-Y oraz programowo generowane przebiegi okresowe, powtórka z rozrywki:

Obrazek
Obrazek

Zupełnie przyjmijmy że przypadkiem pomyliły mi się kanały CH1 z CH2 i żmija pionowa wyszła...

Obrazek

Ale też wtedy błysk nowego pomysłu się pojawił - a może Mini 4 teraz do tego podłączyć? W końcu całkiem interesujące figury dało się drzewiej wyrysować przy pomocy generatorów z Analog Discovery 2.

Obrazek
Obrazek
Obrazek

Staruszek Mini 4 chyba nieswojo się w tym techno czuje, niemniej jednak uruchomił się ponownie bez stękania no i proszę! W trybie X-Y i na nim udało się wyświetlić programowo syntezowany przebieg. No i tak z formalnego punktu widzenia to mamy teraz cyfrowo generowaną podstawę czasu, no tak. A że przebieg ze wzorca a nie z przetwornika, to już detal, zabawa się rozkręca.

Pierwszy smuteczek niewielki jaki się objawił to mizerna nieco szerokość obrazu, wynika to z niewielkiej czułości wejścia X i małej amplitudy zadawanych przez Motkę sygnałów. AD2 jest cwane i potrafi wyprodukować przebieg o amplitudzie blisko 5V, a moja instalacja? No więc poprawka niezbędna się okazała i dość prosta - dodajemy wzmacniacz na jednej z pozostałych połówek AD708. Amplituda sygnału z przetwornika to około 2.5Vpp, chcąc mieć jakieś 10V (na tyle maksymalnie pozwoli mi zasilanie) potrzeba wzmocnić 4x no i przebiegi ustawić symetrycznie względem zera. I taka oto modyfikacja schematu powstała:

Obrazek

Dobudowany wzmacniaczyk x4 jest jednocześnie sumatorem odwracającym, dzielnik napięcia (pot) rozpięty pomiędzy plus i minus zasilania umożliwia wycyrklowanie przebiegu w połowie skali.

Poletko doświadczalne, miejsca dość i można sobie używać.

Obrazek
Obrazek

Układzik wzmocnił sygnał zgodnie z oczekiwaniami, ale przebieg był przycinany na jednym z krańców, ot - pozostała jeszcze regulacja, aby min-max były centralnie względem zera.

Obrazek
Obrazek

Poprawki niebieskim potencjometrem i jest całkiem nieźle - piłokształtna podstawa czasu gotowa, haha!

Obrazek

No i teraz generowany przebieg sinusoidalny wygląda całkiem sympatycznie i zdrowo. Może nie jest na całą szerokość ekraniku, ale do obserwacji póki co jest doskonały.

Obrazek
Obrazek

I w tym momencie kolejny dziki pomysł - to może podziałkę sobie sieknąć po długości? Taką z kreseczkami najlepiej? Albo pionowe i poziome prowadnice domalować, będzie kursoropodobnie?

Tak się właśnie wczorajszy wieczór zleciał - na kombinowaniu jak tu do sinusoidy dołożyć kolejne elementy ekranowe, migawki za koleją:

Obrazek
Obrazek
Obrazek
Obrazek
Obrazek
Obrazek

Obrazek

Model cyfrowego oscyloskopu?

Jakkolwiek dziwnie to nie zabrzmi - ale radosne dłubanie me w tym kierunku właśnie poszło i finalnie zaskutkowało programikiem :arrow: https://github.com/bienata/monoboard9/b ... 0808-3.asm (wersje pośrednie i mocno eksperymentalne: dac0808-1.asm i dac0808-2.asm)

Program w pętli głównej woła cyklicznie trzy procedurki: do malowania sinusa, do malowania podziałki i do kursora (sic!).

dac0808-3.asm pisze:

Kod: Zaznacz cały

loop:
   jsr   processWave
   jsr processScale
   jsr processCursor
   jmp  loop


Rysowanie siekanej podziałki i samej sinusoidy jest dość nudne, ale za to kursor jest ciekawszy:

dac0808-3.asm pisze:

Kod: Zaznacz cały

processCursor:
      ; return if disabled
      lda   hasCursor
      beq   .processCursorEnd
      ; set cursor pos
      lda xPos
      sta VIA1+ORB
      ; tick
      lda   #$FF
      sta VIA1+ORA      
.vertline:
      dec VIA1+ORA      
      lda VIA1+IRA      
      bne .vertline      
      ; get sample @ cursor
      ldb xPos
      ldx   #SINE_WAVE_256
      abx      
      lda   ,x      ; has wave[xpos] :)      
      sta VIA1+ORA   ; draw horizontal
      ; tick
      lda   #$FF
      sta VIA1+ORB      
.horizline:
      dec VIA1+ORB      
      lda VIA1+IRB      
      bne .horizline
.processCursorEnd:
      rts


Po wymalowaniu pionowej linii o pozycji zadanej zmienną xPos, procedurka wylicza adres próbki odpowiadającej tej pozycji, pobiera jej wartość i maluje linię poziomą na wysokości tejże próbki. Mamy zatem krzyżyk podążający za przebiegiem. Oczywiście powstało zagadnienie nawigacji tym na kolanie zrobionym kursorem, zatem do całości dołożyłam odbieranie znaczków, ale w przerwaniach, aby nie zaburzać działalności plastycznej uprawianej w pętli głównej. Kod handlera IRQ takowy jest:

dac0808-3.asm pisze:

Kod: Zaznacz cały

irqHandler:
      ; confirm irq reading stat
      lda      ACIA+STATR      
      ; get char from RX
      lda      ACIA+RDR
      sta      ACIA+RDR   ; do echo

      cmpa #'z'
      beq moveXleft

      cmpa #'x'
      beq moveXright

      cmpa #'c'
      beq toggleCursor

      cmpa #'a'
      beq toggleAxis

      rti



Oczywiście dalej jest jeszcze cześć wykonawcza modyfikująca pozycję xPos oraz dwie flagi do włączania i wyłączania (takie toggle) i kursora i poziomej podziałki.

Statycznie-fotograficznie wygląda zabawka moja tak:

Sam sinus (ponownie, ale dla kompletności)
Obrazek
Obrazek

Sinus z włączoną podziałką:
Obrazek
Obrazek

Sinus z włączoną podziałką i kursorem na ujemnej połówce sinusa:
Obrazek
Obrazek

Sinus z włączoną podziałką i kursorem na dodatniej połówce sinusa:
Obrazek
Obrazek

I fotoplastikon z serii - ``jak to jest zrobione``

Obrazek
Obrazek
Obrazek
Obrazek

Bardziej na żywo działanie programiku prezentuje się następująco:

https://youtu.be/RiExyErHTPc

Zastanawia mnie takie falowanie obrazu na lampie zależnie od ilości elementów, muszę poeksperymentować co na to ma wpływ oczywiście oprócz ilości elementów do wyrysowania (po odjęciu jednej fazy rysowania jest bez falowania)

https://youtu.be/XMgL2J8LU9o

Prawie jak Rigol :)
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

Awatar użytkownika
inż.wielki
User
User
Posty: 307
Rejestracja: niedziela 20 gru 2015, 23:11

Re: [6809] "10099-MBC9 MONOBOARDCOMPUTER 6809" - wiedźmy dłubanie nad uruchomieniem starocia

Postautor: inż.wielki » wtorek 06 mar 2018, 22:54

Ten ostatni film to mnie wgniótł w fotel. Jak zrobić z oscyloskopu analogowego cyfrowy. Podziwiam i gratuluję. A teraz klasycznie: wincyj!

Maciej SQ9NJL
Posty: 2
Rejestracja: czwartek 08 mar 2018, 12:42

Re: [6809] "10099-MBC9 MONOBOARDCOMPUTER 6809" - wiedźmy dłubanie nad uruchomieniem starocia

Postautor: Maciej SQ9NJL » czwartek 08 mar 2018, 21:20

No to w końcu mogłem poznać szczegóły tego projektu który tak bacznie obserwowałem na YT! :)
Wielki szacunek za Twoje doświadczenia. Przyznam że narracja postu bardzo dobrze uzupełnia całość :)

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

[6809] "10099-MBC9 MONOBOARDCOMPUTER 6809" - wiedźmy dłubanie nad uruchomieniem starocia

Postautor: tasza » niedziela 11 mar 2018, 00:28

♬ ☘ Moja muzyka do kodowania ♬ ♬ ♬ ☘
♫ ♩ ♪ Psycrence ⚡ ☘ ⚡ A Frail Deception ♪ ♩ ♫
https://youtu.be/rLMgFKdFZoM



Apetyt rośnie

... w miarę jedzenia, no tak. Choć ja jednak z tych niejadków z niedowagą jestem, to drobne sukcesy z rysowaniem na ekranie Mini-4 uskrzydliły i powstała nagła ochota na więcej. Czyli na model-zabawkę prawdziwego DSO, nawet kulejący i zrobiony z tego co pod ręką. Kluczowy element to oczywiście przetwornik analogowo-cyfrowy, ale do obróbki szybszych sygnałów kostka musi być nieco żwawsza niż poprzednio występujące układy. Witamy zatem na planie ADC0804 - ośmiobitowy przetwornik A/C z sukcesywną aproksymacją o czasie konwersji około 100 us, do zabawy wyśmienity. Dokumentacja układu tutaj: :arrow: https://www.intersil.com/content/dam/In ... 803-04.pdf

A tak wygląda w podstawowej aplikacji, w trybie autonomicznym (sam się biedak taktuje):
Obrazek

Budowa:
Obrazek

Dylemat skąd tu kondensator 150..200 pF wytrzasnąć i to taki, który będzie zacnie wyglądał na þłytce stykowej.
Obrazek

Może bez przesady jednak.
Obrazek

I taki oto rurkowy, szklany został wylosowany.
Obrazek

Wygląda dostatecznie dziwnie na tle reszty plątaniny.
Obrazek

Oczywiście AD2 na podorędziu, ale jednak zaczyna mi brakować takiego prawdziwego, klasycznego, analogowego generatora...no tak jakoś.
Przetwornik zapięłam do portu B układu VIA-2, wejście do Analog Discovery, do generatora W1, zagonik z przetwornikiem.
Obrazek

Pierwsze próby z przetwornikiem, po wystartowaniu konwerter jest samograjem, układ RC zapewnia autonomiczną pracę, kwestia tylko, aby wystartować skubańca zwierając na chwilę /WR do masy. Częstotliwość taktowania wyszła na poziomie 9 kHz, nie wyrywa to z majtek, ale do eksperymentów, które planuje z powodzeniem wystarczy.
Obrazek
I tu ciekawostka przy okazji: zasilony, ale nie wystartowany przetwornik ADC0804 potrafi się czasem (ale nie zawsze) mocno nagrzać, po starcie wszystko wraca do normy. Deko niepokojące zjawisko a i ręczne odpalanie kostki upierdliwe zaczyna być, coś sobie zaniedługo zatem wymyślę do tego.

Transparentność

Sprawdzenie jak funkcjonuje przetwornik w Motorolkowym ekosystemie mym takim oto prostym strzępkiem kodu:

Kod: Zaznacz cały

.transparent:
   lda   VIA2+IRB   ; get sample      
   sta VIA1+ORA   ; put sample   
   jmp   .transparent


To klasyczny przesmark prosty - pobranie danej z A/C i zapisanie do C/A, bez żadnej synchronizacji ani nic, na pełnych obrotach pracowitej Księżniczki. Kilka testowych przebiegów dla przykładu, nałożone na siebie - widać zgodność faz sygnałów wejściowego i wyjściowego, ale też konsekwencje konwersji A/C/A - wynikowy przebieg jest dość mechaty.
Obrazek
Obrazek
Obrazek

Test że tak ujmę przepustowości układu, widać, ze w moich realiach 2kHz wejściowego sygnału zaczynają generować problemy, sinus to jeszcze niech tam...
Obrazek
Ale prostokąt już wymaga sporej wyobraźni w interpretacji. Kłania się Pan Nyquist.
Obrazek

Rzut oka na futerkową sinusoidę powstałą po zsamplowaniu tej śliczniej, którą wyprodukowało AD2.
Obrazek

Kolejny kod, tym razem z malowaniem podstawy czasu. Przy okazji ponazywałam te przetworniki sobie jakoś po ludzku, po kilku pomyłkach i malowaniu przebiegu z pionie to było konieczne.

Kod: Zaznacz cały

TIMEBASE   .eq      VIA1+ORB
SAMPLEIN   .eq      VIA2+IRB
SAMPLEOUT   .eq      VIA1+ORA
.osc:
      lda   SAMPLEIN
      sta SAMPLEOUT
      inc TIMEBASE
      jmp .osc


Na ekranie Mini-4 przebieg ma niezłe ADHD, jest wyświetlany jakkolwiek bądź.

Obrazek
Obrazek

Na żywo wygląda to równie nerwowo.

https://youtu.be/yNCRJpe5gj8

Synchronizacja

Z powyższego widać, że aby cokolwiek sensownie zobaczyć na ekraniku Mini-4 sygnał pokazywany w osi Y musi być zsynchronizowany z biegnącą w X podstawą czasu. Ot, podstawy działania oscyloskopu, piszą o tym w szkolnych podręcznikach. Niestety już mniej piszą jak to zrealizować i to na drodze czysto programowej, no w końcu zachciało mi się cyfrowego oscylka.

Koncepcja moja na trigger programowy wygląda jak na bazgrole poniżej.
Obrazek
I już wyjaśniam co jest do czego w bohomazie, a mianowicie: jeżeli wykryjemy interesującą nas wartość progową `A` (dla ułatwienia przyjęłam wirtualne zero na poziomie $80), to jest to potencjalnie interesujący nas moment, od którego można zacząć kolekcjonować próbki. Tyle tylko, że taki moment powtórzy się w każdym półokresie ( rys: A') i przebieg będzie dalej latał jak poparzony. Trzeba zatem zaraz za pierwszym złapanym progowym samplem `A` odczekać chwilkę (kilka próbek) i pobrać kolejną wartość `B`. I teraz, zależnie od relacji pomiędzy próbkami A>B lub B>A możemy stwierdzić czy mamy do czynienia z narastającą czy opadającą częścią przebiegu w ramach jednego półokresu. Interesuje nas wariant B>A czyli narastające zbocze. Matematycznie to jest zwykłe określanie znaku pierwszej pochodnej funkcji, jak widać matma przydaje się nawet na płytce stykowej.

Tu testowe półprodukty działania testowych programików, no powiem szczerze - umordowałam się z tym triggerem, tym bardziej że u mnie niestety powtarzalność wykrywania zboczy zależy też od szybkości narastania/opadania badanego przebiegu czyli nie tylko znaku ale i od wartości pochodnej.
Obrazek
Obrazek

Takie to dziwadła były:
https://youtu.be/PxPOrpz-yeU

O mało co - DSO

Po wielu układankach udało mi się wypracować kawałek kodu, który meldował na oscyloskopie miejsca mogące być potencjalnymi momentami wyzwolenia podstawy czasu czy rozpoczęcia kolekcjonowania próbek.
Obrazek

Whoooooa! Oto sygnał wejściowy z AD2, wygnał wyjściowy na DAC i drugi DAC produkujący podstawę czasu, normalnie odjazd!

Obrazek
Obrazek

No i przebiegi przestały wierzgać na ekranie i dały się jakoś sensownie sfotografować w końcu.
Obrazek
Obrazek
Obrazek
Obrazek

Dalej to właściwie było reużycie procedurek do kursora i poszatkowanej ośki, zaczęło to wyglądać całkiem sensownie - sinus na Mini-4 i rozebrany na czynniki pierwsze na Rigolu.
Obrazek
Obrazek
I podobnie dla trójkąta.
Obrazek
Obrazek

Po dołożeniu kursora robi się niezły galimatias - ale co ciekawe stabilnie stojący na ekranie, ot trigger na kolanie napisany działa jak złoto!
Obrazek
Obrazek

Problemik tylko taki drobny się wykluł, że pętelka przyczajona na nadejście próbek o zadanych wartościach wysmażała mi luminofor na lampie cholera jedna, no ale tu wiele nie zrobię, niestety. Dodanie negacji/toggle podczas fazy czekania rozrzucało wartości nieco, ale i tak problem jest. Mini-4 nie ma wyprowadzonego sygnału wygaszania wiązki, szkoda wielka. Eksperymenty robiłam zatem przy minimalnej jasności i rozmemłanej maksymalnie plamce, ponieważ większość moich pomyłek skutkowała zatrzymaniem plamki w miejscu.

Obrazek
Obrazek

Rzeczony kod pętłi głównej z triggerem:
osc-demo-2.asm pisze:

Kod: Zaznacz cały

triggerWait:
      ; dummy move beam to save
      neg SAMPLEOUT  ; the osc lamp
      lda   SAMPLEIN   ; get sample      
      cmpa #trigLevel
      bmi   .triggerWait   ; wait if < trig
      ; first sample > trig
      jsr smallDel   ; let wave rise a bit
      lda   SAMPLEIN   ; get next sample                  
      cmpa #trigLevel+trigHeight
      bpl   .waveInSync   ; if > trig+heigh - wave is rising
      jmp .triggerWait
.waveInSync
      ; triggered - save samples
      ldx   #waveForm
.scan:
      lda   SAMPLEIN
      sta   ,x+
      cmpx #waveForm+$FF      
      bne .scan
      ; play stuff on the screen like DSO :))))))
      ldx   #waveForm
      jsr processWave
      jsr processScale
      jsr processCursor
      jmp .triggerWait


A całość jak zwykle :arrow: https://github.com/bienata/monoboard9/b ... demo-2.asm

Film kręcą:
Obrazek

Tak wygląda to uspokojone na zdjęciach - z Analog Discovery 2 różne kształty przebiegu i współczynniki symetrii

Obrazek
Obrazek

A to zachowanie aplikacji przy zmianach ustawień generatora w AD2. Widać momenty, że program nie jest w stanie wykminić punktu startu i przestaje generować podstawę czasu, no, to jest do poprawy stanowczo. Ale i tak jest śmiesznie.

https://youtu.be/ivXqyjTFN04

Na górze róże, na dole fiołki

Obrazek
Obrazek

A kruk czeka cierpliwie i jak się tam coś kiedyś zewrze i jak grzmotnie...

Obrazek

...to będzie dobranoc.
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

SuperGość
Uber Geek
Uber Geek
Posty: 2346
Rejestracja: piątek 04 wrz 2015, 09:03

Re: [6809] "10099-MBC9 MONOBOARDCOMPUTER 6809" - wiedźmy dłubanie nad uruchomieniem starocia

Postautor: SuperGość » niedziela 11 mar 2018, 07:01

:like:

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: [6809] "10099-MBC9 MONOBOARDCOMPUTER 6809" - wiedźmy dłubanie nad uruchomieniem starocia

Postautor: gaweł » niedziela 11 mar 2018, 13:11

tasza pisze:A kruk czeka cierpliwie i jak się tam coś kiedyś zewrze i jak grzmotnie...

Jestem przekonany, że kruk jest nieziemsko cierpliwy. Czy przypominasz sobie, by sprawił ci kiedykolwiek problemy? :D

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse


Wróć do „Retro”

Kto jest online

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