MIDI-Recorder

 Juni 2008


-----

Ausgangssituation
Der Drehgeber
Speicher satt
Rechenknecht
Schaltpläne, Platine, Quellcode
Ein Gehäuse für die Elektronik
Innenaufbau
Bedinungsanleitung
Endprodukt


-----
 

Ausgangssituation

Irgendwie muss ich mich nicht ausgelastet gefühlt haben, als ich mir gedacht habe, mal was wohnzimmertaugliches mit Elektronik auf die Beine zu stellen.  

[Bild(11.7k)]


Es muss also nicht nur funktionieren, sondern auch noch ein akzeptables Äußeres vorweisen, damit es im Wohnzimmer geduldet wird.  

  Ich habe mir überlegt, eine Kiste zu bauen, welches bei den Gesangsübungen meiner Frau die klavierspielende Nachbarin zumindest zeitweise ersetzen kann.
Erstaunlicherweise wurde die Idee sofort positiv aufgenommen.
[Bild WAF-Gruen]
Die Kiste hat für mich den Vorteil, dass die fiesen Tonübungen dann problemlos während meiner Arbeitszeit stattfinden können. So muss ich keine Gedanken daran verschwenden, wie ich die beiden ausgliedern könnte  

[Bild(82.1k)]

Am einfachsten ginge das mit einem popligen Cassettenrecorder. Aber dann muss man bei der Aufnahme leise sein und man man kann nicht so bequem die Stücke auswählen und auch die Abspielgeschwindigkeit nicht ohne Tonhöhenverschiebung ändern.  

  Natürlich könnte ich mir einen gebrauchten Sequenzer angeln. Aber die Teile können viel zu viel und sind von daher recht kompliziert zu bedienen. Siehe dieses Video über einen alten Sequenzer aus 1984.  

  Also wird das Teil selbst gestrickt.  

  Die Anforderungen: Aufnehmen, Abspielen, Vor-/Rückspulen. Und das für mindestens 100 Lieder. Das sollte doch zu machen sein!  

  Für die bequeme Bedienung brauche ich ein Display und ein paar Bedienknöpfe. Für die ganze Einstellerei haben sich Drehknöpfe bewährt. Allerdings finde ich, dass die üblichen Drehgeber viel zu wenig Schritte pro Umdrehung haben. Früher konnte ich an meinem Gurkenradio mit 'ner halben Umdrehung zwischen Brüllen und Flüstern wählen. Bei meinem vergleichsweise sauteuren Autoradio muss ich dreimal zugreifen, weil die Anatomie meines Handgelenks keine 360° zuläßt.
Und wenn ich zu schnell drehe, ignoriert das Teil die Hälfte der Pulse. Das muss besser gehen!  

 
-----
 

   

Der Drehgeber

Ich wollte schon immer mal einen Stepper als Drehgeber missbrauchen. So ein Stepper wirkt als Generator wenn man ihn dreht. Und da er pro Umdrehung so 200-400 Schritte hat, hat man eine irre Auflösung - kein Vergleich zu den Drehgebern in den Autoradios. Von den 4 Kandidaten  

[Bild(23.8k)]

hat sich der oben rechts als Favorit erwiesen, da er selbst bei langsamer Drehung noch ein ordentliches Signal liefert.  

  Die Auswertung war ein wenig abenteuerlich. Da so ein Stepper bei schnellem Drehen locker 50V raushaut, habe ich sein Signal einfach mit 2 Dioden kurzgeschlossen. Die Spannung ist dann entweder 0V, +0,7 oder -0,7V. Anfangs wollte ich einfach diese Spannung mit einem Komparator messen. In Wirklichkeit habe ich damit einen prima Empfänger für alles mögliche gehabt. Ein Fall für die Tonne...  

[Bild(42.9k)]


Das ging gar nicht!  

  Also habe ich auf Lochraster ein wenig Grundlagenforschung betrieben.  

[Bild(36.3k)] [Bild(43.0k)]

 

  Folgende Schaltung lieferte dann ein super Drehgebersignal:  

[Bild(41.8k)]

Den 470K Widerstand braucht man nicht bei jedem Stepper - muss man ausprobieren.  

 
-----
 

   

Speicher satt

Die Midi-Daten, welches das Piano liefert, sind ja sehr kompakt. Taste drücken: 3 Bytes, loslassen: nochmal 3 Bytes. Für die Zeitabstände kommen nochmal 2 Bytes hinzu - macht pro Note 10 Bytes. Da brauche ich keine Festplatte, um ein paar Lieder zu speichern.  

  Bei meinem Fotoapparat war eine 16MB SD-Karte dabei.  

