Forum: FPGA, VHDL & Co. Mit CPLD Audio von EEPROM über R2R als D/A Ausgabe (Schematic)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von bernd r. (auch_bernd)


Angehängte Dateien:

Lesenswert?

Sehr geehrte Forummitglieder

ich habe zu meinem Audio-Projekt noch offene Fragen.
Danke vorab für Ihr Interesse und Beiträge.

Vorhaben: Einfache Realisierung ohne extra Ansprüche.

########### Projekt: ###########

Taster --> CPLD --> Flash/EEPROM --> R2R --> Lautsprecher
Das CPLD wird mit Xilinx Ise Design Suite (Schematic) programmiert.

###########  Meine Schwiegigkeiten: ###########

(1) Welches Format für das Flash/EEPROM?

Wir haben ein Audiofile (ca. 1 sec) als Textdatei im 4Bit-mono-ASCII 
Format (s. Anhang).
Dieses Format will so aber nicht auf das Flash/EEPROM - es müssten 
"Integerwerte" sein...
Hat jmd. einen Tipp zum richtigen Format oder kann diese Datei (s. 
Anhang) wandeln?

(2) Welches Flash/EEPROM?

Alternative zum EEPROM AMD 29F010 (soll ganz gut für so ein Projekt 
sein)

(3) Was kommt auf das CPLD?

Welcher "Zähler" (Schematic) wird zum Auslesen der Audiofile-Adressen im 
Flash/EEPROM benötigt?

###########  Was wurde bereits getan: ###########

Den "Pre-Zähler" zum Takt-Teilen, um das Audiofile mit seiner erstellten 
Frequenz (11 kHz) auszulesen und das R2R-Netzwerk dürften wir 
hinbekommen.
Aber ohne das "geladene" Flash/EEPROM können wir nicht testen.
Ähnliche Audioprojekte wurden mit fertigen IC-Zählern gesichtet aber aus 
den Datenblättern dieser ICs konnten wir keinen Zähler, passend 
(Schematic, Ise Design Suite) für uns erkennen.

Die Theorie ist verstanden worden!

Mit freundlichen Grüßen

von Hans-Georg L. (h-g-l)


Lesenswert?

Ich hab dein File mal überflogen ..

Du willst also Werte von 0,00 bis 9,99 ausgeben und dein File ist 2500 
Zeilen lang.

Dann brauchst du ein Flash mit 12 Bit Eingang und 10 Bit Ausgang ;)
Damit kannst du 4096 Werte im Bereich von 0 bis 1024 ausgeben.

10bit Ausgang gibts aber nicht, also musst du 2 an den Eingängen 
parallel schalten.

Und jetzt rate mal wieviel Bits der Zähler im CPLD haben muss.

von Malte S. (maltest)


Lesenswert?

Also das komische Format besteht aus 4-Bit-Sample-Werten in 
wissenschaftlicher Notation. Welches Tool hat denn so einen Schwachfug 
verbrochen? Kann dieses Tool nicht auch ein sinnvolles Format 
produzieren?
Naja, ansonsten ein kleiner Konverter, der das Teil Zeilenweise ausliest 
und nach Integer wandelt, dann je zwei Zeilen zu einem Byte kombiniert 
und das ganze binär speichert, ist keine Raketentechnik. Das Format ist 
bescheiden, aber trivial zu parsen.
Die Frage ist, ob du nicht besser das Kombinieren lässt und die Samples 
nur in den vier oberen oder unteren Bit eines jeden Byte Ableger, macht 
alles einfacher. Sonst muss noch ein Muxer zwischen den Speicher und das 
R2R. Hat dein CPLD noch Kapazitäten dafür? Oder du gönnst deinen Ohren 
wenigstens 8 Bit...
Du hast 1s Sound macht 11000 Samples. Selbst wenn du vier Bit pro Sample 
verschwendest, macht das nur 11kB. Wozu dann 128kiB Speicher?

Den Speicher musst du entweder außerhalb der Schaltung programmieren 
oder du siehst einen Schreibmodus vor, bei dem WE low gezogen wird und 
du deine Samples synchron zu deinen 11kHz an die Datenleitungen anlegst.

von W.S. (Gast)


Lesenswert?

1 CPLD
1 Flashrom
1 abenteuerlicher 4 Bit Wandler
---> und das Ganze für nen Takt in der 10 kHz Gegend.


o je, wer hat denn das bloß erdacht?
Für sowas nimmt man besser einen billigen uC.
Wenn der TO mal sehen will, wie man platzsparend auch größere 
Audiostücke speichert, dann bitte mal unter ADPCM oder Sierra SOL 
googlen oder einfach sich in der "Lernbetty" hier im Forum was anlesen.

W.S.

von Onkel K. (Gast)


Lesenswert?

Nach meinem Empfinden fehlt bei der Schaltung der Filter hinter diesem 
Weltklassewandler in 4 Bit.

von Malte S. (maltest)


Lesenswert?

