Midi Rekorder mit MMC/SD-Karte

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

von Benutzer:Dersimon

Foto.jpg

Features

  • Aufnahme, Wiedergabe, Vor- und Rückspulen
  • LCD, Zeit- und Sektoranzeige
  • Speichert bis zu 65536 "Files" auf MMC/SD-Karte (optimale Kartengröße 16 MB)
  • Maximale unterstützte Kapazität der Karte 8GB (!)
  • Beliebige MMC/SD-Karten verwendbar, allerdings muss sie mit Windows formatiert werden und dann muss ein leeres File mit etwa der Kapazität der Karte (unter Eigenschaften im Windows-Explorer wird der freie Speicher in Bytes angegeben) drauf kopiert werden. (Das kann irgendeine Datei sein, die halt gerade noch draufpasst.) Erst dann sollte man sie in Mr.MIDI stecken :-) Sollte die Karte größer als 16 MB sein, kann man die Dateigröße so berechnen: 512 * 256 * Anzahl "Files", dann allerdings nicht in Mr.MIDI zu große Filenummern verwenden! Sonst geht es auf der Karte so durcheinander, dass Windows sie neu formatieren muss...
  • PC-Tool zum Umwandeln von/in PC-MIDI-Dateien (nur FORMAT 0)

Hardware

  • ATmega8 mit internem RC-Takt 1 MHz
  • MIDI Interface mit Optokoppler 6N138
  • LCD Display 24*2 (Standardcontroller)
  • 7 Tasten und 1 Anschalter
  • Spannungsregler 5V und 3,3V
  • MMC/SD-Slot

Kompilieren

  • In AVR Studio 4 Projekt laden, alle *.asm Dateien hinzufügen
  • Build (F7) drücken
  • Hex-Code in Controller laden
  • Fertig!

Bekannte Probleme

  • Medion-SD-Karten gehen nicht.
  • PC-Tool hat eine Macke beim Parsen von Mididateien (Wurde behoben, neue Version hier im Artikel zum Download)

Foto

Auf dem Foto sieht man mein Endgerät im hübschen Acrylgehäuse. Rechts sind die 2 MIDI-Kabel zum Keyboard.

Schaltplan

Schaltplan des MIDI-Rekorders


MIDI-Out falsch beschaltet: Pin 4 und 5 tauschen!

Download des Projekts (inkl. Code, Schaltplan)

Zip.zip

Neuer Konverter (Bugfix): MrMIDIConverter.zip


Mr.MIDI 2 ist da !

Endlich ist es soweit: Der neue Mr.Midi arbeitet mit dem echten Mididatei-Format (Format 0). Aufnahme und Wiedergabe sind so einfach wie bei einem MP3-Player. Und dennoch bleibt die Hardware gleich! Das heißt, alle Nachbauer brauchen nur den neuen Code flashen und haben den neuen Mr.Midi 2! Für alle, die es noch besser wollen: Echte FAT16-Unterstützung (kann mit defragmentierten Dateien umgehen und selber in ein fragmentiertes Dateisystem schreiben! Dabei wird die Karte so gut es geht geschont!) Für solchen Luxus muss man dann doch den ATmega168 einsetzen :-)

English translation on my homepage http://www.lehmayr.de available!

Foto MrMidi2.jpg

Features

  • Echte Mididateien auf MMC/SD-Karte (Format 0) können abgespielt werden
  • Bis zu 255 Dateien werden unterstützt
  • Aufzeichnung erfolgt ebenfalls im Midi-Format 0 (jetzt auch mit FAT-Eintrag)
  • Löschen von Dateien ist möglich (jetzt auch mit FAT-Aktualisierung)
  • 256 Byte Sende/Empfangspuffer und 8MHz-Takt für hohe Performance und präzises MIDI-Timing
  • Lyrics werden im Display angezeigt (Coole Sache!)
  • Tempo in +/-15 Schritten einstellbar (vorbereitet auf stufenlose Analogknopf-Einstellung, Hardwareänderung erforderlich)
  • Bootloader lädt neue Firmware von MMC/SD-Karte (frisch formatiert und nur Datei MM.BIN drauf)
  • Transponierfunktion
  • Muting ausgewählter Midi-Channels
  • Menü für Einstellung Schlagzeugkanal, Lyrikanzeige und Such-Startsektor
  • Nichtflüchtige Parameter werden im EEPROM gespeichert
  • Verschiedene Repeatmodi
  • LED-Beleuchtung im Menü schaltbar (auf PORTB 6+7)

Download Mr.MIDI 2

Achtung: Leider hat sich der WinAVR Compiler irgendwann so geändert, so dass die gleichen Sources neu kompiliert nicht mehr den Bootloader starten können!!! Daher BL defekt bei allen alten 32-Bit-Versionen (haben auf "_2.zip" und "_3.zip" geendet)!