[Bild(8.7k)]

Platz für 4 Fotos. Herzlichen Dank! Aber zum Glück habe ich das unbrauchbare Teil aufgehoben.
Auf 16 MB gehen nämlich 1,6 Millionen Tastendrücke. Platz genug, um einen ganzen Tag lang wie bekloppt auf dem Klavier rumzuhämmern und alles millisekundengenau aufzuzeichnen!  

[Bild(27.2k)]

 

  Eine SD-Karte lässt sich mit relativ wenig Aufwand (4 Leitungen plus Stromversorgung) an einen Prozessor hängen. Gerade mal 6 Widerstände für 3 Spannungsteiler waren nötig, da der Prozessor auf 5V und die Karte auf 3.3V läuft. Und natürlich eine 3.3V Stromversorgung.
Hier der Probeaufbau;  

[Bild(73.7k)]

 

  Die SD-Karte braucht ja auch irgendwas, wo man sie reinstecken kann. Der Kontaktabstand passt zu den alten 5 1/4" Floppy-Steckern oder zu einem  

[Bild(8.0k)] [Bild(5.8k)]

Stück ISA-Slot. Es gibt auch Bastler, die eine Micro-SD-Karte kaufen und den beiliegenden Adapter fest einlöten.  

  Ich hatte das Glück, dass mein Kollege sein Autoradio geschrottet hat und ich den dort eingebauten Kartenslot raussägen konnte. Dabei sind Unmengen an Elektronik und Elektromechanik übrig geblieben - Benutzt habe ich bisher nur den Kartenslot.  

[Bild(68.3k)]


 

[Bild(86.7k)]

 

  Zu Testzwecken habe ich die Karte mal mit 'nem Muster vollgeschrieben. Leider hatte ich Mist bei der Sektoraddressierung gebaut, so dass immer Sektor 0 beschrieben wurde. Der hat nun 32000 Schreibzyklen auf dem Buckel. Obwohl ihn das nicht umgebracht hat, steckt nun eine nagelneue 1GB Karte im Slot, mit der man monatelang aufzeichnen kann.  

  Da ein FAT-Filesystem nicht mehr in den Programmspeicher passte, habe ich die Karte in einem eigenen Format benutzt. Grob sieht das so aus: Je Lied ein Infosektor und eine feste Anzahl von Datensektoren. Ist eine riesige Platzverschwendung, aber egal - Platz ist ja genug da! Über die RS232-Schnittstelle kann man die Daten zwischen PC und Recorder austauschen. Oder man muss die Karte im PC roh auslesen.  

 
-----
 

   

Rechenknecht

Die ganzen Probeplatinchen habe ich an ein STK500-Experimentierboard angeschlossen um mit der Softwareentwicklung zu beginnen.  

[Bild(96.2k)]

Oben in der Mitte befindet sich das Midi-Interface: ein CD4011 mit 2 Widerständen und ein Optokoppler.
Unter der Stepper mit einem schön großen Drehknopf.
Mit diesem Drahtverhau konnte ich die grundlegenden Routinen für die Stepper-Auswertung, Midi-Übertragung und das Lesen und Schreiben auf SD-Karte testen. Als Prozessor habe ich eine Atmega8 reingesteckt - weil der grade so rumlag.  

  Das Hirn der Schaltung ist inzwischen ein ATmega16 Prozessor, da das Programm in den kleinen Bruder nicht mehr reinpasste.
Der hat 1K RAM - immer noch recht knapp, wenn man bedenkt, dass man von der SD-Karte immer einen ganzen Sektor mit 512 Bytes lesen/schreiben muss.  

  Für die bequeme Programmierung brauche ich ein echtzeitfähiges Multitasking-Betriebssystem. Schliesslich müssen Anzeige, Drehgeber, Tastenbehandlung und der Datenfluss zwischen SD-Karte und Midi-Schnittstelle unabhängig voneinander - aber quasi zugleich funktionieren.  

  Programme wie FreeRTOS leisten sowas. Aber das Teil war mir zu mächtig. Das meiste davon brauch ich nicht...  

  So ein Betriebssystem ist schnell und einfach gestrickt: Eine Interrupt-Routine speichert alle Register der laufenden Task, schaltet um auf die nächste Task und stellt deren Register wieder her.  

  Der ATmega16 hat nun aber 32 Register. Pro Taskwechsel müssen also 32 Register gespeichert und gelesen werden. Mit Umschaltung sind das rund 80 Befehle.
