mikrocontroller.net

Forum: Projekte & Code WAV-Wiedergabe von SD-Karte mit einem ATTINY13(A)


Autor: Stefan K. (nukeman)
Datum:
Angehängte Dateien:

Bewertung
4 lesenswert
nicht lesenswert
Hallo liebe Freunde der Mikroelektronik!

ich möchte hier gerne eine aktuelle Entwicklung von mir zum Besten 
geben.
In dieser minimalistischen Form habe ich das im Netz bisher noch nicht 
finden können.
Den grössten Teil des Wissens und der Software dazu habe ich aus dem 
Netz bezogen, dann stark optimiert und möchte das Ergbnis jetzt gerne 
hier veröffentlichen.
Dies ist eine C-Software, die WAV-Files mit 18,75kHz Samplerate, 8 Bit 
PCM Mono mittels eines ATTINY13(A) = 30ct-Prozessors (9.12.2017 ebay als 
5er Pack) von einer "normal neu formatierten und beschriebenen" 
FAT16-SD-Karte wiedergibt.
Die Qualität ist auch ohne aufwändige externe Filter schon ganz 
ordentlich und viel besser als man das entsprechende 4/8kHz 4/8-Bit 
Grusskarten-Gequäke bisher kennt. Vom ATTINY13 wird in 
Minimal-Konfiguration nur die Hälfte
des verfügbaren RAMs (=32Byte) benötigt (ja, die Standard-Sektor-Grösse 
bleibt 512 Bytes, spielt kaum eine Rolle) und im Flash sind auch noch 
ein paar Bytes(max. 146) frei, so dass evtl. sogar noch eine kleine zus. 
Anwendung
auf diesem Proz laufen kann, Pins müssten dann für zusätzliche 
Funktionen gemultiplext werden. Kann schnell auf andere Prozessoren mit 
mehr Pins/Ressourcen portiert werden. Es braucht an HW-Unterstützung nur 
den Timer0 mit OC0A
als Hardware-PWM, SPI ist Software. Die SD-Karte MUSS FAT16 formatiert 
sein und darf nicht fragmentiert sein, die maximale Wiedergabe-Dauer 
liegt dann bei etwa 1,84GB nutzbarem Inhalt: 1,84GB / 18.7kBytes/s = 
~27h, sollte für die
allermeisten Anwendungsfälle ausreichen :)
Der "Trick" ist, dass die Karte per Double-Buffering mit nur 16 bzw. 32 
Byte-Vorhalt gelesen wird und jedes Sample nur für 2 PWM-Perioden 
anliegt.
In reinem Assembler würde man den Flash-Verbrauch wahrscheinlich noch 
auf etwa die Hälfte drücken können.
Anleitungen zur Erstellung der SD-Karte, HW-Minimal-Schaltung, 
Beispiel-Sound-Aufnahme, Anleitung zur Konvertierung des WAV-Files und 
fertiges HEX-File etc. siehe angehängte ZIP-Datei und enthaltene 
readme.txt.

Fotos vom Serviervorschlag "DIP-Sockel an SD-Adapter-Karte in 
Freiluft-Verdrahtung" habe ich mal beim dicken Kim in Übersee 
hinterlegt:
https://mega.nz/#F!ZwsEiKRL!IRHqlOjgTfNEtaYAxG9Q6g

Have fun!
Q.E.D.


Gruß,
Stefan

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Stefan K. schrieb:
> Fotos vom Serviervorschlag "DIP-Sockel an SD-Adapter-Karte in
> Freiluft-Verdrahtung" habe ich mal beim dicken Kim in Übersee
> hinterlegt:

Warum? Warum nicht einfach als Anhang hier hochgeladen?

Autor: Georg G. (df2au)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vermutlich bin ich blind... aber ein Schaltbild wäre hilfreich.

Autor: Äxl (geloescht) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut gemacht, mitm Tiny13 ;)
Schön wäre es, wenn er die Samplerate aus dem Header ausliest und den 
Timer entsprechend einstellen würde. Aber: ich hab keine Ahnung von 
"sowas".


> Vermutlich bin ich blind... aber ein Schaltbild wäre hilfreich.