Einrichtung ATmega168 mit MMC/SD-Bootloader

  • ATmega168 Fuses auf "1024 Word Bootsize" (alte 168-Software und 328) bzw 512 im neuen BL in Ultimate mega168 und KEIN "Bootvector enabled" setzen (optional BOD 4,3V auf enabled)
  • 8MHz Quarz verwenden! (Kommentar: einen UART betreibt man IMMER mit einem Quarz. Aus gutem Grund! Siehe AVR-Tutorial: UART)
  • Leere MCU: Firmwaredatei mrmidi2_bl.hex flashen (wie du das machst, ist egal)
  • Bootloader ist bereits installiert:
    • Karte formatieren (FAT16) und die Datei MM.BIN draufkopieren
    • Karte einlegen, Mr.MIDI 2 anschalten
    • Warten bis fertig
    • Karte entnehmen, Mr. MIDI 2 ausschalten, original Karte einstecken und wieder anschalten

Änderungen seit Initialrevision

  • Parameter im EEPROM
  • Menü
  • Transponierfunktion
  • Schnelleres MMC Interface (2MHz)
  • MMC_init angepasst, um noch mehr Karten zu unterstützen
  • Lyric-Anzeige
  • Bootloader über MIDI
  • Channel-Muting
  • Card-Scan ist jetzt intelligenter (FAT16/FAT32-Karten werden unterstützt)
  • verschiedene Bugfixes
  • Fernbedienungsfunktion RC5
  • Display 16x2-Zeichen wird auch unterstützt (alternative Firmware, per Defineschalter im Code wählbar, im Download natürlich auch als extra kompiliertes HEX-File enthalten)
  • Verschiedene Wiederholungsmodi für die Songs
  • Sendepuffer (präzises MIDI-Timing einhalten, auch wenn FAT-Lesezugriffe auf die Karte erfolgen)
  • LED-Hintergrundbeleuchtung im Menü schaltbar (PORTB 6+7)
  • FAT16-Unterstützung (vollwertig)
    • Lange Dateinamen
    • Anzeige Dateigröße
    • Dateien aufzeichnen und am PC kopieren
    • Dateien löschen
  • 32-Bit-Sektoradressierung
  • mehr Bugfixes
  • MMC/SD-Bootloader integriert
  • Gerät jetzt seit mehreren Monaten bei einigen Leuten im Einsatz und noch keine Probleme (Kompatibilität von MMC/SD-Karten gemeldet.
  • Noch mehr Bugfixes (Bootloaderfehler-mit-WinAVR20070525-Bug, 32-Bit-Sektornummern-Bug, Abbruch von Aufnahme-Bug, Random-Play-Bug, 16-Dateien-Bug, etc.)
  • Anzeige Dateiname während Wiedergabe
  • Pause wird über die Zeitanzeige geschrieben
  • Lyrics werden nicht mehr von Transpose- oder Geschwindigkeitsanzeige gestört
  • Midi-Through im Menü

Schaltplan

ohne Fernbedienung:

Schaltplan des MIDI-Rekorders 2


mit Fernbedienung:

Schaltplan des MIDI-Rekorders 2 mit Fernbedienung


Achtung: mega168 Pin TX muss an Midi-Buchse OUT Pin 5, und der Pullup muss an Midi-Buchse OUT Pin 4!

Für die Hintergrundbeleuchtung:

  • Port B6+7 parallel an einen Widerstand (hängt von deiner LED-Beleuchtung ab) und diesen dann an LED- deines Displays
  • LED+ vom Display auf VCC 5V
  • Falls das LCD mehr als 40mA zieht, brauchst du einen Transistor!
  • Für Serienproduktion: Verwende einen 8MHz-Quarz an Pin PB6&PB7, siehe Datenblatt. Die Genauigkeit des internen Oszillators ist über die Lebenszeit des Geräts nicht ausreichend - nur für Hobbybastler. Dafür kann dann keine Hintergrundbeleuchtung - falls verwendet - angesteuert werden.

Erweiterung um ein echtes MIDI-Wavetable

Besorge dir bei ebay ein Wavetable-Upgrade-Modul (ca.5-10 Euro) mit 26-poligem Anschluss und baue einen Adapter wie hier gezeigt: http://www.heise.de/ct/97/01/328/ Dazu nimm als +12V-Spannung den 9V-Anschluss der Batterie. Die genannten -12V braucht zumindest mein Creative Pseudo-AWE32-Wavetableplatinchen (nur 53x50mm groß) nicht. Abrunden kannst du das Ganze mit einem Schalter, der als Wavetablequelle den Mr.Midi-Ausgang oder Instrumenten-Eingang wählt. Ein hochwertiger Audioverstärker optimiert das Ergebnis noch. Leider sind solche Module recht stromhungrig und nicht immer sehr kompakt (das Yamaha DB-50XG ist ein riesen Teil). Wird Zeit, dass die Handy-Midichips massentauglich werden!

Kurzanleitung

  • Karte formatieren (FAT16)
  • eventuell Mididateien in Format 0 konvertieren und auf die Karte kopieren
  • Karte einsetzen
  • MrMidi2 anschalten (Scannt die Karte und zeigt erstes File an)
  • Wiedergabe
    • Datei mit UP/DOWN auswählen
    • PLAY zum Abspielen und Pause machen
    • STOP zum Beenden
    • <</>> um Tempo zu ändern
    • UP/DOWN zum Transponieren, REC+UP/DOWN bei Ultimate
    • Ultimate: UP/DOWN zum Song-Weiterschalten
  • Aufnahme
    • REC drücken (Aufnahmebereit)
    • Spielen (Aufnahme beginnt automatisch)
    • erneuter Druck auf REC verwirft die Aufnahme
    • STOP speichert die Aufnahme
  • Angezeigte Datei löschen
    • << und >> gleichzeitig drücken (nur im STOP-Mode), es erfolgt keine weitere Rückfrage!
  • Menü
    • UP und DOWN gleichzeitig drücken (nur im STOP-Mode; geht auch, wenn keine Karte eingelegt ist)
    • UP/DOWN zur Auswahl eines Parameters
    • <</>> zum Ändern
    • Menüpunkte:
      • 1. Schlagzeugkanal: Default 10 (Das Schlagzeug wird nicht transponiert)
      • 2. Lyrics anzeigen: Default 1 (1 = Lyrics werden angezeigt)
      • 3. Startsektor der MMC-Karte: Default 0x0210 (Falls du nur FAT32 auf MMC/SD-Karten hernimmst, kannst du diesen Wert erhöhen)
      • 4. Mute: Mit ">>" Channel auswählen (Großes Zeichen), mit "<<" Mute toggeln
      • 5. Repeat: siehe weiter unten
      • 6. Backlight (nicht defaultmäßig reinkompiliert)
  • Aufnahmen am PC bearbeiten auf FAT16-Dateisystem
    • Karte in PC stecken und Datei öffnen
  • Aufnahmen am PC bearbeiten auf FAT32-Dateisystem (nicht besonders bequem)
    • Karte mit HexEditor laden :-)
    • Ab Sektor Startsektor und aufwärts nach "MThd" suchen lassen
    • Kopiere den ersten Sektor mit "MThd" (10 Bytes) "MTrk" (4 weitere Bytes = Länge Big Endian) und die folgenden Länge/512 Sektoren in eine Datei (mit Endung .mid), löscht die letzten Bytes nach (Länge + 18) Bytes. Diese Datei sollte nun abspielbar und editierbar sein
  • Alte Firmware-Update-Methode
    • PC mit Mr. Midi 2 verbinden (seriell<->Midi-Konverter)
    • An Mr. Midi 2 beliebige Taste (aber nicht << oder >>) gedrückt halten und einschalten (Bootloader)
    • flash.bat aufrufen

