Forum: Mikrocontroller und Digitale Elektronik WAV Soundausgabe am ATmega328


von Michael A. (michael_a43)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte mir einenn kleinen WAV-Player bauen, der die Daten von einer 
SD-Karte (WAV-Files 8 Bit, 16 KHz) liest.

Als Grundlage habe ich mit die FatFS und Audioplayer Bespiele von 
ElmChan geholt. Das lesen von der SD-Karte funktioniert - aber das 
Abspielen ist noch etwas unsauber im Klang.

Ich verwende einen ATmega328 und meine Timer sind folgendermaßen 
verwendet:

Timer0 -> fast PWM zur DA-Wandlung
Timer1 -> 100Hz interrupt o.a. für die Auswertung und Entprellung der 
Tasten
Timer2 -> Nachladen der einzelnen Samples

Timer2 läuft mir der passenden Datenrate, da die Musik von der Tonhöhe 
und Abspielgeschwindigkeit passt.

Im Anhang ein Klangbeispiel von meiner AD-Wandlung.

Hier meine Konfig für den Timer0:
1
TCNT0 = 0;
2
TCCR0A |= (1 << COM0A1) | (1 << COM0B1) | (1<< WGM00);
3
TCCR0B = (1 << WGM02)  | (1 << CS00);

Und noch der vollständigkeitshalber der Timer1:
1
OCR1A = F_CPU / fs - 1;
2
TCNT1 = 0;
3
TCCR1A = 0;
4
TCCR1B = _BV(WGM12) | _BV(CS00);
5
TIMSK1 |= _BV(OCIE1A);

Kann mir einer evtl. bei der Timer-Konfig sage, ob ich da einen Fehler 
gemacht habe - bin die Doku schon den ganzen Tag immer wieder 
durchgegangen...

Danke!

Gruß,

Michael

von Sven (Gast)


Lesenswert?

Das hört sich doch gut an?

Eine bessere Qualität wirst Du ohne geeigneten D/A-Wandler und 
entsprechender Datenrate nicht hinbekommen.

Der unsaubere Klang, ist Deine zu langsame PWM (16 kHz ?) und deren 
Oberwellen.

Viele Grüße!

Sven

von Bernd Strobel (Gast)


Lesenswert?

Hab es mir nicht angehört, aber wenn ich sehe, dass du 3 Timer laufen 
hast, die scheinbar recht aufwändige Dinge tun, dann vermute ich, dass 
die sich gegenseitig ausbremsen.

Wenn ein ISR ausgeführt wird, sind standardmäßig Interrupts während der 
gesamten Routine deaktiviert, d.h. die ISR der jeweils anderen Timer 
verspäten sich. Da kann es schon passieren, dass dein D/A-ISR "zu spät" 
ausgeführt wird.

von Toralf W. (willi)


Lesenswert?

Guten Morgen,

siehe Dir mal die org. Version von Elm an. Der nimmt nicht umsonst einen 
AVR mit 250KHz fast PWM ;-)
So etwas gibt es auch in einigen Mega AVRs -> Parameterliste bei Atmel

LG

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Kannst ja mal einen Xmega probieren, da ist der DAC schon mit drin. Und 
wenn der dann auch nicht reicht, kannst Du einen I2S-DAC anschließen.

von Michael A. (michael_a43)


Lesenswert?

Hallo,

der Herr Elm hat aber doch auch einen WAV-Player mit einem Attiny 
realisiert - da ist ja der Atmega238 mit HW SPI noch etwas besser.

Bei Youtube findet man auch ein paar WAV-Player mit einem Atmega328 und 
da ist die Soundqualität deutlich besser. Erwarte ja nichts besonderes, 
aber so ein "gezwitschere" ist also nicht gut.
Konnte bis jetzt nur noch keinen Autor von den Beispiel per Mail 
erreichen.

Ich dachte immer, dass bei einer HW PWM das unabhänging von 
irgendwelchen Interrupts läuft. Hab auch schon zu testweise den Timer1 
abgeschalten - aber brachte auch nichts.

Gruß,

Michael

von derguteweka (Gast)


Lesenswert?

Moin,

Hast du denn einen (analogen) Tiefpass irgendwo in deiner Hardware? 
Alles im Ausgangssignal mit Frequenzen >8kHz hat da nix zu suchen, also 
sollte das irgendwie zumindest abgeschwaecht werden.

Gruss
WK

von Bernd (Gast)


Lesenswert?

16 KHz sind zu wenig. Kannst du höher gehen?
Wie sieht denn das Originalwavefile aus?
Wie sieht deine Hardware?

von Markus (Gast)


Lesenswert?

Ich kann bei mir im Programm bis 44 Khz gehen.
Hab auch eine Datei mit 32 Khz versucht und da ist die Ausgabe genau 
schlecht.

