Forum: Mikrocontroller und Digitale Elektronik .wav abspielen mit Atmega8 ganz einfacher Code


von Fabian F. (fabiii9)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe ein Miniprojekt vor.

Ich habe eine SD-Karte auf der eine .wav-Datei drauf ist. (ca. 7 Sek.)

Jetzt will ich als Mikroconbtroller einen Atmega8  verwenden, da ich den 
schon daheim habe.
Wenn ich auf eine Taste drücke soll einfach das File abgespielt werden.
Eine Stop-Taste oder Spul-Taste ist nicht nötig.
(ist nur eine Art Gong)
Momentan bin ich auf der Suche nach einem ganz einfachen Code dafür.

Habe den Schaltplan von http://elm-chan.org/works/sd8p/report.html.
Aber der Code ist mir eigentlich zu komplex.

Geht das auch einfacher ???

Soll wirklich nur ein ganz einfacher Code sein. (In C oder BAscom)

Brauche ich da außer der SD-Karten-Halterung und dem Mikrocotnrolelr 
(Atmega8), noch etwas?
Vielen Dank
Gruß
Fabi

von Falk B. (falk)


Lesenswert?

@Fabian Müller (fabiii9)

>Habe den Schaltplan von http://elm-chan.org/works/sd8p/report.html.
>Aber der Code ist mir eigentlich zu komplex.

Dann sein mal 1 Minute clever und bau das Projekt 1:1 nach, dann musst 
du nur das fertige HEX-File flashen und gut.

von Cyblord -. (cyblord)


Lesenswert?

Fabian Müller schrieb:
> Hallo zusammen,
>
> ich habe ein Miniprojekt vor.
>
> Ich habe eine SD-Karte auf der eine .wav-Datei drauf ist. (ca. 7 Sek.)
>
> Jetzt will ich als Mikroconbtroller einen Atmega8  verwenden, da ich den
> schon daheim habe.
> Wenn ich auf eine Taste drücke soll einfach das File abgespielt werden.
> Eine Stop-Taste oder Spul-Taste ist nicht nötig.
> (ist nur eine Art Gong)
> Momentan bin ich auf der Suche nach einem ganz einfachen Code dafür.
>
> Habe den Schaltplan von http://elm-chan.org/works/sd8p/report.html.
> Aber der Code ist mir eigentlich zu komplex.
>
> Geht das auch einfacher ???

Ja klar, die Jungs von elm-chan haben den einfach aus Spass ein bisschen 
komplexer gemacht...
Sorry, aber ne SD Karte lesen (inkl. Filesystem implementierung) und 
Tonausgabe (noch das einfachste) geht leider nicht in 10 Zeilen Code. 
Sowas existiert nur in der kranken Fantasie von Arudino und Bascom 
versuchten Gehirnen.
Willkommen in der realen Welt.

gruß cyblord

: Bearbeitet durch User
von Max H. (hartl192)


Lesenswert?

Fabian Müller schrieb:
> Geht das auch einfacher ???
Nur wenn die die SD-Karte ohne Dateisystem betreibst.

> Brauche ich da außer der SD-Karten-Halterung und dem Mikrocotnrolelr
> (Atmega8), noch etwas?
Entkoppelkondensatoren, Lautsprecher/Kopfhörer, Programmer, Platine, PC 
zum Programmieren,...

cyblord ---- schrieb:
> Sorry, aber ne SD Karte lesen (inkl. Filesystem implementierung) und
> Tonausgabe (noch das einfachste) geht leider nicht in 10 Zeilen Code.
> Sowas existiert nur in der kranken Fantasie von Arudino und Bascom
> versuchten Gehirnen.
Wenn ich den ganzen Code in einer Lib verstecke, würde es auch mit ASM 
in zwei Zeilen gehen.

: Bearbeitet durch User
von der alte Hanns (Gast)


Lesenswert?

> (ist nur eine Art Gong)

In diesem Fall würde ich mir die music-box von elm-chan anschauen; das 
wird dann eher ein mittleres Projekt (auch mit, O Gott - Assembler!), 
aber ohne SDC, und wenn man mit dem Wellenmuster etwas spielt, kann man 
eine Menge lernen und auch etwas Spaß dran haben.

von Lohmich (Gast)


Lesenswert?

>Sowas existiert nur in der kranken Fantasie von Arudino und Bascom
>versuchten Gehirnen.
Krank ist es doch, wenn jeder User den Zugriff auf ein FAT Filesystem 
neu programmiert. Der richtige Weg ist, Libs zu benutzten. Ob jetzt 
STM32Cube, eine Arduino Lib oder sonst eine, die auf Mikrocontroller.net 
oder GitHub rumschwirrt ist doch egal.