Was ich gestern auf dem Handy gar nicht gesehen habe: der Adressbus ist 
mit 4 Bit natürlich zu klein.
Und ja, wenn man ein 8-Bit EEPROM hat, darf man wirklich auch 
8-Bit-Sound nehmen. Ist doch kein µC, der gerade noch 4 Pins frei hat.

von bernd r. (auch_bernd)


Lesenswert?

> Welches Tool hat denn so einen Schwachfug verbrochen?

MATLAB >> help wavread    heisst das komische Tool.
So wurden aus 8bit stereo 4bit mono gebastelt.

Sind solche daten besser für das EEPROM?

[...]
   -0.2031
   -0.7500
   -1.1563
   -1.3750
   -1.4688
   -1.3750
   -1.1094
   -0.6563
   -0.0781
    0.4844
    0.9375
    1.2344
    1.3594
[...]

> Wozu dann 128kiB Speicher?

Weil ich diesen besitzte und das Projekt nur ein Test ist. Speicher wird 
wieder gelöscht und für ein grösseres Projekt eingesetzt.

MfG

von bernd r. (auch_bernd)


Lesenswert?

> 1 abenteuerlicher 4 Bit Wandler
Wenigstens gibts es zu diesem Beitrag eine schematische Skizze, um was 
es geht, um Missverständnisse zu vermeiden und präzise Antworten zur 
Fragestellung zu erhalten.

> o je, wer hat denn das bloß erdacht?
Jmd. der noch nicht viel Ahnung hat, so wie Sie auch einmal zu Beginn.
Genau dafür ist ein Forum da - danke hierfür.

> [...] größere Audiostücke speichert, [...]
Danke für den Hinweis. Da wollen wir später hin. (Fortschritt)

Sinn des Projekts ist es, kleine Realisierung und Verstehen durch 
Ausprobieren.

MfG

von Malte S. (maltest)


Lesenswert?

Das ist beides ca. gleich gut oder schlecht. Was du brauchst ist eine 
Repräsentation der Samples ohne Fest oder Fließkomma-Krempel und 
vorzugsweise überhaupt nicht textuell, sondern binär. Beide Varianten 
lassen sich mit ein paar Zeilen in einer nahezu beliebigen Sprache dahin 
umwandeln.

von bernd r. (auch_bernd)


Lesenswert?

Aktueller Stand:

Zu meinen Fragen o.g. (1-3) weiss ich bis jetzt hierdurch noch nicht 
mehr als vorher.

Ich versuche jetzt mit HEX-Editoren und meinem WAV-File etwas zu 
erreichen.

Über Probleme im WAV-Header, dass man den rauslöschen muss, habe ich 
schon gelesen.

Ich freu mich natürlich über ein .BIT-File für mein EEPROM (128k) was 
jmd. von Ihnen hier hochläd. Gerne mit einem "Audio-Wort" wie "Newbee" 
o.ä..

Programmierung des EEPROM erfolgt mit GALEP 5.

Danke hiermit an allen Beitrags-InteressentIn.

MfG

von Malte S. (maltest)


Lesenswert?

bernd r. schrieb:
> Ich versuche jetzt mit HEX-Editoren und meinem WAV-File etwas zu
> erreichen.
>
> Über Probleme im WAV-Header, dass man den rauslöschen muss, habe ich
> schon gelesen.

Das ist ein Ansatz. Sieh dir sonst mal Audacity an 
(http://audacity.sourceforge.net/), damit kannst du auch im 
"Raw"-Format, also ohne Header speichern. Genau was du brauchst.
Deine Textdatei...vielleicht später, jetzt gibt's Essen

von Tom W. (Gast)


Lesenswert?

Mit dem Sox von Sourceforge kann man auch Textdaten als Audio abspielen, 
indem man es zuvor wandelt.

von Malte S. (maltest)


Lesenswert?

1
perl -pi -e '$_ = pack "C", $_' < audio_4bit_mono_ascii.txt > audio_8bit_mono_low_4_bits_only.raw

von W.S. (Gast)


Lesenswert?

bernd r. schrieb:
> Sinn des Projekts ist es, kleine Realisierung und Verstehen durch
> Ausprobieren.

O je.

Eigentlich erwarte ich von den Leuten, daß sie wissen, was sie tun - 
bevor sie es tun.

Mal auf den Busch zu hauen, um zu sehen, was rauskommt, ist schlecht. In 
90% aller Fälle kommt ein Löwe raus und frißt dich. Das war's dann.

Mal im Ernst: Eine Sinn-Nutzen-Kosten-Abschätzung am allerersten Anfang 
wäre dringendst vonnöten.

W.S.

von Malte S. (maltest)


Lesenswert?

Naja, kommt drauf an. Wenn der Weg das Ziel ist und man sich leisten 
kann, auf diesem Wege erst zu erfahren, was sinnvoll ist und was nicht, 
ist das doch okay.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

bernd r. schrieb:
> Sind solche daten besser für das EEPROM?
>
> [...]
>    -0.2031
>    -0.7500
>    -1.1563
> Hat jmd. einen Tipp zum richtigen Format oder kann diese Datei wandeln?
Nimm irgendeine Programmier- oder Scriptsprache deiner Wahl und skaliere 
diese Zahlen in einen Bereich von 0.0 ..15.999. Dann schneidest du 
einfach die Nachkommastellen ab und füllst die verbleibenden 4 Bit vorne 
mit Nullen auf 8 Bit auf. Die damit erhaltene Biärdatei mit 2500 Bytes 
brennst du dann in das Flash und legst deinen Binärzähler an die 
Adressleitungen an. Fertig.

von Tom W. (Gast)


Lesenswert?

W.S. schrieb:
> Eigentlich erwarte ich von den Leuten, daß sie wissen, was sie tun -
> bevor sie es tun.
Geh mal zu Bosch. Da wirst Du bestimmt fündig! :-)