Gruß,

Michael

von Michael A. (michael_a43)


Lesenswert?

derguteweka schrieb:
>
> Hast du denn einen (analogen) Tiefpass irgendwo in deiner Hardware?
>
Nein.. einen Tiefpass habe ich so noch nicht drin - nur ein Koppel-C 
wegen der Gleichspannung.

Das Problem tritt aber auch bei WAV-Dateien mit 32 Khz auf - und das 
dürfte ja der Lautsprecher nicht mitmachen bzw. höhrt man das eh nicht.

Aber ich werde das mit dem TP heute Abend mal versuchen.

Gruß,

Michael

von Ulrich F. (Gast)


Lesenswert?

Für unter 10€ gibts in der ElektroBucht MP3 Module mit SD-Halter. Diese 
haben eine ansprechende Soundqualität. Sie sind einfach anzusteuern.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Michael A. schrieb:
> Das Problem tritt aber auch bei WAV-Dateien mit 32 Khz auf - und das
> dürfte ja der Lautsprecher nicht mitmachen bzw. höhrt man das eh nicht.

Wenn in deiner Quelle Signale drin sind, die nahe an die 16kHz 
rankommen, wird es Differenzprodukte geben, die beim Abspielen 
Fiepgeräusche und Quieken verursachen. Deswegen musst du bei der 
Aufnahme knapp über 15kHz alles abschneiden und bei der Wiedergabe auch.
Schau mal nach 'Anitaliasing Filter' und 'Shannontheorem'.
Echte Audio DA und AD Wandler haben oft dafür schon mitlaufende Filter 
integriert, die beim AVR natürlich nicht drin sind. Musst du also 
entweder in Hardware hinzufügen oder auf externe Wandler abschieben.

: Bearbeitet durch User
von derguteweka (Gast)


Lesenswert?

Moin,

Fuern Anfang kannst du mal einen simplen RC-Tiefpass nehmen, und gucken, 
ob's krachmaessig in die richtige Richtung geht: Am Ausgangspin, wo die 
PWM rauskommt, einen Serienwiderstand mit 4.7KOhm, danach ein Parallel-C 
nach Masse mit 5.6nF. Das macht einen Tiefpass mit 6kHz Grenzfrequenz.
Wenns daran liegt, dann kann man das auch noch etwas cleverer 
ausgestalten.

Gruss
WK

von Toralf W. (willi)


Lesenswert?

Guten Morgen,

Michael A. schrieb:
> der Herr Elm hat aber doch auch einen WAV-Player mit einem Attiny
> realisiert - da ist ja der Atmega238 mit HW SPI noch etwas besser.

Hast Du Dir mal angesehen wie er das macht? Hatte ich auch schon 
geschrieben, das geht mit einem Mega 328 so nicht. Bei dem Tiny (den Elm 
nutzt) lässt sich er Timer mit bis zu 64MHz !!! takten. Damit lassen 
sich PWM Frequenzen weit über Deinen 16kHz NF vom wav realisieren und 
dann klingt das auch wieder vernünftig. Das kann der Mega 328 einfach 
nicht, nur weil es ein Mega ist, kann der noch lange nicht mehr als 
jeder Tiny. Es gibt aber auch einen Mega der das kann, einfach mal bei 
Atmel nach "High Speed Asynchronous and Synchronous Clocking Modes" 
suchen.

: Bearbeitet durch User
von Michael A. (michael_a43)


Lesenswert?

Hallo,

derguteweka schrieb:
> Moin,
>
> Fuern Anfang kannst du mal einen simplen RC-Tiefpass nehmen, und gucken,...
>
Das habe ich gerstern Abend mal versucht und hier keine wirkliche 
Verbesserung bemerkt. Signal ist zwar etwas dumpfer geworden - da die 
hohen Frequenzanteile gefiltert wurden - aber das grundsätzliche 
"zirpen" war immer noch das.


@Toralf Wilhelm:
Herr Elm verwendet aber in einem früheren Beispiel einen Atmega64.
Hier konnte ich im Datenblatt nichts finden, was auf eine höhere 
PWM-Frequenz schließt, als die 1/256 vom Prozessortakt.

Ich werde mal testweise einen DA-Wandler über eine R2R-Netzwerk 
realisierung und testen ob damit der Klang besser ist. WEnn es hier 
passt, dann ist das lesen und auswerten der WAV-Datei schon mal in 
Ordnung.

Gruß,

Michael

von S. Landolt (Gast)


Lesenswert?

Mit welcher Frequenz läuft eigentlich der ATmega328? Je höher, umso 
besser, also 20 MHz, durchaus aber auch 22.
Der fast-mode erzeugt einiges an Oberwellen, zum Vergleich mal den 
phase-correct versuchen.

