MiniMegaHmpeg Info
home
projects
download
about me
contact
6 x 9
disclaimer

Über den HMpeg...

Der HMpeg ist ein Selbstbau-Hardware-MP3-Player, der direkt von Festplatte oder CD-Rom spielt. Mehr Informationen gibt es auf der offiziellen HMpeg Homepage.

... und sein Problem

Der HMpeg ist ein feines Teil und obwohl der darauf verwendete Microcontroller AVR 90S8515 nur 8 kByte Programmspeicher hat, kann er beachtlich viel: Festplatten oder CD-Rom auslesen, LCD ansteuern, Infrarot-Fernbedienung decodieren, Drehencoder abfragen usw. Großes Lob an die Entwickler!

Allerdings sind jetzt die 8 kByte total ausgeschöpft und somit wird jede Funktionalitätserweiterung erfolgreich verhindert.

Abhilfe: Den AVR 8515 gegen einen µC mit mehr Speicher tauschen wie z.B. den MegaAVR 103.

Eine Möglichkeit ist, einen komplett neuen HMpeg mit dem Mega103 zu entwickeln und genau das machen auch schon einige. Das hat den Vorteil, dass man gleich noch andere Erweiterungen mit auf die Platine integrieren kann. Das wäre dann der sogenannte Mega-HMpeg.

Eine andere Möglichkeit ist, eine kleine Adapterplatine mit dem Mega103 zu bauen und die anstatt des 8515 in den normalen HMpeg zu stecken. Das ist zwar auch Mega, aber eben ohne weitere Zusatzfunktionen. Hat aber den Vorteil einen bestehenden HMpeg umrüsten zu können. Daher nenne ich das den MiniMegaHmpeg.

 

MiniMegaHmpeg

Die Idee zum MiniMegaHmpeg Adapter kam mir bei der Planung meines HMpeg-Autoradios. Und obwohl ich das Autoradio wahrscheinlich ohne den MiniMegaHmpeg realisieren werden kann, war ich neugierig, ob das Prinzip funktioniert und weil ich so ein hoopy Frood bin, hab ich es einfach mal ausprobiert, und siehe da... es klappt! :-)

Gruppenbild

Prototyp auf HMpeg

Portrait

Nahaufnahme Prototyp

Ich habe nun das Layout noch etwas verbessert. Der Adapter passt in den normalen wie auch in den SMD-HMpeg. Die Stiftleiste am oberen HMpeg-Platinenrand wird zwar durch die MiniMega-Platine verdeckt, aber erstens könnte man da eine abgewinkelte Stiftleiste einlöten und zweitens stehen sowieso alle freien Signale auf der MiniMega-Platine zur Verfügung. Das Langloch links oben dient zur Befestigung an der HMpeg-Platine (normal und SMD). Die Aussparung links unten lässt beim normalen HMpeg den Audioausgang und bei SMD-HMpeg den IR-Stecker frei.

MiniMegaHmpeg-brd-small

Endgültiges Layout

Hardware

Man braucht erstmal eine Platine. Ich habe einige Platinen machen lassen, näheres siehe unter Bestellung.

Für jeden, der sich für das Schaltbild interessiert oder die Platine selbst herstellen lassen möchte, gibt es  Schaltplan und Layout im Eagle 4.03 Format.

Der MiniMegaHmpeg kann einfach in den vorhandenen Sockel des AVR 8515 gesteckt werden. Dafür ist allerdings ein sog. PLCC-Adapter notwendig. Das ist leider kein Standardbauteil und daher teuer und schwer erhältlich. Das Layout der MiniMega-Platine ist so gestaltet, dass folgende PLCC-Adapter verwendet werden können (und wahrscheinlich andere auch):

Hersteller

Serie

Artikel-Nr.

Anmerkung

Datenblatt

Samtec

PLCA

PLCA-044-S-S-N

SMD-Variante mit abgewinkelten Pins. Einzelpreis ca. DM 26,- (incl. MWSt)

Datenblatt

Samtec

PLCA

PLCA-044-S-T-N

dito mit Durchsteck-Pins

siehe oben

Cab

534

z.B. 3306839

SMD mit geraden Pins. Einzelpreis DM 30,63 (incl. MWSt.)

Datenblatt

Cab

531

z.B. 3306831

SMD mit abgewinkelten Pins. Einzelpreis DM 26,91 (incl. MWSt.)

Datenblatt

Cab

532

z.B. 3306832

Durchsteck-Pins. Einzelpreis DM 19,60 (incl. MWSt.)

Datenblatt

Achtung: Die Adapter von Cab gibt es in verschiedenen Bauhöhen (siehe Datenblatt).

Die Cab Adapter sehen übrigens stabiler aus als die von Samtec.

Der billigste dieser Adapter ist einer aus der Serie 532 von Cab. Diese Serie hat normale Pins, wird aber im Datenblatt auch als SMD-tauglich beschrieben. Ich schlage vor, wir machen eine Sammelbestellung dieses Steckers. Die Preisliste von Cab sieht folgende Mengenrabatte vor:

    1 - 4  netto
    5 - 9  10%
    10 - 24 15%
    25 - 49 20%
    50 - 99 25%
    ab 100 30%

