mikrocontroller.net

Forum: Projekte & Code Sound Experimente ATmega AVR ADC PWM Assembler


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.
Autor: Bernhard S. (bernhard)
Datum:
Angehängte Dateien:

Bewertung
3 lesenswert
nicht lesenswert
1. Experiment - Räumlicher Klang

Ein 8 MHz getakteter ATmega328p tastet das NF-Signal mit ca. 78kHz per 
ADC ab.

Am Kanal-A wird das Ergebnis per 31 kHz und 8-Bit PWM direkt wieder 
ausgegeben und
am Kanal-B um einige ms zeitverzögert.

Die Zeitverzögerung wurde mit dem 2k SRAM, als Schieberegister, 
realisiert.



Taste-A: deaktiviert den räumlichen Klang

LED-rot:  Übersteuerung
LED-gelb: Pegel (ohne Eingangssignal aus, ggf. mit Poti einstellen)
LED-grün: Samplingimpulse

Oszi-Bild: PWM-Ausgabg Kanal-A eines Sägezahnsignals mit Software 
generiert

Bitte erwartet keine HiFi-Qualität^^

Dieses Experiment lässt sich noch "aufbohren" für z.B. Anrufbeantworter, 
Diktiergerät mit SD-Karte usw.


Bernhard

: Bearbeitet durch User
Autor: Marco K. (fuerst-rene)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genial gefällt mir Daumen hoch.

Autor: Thomas O. (kosmos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ein Echo, damits etwas fülliger klingt.

Autor: Bernhard S. (bernhard)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Für die Lobesworte danke ich Euch :-)

2. Experiment - bis 300ms Echo mit einem ATmega1284p


Der 16K SRAM des 22MHz AVR ermöglicht ein ca. 300ms Echo,
klingt so, als stünden wir in einem sehr großen Raum ^^

Das Audio Signal wird mit einer PWM ca. 86kHz generiert.

Die beiden A210K (s.Bild) mit ihren 5W steuern die Lautsprecher.

Taste-A: deaktiviert den räumlichen Klang

LED-rot:  Übersteuerung
LED-gelb: Pegel (ohne Eingangssignal aus)
LED-grün: Samplingimpulse

Blinken die LEDs:
ROT:     Interrupt Error
ROT+GELB:  Watchdog Error
ROT+GELB+GRÜN:  Programm-Check Error


Übrigens: Verbindet man beide Kanäle, also Monobetrieb, klingt es auch 
schon sehr interessant...

Die Fuses hänge ich mal mit an :-)


Nachtrag:

Genügend Pins für eine SD-Karte, LCD usw. stünden auch zur Verfügung

Bernhard

: Bearbeitet durch User
Autor: Bernhard S. (bernhard)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
3. Experiment, eine kleine Spielerei ^^

Alle 4 Timer des ATmega1284p arbeiten im PWM-Fast-Modus und generieren 
NF-Audio-Signale.

Nun stehen 8 PWM Känäle an verschiedenen Pins zur Auswahl.

Eine 9 Bit PWM, da der ADC auch bis 10 Bit arbeiten könnte, brachte 
keine Verbesserung der Klangqualität, da die PWM-Frequenz deutlich 
niedriger wurde.


Frage:

Um den NF-Pegel zu verringern müsste nur der ADC halbiert werden, das 
ist kein Problem, aber wie könnte der Klang verändert werden?

Ich vermute, es stehen nicht genügend Takte zur Verfügung, um deratige 
Berechnungen durchzuführen.

Bernhard

