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


von Bernhard S. (bernhard)


Angehängte Dateien:

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)


Lesenswert?

Genial gefällt mir Daumen hoch.

von Thomas (kosmos)


Lesenswert?

Also ein Echo, damits etwas fülliger klingt.

von Bernhard S. (bernhard)


Angehängte Dateien:

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:

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)


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)


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. (Gast)


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

https://youtu.be/M7aI7KLEi1s

von Bernhard S. (bernhard)



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)


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)


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:

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)


Lesenswert?


: Bearbeitet durch User
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.