von Willi (Gast)


Lesenswert?

Michael A. schrieb:
> Herr Elm verwendet aber in einem früheren Beispiel einen Atmega64.
interessant, hast Du mal einen Link dazu, irgendwie bin ich zu doof das 
bei ihm zu finden

LG Willi

von Michael A. (michael_a43)


Lesenswert?

Bei den Beispielen zu seinem FatFS hat er für den AVR einen Beispiel...

http://elm-chan.org/fsw/ff/ffsample.zip

Gruß,

Michael

von Tomsen (Gast)


Lesenswert?

>Das hört sich doch gut an?
>Eine bessere Qualität wirst Du ohne geeigneten D/A-Wandler und
>entsprechender Datenrate nicht hinbekommen.

Quatsch. Ich hatte 1992 mit dem C16 und setzen/löschen eines Port Pins 
eine deutlich bessere Audioqualität erreicht.

Da stimmt was andres nicht.

Mit 8 Bit und 20kHz PWM kann man gute Telefonqualität erreichen.

Das Beispiel ist Joghurtbechertelefonqualität. Das meine ich nicht.

von Klaus (Gast)


Lesenswert?

Tomsen schrieb:
> Mit 8 Bit und 20kHz PWM kann man gute Telefonqualität erreichen.

Für Telefonqualität reichen 8kHz PWM, mehr macht ein Telefoncodec auch 
nicht. Dazu eine 11 bis 12 Bit PWM (beim Telefon auch noch auf 8 Bit 
komprimiert) Auflösung und man hat Telefon mit idealen Leitungen. Wie 
sich das anhört, kann man sich von audacity vorspielen lassen.

8 kHz entspricht 125µs, ist nicht wirklich eng, 8 Bit PCM in linear 
rechnen über eine Tabelle ist schnell und dann hat man alle Zeit der 
Welt für andere Sachen. Und audacity rechnet einem die passenden WAVs 
aus jedem Format her. Ein passendes Filter für (besser gegen) die 8kHz 
braucht man aber schon.

BTDT

MfG Klaus

von Falk B. (falk)


Lesenswert?

@Michael A. (michael_a43)

>ElmChan geholt. Das lesen von der SD-Karte funktioniert - aber das
>Abspielen ist noch etwas unsauber im Klang.

>Ich verwende einen ATmega328 und meine Timer sind folgendermaßen
>verwendet:

>Timer0 -> fast PWM zur DA-Wandlung
>Timer1 -> 100Hz interrupt o.a. für die Auswertung und Entprellung der
Tasten
>Timer2 -> Nachladen der einzelnen Samples

Das macht man so nicht. Mindestens Timer 1 spukt hier ein, und das 
vollkommen unnötig. Das Zwitschern das du hörst ist wahrscheinlich der 
Jitter, welchen Timer1 verursacht, wenn er Timer 2 ausbremst. Timer2 
darf von GAR NICHTS ausgebremst werden! Die Tastenentprellung macht man 
HIER ausnahmsweise mal per Flag in der Hauptschleife. Dazu muss nur ein 
Zähler im Timer2 nach x Durchläufen ein Flag setzen.

Das 2. Problem ist die Fast PWM. Die ist NICHT doppelt gepuffert! 
Dadurch kann es passieren, das beim Nachladen der PWM verkorkste Pulse 
entstehen. Das kann und muss man mit einem gepufferten PWM-Modus 
erreichen. Leider halbiert sich da beim AVR die PWM-Frequenz. Geht hier 
aber nicht anders.

von c-hater (Gast)


Lesenswert?

S. Landolt schrieb:

> Der fast-mode erzeugt einiges an Oberwellen, zum Vergleich mal den
> phase-correct versuchen.

Das ist kompletter Unsinn. Für die Audio-Widergabe ist natürlich 
Fast-PWM das Mittel der Wahl, denn es ermöglicht die doppelte 
PWM-Frequenz und damit einfachere Filter am Ausgang. Genau diese (bzw. 
eigentlich: das Fehlen selbiger) ist normalerweise eine der Wurzeln des 
Übels, wenn die Audioqualität unerwartet schlecht ist...

Die andere ist, dass schon die Konvertierung des Audiomaterials in das 
vom µC zu verarbeitende nicht korrekt gemacht wird. HIER ist VOR der 
Konvertierung in die Samplerate des Ziels ein Tiefpass anzuwenden. 
Dieser sollte (soweit wie möglich) alle Bestandteile aus dem Signal 
entfernen, deren Frequenz höher als die halbe Samplefrequenz des Ziels 
ist. Da dieser Arbeitschritt nicht auf dem Zielsystem passiert, kann man 
sich hier nichtmal mit den beschränkten Resourcen eines µC herausreden. 
Wer hier was falsch macht, ist also schlicht inkompetent!

