Forum: Mikrocontroller und Digitale Elektronik effektive Soundausgabe


von Jens (Gast)


Lesenswert?

Hallo,
also ich habe eigentlich ein einfaches Ziel, ich möchste mit einem AVR
Geräusche für die Modelleisenbahn erzeugen z.B. das Fahrgeräusch oder
das Pfeifen einer Dampflok.
Da gibt es ja als erstes das Platzproblem ... das ließe sich vielleicht
lösen, aber das Speicherplatzproblem ist größer, denn im Idealfall hat
ein AVR wenn überhaupt 0,5kB EEPROM.
Also entweder noch ein EEPROM oder anderer Controller, der dann aber
vielleicht nimmer so schön zu programmieren ist.
Fällt jemanden eine andere Effiziente Lösung ein?
Ausgeben mit PMW oder DAC is mir mehr oder weniger klar, allerdings ham
die AVRs doch gar keinen DAC oder?
Besten Dank vorab.
Gruß Jens

von Jens (Gast)


Lesenswert?

Nimm doch ein Atmel Dataflash (4, 8, 16, 32 MBit), die lassen sich via
SPI ansteuern und dürften genug Platz bieten :)

von Jens (Gast)


Lesenswert?

ok, vom Speicherplatz sind se bestimmt geeignet, aber die sind ja doch
sehr arg winzig ... aber ne Idee ist es, was kostet da s n Teil und wo
kriegt mans her?

... größerer Speicher ist ja nur eine Möglichkeit ... könnte man die
Daten nicht auf eine einfache Weise komprimieren?

von Benedikt (Gast)


Lesenswert?

Nimm M25Pxx von ST, sind billiger als der Dataflash (ca. 6€ für 32MBit).
Die gibts bei Digikey.

von Jens (Gast)


Lesenswert?

Du kannst natürlich auch serielle EEPROMs nehmen, die gibts von Atmel
mit bis zu 512kBit (evtl. mehrere kaskadieren?). Diese Teile sind
definitiv nicht teuer.

Was die Dataflashs angeht, so habe ich die mal bei Ineltek gesehen.
Einzelstücke sind recht teuer, aber ne VPE geht dann vom Preis. Weiß
allerdings nicht mehr, wie groß die VPEs waren.

von Jens (Gast)


Lesenswert?

Digikey? 18€ Versandkosten, Mindestbestellwert 100€ sonst 13€
Mindermengenzuschlag, Bezahlung per Kreditkarte. Tolle Alternative...

von Markus (Gast)


Lesenswert?

Nimm einen Mega32 und gib die Daten mit 4 Bit Genauigkeit aus. Bei 8000
Samples pro Sekunde reichen dann die 32KByte Flash für 8 Sekunden aus.

von Fasti (Gast)


Lesenswert?

Hi!

Wenn noch Platz für einen Extrachip ist, dann nimm doch gleich einen
ISP 1416 oder größer! Die haben alles drauf was man für die
Soundaufzeichnung und Wiedergabe benötigt, sind in der SMD-Form schön
klein und können sehr gut mit nem AVR gesteuert werden. Kosten auch net
viel, so um die 6-15€ je nach Größe. Bei mnachen kann man über 4
Minuten
aufzeichnen.

mfg

Fasti

von lordludwig (Gast)


Lesenswert?

ned 3 mal auf submit drücken^^

von Jens (Gast)


Lesenswert?

Also das mit dem Sprachspeicher find ich nicht gut, weil ich da ja nicht
sagen kann ich würde jetzt gerne Geräusch an der Stelle 3s abspielen,
sondern das immer von ganz vorn nach ganz hinten nuddelt.
Die Daten ins Flash zu schreiben, gut da hats mehr Platz aber der Sound
ist dann immer Teil des Programms.
Ideal wäre ein Chip, ähnlich wie in den Speichersticks - wobei 1MB ja
locker reichen würde, der wäre dann sicher auch klein nur sollte er 1.
halt auch käuflich sein und 2. obendrein nicht zu teuer

von Christoph Wagner (Gast)


Lesenswert?