von Cyblord -. (cyblord)


Lesenswert?

Lohmich schrieb:
>>Sowas existiert nur in der kranken Fantasie von Arudino und Bascom
>>versuchten Gehirnen.
> Krank ist es doch, wenn jeder User den Zugriff auf ein FAT Filesystem
> neu programmiert. Der richtige Weg ist, Libs zu benutzten. Ob jetzt
> STM32Cube, eine Arduino Lib oder sonst eine, die auf Mikrocontroller.net
> oder GitHub rumschwirrt ist doch egal.

Jop und? Das TUT der Code auf elm-chan natürlich. Er nutzt bereits eine 
lib für den FAT Zugriff. Kapiert das ein Arudino/Bascom Programmierer? 
Nein natürlich tut er das nicht. Denn alles was über Config FAT oder 
fat.init() hinausgeht, kennt er nicht, kann er nicht.

gruß cyblord

von der alte Hanns (Gast)


Lesenswert?

> Jetzt will ich als Mikroconbtroller einen Atmega8  verwenden, da ich den
> schon daheim habe.

Das passt nicht zum Schaltplan, die dort vermutlich verwendete 64 
MHz-PWM kann der ATmega8 nicht; letzterer ohne zusätzlichen externen DAC 
wird auch einen einfachen Gong ziemlich ruppig klingen lassen.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Also ich habe vor einiger Zeit für einen Modellbauer mittels Arduino Uno 
(oh Schreck!) einen LKW-Soundgenerator realisiert. Die PWM wurde dabei 
auf 32 kHz gesetzt, und der Sound (Wave, 8 kBit Streamingrate) als 
Data-Statement direkt im Sourcecode (Flash) untergebracht (vorher per 
selbstgeschriebenem Tool aus einem Wave extrahiert und in Programmzeilen 
umgewandelt). Das richtige Abspieltempo wurde ganz simpel mit ein par 
Leerbefehlen hingetrimmt.

Die Programmstruktur ist dabei extrem simpel. Der Arduino verweilt an 
einem Beinchen pollend in einer Endlosschleife. Wenn das Signal kommt, 
werden in einem For-Next-Loop die Bytes per PWM 'rausgeschoben, danach 
gehts in die Warteschleife zurück.

Das Prinzip sollte auch für einen Türgong oder "Türschrei" ausreichend 
sein ...

von Paul Baumann (Gast)


Lesenswert?

@Cyblord

Ich weiß nicht, was Dir immer die Hörner aus dem Schädel treibt, sowie
das Wort "Bascom" auftaucht. Das ist ja schon wie ein pawlowscher 
Reflex.
;-)

Auch in Bascom ist es möglich, eine fertige Bibliothek zum Zugriff aus
SD-Karten zu benutzen. Hier ist das z.B. veröffentlicht:
http://www.mcselec.com/index.php?option=com_content&task=view&id=291&Itemid=57

Na freilich ist das nicht einfach zu verstehen, aber, wer sich
Mikrokontroller aufhalst, der muß sich damit befassen.

MfG Paul

von Fabian F. (fabiii9)


Lesenswert?

Hallo,

erstmal vielen, vielen Danjk für eure ganzen Antworten.

Max H. schrieb:
> Fabian Müller schrieb:
>> Geht das auch einfacher ???
> Nur wenn die die SD-Karte ohne Dateisystem betreibst.

Was bringt mir denn dieses Dateisystem.

Also nochmal zum Verständnis.
Auf der SD-Karte ist nur ein File (wav-File).
Sonst ist da nichts drauf.
Der Mikrocontroller muss also nicht auswählen

Vielen Dank
Gruß
Fabi

von Marcus W. (marcusaw)


Lesenswert?

Dann muss du die Wavedatei Bitweise in die Speicherregister der SD-Karte 
schreiben und sie auf die selbe Art wieder auslesen. Wenn du das nicht 
willst, brauchst du ein Dateisystem.

von Cyblord -. (cyblord)


Lesenswert?

Paul Baumann schrieb:

> Ich weiß nicht, was Dir immer die Hörner aus dem Schädel treibt, sowie
> das Wort "Bascom" auftaucht. Das ist ja schon wie ein pawlowscher
> Reflex.