Phase-correct PWM auf dem Zielsystem jedenfall benötigt man genau nur 
dann, wenn man gedenkt, während der Ausgabe nicht nur den PWM-Duty, 
sondern (auch) die PWM-Frequenz zu modulieren, was aber bei 
Audio-Ausgabe mit der typischerweise konstanten Samplefrequenz weder 
nötig und noch sinnvoll ist.

von Falk B. (falk)


Lesenswert?

@ c-hater (Gast)

>> Der fast-mode erzeugt einiges an Oberwellen, zum Vergleich mal den
>> phase-correct versuchen.

>Das ist kompletter Unsinn.

Jain.

> Für die Audio-Widergabe ist natürlich
>Fast-PWM das Mittel der Wahl, denn es ermöglicht die doppelte
>PWM-Frequenz

Jain. Aber die ist beim AVR NICHT doppelt gepuffert! Siehe oben!

>Die andere ist, dass schon die Konvertierung des Audiomaterials in das
>vom µC zu verarbeitende nicht korrekt gemacht wird.

Möglich, aber unwahrscheinlich.

>Wer hier was falsch macht, ist also schlicht inkompetent!

So wie du, nur auf sozialer Ebene . . .

>Phase-correct PWM auf dem Zielsystem jedenfall benötigt man genau nur
>dann, wenn man gedenkt, während der Ausgabe nicht nur den PWM-Duty,
>sondern (auch) die PWM-Frequenz zu modulieren,

Nö. Man braucht die Doppelpufferung.

von Michael A. (michael_a43)


Lesenswert?

Hallo,

also ich habe heute noch ein paar Versuche gemacht, zu den ganzen 
Vorschlägen die weiter oben genannt wurden.

1. WAV-Datei mit einem Lied erstellt, dass einen TP bei 3 KHz mit einem 
Rolloff von 48 dB -> hat sich nicht wirklich verbessert. Auch eine 
Dämfung auf max 60% des Aussteuerpegels hat nichts verbessert.

2. Abtastrate der WAV-Datei habe ich auf 32 kHz gesetzt - auch keine 
Verbesserung

3. Ich betreibe meinen µC mit 16 MHz. Somit müsste doch die PWM eine 
Frequenz von 62,5 Khz haben.

4. Timer2 habe ich testweise auch einmal deaktiviert - hat aber auch 
nichts gebracht.

5. Wenn ich die Werte für meine PWM nicht ändere - Auslesen der Karte 
läuft natürlich weiter - dann höhre ich kein zwitschern oder so was. Nur 
ein leises klicken im Takt, bei dem die Daten von der SD-Karte 
nachgeladen werden.

Gruß,

Michael

von Michael A. (michael_a43)


Lesenswert?

Nach vielen Versuchen bekomme ich nun eine Soundqualität, die ich auch 
erwartet habe - der Fehler lag beim Konfigurieren der PWM beim WGM02 !
1
//PWM
2
TCNT0 = 0;
3
TCCR0A = (1 << COM0A1) | (1 << COM0B1) | (1<< WGM00);
4
TCCR0B =  (1 << CS00); //(1 << WGM02)
5
6
OCR0A = 0x80;    /* Center level */
7
OCR0B = 0x80;    /* Center level */
8
DDRD |= _BV(5);    /* Attach OC0B to I/O pad */
9
DDRD |= _BV(6);    /* Attach OC0A to I/O pad */
10
11
//Sampling Timer
12
OCR1A = F_CPU / fs - 1 ;
13
TCNT1 = 0;
14
TCCR1A = 0;
15
TCCR1B = _BV(WGM12) | _BV(CS10);
16
TIMSK1 |= _BV(OCIE1A);

Vielen Dank an alle die sich mit meinem Problem beschäftigt haben und 
mit nach Lösungen gesucht haben.

Gruß,

Michael

von Falk B. (falk)


Lesenswert?

@ Michael A. (michael_a43)

>Nach vielen Versuchen bekomme ich nun eine Soundqualität, die ich auch
>erwartet habe - der Fehler lag beim Konfigurieren der PWM beim WGM02 !

>//PWM
>TCNT0 = 0;
>TCCR0A = (1 << COM0A1) | (1 << COM0B1) | (1<< WGM00);
>TCCR0B =  (1 << CS00); //(1 << WGM02)

AHA! Das IST Mode 1, PWM Phase correct! Und der IST doppelt gepuffert! 
Spiel, Satz und Sieg!

von Ingo L. (corrtexx)


Angehängte Dateien:

Lesenswert?

Falk B. schrieb:
> AHA! Das IST Mode 1, PWM Phase correct! Und der IST doppelt gepuffert!
Wie kommst du darauf das das FastPWM nicht double buffered ist?
Außer CTC- und Normalmode ist alles double buffered.