Versuch doch mal, ob man das monotone Geräusch eines Zuges nicht mit
einem Algorithmus auch erzielen könnte. Rechenzeit hat man mit nem AVR
schließlich genug, und 4 Bit (oder auch 8) sollten da ja voll
ausreichend sein.(8000 Hz -> 2000 Takte/Sample) Dass kriegt man dann
mit sogut wie jedem Chip hin (Tiny bei 4/8/16 MHz je nach Algorithmus).
Hab auch schonmal einen für eine "Big-Ben" Klingel gesehen (weiß aber
nimmer wo). Einfach mal das Geräusch analysieren, und los gehts ...

von Thorsten (Gast)


Lesenswert?

Das hier könnte recht interessant sein:
http://www.microsyl.com/doorbell/doorbell.html

von Kai Markus T. (kmt)


Lesenswert?

Wie sieht denn das mit ner Speicherkarte aus? Es
gibt ja schon einige sehr gute Einbindungen von SD-Karten für
die Atmels. Oder gibts da Geschwindigkeitsprobleme mit dem
Datendurchsatz?

Greetz
KMT

von lordludwig (Gast)


Lesenswert?

also ne 8 oder 16 MB speicherkarte reicht und die krigste sogar in
manchen geschäften geschenkt oder für 1€ weil die eh ned mehr gebraucht
werden

von Jens (Gast)


Lesenswert?

Also das Geräusch mit Fourie zu analysieren und dann den Chip rechnen
lassen geht auch, allerdings muß man für jeden neuen Sound neu rechnen
und außerdem war diese Technik noch nie mein Fall.

Geschenkte Speicherkarten? ... unglaublich :) ... gegen einen Karte
Spricht eigentlich nix, außer deren Größe und Bauform, weil wenns
klappt wie ich mir das Vorstelle, könnte ich schon ein paar der Geräte
gebrauchen.

von Philipp Sªsse (Gast)


Lesenswert?

1. "Der Sound ist immer Teil des Programms": Nö. Du reservierst einen
Teil des Flash für das Programm. Ein üblicher, selbstprogrammierender
Controller kann diesen Teil dann auch mit neuen, über Schnittstelle
empfangenen Sounddaten überschreiben. Kein Problem.

2. Man kann sehr einfache Verfahren schreiben, wie man sehr kompakt
Audiodaten niederer Qualität ablegen kann, die man in Echtzeit auf
einem kleinen µC dann wieder in echte Daten umsetzt.

3. Für Modellbahngeräusche (Pfeifen, Zischen, Tschtschtsch, vielleicht
einmal Bimmeln) brauchst Du nur ganz wenige als Audiodaten vorliegende
Fragmente, die Du dann realistisch kombinieren kannst.

von lordludwig (Gast)


Lesenswert?

also ich hab schon 8MB Karten geschenkt gekrigt...naja egal. Was haltet
ihr von einem SRAM????

von Jens (Gast)


Lesenswert?

1. ... stimmt soweit hatte ich noch nicht gedacht
2. ... wie könnte denn so ein Verfahren aussehen, hat jemand mal
irgendwie n Beispiel gesehen?
3. ... ja gut, sich das ganze zusammenzubasteln ginge natürlich, aber
selbst da müßte man ja ins Flasch ausweichen, weil mit 500 Werten im
EEPROM kommt man selbst so nicht weit

SRAM - verliert das nicht die Lust, äh den Inhalt wenn der Strom weg
is?

von Jens (Gast)


Lesenswert?

hat keiner ne Idee oder ein Beispiel für einen cleveren Wiedergabe bzw.
Komprimierungsalgorythmus?

von Markus (Gast)


Lesenswert?

Du könntest nicht die Samples selbst, sondern immer nur die Differenz
zum Vorgängersignal übertragen. Da die Differenzen oft kleinere Werte
als die Samples haben, braucht man weniger Bit zur Kodierung. Macht man
das ganze adaptiv und erweitert es ein bischen, dann nennt sich das
ADPCM. Für Details Google fragen.

Sehr viel mehr kann man wohl nicht machen. Das Problem an der Stelle
ist, daß die wirklich guten Codecs (GSM-Codec oder MP3) so viel
Rechenzeit brauchen, daß sich das mit den kleinen Microcontrollern
(AVR) nicht machen läßt und große Microcontroller oder extra Chips mehr
kosten als ein größerer Speicher.

Markus

von Benedikt (Gast)