Jaja, das hat mit Bascom selbst nichts zu tun.
Sondern wenn da jemand ankommt, von Bascom das Gehirn weggebrannt und 
dann an fertigem Code rumnörgelt, dass dieser ja viel zu komplex sei und 
obs nicht einfacher gehe. Ja super! MMeint er die Autoren des Codes sind 
alle doof oder schreiben gerne unnützen Code oder wie? Ich würds ja 
gerne verstehen.
Und dann allein die Idee, wegen einem blöden Türgong, gleich ne 
komplette SD-Karte mit Wav Datei zu nehmen. Klar wenn man nicht weiß 
welcher Aufwand da drin steckt. Und wie soll mans wissen, wenn man 
bisher nur mit Programmier-Lego gespielt hat. Und SD-Karten sind ja 
überall drin. Also gebt mir 2 Zeilen Code und alles läuft wie ich will. 
Der Bub weiß ja noch nichtmal was ei Dateisystem ist.
Boa gut dass ich mich wegen so was nicht auch noch aufrege...

von Lohmich (Gast)


Lesenswert?

Du kannst auch ne WAV Datei direkt auf eine SD schreiben. Ohne FAT.
Ist's eine 8Bit unsigned WAV Datei, dann reicht es einfach die Daten von 
der SD-Karte ab Adresse x (nach dem Header) zu lesen und auf den DA 
Wandler zu geben.

von tester (Gast)


Lesenswert?

Wenn Dir der Code von Chan nicht goutiert, dann versuchs eben auf die 
althergebrachte Methode: Der Gockel wirft zum Thema "Eprom Waveplayer" 
genügend Material aus. Schmeiß also die SD-Karte weg, schnapp Dir einen 
Eprommer, mit dem Du Dein File in ein Eprom brennst, hau den Sound via 
CD4060/4040er-Kaskade in ein R2R-Netzwerk und Du wirst keine einzige 
Zeile programmieren müssen. Am Ende des Tages wirst Du aber feststellen, 
dass die Lösung von Chan doch die praktikablere war....

von Falk B. (falk)


Lesenswert?

@ Frank Esselbach (Firma: Q3) (qualidat)

>(oh Schreck!) einen LKW-Soundgenerator realisiert. Die PWM wurde dabei
>auf 32 kHz gesetzt, und der Sound (Wave, 8 kBit Streamingrate) als
>Data-Statement direkt im Sourcecode (Flash) untergebracht (vorher per
>selbstgeschriebenem Tool aus einem Wave extrahiert und in Programmzeilen
>umgewandelt). Das richtige Abspieltempo wurde ganz simpel mit ein par
>Leerbefehlen hingetrimmt.

Womit mal wieder das Arduino-Klischee voll erfüllt wäre ;-)
Mit 3 Minuten nachdenken hätte man das Nachladen der PWM in den 32 kHz 
Timer gepackt und hätte nix trimmen müssen.

>Die Programmstruktur ist dabei extrem simpel. Der Arduino verweilt an
>einem Beinchen pollend in einer Endlosschleife. Wenn das Signal kommt,
>werden in einem For-Next-Loop die Bytes per PWM 'rausgeschoben, danach
>gehts in die Warteschleife zurück.

Mit nem Interrupt wär das genauso einfach.

von F. F. (foldi)


Lesenswert?

cyblord ---- schrieb:
> Sowas existiert nur in der kranken Fantasie von Arudino und Bascom
> versuchten Gehirnen.

Da beißt er wieder zu. :-)

Cyblord, du warst ja mit der größte meiner Bekehrer.

Sicher geht vieles auch mit Arduino und schnell, aber viele Sachen 
findet man auch erst nach langem Suchen, weil sie nicht in den Büchern 
stehen.
Man kann z.B. auch einen ganze Port ansprechen in Arduino, aber in 
meinen Büchern stand das nicht. Was musste ich eine Fabrik für den 
Codeschalter bauen, in C wäre das so leicht gewesen.

: Bearbeitet durch User
von Rolf Magnus (Gast)


Lesenswert?

Fabian Müller schrieb:
> Was bringt mir denn dieses Dateisystem.
>
> Also nochmal zum Verständnis.
> Auf der SD-Karte ist nur ein File (wav-File).

Das Filesystem bringt dir, daß es überhaupt Files gibt.
Statt ein wav-File zu speichern, kannst du dessen Inhalt aber natürlich 
auch direkt "roh" in Sektoren der SD-Karte schreiben.
Warum es aber komplizierter sein soll, fertigen funktionierenden Code zu 
verwenden als eine vereinfachte Version davon nochmal selbst 
nachzubauen, verstehe ich nicht.

von NullNullCyblord (Gast)


Lesenswert?

F. Fo schrieb:
> cyblord ---- schrieb:
>> Sowas existiert nur in der kranken Fantasie von Arudino und Bascom
>> versuchten Gehirnen.
>
> Da beißt er wieder zu. :-)
>
> Cyblord, du warst ja mit der größte meiner Bekehrer.

Du meinst dieses Nullsummenspiel namens Cyblord, ist ein flotter Feger?

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.