Wenn ich dann 5 Tasks laufen habe, werden also 400 Befehle abgearbeitet, bis jede Task mal dran war - ohne das irgendwas produktives passiert ist.  

  Viel mehr als 400 Befehle hat wahrscheinlich der ganze Kram nicht, der in den Tasks abzuarbeiten ist. Das kommt mir irgendwie zu kopflastig vor.  

[Bild(38.9k)]

 

  Es gab ein Leben vor dem Multitasking. Also warum einfach, wenn es auch richtig kompliziert geht.  

  Alle Routinen sind nun so gestrickt, dass sie sich nach wenigen Befehlen beenden. In einer Hauptschleife werden dann einfach alle gerade notwendigen Routinen nacheinander aufgerufen.
Dazu hat jede Task eine Statusmaschine, die sich merkt, wie weit der Algorithmus beim letzten Durchlauf gekommen ist. Wenn eine Wartezeit notwendig ist, wird ein Timerwert ausgelesen und die Routine verlassen. Beim nächsten Durchlauf wird dann getestet, ob genügend Zeit verstrichen ist, sonst wird wieder direkt rausgesprungen.  

  Das war zugegebenermaßen 'ne leichte Gehirnverknoterei. Aber das Ergebnis ist verblüffend!  

  Es ist nirgends eine Verzögerung zu merken. Und es ist kein Problem, mal schnell 500 Lieder weiter zu springen.  

  Der Programmspeicher ist jetzt zu 88% voll. Viel mehr wäre also nicht reingegangen...  

 
-----
 

   

Schaltpläne, Platine, Quellcode

Schaltpläne hab ich als PDF-Datei und als original Protel-Dateien zusammen mit dem Quellcode der Software hier hinterlegt: 86_midirecorder.zip  

  Literaturhinweise stehen im Quellcode. Ein Timing-Diagramm für SD-Kartenzugriffe habe ich beigepackt.  

  Anfangs hatte ich eine SMD-Version des ATmega vorgesehen. Aber dann musste ich unzählige Durchkontaktierungen machen, da die Leiterbahnen so eng zusammen lagen. Ich war ehrlich erstaunt, dass die DIL40-Version letztendlich erheblich weniger Platz auf der Platine brauchte, weil die Leiterbahnführung viel entspannter war.  

 
-----
 

   

Ein Gehäuse für die Elektronik

Als Wohnzimmergerät darf es natürlich nicht in einer Pappschachtel mit einem Knäul Kabeln daherkommen. Ich muss also ein schickes Gehäuse besorgen.  

  Was einem da von den Elektronikversendern geboten wird ist schon erschreckend. Was habe ich hässliche ABS und PVC Kisten gesehen. Selbst die schick mit ein paar Alu-Profilen aufgemotzten Teile taugen nur für's Labor.
Der ganze Kram ist entweder nicht wohnzimmertauglich oder nicht benutzerfreundlich.  

  Also selber machen.  

  Und zwar in schwarz-glänzender Optik - So wie ein Klavier. Wenn schon aufwändig - dann richtig.  

  Den Entwurf habe ich erstmal aus Pappe gebaut und mir genehmigen lassen.  

[Bild(51.5k)] [Bild(38.4k)]

Das Teil habe ich dann aus Sperrholz nachgebaut und komplett mit 2-Komponenten Spachtelmasse überzogen.  

[Bild(34.9k)] [Bild(44.9k)]

Dann wurde die Kiste nass geschliffen und wieder gespachtelt. Da mir das Gehäuse ein wenig zu instabil vorkam, habe ich alle Kanten mit Leisten verstärkt. Einige konnten mit der Leimzwinge angepresst werden, für andere war eine etwas eigenwillige Konstruktion nötig:  

[Bild(56.3k)]

 

  Irgendwie wurden die Oberflächen nicht richtig eben. Auf Rat eines Flugmodellbauers hab ich das Ding dann mal mit seinem Ein-Komponenten Spachtel bearbeitet - das ging schon viel besser. Anschließend habe ich einen 2-Komponenten Primer genommen und den Kasten satt Grau angestrichen und mit 800er Papier nass geschliffen. Das machte schon richtig was her. Dann probeweise schwarz angesprüht und wieder leicht angeschliffen. Ein irres Muster kam zum Vorschein:  

[Bild(49.9k)] [Bild(56.3k)]

Die Unregelmäßigkeit bedeutet: Das Teil ist nicht eben! Also nochmal das Ganze: Spachteln, schleifen, spritzen, anschleifen und auch wieder ärgern:  

[Bild(69.9k)]

An allen Kanten war Feuchtigkeit ins Holz eingedrungen und hatte es aufquellen lassen. Da waren jetzt überall Striche in Faserrichtung zu sehen.  

  Schon wieder schleifen, Spachteln etc. - Aber jetzt hatte ich meine Ansprüche so weit runtergeschraubt, dass es mir gut genug war.  