Lesenswert?

ADPCM bringt eine Reduzierung um etwa die Hälfte. Es geht zwar auch mehr
aber dann hört es sich schrecklich an.
ADPCM lohnt sich nur, wenn man viel Rechenleistung hat.
Die einfachste Lösung ist immer noch Tiny15L mit HighSpeed PWM Ausgang
und ein seriellem Flash dran.
Sowas läuft bei mir seit Monaten mit einer 3V Lithiumknopfzelle aus
einem Mainboard. Auf Knopdruck wird ein Text (in recht guter Qualität)
abgespielt.
Da der tiny15L aber kein SPI hat, und nur mit 1,6MHz läuft hat er viel
zu tun um die Daten seriell einzulesen. Viel mehr als 11kHz Samplerate
sind da nicht drin. Dafür ist alles aber klein und einfach.

von Jens (Gast)


Lesenswert?

gut, wieder was gelernt ... wobei wenn man die Daten um die Hälfte
reduziert bringt mich das nur bedingt weiter, weil angenommen ich hab
5s Sound und ich taste mit 8KHz ab, bräuchte ich 40000 Speicherplätze
reduziert auf die Hälfte macht ca. 20kB

ich hatte mir derweil überlegt ... vielleicht läuft das aufs Selbe
hinaus ... mal einen Sound zu sampeln (Software dafür hab ich im
Internet ausgebuddelt) und mir dann mal die Werte, die dabei
herauskommen, anzugucken - vielleicht macht es ja Sinn den Wert und
seine Gültigkeitsdauer zusammenzufassen

wobei das für austauschbare Sounds auch doof sein wird, denn ich müßte
mir eine PC-Software schreiben, die Zuordnung Meßwert und
Gültigkeitsdauer für mich erledigt und ich kann doch gar nicht
programmieren für Windows :(

und eine neue Frage hat sich auch aufgeworfen, wie bekommt man es denn
hin, daß der Sound immer gleich schnell ist, wenn sich die
Prozessorgeschwindigkeit ändert, gibts da ne Norm?

von Hermann K. (r2d2)


Lesenswert?

> und eine neue Frage hat sich auch aufgeworfen,
> wie bekommt man es denn
> hin, daß der Sound immer gleich schnell ist, wenn sich die
> Prozessorgeschwindigkeit ändert, gibts da ne Norm?

Dafür verwendet man Timer. Du kannst aber nicht erreichen, dass der
Sound immer gleich schnell abgespielt wird, wenn der Prozessor nicht
mitbekommt, dass sich die Geschwindigkeit geändert hat. Du musst also
dem Programm immer mitteilen wie schnell der Prozessor läuft. Aber wozu
willst du die Geschwindigkeit ändern? Lass ihn einfach mit voller Speed
laufen und schick ihn schlafen, wenn er nicht gebraucht wird.

von Hagen (Gast)


Lesenswert?

>>ADPCM lohnt sich nur, wenn man viel Rechenleistung hat.

Im Gegenteil, ADPCM lohnt sich insbesondere dann wenn man sehr wenig
Rechenleistung hat. Suche mal bei Dallas in deren AN's für PIC's.
Dort ist ein ADPCM Source erklärt und man sieht wie wirklich einfach
die De-/Kodierung ist. Die nötigen Resourcen sind sehr gering, sowohl
im zusätzlich benötigten Speicher wie auch in den nötigen
Rechenoperationen. Im Vergleich zu dieser Einfachheit sind 50%
Komprimierungsrate in einem Livestream wohlgemerkt schon eine sehr gute
Komprimierungsdichte. Vergleiche dies mal mit bekannten Verfahren wie
Huffman/LZW auf den gleichen binären Sounddaten.

Gruß Hagen

von Fasti (Gast)


Lesenswert?

Hi Jens!

Du solltest dir die ISPs genauer anschaun, da kannst du nicht nur von
vorn bis hinten durchspielen sondern die sind voll adressierbar, d.h.
du kannst erstens mehrer Sounds einspeichern und auch in den samples
herumspringen was du willst und ersparst dir somit das ganze ADPCM oder
sonstwas Zeugs.

PS: Ich hab nur einmal auf submit gedrückt, wieso das dreimal dasteht
ist mir ein Rätsel...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.