Frequencer - Next generation hardware sequencer

Ok, genoeg getreuzeld. PCB onlangs besteld. Met een beetje mazzel volgende week solderen.
 
PCB is binnen. Solderen gaat me inmiddels makkelijk af. Eerste foutje opgespoord, de RST-lijn van het viertal MCP23017 IC's was niet goed aangesloten. Gelukkig had ik de boel op voetjes zitten dus kan ik verder met een niet-moeders-mooiste bypass.

Er gaat iets nog niet goed met de breakout richting het TFT-scherm ook. Moet nog na gaan meten waar dat fout gaat.

Di9V6xk.jpg
 
Ga je voor een eventuele productie versie ook trough hole gebruiken of stap je over op SMD?
 
Op zich zijn deze componenten prima als through-hole te sourcen en past de basic print ook prima in de kast, ik zou niet extreem veel besparen met SMD-componenten. Handsolderen van de hele print is ook max een uurtje werk. Ik overweeg voor het analoge deel (dat op een expansiekaart gaat komen) wel met SMD te gaan experimenteren. Fatsoenlijke DACs zijn moeilijk als through-hole te krijgen, plus er is op die kaart minder ruimte.
 
Hassle met het TFT-scherm ook uitgewerkt. Geen pinverwarring met de flat-cable connector, zoals ik dacht, maar een off-by-one vergissing in het toewijzen van de datapinnen van de Due. Pompen van data kost hierdoor helaas iets meer cycles dan onder de bedoelde layout (die precies op een SAM3X port aansloot). Voor de volgende revisie van de print zet ik ze wel recht, maar voorlopig heb ik het nu op kunnen lossen door de driver van de TFT wat pin-magic te laten uitvoeren.

YdP9gn2.jpg


Volgende stap wordt de code aanpassen om om te gaan met een kleine design change in de manier waarop ik besloten heb meerdere MCP23017 IC's te behandelen. Oorspronkelijk werkte ik vanuit een mega2560 bord, die maar twee bruikbare hardware interrupt-pinnen had, en alle 23017's diezelfde twee interruptlijnen deelden (eentje voor de lage bank van 8 ports, eentje voor de hoge). De Due kan interrupts voeren op iedere pin, dus er loopt nu een achttal interruptlijnen op het PCB. De code is daar nog niet op aangepast.

Als dat geregeld is kan ik alle encoders en LEDs aanspreken als het goed is. Als dat werkt kan ik gaan beginnen met het inbouwen van de PCB.
 
Moederbord ingeschroefd. Kom wat flat-cable krimpconnectors tekort, nadat mijn eerste zes flat-cables ten onder zijn gegaan aan een goedkope Chinese rol kabel met nèt niet de juiste maat, zodat alles scheefkrimpt. You get what you pay for.

xWkRDrK.jpg


Het ding nu uit USB kunnen pluggen, van tafel kunnen halen zodat ik ruimte heb om een krantje te lezen, zonder breadboards en spaghetti, dat is een beter gevoel.
 
Een beetje een raar avontuur met I2C gehad en dit moederbord. Alles lijkt een tijdje perfect te werken, maar dan komt er ineens een hoop poep binnen wanneer ik aan een encoder draai, en zie ik data die lijkt te impliceren dat er allerlei extra knoppen worden ingedrukt en loseglaten. Alsof de SAM3X zijn sync kwijt is aan de kant van de data-lijn. Als ik lang genoeg I2C data blijf veroorzaken, schiet de boel uiteindelijk in een mode waar alle I2C-transacties helemaal uit-erroren.

Na me helemaal suf te lezen blijkt dat de I2C-implementatie van de Due, zeker vlak na het uitkomen, niet helemaal jé-van-het was. Er zit sowieso een wat zwakke pull-up op van 1KΩ, en de boel schijnt inderdaad nogal rot om te gaan met bus errors.

Uiteindelijk heb ik een gekke oplossing gevonden, bijna uit meer geluk dan wijsheid: Voor het doen van een I2C lees-transactie breng ik nu de klok- en data-pinnen handmatig laag. De problemen zijn nu als sneeuw voor de zon verdwenen, met alleen zo af-en-toe 1 onzin-read die ik nog eruit kan debouncen. Ik kan nu met heel lang harken en verkeer veroorzaken soms in een situatie komen waarin hij alsnog met niets dan I2C errors terugkomt. Als ik op dat moment de stroom van de reset-pinnen afhaal en terugzet herstelt dat zichzelf.

Als geluk bij een ongeluk hangen de reset-pinnen van de betrokken ICs ook nog aan mijn klungelige bypass, dus ik kan dat nu naar een pin op de extensie-poort leiden om die volle bus-reset ook te automatiseren.

Ik ga voor de nieuwe revisie van het PCB wel wat doen om de I2C-bus wat bewuster in de layout te betrekken. Ik schakel dan gelijk over naar de secundaire I2C-poort op de Due, zodat ik er handmatig een stevigere pull-up aan kan hangen. Ik heb het gevoel dat het feit dat mijn 'trek de bus even laag'-truukje effect heeft impliceert dat de bus moeite heeft in deze hoek.

In ieder geval kan ik verder zonder deze versie van het PCB gelijk weg te moeten gooien.
 
