Cześć, jestem Wojtek i lubię pisać bloga na którym dzielę się moimi przeżyciami/myśleniami. A po poprzednim ogólnikowym wielkim poście nadszedł czas na konkret. Dzisiaj będzie o programowaniu Arduino i pewnym psie:
W skrócie to ilustruje jak czuję się próbując "programować". Ale nie płaczmy nad swoim nędznym losem tylko wklejmy kawałek kodu. Adnotacje robię po angielsku bo reszta też jest taka właśnie. Po angielsku. Demyt, jak to napisać poprawnie.
Git czy Frajer Hub?
To jest właśnie mój kod. Postanowiłem zmodyfikować projekt :ten właśnie, ale dodając wyjście CV 1V/oktawe, Gate i dwa oscylatory, a także kółeczko pitch bend. Nie będe się rozpisywał o kodzie bo wszystkie notatki są w nim wykomentowane. Co do klawiszy to jest ich 37, od F do F, ale to było jakieś chińskie gunwienko bo totalnie dziwnie była matryca podłączona, zamiast po kolei wszystkie kable w taśmie 1, 2, 3, 4, 5, 6, 7, 8 kolumn do 9, 10, 11, 12 i 13 rzędu to szło to tak:
4, 3, 2, 1, 8, 7, 6, 5, po kolei łączących się z rzędami 10, 11, 12, 13, ale najwyższych 5 nutek w 3 oktawie już było na żyle 9 taśmy. Trochę bez sensu, nie mówiąc już o tym, że kod którego użyłem jako bazy pewnie w ogóle by nie zczaił takiej kombinacji i zamiast dawać mi po kolei wszystkie nutki to kolejność byłaby dziwnie pomieszana. Pozamieniałem więc żyły miejscami i zrobiłem nowy konektor z goldpinów, teraz idzie to tak: 1, 2, 3, 4, 5, 6, 7, 8/ rzędy 10, 11, 12, 13, 9. Jeszcze się przekonamy czy to zadziała, bo nie dość, że dziwnie były podłączone te żyły (pewni w PRC dostali mikrokontroler z takim dziwnym rozkładem i tak zaprojektowali płytkę) to jeszcze ktoś pożałował diod na matrycę i nie ma ich na każdym przełączniku. Myślę, że raczej nie będzie to problemem, bo to i tak będzie monofoniczny synth, ani też nie będzie miał arpeggiatora, więc nie będzie maskowania ani ghostingu (a może będzie? patrz pies wyżej).
No dobra to w sumie tyle, jak będe miał nowego smartfonika to będe wrzucał takie piękne focie że złapiecie się za głowę, a na razie papa i buziaczki!
Yeah, ok, time for an english version as well, more writing... Anyway here is some of my program based on Jen Shen's Arduino MIDI keyboard, I'm trying to add CV/gate output and two wavetable oscillators, I already added Gate triggered by NoteOn, but I'm struggling with 16 bit PWM CV out now, how to calculate the value from a MIDI note? The link to Github is above (Git czy Frajer Hub)
I also salvaged a keyboard from an MC-7 tablehooter, it doesn't have diode on each switch, but it's going to be a mono synth anyway so probably no big deal. Or maybe big, we'll see. The keyboard was wired in a weird way, instead of having columns and rows arranged like this:
1, 2, 3, 4, 5, 6, 7, 8 connecting to
rows 9, 10, 11, 12, 13 as the notes get higher, it was more like this:
4, 3, 2, 1, 8, 7, 6, 5 connecting to rows 10, 11, 12, 13 and top 5 notes in the highest octave were connected to pin 9, so completely counterintuitive. I rearranged the wires so now it's in order:
1, 2, 3, 4, 5, 6, 7, 8 columns connecting to rows 10, 11, 12, 13, 9. I'll post some photos when I get a hold of a better camera.
That's all for now, if you know some 'Duino moves, feel free to chip in!
poniedziałek, 20 kwietnia 2015
poniedziałek, 6 kwietnia 2015
Najgorszy Marshall na świecie
Ha! No i stało się, zachciało mi się znowu pisać tego oto blożka w nadziei, że ktoś dorzuci swoje przemyślenia do moich. Tym razem tematem nie będzie mój słodki malutki Marshallik (chociaż on też pewnie doczeka się pościka bo planuję mu wszczepić Power Scaling i generalnie odświeżyć konstrukcję), ale malutki słodziutki syntezatorek!
Nadchodzi w życiu człowieka moment, kiedy nie wystarcza mu już Casio SA-65 z nasranym mnóstwem przesterów i optycznymi filtrami, a zaczynają mu być potrzebne takie rzeczy jak pitchbend, retriggerowalny envelope generator, jakieś porządne VCA, i większy wybór waveformów i oktaw niż to, co zapewnia kibord 2000 dla dzieciorów. Nie mówiąc już o dźwiganiu dwudziestokilogramowego casa na każdy koncert i próbę. Wniosek nasuwa się sam - trzeba zbudować coś od zera. Założenia projektowe są następujące:
- nie mam pieniędzy! gdybym miał to bym sobie kupił Shruthiego, Microkorga albo Rocketa Waldorfa. Wszystko powinno zamknąć się w maks 200 zeta i jak najwięcej rzeczy powinno zostać zdobyte lub odzyskane.
- nawet gdybym miał pieniądze, to skąd wiem, że skośnooki inżynier Korga zaprojektował ich sprzęt tak, żeby robił to co chcę? Dodatkowo w takich rzeczach za pieniądze jest mnóstwo funkcji których nie będe używał, ale bez nich nie opylałoby się sprzedawać tego szajsu bo większość normalnych syntezatorowców ma większe/inne potrzeby niż ja i nie kupili by tego. OT CO.
- ma być lekkie! Żadnych tam parapetów, dużych kejsów, to ma się zmieścić do stylowego gigbaga obitego niebieską skórą (który sobię uszyję) żebym mógł jak prawdziwy cyberpunk capnąć synth pod pachę i biec walczyć z korporacjami 2020 roku w próbowni.
- 3 oktawy mini klawiszy (z kiborda MC-7 znalezionego na śmietniku)
- pitchbend w zakresie +/- 1 do 12 półtonów (właściwie na chwilę obecną przychodzą mi do głowy tylko zastosowania dla bendowania oktawami, ale kto wie co mi zaraz będzie potrzebne i obudzę się z ręką w nocniku). Musi być kółeczko, joystiki mnie wkurwiają i są milion razy mniej stylowe.
- normalnie, mod wheel też, myślałem, żeby dać mu podwójny potencjometr, pół by szło do mikrokontrolera żeby generować MIDI, a drugim pół mógłbym regulować co bym chciał analogowego, poziom jakiegoś LFO, albo cokolwiek co ma potencjometr.
- ma wykorzystać chip CEM3391 którego mam dwie sztuki, a który zawiera: 2x VCA, ADSR, 24dB low pass filter z samooscylującym rezonansem i co najlepsze, każdy parametr na tym chipie jest sterowany napięciem od 0 do 5V! Niestety ma dziwne zasilanie +12V, +5V i -5V, ale pomyślałem - no byg deal bo zajumałem zasilacz od kasy fiskalnej na 15V, 12 i 5 się zrobi stabilizatorami, a -5 ICL7660 charge pumpem.
- zasilanie jakimś zwykłym zasilaczem 15V - 12V
- wyjście 1V/Oktawa żeby sterować filter i inne parametry klawiaturą oraz gdybym nie daj borze miał kiedyś okazję bawić się modularem to od razu mieć klawkę CV. Wyjście powinno być przełączane między trybem uwzglęgniającym pitchbend i pomijającym go
- wyjście z Gate normalnym i retriggerowalnym (nie wiem do końca jak, pewnie Arduino mogłoby wraz z wciśnięciem klawisza emitować krótki puls napięcia, wtedy retriggerowalny z każdym wciśnięciem były tylko Release, ale dla mnie spoko)
- nie była to moja pierwsza myśl/potrzeba, ale dobrze byłoby mieć wejście/wyjście MIDI, rozpiszę się więcej na ten temat w osobnym pościku. tylko podstawowe funkcje takie jak NoteOn, Off, PitchBend i Mod, może jeszcze coś.
- i tu dochodzimy do źródła dźwięku czyli tak zwanych oscylatorów. Jest w necie pełno schematów różnych analogowych VCO, na 555, na 4046, na 8093, 40106, mnóstwo. Ale pani Jadwigo, jest jeden problem - one wszystkie chcą +/- 12 albo nawet 15V! A ja tyle nie mam do dyspozycji, poza tym to całe babranie się z kompensacją temperatury, rozstrajaniem się, dobieranie tranzystorów, to jest maskara, nie mówiąc już o tym, ile miejsca w kibordziku zajęłaby taka płytka, bo elementów to oni sobie nie żałowali przy projektowaniu tego! A zatem analogowe VCO raczej odpada, za mało cyberpunkowe. Znalazłem coś takiego jak PICsynth. Myślałby kto - ideolo! Niestety nie wspiera pitchbenda, ani nie ma wyjścia z CV (MIDI też nie ma, ale to jakoś bym przebolał), pisałem do autora z pytaniem o te funkcje czy zamierza je wprowadzić i powiedział, że zamierza, ale to było pół roku temu i raczej nie ma na to widoków teraz. Więc PICsynth (swoją drogą ale analog na PICu) odpada. Next stop - Electric Druid! Sterowany CV 1V/octave cyfrowy oscylator, dużo funkcji i bajerów, lookin good! Niestety słabo z kupieniem, można zamówić moduł Waverider oparty na tym czipie, ale paaaaanie, co tak droooogo. Odpada, może spróbuję sam wgrać kod na czystego PICa, ale to już później, rozwojowo.
No i tu dochodzimy do punktu w którym jestem obecnie - Arduino! Kupiłem sobie klona Nano, małe, eleganckie, programowalne przez USB, duża społeczność, fora, projekty, 8 analogowych inputów, 3 wyjścia PWM, 13 pinów cyfrowych. Uznałem, że skanowanie klawiatury, kilku potencjometrów (pitchbend, detune i kilka guzików do wyboru oktaw, trybu gate, może waveformów) oraz wydalanie z siebie Gate'a, CV i dwóch oscylatorów na osobnych pinach cyfrowych albo PWM to nie będzie jakieś wielkie wyzwanie dla ATMegi 328. Poza tym, jako że pitchbend i detune byłyby czytane przez 10 bitowe ADC to mogłyby te wejścia służyć jakos wejśćia CV. I maaaaaan, żeby to było takie proste. Przyznaje, nie mam doświadczenia w programowaniu i z całą analogową resztą sobie poradzę, ale to Arduino mnie trochę hamuje. Widziałej dużo projektów podobnych do mojego, ale żaden nie robi wszystkiego czego potrzebuję. Np. tutaj koleżka robi klawkę MIDI, ALE bez pitchbenda, no i to jest tylko sterowanie. Tu z kolei jest już generacja dźwięków, MIDI i nawet CV, ale nie ma klawiatury, trzeba podłączyć osobną, a ja chciałbym, żeby to wszystko było na jednej płytce. Poza tym CV i wyjście używają DAC, a myślę, że jak na moje potrzeby 16 bitowy timer PWM na CV zupełnie styknie, na oscylatory pozostałe dwa 8 bitowe PWM też powinny być ok, albo nawet zwykły kwadrat na zwykłym pinie cyfrowym, a ja sobie go już zwaveshapeuję analogowo. Na domiar złego, w większości syntezatorowych projektów Arduino sygnał oscylatorów (jeśli jest więcej niż jeden) jest już zmiksowany wewnętrznie, ja potrzebuję osobnych wyjść żeby miksować, dodawać suby i inne bajery po swojemu, a na zmiksowanym sygnale dzielnik typu 4040 już się wyłoży. Dużo projektów ma też zaprogramowane jakieś filtry które przypuszczam zżerają najwięcej zasobów podczas gdy mi to jest zupełnie niepotrzebne. Z chęcią prostacko ściągnąłbym kod i wgrał go na płytkę bez myślenia licząc, że zadziała, ale niestety nic nie pasuje 100% do moich założeń i potrzeb, a jeszcze nie potrafię wyciąć potrzebnych fragmentów kodu i połączyć ich.
Kolejna opcja którą rozważam, to ominąć oscylatory na Arduino i zrobić z niego tylko kontroler MIDI z paroma gałkami oraz wyjściami CV/Gate, a oscylatory zrealizować na osobnym układzie jak np to: DSP G-plug. Wolalbym jednak trzymać się pierwotnego pomysłu, bo wydaje mi się, że to niezbyt trudne i 100% możliwe tylko ja jeszcze tego nie ogarniam. Na temat walki z Arduino będą jeszcze osobne pościki z próbkami kodu i innymi dywagacjami. Dodatkową korzyścią z takiego rozwiązania byłaby możliwość zrobienia z każdego gównianego kiborda od 1/3 do w porywach 1/2 lofi syntha.
Dooooobra, wiem, że TL;DR;, ale przejdźmy do ścieżki sygnałowej. Wyglądałaby ona mniej więcej tak:
dwa oscylatory -> mikser z suboscylatorami i external inputem - > pętla efektów -> filter -> VCA dwa kanały -> każdy kanał miałby wbudowany przester, myślałem o Racie z dry/wet blendem, ale widziałem też coś takiego:
Fajne bo proste, będe musiał przetestować. Marzy mi się taki patch: dwa trójkąty, odstrojone o kwintę, do tego sub trójkątny oktawę niżej od kwinty, na to jakiś przester w pętli FX przed filtrem, po filtrze też może jakiś drive do smaku i na tym jedziemy pitchbendy oktawami, oh maaan!
No dobra, to by było na tyle jeśli chodzi o pierwszy pościk dokumentujący mój festiwal ignorancji i prób budowania syntezatorów, masz jakieś komentarze? Dawaj! Chcesz zostać moim kolegą/koleżanką i znasz się na Arduino? Napisz coś, może widziałeś/aś projekt, który pasuje do moich założeń, a ja go nie wymieniłem? Obraziłbym się gdybyś się nie podzielił/a. Stay tuned na następne wypociny!
pozdro, Elektryczny Banan
Nadchodzi w życiu człowieka moment, kiedy nie wystarcza mu już Casio SA-65 z nasranym mnóstwem przesterów i optycznymi filtrami, a zaczynają mu być potrzebne takie rzeczy jak pitchbend, retriggerowalny envelope generator, jakieś porządne VCA, i większy wybór waveformów i oktaw niż to, co zapewnia kibord 2000 dla dzieciorów. Nie mówiąc już o dźwiganiu dwudziestokilogramowego casa na każdy koncert i próbę. Wniosek nasuwa się sam - trzeba zbudować coś od zera. Założenia projektowe są następujące:
- nie mam pieniędzy! gdybym miał to bym sobie kupił Shruthiego, Microkorga albo Rocketa Waldorfa. Wszystko powinno zamknąć się w maks 200 zeta i jak najwięcej rzeczy powinno zostać zdobyte lub odzyskane.
- nawet gdybym miał pieniądze, to skąd wiem, że skośnooki inżynier Korga zaprojektował ich sprzęt tak, żeby robił to co chcę? Dodatkowo w takich rzeczach za pieniądze jest mnóstwo funkcji których nie będe używał, ale bez nich nie opylałoby się sprzedawać tego szajsu bo większość normalnych syntezatorowców ma większe/inne potrzeby niż ja i nie kupili by tego. OT CO.
- ma być lekkie! Żadnych tam parapetów, dużych kejsów, to ma się zmieścić do stylowego gigbaga obitego niebieską skórą (który sobię uszyję) żebym mógł jak prawdziwy cyberpunk capnąć synth pod pachę i biec walczyć z korporacjami 2020 roku w próbowni.
- 3 oktawy mini klawiszy (z kiborda MC-7 znalezionego na śmietniku)
- pitchbend w zakresie +/- 1 do 12 półtonów (właściwie na chwilę obecną przychodzą mi do głowy tylko zastosowania dla bendowania oktawami, ale kto wie co mi zaraz będzie potrzebne i obudzę się z ręką w nocniku). Musi być kółeczko, joystiki mnie wkurwiają i są milion razy mniej stylowe.
- normalnie, mod wheel też, myślałem, żeby dać mu podwójny potencjometr, pół by szło do mikrokontrolera żeby generować MIDI, a drugim pół mógłbym regulować co bym chciał analogowego, poziom jakiegoś LFO, albo cokolwiek co ma potencjometr.
- ma wykorzystać chip CEM3391 którego mam dwie sztuki, a który zawiera: 2x VCA, ADSR, 24dB low pass filter z samooscylującym rezonansem i co najlepsze, każdy parametr na tym chipie jest sterowany napięciem od 0 do 5V! Niestety ma dziwne zasilanie +12V, +5V i -5V, ale pomyślałem - no byg deal bo zajumałem zasilacz od kasy fiskalnej na 15V, 12 i 5 się zrobi stabilizatorami, a -5 ICL7660 charge pumpem.
- zasilanie jakimś zwykłym zasilaczem 15V - 12V
- wyjście 1V/Oktawa żeby sterować filter i inne parametry klawiaturą oraz gdybym nie daj borze miał kiedyś okazję bawić się modularem to od razu mieć klawkę CV. Wyjście powinno być przełączane między trybem uwzglęgniającym pitchbend i pomijającym go
- wyjście z Gate normalnym i retriggerowalnym (nie wiem do końca jak, pewnie Arduino mogłoby wraz z wciśnięciem klawisza emitować krótki puls napięcia, wtedy retriggerowalny z każdym wciśnięciem były tylko Release, ale dla mnie spoko)
- nie była to moja pierwsza myśl/potrzeba, ale dobrze byłoby mieć wejście/wyjście MIDI, rozpiszę się więcej na ten temat w osobnym pościku. tylko podstawowe funkcje takie jak NoteOn, Off, PitchBend i Mod, może jeszcze coś.
- i tu dochodzimy do źródła dźwięku czyli tak zwanych oscylatorów. Jest w necie pełno schematów różnych analogowych VCO, na 555, na 4046, na 8093, 40106, mnóstwo. Ale pani Jadwigo, jest jeden problem - one wszystkie chcą +/- 12 albo nawet 15V! A ja tyle nie mam do dyspozycji, poza tym to całe babranie się z kompensacją temperatury, rozstrajaniem się, dobieranie tranzystorów, to jest maskara, nie mówiąc już o tym, ile miejsca w kibordziku zajęłaby taka płytka, bo elementów to oni sobie nie żałowali przy projektowaniu tego! A zatem analogowe VCO raczej odpada, za mało cyberpunkowe. Znalazłem coś takiego jak PICsynth. Myślałby kto - ideolo! Niestety nie wspiera pitchbenda, ani nie ma wyjścia z CV (MIDI też nie ma, ale to jakoś bym przebolał), pisałem do autora z pytaniem o te funkcje czy zamierza je wprowadzić i powiedział, że zamierza, ale to było pół roku temu i raczej nie ma na to widoków teraz. Więc PICsynth (swoją drogą ale analog na PICu) odpada. Next stop - Electric Druid! Sterowany CV 1V/octave cyfrowy oscylator, dużo funkcji i bajerów, lookin good! Niestety słabo z kupieniem, można zamówić moduł Waverider oparty na tym czipie, ale paaaaanie, co tak droooogo. Odpada, może spróbuję sam wgrać kod na czystego PICa, ale to już później, rozwojowo.
No i tu dochodzimy do punktu w którym jestem obecnie - Arduino! Kupiłem sobie klona Nano, małe, eleganckie, programowalne przez USB, duża społeczność, fora, projekty, 8 analogowych inputów, 3 wyjścia PWM, 13 pinów cyfrowych. Uznałem, że skanowanie klawiatury, kilku potencjometrów (pitchbend, detune i kilka guzików do wyboru oktaw, trybu gate, może waveformów) oraz wydalanie z siebie Gate'a, CV i dwóch oscylatorów na osobnych pinach cyfrowych albo PWM to nie będzie jakieś wielkie wyzwanie dla ATMegi 328. Poza tym, jako że pitchbend i detune byłyby czytane przez 10 bitowe ADC to mogłyby te wejścia służyć jakos wejśćia CV. I maaaaaan, żeby to było takie proste. Przyznaje, nie mam doświadczenia w programowaniu i z całą analogową resztą sobie poradzę, ale to Arduino mnie trochę hamuje. Widziałej dużo projektów podobnych do mojego, ale żaden nie robi wszystkiego czego potrzebuję. Np. tutaj koleżka robi klawkę MIDI, ALE bez pitchbenda, no i to jest tylko sterowanie. Tu z kolei jest już generacja dźwięków, MIDI i nawet CV, ale nie ma klawiatury, trzeba podłączyć osobną, a ja chciałbym, żeby to wszystko było na jednej płytce. Poza tym CV i wyjście używają DAC, a myślę, że jak na moje potrzeby 16 bitowy timer PWM na CV zupełnie styknie, na oscylatory pozostałe dwa 8 bitowe PWM też powinny być ok, albo nawet zwykły kwadrat na zwykłym pinie cyfrowym, a ja sobie go już zwaveshapeuję analogowo. Na domiar złego, w większości syntezatorowych projektów Arduino sygnał oscylatorów (jeśli jest więcej niż jeden) jest już zmiksowany wewnętrznie, ja potrzebuję osobnych wyjść żeby miksować, dodawać suby i inne bajery po swojemu, a na zmiksowanym sygnale dzielnik typu 4040 już się wyłoży. Dużo projektów ma też zaprogramowane jakieś filtry które przypuszczam zżerają najwięcej zasobów podczas gdy mi to jest zupełnie niepotrzebne. Z chęcią prostacko ściągnąłbym kod i wgrał go na płytkę bez myślenia licząc, że zadziała, ale niestety nic nie pasuje 100% do moich założeń i potrzeb, a jeszcze nie potrafię wyciąć potrzebnych fragmentów kodu i połączyć ich.
Kolejna opcja którą rozważam, to ominąć oscylatory na Arduino i zrobić z niego tylko kontroler MIDI z paroma gałkami oraz wyjściami CV/Gate, a oscylatory zrealizować na osobnym układzie jak np to: DSP G-plug. Wolalbym jednak trzymać się pierwotnego pomysłu, bo wydaje mi się, że to niezbyt trudne i 100% możliwe tylko ja jeszcze tego nie ogarniam. Na temat walki z Arduino będą jeszcze osobne pościki z próbkami kodu i innymi dywagacjami. Dodatkową korzyścią z takiego rozwiązania byłaby możliwość zrobienia z każdego gównianego kiborda od 1/3 do w porywach 1/2 lofi syntha.
Dooooobra, wiem, że TL;DR;, ale przejdźmy do ścieżki sygnałowej. Wyglądałaby ona mniej więcej tak:
dwa oscylatory -> mikser z suboscylatorami i external inputem - > pętla efektów -> filter -> VCA dwa kanały -> każdy kanał miałby wbudowany przester, myślałem o Racie z dry/wet blendem, ale widziałem też coś takiego:
Fajne bo proste, będe musiał przetestować. Marzy mi się taki patch: dwa trójkąty, odstrojone o kwintę, do tego sub trójkątny oktawę niżej od kwinty, na to jakiś przester w pętli FX przed filtrem, po filtrze też może jakiś drive do smaku i na tym jedziemy pitchbendy oktawami, oh maaan!
No dobra, to by było na tyle jeśli chodzi o pierwszy pościk dokumentujący mój festiwal ignorancji i prób budowania syntezatorów, masz jakieś komentarze? Dawaj! Chcesz zostać moim kolegą/koleżanką i znasz się na Arduino? Napisz coś, może widziałeś/aś projekt, który pasuje do moich założeń, a ja go nie wymieniłem? Obraziłbym się gdybyś się nie podzielił/a. Stay tuned na następne wypociny!
pozdro, Elektryczny Banan
Subskrybuj:
Komentarze (Atom)