[Bild(53.3k)]

Die erste Schicht Glanzlack war dann auch schon beeindruckend.  

[Bild(70.7k)] [Bild(35.8k)]

Der Lack ist irre: nach 2 Minuten ist das Zeug trocken!  

  Innen sind nun diverse Klötzchen zum Anschrauben der ganzen Teile eingeleimt:  

[Bild(63.5k)] [Bild(53.5k)]

 

  Beim hantieren mit dem Gehäuse musste ich feststellen, dass zwar der Lack wahnsinnig schnell trocknet - der Unterbau war aber wohl noch nicht gänzlich ausgehärtet. Jedenfalls hatte ich einen fetten Daumenabdruck auf der Oberseite.  

  Grmbl... Alles wieder abschleifen, spachteln, nochmal schleifen, spachteln, feinschleifen und endlich wieder lackieren. Zum feinschleifen habe ich abschließend 1200er Papier genommen - das ist so fein, damit kann man auch sein Uhrglas aufpolieren.  

  Hier noch ein paar schöne Schleifmuster, die einen für das frustige Gespachtele entschädigen:  

[Bild(40.4k)] [Bild(18.4k)]

 

  Inzwischen habe ich das Teil als fertig definiert - mir sieht's gut genug aus (perfekt ist wohl was anderes). Bilder dazu stehen weiter unten...
 

 
-----
 

   

Innenaufbau

Drinnen sieht das Gehäuse so aus:  

[Bild(112.8k)]

Ein paar Details:
Das untere Flachbandkabel dient zum Programmieren des ATmega. Die SD-Karte hängt noch lose in der Gegend rum und die Anzeige wird einfach von einem Stück Fischer-Technik gegen die Front gedrückt.  

[Bild(86.8k)]

Die Midi-Buchse paßt exakt - schade nur, dass das Sperrholz so dick ist, dass das Gewinde hinten nicht mehr rausschaut.
Gut, dass es Epoxidharz gibt.  

[Bild(17.9k)]

Die Taster an der Frontseite sind natürlich auch zu kurz. Da habe ich allerdings Gewinde in die Frontplatte geschnitten : Den Taster schön eingefettet, 2K-Spachtelmasse ins Bohrloch und dann reingeschraubt. Hält prima.  

  Als Betriebsanzeige dient ein winziger Lichtpunkt an der Vorderseite. Dieser ist grün, wenn ein angeschlossenes Midi-Gerät erkannt wurde, sonst rot.  

[Bild(3.4k)]

Der edel aussehende Leuchtpunkt ist Stück Glasfaser (1mm Durchmesser), welches einfach in ein Loch in der Frontplatte geklebt wurde. Die Glasfaser endet in einem Optokoppler - was in diesem Fall ein durchbohrter Holzklotz ist:  

[Bild(22.5k)]

Links geht das Glasfaserkabel rein, rechts steckt eine eine Duo-Led drin.
 

 
-----
 

   

Bedinungsanleitung

Die Bedienung des Gerätes ist so simpel, dass ich es meiner Frau nur einmal vorführen mußte. Auch die Kinder kommen prima damit zurecht. Man kann 1000 Lieder speichern,und jedem einen Namen geben. Beim Abspielen läßt sich die Geschwindigkeit einstellen und man kann in den Stücken vor- und zurückspulen.
Zusätzlich lassen sich Midi-Kanal und Midi-Instrument auswählen.  

  Auch eine Datenaustausch (via RS232) zum PC ist eingebaut - allerdings habe ich noch keine Software für den PC geschrieben, die mit dem Recorder kommuniziert.
Macht ja nix. Bisher hat die noch keiner vermisst...
-----
 

   

Endprodukt

 

  Das Gerät sieht bei mir nun ungefähr so aus:  

[Bild(38.4k)] [Bild(23.8k)]

Hm, gar nicht so einfach, ein schwarzes Gerät schön zu fotografieren. Hier noch zwei Versuche:  

[Bild(117.1k)] [Bild(100.8k)]

 

  Und das Schöne ist: Dieses Gerät wurde im Wohnzimmer akzeptiert! Gibt also ein prima
[Bild WAF-Gruen]
 

 
-----
 

Kommentieren
   
Startseite

Diese Seiten sind darauf optimiert mit möglichst jedem Browser zu funktionieren.

Aber der Seitenquelltext (strg-U) sieht auch interessant aus, zumindest wenn man ihn mit einem Monospace Font in sehr kleiner Schriftgröße betrachtet.

Valid HTML 4.01! CSS ist valide!