von S. Landolt (Gast)


Lesenswert?

c-hater schrieb:
> Das ist kompletter Unsinn. Für die Audio-Widergabe ist
> natürlich Fast-PWM das Mittel der Wahl ...

Ich habe anderes in Erinnerung, sollte mich diese so täuschen?
Aber es ist doch ganz einfach, c-hater: probieren Sie es aus, mit den 
hier genannten Werten, also 16 MHz und 8 bit, fast- und 
phase-correct-PWM, und berichten Sie uns dann von Ihren praktischen 
Erfahrungen. Wir sind alle lernfähig, und auch ich lasse mich gerne 
eines Besseren belehren.

von c-hater (Gast)


Lesenswert?

Falk B. schrieb:

> Jain. Aber die ist beim AVR NICHT doppelt gepuffert!

Du bist noch sehr viel unwissender, als ich jemals zu befürchten 
wagte...

Das ist natürlich Quatsch mit Soße. In ALLEN PWM-Modi ist natürlich 
der Zugriff auf die OC-Register gepuffert. Wär ja auch echt traurig, 
wenn das nicht so wäre...

Ein Unterschied bezüglich der Pufferung der Registerzugriffe innerhalb 
der PWM-Modi ergibt sich erst zwischen "fast" und "phase- and 
frequency-correct"-Modus. Bei letzterem werden nämlich ZUSÄTZLICH auch 
noch Zugriffe auf das Register gebuffert, welches den PWM-Zyklus 
bestimmt.

Ich hätte niemals geglaubt, dass ich DIR solche Trivialitäten erklären 
muss, denn der ganze Kram steht doch in wirklich jedem AVR-DB völlig 
unmissverständlich und ausgiebigst abgehandelt drinne...

Bezüglich der Audiowiedergabe bedeutet das alles genau das, was ich 
schon in meinem ersten Posting geschrieben habe: Solange variable 
Sampleraten kein Thema sind (was bei einem AVR8 der fast zwingende 
Normalfall sein dürfte), solange ist natürlich Fast-PWM die mit weitem 
Abstand beste Wahl.

Alles andere ist Bullshit, den Idioten verbrochen haben, die nicht in 
der Lage sind, Datenblätter zu lesen. Nichtmal so einfache wie die von 
Atmel...

von Falk B. (falk)


Lesenswert?

@c-hater (Gast)

>Du bist noch sehr viel unwissender, als ich jemals zu befürchten
>wagte...

Was wäre die Welt ohne Helden wie dich?

>Bezüglich der Audiowiedergabe bedeutet das alles genau das, was ich
>schon in meinem ersten Posting geschrieben habe: Solange variable
>Sampleraten kein Thema sind (was bei einem AVR8 der fast zwingende
>Normalfall sein dürfte), solange ist natürlich Fast-PWM die mit weitem
>Abstand beste Wahl.

Na dann erklär mal, woher der Effekt beim OP kam?

Beitrag "WAV Soundausgabe am ATmega328"
1
TCNT0 = 0;
2
TCCR0A |= (1 << COM0A1) | (1 << COM0B1) | (1<< WGM00);
3
TCCR0B = (1 << WGM02)  | (1 << CS00);

Wenn das WIRKLICH eine fehlerfreie Kopie aus dem Originalquelltext ist, 
dann ist das hier WGM Mode 5 mit OCRA als TOP Value. Aha, dort war der 
Fehler. Wenn man die Samples in OCRA schreibt, wird immer TOP verändert. 
Eine eher krude PWM. Ein Wunder, dass man überhaupt einen Ton 
identifizieren konnte.

>Alles andere ist Bullshit, den Idioten verbrochen haben, die nicht in
>der Lage sind, Datenblätter zu lesen. Nichtmal so einfache wie die von
>Atmel...

Wir sind UNWÜRDIG!!!

https://www.youtube.com/watch?v=hTid2cExqbs

von S. Landolt (Gast)


Lesenswert?

an c-hater

Können wir uns wenigstens darauf einigen, dass die fast-mode-PWM einen 
Sinus in Richtung Sägezahn verzerrt?
Ob ein geschultes Ohr dies dann hört unter den gegebenen Umständen, ist 
eine zweite Frage.

von S. Landolt (Gast)


Lesenswert?

Falk Brunner schrieb:
> Wir sind UNWÜRDIG!!!
Sehr richtig, wir alle haben die Diskrepanz gleich zu Beginn
> Timer0 -> fast PWM zur DA-Wandlung
> TCCR0A |= (1 << COM0A1) | (1 << COM0B1) | (1<< WGM00);
> TCCR0B = (1 << WGM02)  | (1 << CS00);
nicht erkannt, auch nicht die unterschiedlichen TOP-Werte 
vergegenwärtigt; wieder einmal ein Fall von kollektiver Blindheit (incl. 
c-hater). Scheint in den letzten Wochen zuzunehmen.