Bei 25 Stück würde die Nummer 3306832 also noch DM 15,68 kosten. Bei Interesse siehe Bestellung.

Der Stecker 3306832 ist der niedrigste dieser Serie. Er reicht aus, damit der MiniMegaAdapter über alle Bauteile des HMpegs passt.

Sonstige benötigte Bauteile:

Stück

Bauteil

Bemerkung

Reichelt Best.-Nr.

Einzelpreis (DM)

1

AVR Mega103

Das wichtigste Teil...

AT MEGA 103 TQFP

49,00

1

Quarz 6 MHz HC-49U-S

 

6-HC49U-S

1,19

2

33pF, SMD 0805

 

NPO-G0805 33P

0,10

4

100nF, SMD 0805

 

X7R-G0805 100N

0,10

1

22µF, SMD Tantal

 

SMD TAN.22/6,3

0,89

3

1kOhm, SMD 0805

 

SMD-0805 1,00K

0,20

1

Wannenstecker 10 pol.

Programmierstecker

WSL 10G

0,21

1

LED 3mm, low current

Programmieranzeige, optional 1)

LED 3MM 2MA-ROT

0,17

1

Uhrenquarz, 32,768 kHz

optional 2)

0,032768-L6

0,60

1

Stiftleiste, 11 pol.

optional 3)

STIFTL. 36G

0,32

1

Stiftleiste, 2x9 pol.

optional 4)

STIFTL. 2X10G

0,26

1) Leuchtet beim Flashen des AVRs, zumindest mit dem STK200 Programmiergerät.
2) Nicht notwendig für die Funktion, man kann aber damit den zusätzlichen Timer des MEGAs als Uhr nutzen.
3) Port F: 8 digitale und/oder analoge Eingänge.
4) Alle sonstigen freien Pins des MEGAs.

 

Software

Ich habe die Festplattensoftware HD 0.991 an den MiniMegaHmpeg angepasst (= HD 0.991m). Die Änderungen halten sich in Grenzen, da sich die zwei Microcontroller sehr ähnlich sind. Unterschiede bestehen eigentlich nur in unterschiedlicher Pinbelegung, der niedrigeren Frequenz des Megas (maximal 6 MHz im Gegensatz zu 8 MHz beim 8515) und geringe Unterschiede bei einigen Konfigurationsregistern.

Die portierte HD Version hat zunächst keine zusätzlichen Funktionen und ist somit als Ausgangsbasis für eigene Erweiterungen gedacht.

Download HD 0.991m2 (135k)

Zum Kompilieren kann die “alte” AVR-GCC Version 2.95 verwendet werden (die findet ihr im Downloadbereich auf der HMpeg Seite) oder die aktuelle GCC Version 3.0.

GCC 2.95

Vor dem erfolgreichen Kompilieren mit GCC 2.95 muss man allerdings einen Fehler in der Datei make2 korrigieren, die steht im Kompilerverzeichnis unter /include:

Folgendes steht da (ungefähr in der Mitte):

    LIB += $(LIBDIR)/crt1$(MCU).o $(LIBDIR)/crtn.o

    ifeq ($(AVRMEGA),1)
       LIB += $(LIBDIR)/libgcc-mega.o $(LIBDIR)/libm-mega/fplib.o $(LIBDIR)/libc-mega/string.o
       LIB += $(LIBDIR)/libc-mega/malloc.o $(LIBDIR)/libc-mega/ctype.o $(LIBDIR)/libc-mega/eeprom.o
    else
       LIB += $(LIBDIR)/libgcc.o $(LIBDIR)/libm/fplib.o $(LIBDIR)/libc/string.o
       LIB += $(LIBDIR)/libc/malloc.o $(LIBDIR)/libc/ctype.o $(LIBDIR)/libc/eeprom.o
    endif

Und folgendes sollte da stehen:

    ifeq ($(AVRMEGA),1)
       LIB += $(LIBDIR)/crt1$(MCU).o $(LIBDIR)/crtn-mega.o
       LIB += $(LIBDIR)/libgcc-mega.o $(LIBDIR)/libm-mega/fplib.o $(LIBDIR)/libc-mega/string.o
       LIB += $(LIBDIR)/libc-mega/malloc.o $(LIBDIR)/libc-mega/ctype.o $(LIBDIR)/libc-mega/eeprom.o
    else
       LIB += $(LIBDIR)/crt1$(MCU).o $(LIBDIR)/crtn.o
       LIB += $(LIBDIR)/libgcc.o $(LIBDIR)/libm/fplib.o $(LIBDIR)/libc/string.o
       LIB += $(LIBDIR)/libc/malloc.o $(LIBDIR)/libc/ctype.o $(LIBDIR)/libc/eeprom.o
    endif

Außerdem muss man in der Datei progmen.h (ebenfalls unter /include) noch folgendes ändern:

    #define PRG_RDB(addr) __elpm_macro(addr)