: Bearbeitet durch User
Autor: c-hater (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Bernhard S. schrieb:

> Um den NF-Pegel zu verringern müsste nur der ADC halbiert werden, das
> ist kein Problem, aber wie könnte der Klang verändert werden?
>
> Ich vermute, es stehen nicht genügend Takte zur Verfügung, um deratige
> Berechnungen durchzuführen.

Doch, na klar kann man einiges machen. Die Frage ist aber eigentlich vor 
allem: was genau willst du denn am "Klang" ändern?

Wenn es vor allem darum geht, dieses böse "Zischeln" zu bekämpfen: das 
kannst du natürlich NICHT mit Software tun, denn das entsteht durch 
die PWM als Funktionsprinzip. Dagegen hilft nur ein 
"Rekonstruktionsfilter" (AKA: Tiefpass) in Hardware hinter dem 
PWM-Ausgang. Das ist nicht so schwierig und wird umso einfacher, je 
weiter deine PWM-Frequenz von der höchsten Nutzfrequenz entfernt ist.

Im Idealfall genügt ein simpler Kondensator, parallel zum 
(elektrodymischen) Schallwandler. Leider braucht man (unüblich) 
hochohmige Schallwandler, um dieses Primitivstkonzept ohne Gefahr für 
einen AVR8-Ausgang umsetzen zu können. Und natürlich 78,5kHz 
PWM-Frequenz, sprich: AVR8@Fmax.

Ich würde deshalb jederzeit eine Lösung mit einem Verstärker vorziehen 
(der dann die Tiefpass-Filterei ganz nebenbei mit erledigen kann). So 
ein blöder OPV sollte in deinem Experimentierbudget ja vielleicht noch 
drin sein...

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:

> Ich würde deshalb jederzeit eine Lösung mit einem Verstärker vorziehen
> (der dann die Tiefpass-Filterei ganz nebenbei mit erledigen kann). So
> ein blöder OPV sollte in deinem Experimentierbudget ja vielleicht noch
> drin sein...

Ich sehe (leider erst nach Posting), dass du bereits einen A210K 
einsetzt. Den kann man recht problemlos mit Tiefpass-Eigenschaften 
versehen.

Autor: Michael W. (michael_w738)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Ich bin ganz erstaunt, wie gut die PWM / PCM Soundqualität vom AVR Fast 
Timer ist, selbst mit nur einem einfachen OP AMp und RC-Glied. Mit der 
richtigen Programmierung kriegt man das sogar polyphone hin. Ich habe 
hier > 16 kHz 8 Bit PCM mit 4 Kanälen und nur ein RC am Ausgang des 
ATMega:


Youtube-Video "LambdaDrum Pattern Sequencer in BASIC"

Youtube-Video "LambdaSpeak 3 - Simple 10 Track Pattern Sequencer / Drum Sequencer"

Autor: Bernhard S. (bernhard)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
4. Experiment

NF Audio Sound Mono auf SD-Karte speichern,
Sampling 105kHz, 207 SD-Blöcke/s.

Bei 1GB SD ca. 3h Musik.

Mit LCD und Menuesteuerung.

In dieser Version kann man die Aufnahme, also die Daten die auf die 
SD-Karte gespeichert werden, direkt mithören.

Bei langsamen SD-Karten gibt es ab und an bei der Aufnahme, für einige 
ms, kleine Aussetzer, die rote SD-LED blitzt dann kurz auf.

Eine verwendete 32Gb SDHC keine Aussetzer :-)

LED-grün: Play
LED-gelb: Rec
LED-rot:  SD-Error / Wait

LED-grün: Sampling
LED-gelb: Pegel
LED-rot:  Übersteurung


Menue:
- Record
- Play
- Raumklang / Hall
- Testton
- Zeitanzeige
- SD read Tests   (Sektoren pro Sekunde)
- SD write Tests  (Sektoren pro Sekunde)

Nicht wundern, bei der Wiedergabe wird auch der ADC als Takt-Dummy 
genutzt, würde man z.B. 15µs Warteschleife verwenden, dann klingt es wie 
"mickey mouse".

Geeignet für schnelles vorspulen.

> was genau willst du denn am "Klang" ändern?

z.B. Tiefenanhebung, aber ohne RC-Kombinationen, alles per Software, 
hatte ich vielleicht nicht eindeutig formuliert, sorry.


> ...LambdaDrum....

Toll, ich bin begeistert, vielleicht könntest Du hierzu mal einen 
separaten  Thread erstellen^^



Bernhard

: Bearbeitet durch User
Autor: c-hater (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Bernhard S. schrieb:

> 4. Experiment
>
> NF Audio Sound Mono auf SD-Karte speichern,
> Sampling 105kHz, 207 SD-Blöcke/s.

Völlig unsinnig.

Jedenfalls wenn das Ziel wirklich ist, "Audio" (im Sinne von: etwas für 
Menschen hörbares) zu speichern.

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.

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