von Falk B. (falk)


Lesenswert?

@ S. Landolt (Gast)

>Können wir uns wenigstens darauf einigen, dass die fast-mode-PWM einen
>Sinus in Richtung Sägezahn verzerrt?

Nein.

>Ob ein geschultes Ohr dies dann hört unter den gegebenen Umständen, ist
>eine zweite Frage.

Nö. Stell die RICHTIGE Fast-Mode PWM ein (Mode 3) und es wird auch 
laufen, sogar mit doppelter Samplingrate.

Timer0 -> fast PWM zur DA-Wandlung
1
TCCR0A = (1 << COM0A1) | (1 << COM0B1) | (1<< WGM01) | (1<< WGM00);
2
TCCR0B = (1 << CS00);

von Falk B. (falk)


Lesenswert?

@S. Landolt (Gast)

>> Wir sind UNWÜRDIG!!!
>Sehr richtig, wir alle haben die Diskrepanz gleich zu Beginn
>> Timer0 -> fast PWM zur DA-Wandlung
>> TCCR0A |= (1 << COM0A1) | (1 << COM0B1) | (1<< WGM00);
>> TCCR0B = (1 << WGM02)  | (1 << CS00);
>nicht erkannt, auch nicht die unterschiedlichen TOP-Werte
>vergegenwärtigt; wieder einmal ein Fall von kollektiver Blindheit (incl.
>c-hater). Scheint in den letzten Wochen zuzunehmen.

Nun ja, aber meine Vermutung lief ind ie richtge Richtung, auch wenn die 
Diagnose nicht korrekt war. Der EFFEKT war ähnlich!

von S. Landolt (Gast)


Lesenswert?

Falk B. schrieb:
> @ S. Landolt (Gast)
>
>>Können wir uns wenigstens darauf einigen, dass die fast-mode-PWM einen
>>Sinus in Richtung Sägezahn verzerrt?
>
> Nein.

Tja, dann kann man nichts machen. Ich bleibe bei meiner Meinung.

von Falk B. (falk)


Lesenswert?

@ S. Landolt (Gast)

>>>Können wir uns wenigstens darauf einigen, dass die fast-mode-PWM einen
>>>Sinus in Richtung Sägezahn verzerrt?

>> Nein.

>Tja, dann kann man nichts machen. Ich bleibe bei meiner Meinung.

MEINEN kannst du was du willst. Aber hier geht es um technische Belange, 
da musst du deine Aussagen auch BEWEISEN.

Probier es einfach aus. Fast-PWM (die richtige) und Phase Correct PWM 
werden bei gleicher PWM-Frequenz das identische Klangbild ergeben.

von Bernd (Gast)


Lesenswert?

Falk B. schrieb:

> MEINEN kannst du was du willst. Aber hier geht es um technische Belange,
> da musst du deine Aussagen auch BEWEISEN.

Du aber auch :)

von S. Landolt (Gast)


Lesenswert?

an Falk Brunner

Stellen Sie sich einen Sinus vor, der nur an 8 Punkten abgetastet wird, 
und betrachten Sie die 3 Punkte in den ersten 90°. Die fast-PWM schiebt 
bei größeren Amplituden nach rechts. (Ich kann es leider nicht besser 
erklären)

von Falk B. (falk)


Lesenswert?

@ Bernd (Gast)

>> MEINEN kannst du was du willst. Aber hier geht es um technische Belange,
>> da musst du deine Aussagen auch BEWEISEN.

>Du aber auch :)

Nu sajaz, nu pogodi!

von Falk B. (falk)


Lesenswert?

@S. Landolt (Gast)

>Stellen Sie sich einen Sinus vor, der nur an 8 Punkten abgetastet wird,

OK.

>und betrachten Sie die 3 Punkte in den ersten 90°.

OK.

> Die fast-PWM schiebt
>bei größeren Amplituden nach rechts.

Keine Sekunde. Die Fast-PWM ist von einer "normalen" PWM praktisch nicht 
zu unterscheiden, sie hat nur auf dem AVR wegen ihrer typischen 
Umsetzung in Logik ein paar INTERN andere Eigenschaften (doppelte 
Maximalfrequenz gegenüber Phse/frequency correct Mode, kein Dauer LOW 
oder Dauer HIGH möglich)

> (Ich kann es leider nicht besser erklären)

Schlecht. Und trotzdem nicht richtig. Eine absolute Phasenverschiebung 
der Samples ist nichts weiter als eine zeitverzögerte Ausgabe.

von S. Landolt (Gast)


Lesenswert?