ändern in:

    #define PRG_RDB(addr) __elpm_macro((unsigned long) addr)

oder besser (effizienterer Code) in:

    #define PRG_RDB(addr) __lpm_macro((unsigned short) addr)

Das steht ziemlich unten nach

    #if (FLASHEND > 0xFFFFUL)  /* >64K program memory (ATmega103) */

 

GCC 3.0

Zum Kompilieren mit GCC 3.0 müssen nur die Dateien make1 und make2 aus dem GCCTEST Paket ins Compilerverzeichnis unter /include kopiert werden.

 

Danach sollte sich die HD 0.991m genauso kopilieren lassen wie die normale HD 0.991. Da alle Änderungen mit #if geklammert sind, kann man auch die HD 0.991m für den normalen HMpeg kompilieren, dazu in my_defs.h #define MINIMEGAHMPEG FALSE eintragen und im makefile MCU = -mega103 gegen MCU = -8515 ersetzen.

 

Performance

Da der AVR Mega103 nur bis 6 MHz spezifiziert ist (8 MHz beim 8515), stellt sich natürlich die Frage, ob das für den HMpeg ausreicht. Dazu habe ich mal einen kleinen Vergleichstest gemacht. Getestet wurden der normale HMpeg mit dem 8515 bei 8 MHz gegen den MiniMegaHmpeg mit dem auf 6 MHz laufenden Mega103. Die Festplatte war eine IBM DTLA-307030. Getestet wurden bei jeder Bitrate zwei verschiedene Songs. Die Lieder wurden mit Lame kodiert. Die VBR-Songs waren mit 192-320 kbps kodiert und erreichten eine mittlere Bitrate von ca. 220 kbps. Die Festplatte wurde vorher mit Windows 98 SE defragmentiert.

Bitrate

8515 @ 8MHz

Mega103 @ 6 MHz

128

perfekt

perfekt

192

fehlerfreies Spielen. Bei RC5 manchmal leichte Ruckler

fehlerfreies Spielen. Bei RC5 manchmal leichte Ruckler

256

Starke Aussetzer. Unbrauchbar.

Starke Aussetzer. Unbrauchbar.

320

Leichte Aussetzer. Besser als 256!

Leichte Aussetzer. Besser als 256!

VBR

fast fehlerfreies Spielen. Ganz selten ruckelt´s.

fast fehlerfreies Spielen. Ganz selten ruckelt´s.

Aha. Wie man sieht, konnte ich keine Unterschiede zwischen den zwei Versionen feststellen, sie verhielten sich genau gleich. Leider nicht gleich gut, sondern eher gleich schlecht. Bei 128 kbps funktionierte alles perfekt, auch ein Druck auf die Fernbedienung brachte den Player nicht aus dem Tritt. Aber bei allem was darüber hinaus geht, musste ich mit einem kurzen Aussetzer rechnen, wenn ich die Fernbedienung betätigte. Bei 256 kbps war´s am schlechtesten, total unbrauchbar, auch ohne Fernbedienung. Seltsamerweise funktionierte dann 320 kbps wieder viel besser, aber leider auch nicht perfekt.

Ich vermute mal, dass es je nach Festplatte `kritische´ Bitraten gibt, bei denen vielleicht das Caching der Platte nicht mit dem Timing des HMpeg harmoniert oder umgekehrt oder sowas in der Art...

Einen Einfluss der niedrigeren Taktfrequenz konnte ich jedenfalls mit diesem Test nicht feststellen.

Wer will, kann auch versuchen, den Mega ebenfalls mit 8 MHz zu betreiben. Ein kurzer Test mit dem Protoyp ist positiv verlaufen. Allerdings läuft der Mega damit ganz klar außerhalb der Spezifikation, somit sind Hardwareschäden nicht auszuschließen und es ist auch fraglich, ob der Mega auf Dauer zuverlässig bei erhöhter Taktfrequenz läuft (es hat sicher einen Grund, dass nur 6 MHz auf dem Chip stehen). Wer also übertaktet, tut das auf eigenes Risiko und darf sich nicht beschweren, wenn irgendwas nicht funktioniert, schon gar nicht bei mir.

 

HMpeg Links

Link

Beschreibung

HMpeg

Offizielle HMpeg Seite

Master of Disaster

Master of Disaster´s SMD-HMpeg, FAQ, H-Control

Iller

Iller´s Serieller Car-HMpeg, guter Downloadbereich

T-Master

Seite speziell für HMpeg Entwickler

Henning

Fump: Hennings HMpeg Clone mit VS1001 MP3-Decoder

EWS

Das einseitige HMpeg Layout von EWS

Frank

Schöne Bauanleitung und mehr von Frank

IRC

Der #h-mpeg channel im DreamNet. Java Client.

 

 

AVRfreaks

Infos, Downloads und Diskussionsforen zum AVR. GCC-Download

(c) oliver tscherwitschke 1999 - 2003

last updated 2003-01-25