Erweiterung für IR-Ferbedienung:

ALDI-Universal-Fernbedienung
  • RC5-Code, Geräteklasse Videorecorder (wegen der Play/Stop/Rec/Spul-Tasten) :-)
  • Probiert mit Aldi-Fernbedienung aus dem 4. Quartal 2006 mit Gerätecode 257
  • Änderung im Schaltplan: PB2 wird mit einem TSOP1836 verbunden, PB7 mit der Playtaste
  • Tastenbelegung: Play/Rec/Stop/<</>> wie gewohnt, Menu=Menü, ENT=Löschen, Ziffern für Direktwahl eines Songs. Dabei gilt: Anzahl Songs unter 10 -> Ziffer startet direkt das Lied (0 = Song #10), ansonsten zweistellige Eingabe.

Erweiterung FAT16:

  • Dateinamen werden angezeigt, sogar lange Dateinamen werden erkannt
  • Datei löschen jeder beliebigen Datei, nicht nur die letzte
  • Aufnahmen erzeugen Dateien mit Namen "MM001.MID", Nummer wird hochgezählt
  • Aufnahmen können im Explorer kopiert und am PC geöffnet werden
  • FAT32-Karten werden im "alten" Modus behandelt (Kein FAT-Eintrag erfolgt, nur immer die letzte Datei wird gelöscht, wenn man Löschen drückt)

Repeatmodi beim Abspielen:

  • 0=Einzeln abspielen und Stopp am Ende des Songs
  • 1=Einzelnen Song wiederholen
  • 2=Alle Songs der Reihe nach abspielen, Stopp nach dem letzten Lied
  • 3=Alle Songs der Reihe nach abspielen, dann von vorne anfangen
  • 4=Zufälliges Lied

Build

Projekt kompilieren mit WinAVR 20070525 [1] + AVR Studio 4.13 [2]. Debuggen mit dem ATAVRDragon über debugWIRE. Für die Nachbereitung (MM.BIN und Bootloader.hex erzeugen) benötigt man noch hex2bin von Jacques Pelletier und Ruby.

Ausblick

  • Vielleicht kommt ja noch irgendwann eine echte FAT16 oder 32 rein (mit ATmega168, da pin-kompatibel). ERLEDIGT für FAT16
  • Volle FAT16-Unterstützung mit fragmentierten Dateien mit Unterordner. ERLEDIGT
  • Sendepuffer, um FAT-Zugriffe während MIDI-Wiedergabe zeitlich unkritisch zu machen. ERLEDIGT
  • Bootloader von MMC/SD-Karte. ERLEDIGT
  • FAT32 vielleicht auch mal. Platz im ATmega168 reicht wohl eher nicht aus, hab gerade noch 3kByte im Flash frei (ohne Bootloader).
  • 32-Bit-Sektoradressierung für große Karten. ERLEDIGT

Hinweise

Es handelt sich hier um ein vollständiges privates Bastelprojekt. Es werden keinerlei Funktionsgarantien oder Haftung für Fehler und deren Folgen übernommen. Nachbau und Benutzung erfolgen auf eigene Gefahr. Bei professionellen Produkten würde ich um ein Gratisexemplar für meine Vitrine bitten, sowie einen Link hierher in Anleitung und Produktwebpage! Bitte kontaktieren Sie mich unter lehmayr--ett--web.de

Zur Kompatibilität von MMC/SD-Karten: Meine Versuche haben ergeben, dass die Spannungsteiler mit Widerständen für die Ansteuerung der Karte zu unterschiedlichen Ergebnissen führen: Die eine Karte geht nicht im einen Gerät, dafür im anderen, dafür ist es bei einer anderen Karte genau umgekehrt! Die Spannungsversorgung der Karte ist jedoch mittels Spannungsregler auf 3,3V eingestellt. Die 16MB-Karte von Canon (Kamera-Beipack) wird vom PC in den FATs anders geschrieben. Warum, weiß ich nicht! Daher sind Aufzeichnungen von MrMidi2 auf diese Karte für den PC nicht lesbar.

Die 128MB-Medion-Karte ist eine SanDisk-Karte (wenn man den Deckel runterbricht, steht das auf den Chips drauf)!

Vorschläge

Hier darf jeder Besucher der Seite selber Vorschläge im Rahmen dieses Projektes einbringen (durch Bearbeiten dieses Abschnitts im Wiki):

  • Um Pins für weitere Funktionen zur Verfügung zu haben, wäre es möglich einen 8-Line To 3-Line Priority Encoder (z. B.SN74LS348) für die Taster einzusetzen.
  • Von den freigewordenenen 4 Pins könnte dann einer verwendet werden, um die Beleuchtung der LCD-Anzeige mittels Transistor ein/auszuschalten.
  • Dazu sollten für das LCD-Display die Pins 15 (Vcc Beleuchtung) und Pin 15 (GND Beleuchtung) hinzugefügt werden.
  • Der Quarz könnte somit parallel zur Beleuchtung betrieben werden :-)

Quellen (OpenSource)

  • [3] RC5-Code
  • [4] Low-Level-Card-Treiber (von mir modifiziert und erweitert)
  • [5] AVR-LCD-Ansteuerung in Assembler (von mir nach C portiert und erweitert)
  • Der große Rest (FAT-Unterstützung, Midi-Protokoll-Implementierung, Bedienfunktionen) ich (Simon Lehmayr)

Links

  • [6] Englischsprachige Beschreibung des Projekts auf meiner Homepage
  • [7] Offizieller Hardware-Nachbau als Fertiggerät oder Bausatz (aus England, basiert auf der neuesten MrMidi2-Version mit IR-Remote und MMC/SD-Card-Bootloader). Dieses Gerät wird von mir offiziell unterstützt und es enthält die aktuelle (und bug-bereinigte, feature-strotzende) Firmware. Mein Dank gilt Robert Rushton, der mein kleines Hobby-Projekt professionell vertreibt, für alle, die nicht über die nötigen Fertigkeiten verfügen, so etwas selber zu basteln!
  • [8] Gratis Mididatei-Konverter zwischen Format 0, 1 und 2. Kann auch ganze Ordner konvertieren!

Forum