Vanochtend een aantal revisie C van het moederbord-PCB en revisie B van de backplane-PCB bijbesteld. Op standje "doe rustig aan en goedkoop". Ik kan rustig doorwerken met deze versie. Sowieso gratis wat extra soldeerervaring, plus ik hoop dat de nieuwe C-revisie de hoeveelheid I2C-dropouts wat kan verlagen (ik heb wat dikkere printbanen met de hand getrokken voor SDA en SCL, én ik ben overgestapt naar een design met externe pull-ups).

De nieuwe backplane PCBs zijn nodig omdat de laatste revisie van het moederbord er van uitgaat dat het dode spoor richting een pull-down is opgelost.

Aan de software-kant ga ik eerst eens wat orde op zaken stellen in de grafische laag. Ik heb nu eigenlijk alleen letters tekenen geïmplementeerd, voor een goede user interface zijn uiteraard meer aspecten van belang.

USB en MIDI op het back panel inmiddels ook ontsloten. Wel cool: Het kastje kan nu dicht en met louter een USB-kabel worden aangesloten op mijn computer. Voelt ineens erg aan als een echt produkt.
 
Wow, mooi project man!
Ik zit ook al een tijdje te denken om rond een arduino een midi sequencer/router oid te maken.

Als ik mag vragen: hoeveel € zit er ongeveer in je BOM?

ps; vette case design ook
 
Grofweg:

  • Arduino Due: €44,95 (ga nog Chinese clones onderzoeken)
  • Rotary encoders: €4,95 p/s
  • Panelmount LEDs: €2,00 p/s
  • Panelmount drukknoppen: €5,00 p/s
  • TFT schermpje: ca €25,00
  • Stapel weerstanden/diodes/condensatoren en IC'tjes: Rond de €20,00
  • Flat cables en connectors: Rond de €40,00
  • Panel mount connectors voor MIDI, &c: Ongeveer €10,00

Daar komen dan nog de kosten van de behuizing en de PCBs bovenop. Behuizingen als deze zijn niet goedkoop in hele kleine oplages.

Als one-off heeft deze me nu ongeveer €800 gekost. Ik verwacht dat ik daar nog een flinke hap uit kan nemen als ik handiger / op hoger volume inkoop.
 
Tof man! Heerlijk als je die interface eindeloos kunt perfectioneren.
 
Leuk muziekje erbij.
Verder: succes gewenst met dit behoorlijk intensief project.
Vandaag 5 uur zitten te debuggen met Christiaan Zwanikken (tiep in in you tube) over het waarom een controller niet vooruit te branden was en zo als altijd is het iets lulligs.
Ik heb grote bewondering voor jouw queeste.
 
Gave video!

Aanradertje: een knop die - als je 'm ingedrukt houdt - de potmeter-acceleratie ophoogt. Dus normaal draaien = snelheid zoals getoond, knop + draaien = woep omhoog of omlaag.

Ik weet dat je huidige behuizing dit wellicht niet toestaat, maar misschien dat je 1 van de knoppen onder het menu kan repurposen zodat ze in zo'n modus springen als ze langer ingedrukt blijven.
 
Gave video!

Aanradertje: een knop die - als je 'm ingedrukt houdt - de potmeter-acceleratie ophoogt. Dus normaal draaien = snelheid zoals getoond, knop + draaien = woep omhoog of omlaag.

Ik weet dat je huidige behuizing dit wellicht niet toestaat, maar misschien dat je 1 van de knoppen onder het menu kan repurposen zodat ze in zo'n modus springen als ze langer ingedrukt blijven.

De encoders hebben inderdaad een push-action. Ik had daar in eerste instantie voor bedacht dat die gebruikt kunnen worden voor rusten en de end-of-sequence marker. Maar met langer ingedrukt houden zou ik wel iets van een turbo er op kunnen zetten. Goed idee.
 
Er loopt in de software nu een interne 96ppqn MIDI-clock die voorrang op zo ongeveer alles krijgt. Door de pin-verwisseling op de huidige revisie van het moederbord zijn data-transfers naar het LCD-scherm nu 2x zo langzaam als ze horen. Ondanks deze wat langzamere schermopbouw blijft de sequencer-klok nu gewoon strak doorlopen.
 
Een beetje berekenend hoeveel ruimte ik nodig heb voor program storage, heb ik met 256kbit EEPROM de boel een klein beetje onderschat. Met 8 layers, die elk 16 triggers kunnen hebben, waaronder een sequence met 16 nootwaardes en 16 secundaire waardes (gate length / velocity) kunnen hangen, ben ik iets minder dan 4KB kwijt voor een programma. Dat is dus 8 stuks op een 256kbit chip. PCB design dus aangepast aan een viertal van die krengen.

LunvPRA.png


Intussen zit ik door te programmeren aan de user interfacing en sequencer code. Blijkt lastig om dat werk half te doen. De interface moet de sequencer besturen. En om te weten hoe dat moet, moet die code bestaan. Groeit dus allemaal tegelijk, maar doet nu nog geen kont.
 
Ja, maar software en hitte zijn slechte bedgenoten. Helpt ook niet dat ik nog bezig ben met code-infrastructuur die niks tastbaars oplevert.
 
Back
Top