von Oliver P. (mace_de)


Angehängte Dateien:

Lesenswert?

Hier die Daten im 8bit binary Format

von Route_66 H. (route_66)


Lesenswert?

Hallo!
Irgendwas ist oberfaul. Eine Sekunde Audio mit 11 kHz Sample und dann 
nur 2500 Bytes Data passen nicht zusammen!

Solch ein 128 kB Flash kann man schon nehmen. Für besseren Klang alle 8 
Bit nutzen. Wenn die einzelnen Audi-Bruchstücke 0,75 Sekunden lang sein 
dürfen, dann die einzelnen Dateien auf 8192 Bytes beschränken. So passen 
16 Audiofiles in den 29C010. Die können über 4 Adressleitungen 
selektiert und mit einem 12-Bit Binärzähler abgespielt werden. Ganz ohne 
CPLD - nur Standardlogik.

von Oliver P. (mace_de)


Lesenswert?

>Eine Sekunde Audio mit 11 kHz Sample und dann nur 2500 Bytes Data passen nicht 
>zusammen!
Stimmt, aber die vom TO gepostete Textdatei hat halt nur 2500 
Datensätze.

von Lupin (Gast)


Lesenswert?

Ich würde das über einen sigma delta DAC versuchen, dann wäre das 
Projekt wenigstens interessant und es würde Sinn machen nen cpld zu 
verwenden. Wer gibt dir so ein Projekt?Uni?

von J. S. (engineer) Benutzerseite


Lesenswert?

Eine Möglichkeit, bei reduziertem Platz gute Audiodaten zu speichern, 
ist, sie in der Dynamik zu komprimieren und später mit einem Expander zu 
barbeiten, der sich invers verhält.

Des Weiteren empfiehlt es sich, die Daten vorzufiltern und zu dithern, 
um eine Art PDM zu erreichen.

von Experte (Gast)


Lesenswert?

Ich würde einen grösseren R2R-Teiler nehmen. 5 Bits sind ein bischen arg 
wenig.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Experte schrieb:
> 5 Bits sind ein bischen arg wenig.
Das waren es vor einem halben Jahr schon...

von Experte (Gast)


Lesenswert?

Du spielst auf die lange Pause zwischen letztem Beitrag und meinem an, 
ok. Ich denke aber, dass auch andere an so einem Thema interessiert sind 
und so wie ich per Suche auf das Thema stoßen. Von der Seite her finde 
ich es generell zweckmäßiger, zum Thema passende Aspekte dort 
beizutragen, statt neue threads aufzumachen.

Was an der Schaltung meiner Meinung nach auch noch fehlt, ist ein 
Ausgangsverstärker mit OP. Einen LS einfach so dranzuhängen, bringt 
enorme Verzerrungen.

von Tom W. (Gast)


Lesenswert?

Jetzt sind hier soviele Tipps gelaufen, dass es den To verschreckt hat. 
Sicher sitzt er daheim und hört schon über den 3Bit-R2R-Wandler die 
tollstens MP3s ab.

Mein Tipp lautet, ein schnelles PLD mit nur einem Ausgang und direkt aus 
SOX oder Audacity ein 1Bit PCM generieren.

von J. S. (engineer) Benutzerseite


Lesenswert?

Thomas Werner schrieb:
> Mein Tipp lautet, ein schnelles PLD mit nur einem Ausgang und direkt aus
> SOX oder Audacity ein 1Bit PCM generieren.

Mit nur einem Bit braucht es aber eine ungleich höhere Frequenz, die in 
diesem Fall auch nicht nur 4Bit = Faktor 16 höher sein muss, wie manche 
meinen.

> Was an der Schaltung meiner Meinung nach auch noch fehlt, ist ein
> Ausgangsverstärker mit OP. Einen LS einfach so dranzuhängen, bringt
> enorme Verzerrungen.
wobei es lineare Verzerrungen sind infolge des Frequenzgangs des 
Systems. Ein OP kann da aber wirklich nicht schaden. Hier hätte ich ein 
Beispiel für einen Audio-Ausgang beim PLD:
http://96khz.org/oldpages/pushpullaudiopldoutstereo.htm

von Rolf S. (audiorolf)


Lesenswert?

Du betreibst den aber laut Deiner Schaltung nicht wirklich direkt am PLD 
sondern über einen OPAMP und da gibt es bessere Lösungen.

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.