Und diese Phasenverschiebung ist nicht amplitudenabhängig bei fast-PWM?

von Falk B. (falk)


Lesenswert?

@ S. Landolt (Gast)

>Und diese Phasenverschiebung ist nicht amplitudenabhängig bei fast-PWM?

Nein. Aber ich glaube zu verstehen, was du meinst. Bei Fast PWM begint 
der Puls immer am Anfang, wenn der Zähler auf 0 steht und endet je nach 
PWM-Wert.
Bei Phase Correct PWM ist der Puls bezüglich der (doppelten) Zähleriode 
immer zentriert. Das hat zwar ein paar Auswirkungen auf das Spektrum des 
Signal, aber das sind alles nur Oberwellen jenseits der Abtastfrequenz. 
Die müssen so oder so per Ausgangsfilter entfernt werden bzw. man hört 
sie sowieso nicht. Das Grundspektrum des Signals, das wir hören wollen 
ist gleich.


1
Zähler                0 . . . . . . . . . . 255
2
3
                      +------+              +----
4
                      |      |              |
5
Fast PWM          ----+      +--------------+ 
6
7
                              +------+           
8
                              |      |           
9
Phase correct PWM ------------+      +-----------

von S. Landolt (Gast)


Lesenswert?

Wenn diese Verschiebung auftritt, dann bei allen Frequenzen, und damit 
entstehen Oberwellen auch im hörbaren Bereich - ob diese dann auch 
hörbar sind, sei mal dahingestellt. Ich glaube mich aber zu erinnern, 
dass dieses Kippen Richtung Sägezahn auf dem Oszilloskop deutlich 
sichtbar ist. Bei Gelegenheit werde ich mir den Sachverhalt nochmal 
anschauen und -hören.
Auf jeden Fall danke ich Ihnen für diesen Dialog, unterscheidet sich 
doch wohltuend von manch anderem.

von Michael A. (michael_a43)


Lesenswert?

So, nachdem ich den Thread gestartet habe, bin aich auch noch eine 
kleine Untersuchung schuldig...

Ich habe mal zwei Tests mit Fast PWM und  Phase correct PWM 
durchgeführt.
Dazu habe ich eine Audiodatei mit 32 KHz Samlingrate und 16 Bit 
Auflösung verwendet.
Zwischen diesen beiden Modi hab ich keine wirklichen Unterschied gehört. 
Wenn ich nächste Woche dazukomme, werde ich mir noch das Spektrum 
ansehen.

Noch was kleines Offtopic...
Warum müssen eigentlich fast immer fachliche Diskussionen hier auf eine 
primitiven persönlichen Ebenen enden? Kann man nicht einfach bei der 
sachlichen Ebenen bleiben und hier Diskutieren ohne die anderen 
Teilnehmern immer gleich zu beleidigen und/oder sie als doof und dumm 
darzustellen?

Schönen Sonntag noch...

Michael

von S. Landolt (Gast)


Lesenswert?

Meine Resultate sind entsprechend, und ich muss Falk Brunner weitgehend 
Recht geben. Bei einem Sinus mit 5 kHz sehe ich einen Unterschied, aber 
nicht so deutlich, wie ich dachte und in Erinnerung hatte; beim 
Höreindruck, Sinus bzw. Orchester, scheint mir bei fast-PWM das 
Klangbild etwas 'härter', aber ich bin kein Musiker mit geschultem 
Gehör. Unterm Strich war die Diskussion für die Praxis wohl nicht 
relevant.

von c-hater (Gast)


Lesenswert?

Falk B. schrieb:

> Nein. Aber ich glaube zu verstehen, was du meinst. Bei Fast PWM begint
> der Puls immer am Anfang, wenn der Zähler auf 0 steht und endet je nach
> PWM-Wert.
> Bei Phase Correct PWM ist der Puls bezüglich der (doppelten) Zähleriode
> immer zentriert.

Aha, Falk hat sich aufgeschlaut, also ein Diskussionspartner, mit dem 
das Diskutieren lohnen könnte.

Hoffentlich erkennt er jetzt, wie wichtig es ist (insbesondere in 
Anbetracht der üblichen C-Machwerke von Programmen), die Samples immer 
"im richtigen Moment" an die PWM zu verfüttern. Daß es mit 
"phase-correct" bei C-Programmen oft hörbar besser läuft als mit "fast", 
liegt in 100% der Fälle daran, dass bei "phase-correct" halt einfach 
doppelt so viel Zeit zum (mehr oder weniger zufällig korrekt getimeten) 
Einspeisen der Samples bleibt, weil die PWM-Frequenz dann eben nur die 
Hälfte beträgt.