/*

 Ports auf Eval-Board
  
Fkt.     AT11/12/13   2313     JP40
-----------------------------------
Out      5-PB0 OC0A   17-PB5
MISO     6-PB1 OC0B   18-PB6
SCK      7-PB2        19-PB7
CS       2-PB3        16-PB4
MOSI     3-PB4        15-PB3
  

das habe ich in der sdread.c gefunden

Äxl

Autor: Stefan K. (nukeman)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@rufus:
Weil das Formular hier schon zu Datensparsamkeit bei den Anhängen 
aufruft, dachte ich, das "Beiwerk" könnte vielleicht besser ausgelagert 
werden.
Hab die Fotos hier jetzt mal zusätzlich angehängt, dann ist hier auch 
alles komplett.

@Äxl,Georg:
Prinzipiell wäre es natürlich möglich die Samplerate aus dem WAV-Header 
zu lesen, aber zumindest der Tiny13 ist mit der eigentlichen Wiedergabe 
schon fast völlig ausgequetscht und absolut auf maximale 
Wiedergabe-Performance getrimmt. Da fand ich es sinnvoller, mit einem 
einzelnen Kommando auf dem PC vorher das passende Format zu erzeugen.
Wahrscheinlich wäre es a la "1 links 1 rechts, 2 fallen lassen" möglich, 
ein passendes Downsampling zu implementieren.

Wegen Schaltplan war ich wirklich etwas spärlich, in der gleichen Datei 
ist
direkt unter der Tabelle eine "Zeichnung" wie der DIP-Sockel am Besten 
an die SD-Karte passt. Gut, die Ansicht des Sockels ist von unten, das 
erklärt sich vielleicht nicht unmittelbar von selbst :)  :
  SD-Card
     
  /  1   2  3   4   5   6   7
  9  CS  DI GND VDD SCK GND DO  NC NC
     |   |  |
     |   |  |
     |   |  |
  1  2   3  4
  /R CS  MO GND
  
  
     SCK
  VCC    MI Out
  8  7   6  5
  
  DIP-Socket

Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Stefan K. schrieb:
> Weil das Formular hier schon zu Datensparsamkeit bei den Anhängen
> aufruft,

Das ist doch nur, weil es völlig nervig ist, wenn bedenkenlos die
zig Megapixel Rohformat der Kamera den Nutzern aufs Auge gedrückt
werden, um dann einen ATtiny13 abzulichten, den man vielleicht mit
maximal 10 x 10 cm² vor sich auf dem Bildschirm dargestellt haben
möchte.  Schließlich muss sich dann jeder mehrere Megabyte laden,
nur dafür, dass sie jeder einzelne Computer im Anschluss auf ein
darstellbares Maß reduziert.

Aber Bilder an sich sind durchaus gewünscht – danke fürs Hochladen!

Beitrag #5248277 wurde von einem Moderator gelöscht.
Autor: Georg G. (df2au)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan K. schrieb:
> Wegen Schaltplan war ich wirklich etwas spärlich

Den Anschluss der SD-Karte kann man aus dem Quelltext heraus 
nachvollziehen.
Aber, was für einen Lautsprecher hast du genommen, was für einen 
Tiefpass? Das sind die Ecken, über die ein Anfänger sofort stolpert.

Autor: Stefan K. (nukeman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei dem analogen Teil habe ich es mir sehr einfach gemacht:
Die Aufnahme im Anfangspost ist tatsächlich nur mit dieser Beschaltung
gemacht worden:
Pin 5-----+
          |
          -
         | | 2.2k Poti
         \ |
         |\|                
         | \-------------(  3.5mm Klinke
         | |
          -
          |
         GND
Mit 3.5mm Klinke dann weiter auf so einen Brüllwürfel mit AUX-Eingang.
Ohne DC-Auskopplung auf meiner Seite.
Hatte kurz eine Auskopplung zwischen Pin5 und dem Poti mit 100nF 
versucht, aber das hörte sich dann mumpfelig und leise an, also hab ich 
es weg gelassen und an der Stelle nicht weiter experimentiert. Beim 
Filter-Design habe ich auch wenig Erfahrung.

Bei den anfänglichen Tests hatte ich einfach einen kleinen 16 
Ohm-Lautsprecher 0,5W mit vorgeschaltetem 470 Ohm Widererstand 
betrieben:

Pin 5------[ 200-600R ]--- LSP --- GND

Wieder keine Auskopplung. Das geht natürlich nicht besonders laut und so 
ein frei rumliegender Lautsprecher gibt auch kein Klangwunder ab. Für 
den Funktionstest reichte es aber.

Beitrag #5266430 wurde vom Autor gelöscht.
Autor: Stefan K. (nukeman)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Da ich noch weitere Rückfragen zum Schaltplan bekommen habe, hier eine 
kleine Skizze, wie ich das bei mir genau verdrahtet habe.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die ersten Töne sind aus dem lautsprecher gekommen.
deshalb habe ich volgende Frage:
muss die komplette Musik oder was auch immer in ein einziges Wav file 
hinein oder kann man mehrer Files auf die Karte schreiben und die werden 
dann nacheinander abgespielt?

Autor: Stefan K. (nukeman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super! Es wird nur das erste File wiedergegeben, mehrere Sound-Dateien 
müsste man vorher auf dem PC zu einer Datei zusammenpacken.
Es wäre theoretisch möglich, mehrere Files abzuklappern, aber zumindest 
beim Tiny13 wird es dann mit dem Flash-Speicher (zu) eng.

Autor: Arne (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Moin,

nicht ganz so kompakt, dafuer aber 5V-kompatibel und mit Filter:
http://www.elektronik-labor.de/AVR/T13contest/sdsound-tn13.htm

Autor: Stefan K. (nukeman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin Arne,

sehr schönes Projekt von Dir und alles sehr ausführlich und detailliert 
dokumentiert!
Das hatte ich echt trotz Recherche vorher nicht gesehen, bevor ich mich 
an mein Projekt gemacht hatte. Wieder nur Zweiter :D
Bei Dir ist es für den Anwender etwas aufwändiger, die SD-Karte schon 
auf Sektor-Ebene zu präparieren, aber dafür wird man nachher mit mehr 
Bedienkomfort belohnt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.