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.
von Bernhard S. (bernhard)


Angehängte Dateien:

Bewertung
6 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
von Marco K. (fuerst-rene)


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

von Thomas O. (kosmos)


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

von Bernhard S. (bernhard)


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
von Bernhard S. (bernhard)


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
von c-hater (Gast)


Bewertung
0 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...

von c-hater (Gast)


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.

von Michael W. (michael_w738)


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:


https://youtu.be/BGyaB4OQniw

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

von Bernhard S. (bernhard)


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
von c-hater (Gast)


Bewertung
-2 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.

von Blubb (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Michael W. schrieb:
> Ich bin ganz erstaunt, wie gut die PWM / PCM Soundqualität vom AVR Fast
> Timer ist,

du würdest das, was im Video erklingt "gut" nennen???

Zum Weglaufen. C64 klang besser.

von Bernhard S. (bernhard)


Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
5. Experiment Radioaufnahmen Si4735, SD-Card, TFT LCD EDIP160W7LWT, RTC

Der RDS-Decoder des Si4735 steuert die Aufnahmefunktion, alle 
Verkehrsdurchsagen werden z.B. automatisch mitgeschnitten.

Nachteil: Die Blitzerwarnungen, Ausstrahlung teilweise nach der 
Verkehrsdurchsage auch als "TP", landen auch mit auf der SD-Karte.

Aufgrund des kleinen Lautsprechers ist kein Unterschied zwischen 
Originalton und SD-Wiedergabe feststellbar ^^

Somit konnte die NF-Umschaltung der Tonquelle problemlos per Software 
realisiert werden, ohne den µC großartig zu belasten.


Interruptroutine für das "mithören", da SREG durch LDS und STS nicht 
verändert wird, muss SREG nicht gesichert werden, das spart wertvolle 
µC-Takte:

ADCI:
   LDS PWMI,ADCH    ' ADC auslesen
   STS PWM_NF,PWMI  ' NF-PWM
reti

Dieses sehr umfangreiche Assembler-Projekt werde ich ggf. gesondert 
veröffentlichen.


Bernhard

: Bearbeitet durch User
von Bernhard S. (bernhard)


Bewertung
0 lesenswert
nicht lesenswert

: Bearbeitet durch User

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.