Aber meine sehr deutliche Anmerkung zu diesem Thema wurde ja mal wieder 
von den C-Nazis wegzensiert, weil sie ihr Weltbild stört. Muß ich mir 
jetzt einen gelben Stern anheften, sobald ich meine Wohnung verlasse?

von Bernd (Gast)


Lesenswert?

c-hater schrieb:

> Aber meine sehr deutliche Anmerkung zu diesem Thema wurde ja mal wieder
> von den C-Nazis wegzensiert, weil sie ihr Weltbild stört. Muß ich mir
> jetzt einen gelben Stern anheften, sobald ich meine Wohnung verlasse?

Sich als Opfer darzustellen, wie die Millionen von Juden, die von den 
Deutschen geschunden und ermordet wurden, zeigt, dass du ein Spinner der 
übelsten Sorte bist.

von c-hater (Gast)


Lesenswert?

Bernd schrieb:

>> Aber meine sehr deutliche Anmerkung zu diesem Thema wurde ja mal wieder
>> von den C-Nazis wegzensiert, weil sie ihr Weltbild stört. Muß ich mir
>> jetzt einen gelben Stern anheften, sobald ich meine Wohnung verlasse?
>
> Sich als Opfer darzustellen, wie die Millionen von Juden, die von den
> Deutschen geschunden und ermordet wurden

Das habe ich überhaupt nicht getan. Und das würde ich auch erst tun, 
wenn die Zensoren ihre Tyrannei errichtet hätten (sofern es mir dann 
noch möglich wäre).

Hätte jeder Jude in Deutschland die Zensur der Medien zu Beginn der 
30iger Jahre des vorigen Jahrhunderts ähnlich drastisch öffentlich 
bloßgestellt, wäre es zu dem Opfer der Juden möglicherweise erst 
garnicht gekommen oder es hätte möglicherweise zumindest nicht diesen 
überaus erschreckenden Umfang annehmen können, den es dann tatsächlich 
annahm.

Zumindest aber hätte nach dem verlorenen Krieg nicht fast jeder 
Volksgenosse auch nur halbwegs glaubhaft behaupten können, von nix 
gewußt gehabt zu haben...

Und genau deswegen: Wehret den Anfängen: Zensur ist der erste Schritt 
zur Diktatur und eine Diktatur ist der erste Schritt zum organisierten 
Völkermord.

Ich möcht jetzt nicht den hiesigen Zensoren unterstellen, daß sie es 
tatsächlich auf die Weltherrschaft abgesehen haben. Aber: Sie haben ganz 
sicher bereits die nötige Mentalität dafür. Zensur abweichender 
Meinungen (bei entsprechender Möglichkeit) und die völlige Überschätzung 
der eigenen gehören einfach mal zusammen wie Klo und Deckel. Genau diese 
Typen sind es, aus denen dann entstehende Dikataturen das Fußvolk 
rekrutieren, um eine SS oder ähnliche Organisationen mit der nötigen 
exekutiven Gewalt auszustatten...

von Ratzjo Mittelbau (Gast)


Lesenswert?

c-hater schrieb:
> Zensur abweichender
> Meinungen (bei entsprechender Möglichkeit) und die völlige Überschätzung
> der eigenen gehören einfach mal zusammen wie Klo und Deckel.

Das ist doch Deine Domäne: Verbale Rundumschläge, Beleidigungen und 
Unterstellungen sind Dein täglich Handwerkszeug. Du hast keinen Grund, 
aber auch gar Keinen, Andere zu kritisieren.

von Karl H. (kbuchegg)


Lesenswert?

Nein c-hater

Deine Wortwahl war der Grund für die Zensur. (auch wenn ich deine 
Beiträge nicht gelöscht habe. Aber ich kann sie noch sehen und ich bin 
absolut einverstanden dass sie gelöscht wurden).

Auch Meinungsfreiheit hat ihre Grenzen. Nämlich dann, wenn es nur noch 
darum geht andere zu beleidigen. Befleissige dich eines anderen Tones 
bzw. Wortwahl, und du brauchst dich nie wieder über eine Moderation zu 
beschweren. So einfach ist das.

: Bearbeitet durch User
von Ralph S. (jjflash)


Lesenswert?

... das "verrückteste" an C-Hater ist: seine Beiträge sind i.a.R. 
absolut fundiert und vom Mitlesen hab ich einiges für mich mitgenommen.

Den Umgangston ... kommentiere ich nicht.

Schade ist, dass technisch hochversierte Menschen (und das 
ironischerweise in Kommunikationstechnik) ... mit der Kommunikation 
Schwierigkeiten haben.

Ich nehme an, für C-Hater ist es ein sehr leichtes unterschiedlichste 
Geräte zur Datenkommunikation zu bewegen.

Leider ... sind Menschen keine Geräte ! (oder besser: Gott sei Dank sind 
sie es nicht)

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.