Damit wird in der ISR für COMPA der Pin auf HIGH gestellt
(Grundfrequenz) und für COMPB auf LOW gestellt (Duty-Cycle).
Wenn ich den Duty-Cycle verändern will, setze ich einfach einen neuen
Wert für OCR0B.
Mein Problem ist jetzt aber, dass ich trotz OCR0B == 0 eine geringe
Spannung ausgegeben bekomme.
Kann mir jemand erklären, warum? Was müsste ich verändern/verbessern,
damit bei OCR0B == 0 keine Spannung ausgegeben bekomme?
Danke!
Hi
>Kann mir jemand erklären, warum?
Datenblatt (Fast PWM Mode):
If the OCR0A is set equal to BOTTOM, the output will be a narrow spike
for each MAX+1 timer clock cycle.
Das gilt auch für OCR0B.
Neben dem was Falk geschrieben hat, kannst du auch bei OCR0B=0 den Timer
vom Ausgang trennen oder invertierte PWM verwenden.
MfG Spess
Falk B. schrieb:> Du musst einen der phase/frequency correct mode nutzen.>> RFTM.
Was heisst eigentlich "RFTM"?
Das Problem bei Abkürzungen ist wohl, dass nur Eingeweihte denn Sinn
kennen.
Hier im Forum habe ich bereits öfters "RTFM" gelesen, was wohl soviel
wie "Read The F*cking Manual" heisst.
Aber RFTM ???
Falk B. schrieb:> Du musst einen der phase/frequency correct mode nutzen.>> RFTM.
Die Nachteile daran sind nur, dass man auf einen Pin festgelegt ist. So
bleibt man flexibel und kann sich einen Outputpin aussuchen.
spess53 schrieb:> Hi>>>Kann mir jemand erklären, warum?>> Datenblatt (Fast PWM Mode):>> If the OCR0A is set equal to BOTTOM, the output will be a narrow spike> for each MAX+1 timer clock cycle.>> Das gilt auch für OCR0B.>> Neben dem was Falk geschrieben hat, kannst du auch bei OCR0B=0 den Timer> vom Ausgang trennen oder invertierte PWM verwenden.>> MfG Spess
Ich wusste doch, dass ich irgendsoetwas einmal im Datasheet gelesen
habe. Ich habe die Stelle nur irgendwie nicht wiedergefunden.
Danke. Ich werde wohl noch ein Statusbit einfach hinzufügen.
spess53 schrieb:> Hi>>>Ich werde wohl noch ein Statusbit einfach hinzufügen.>> Wozu?>> MfG spess
Damit ich mich nicht auf einen Pin festlegen muss. Das soll nämlich
möglichst flexibel sein. Und bei automatischem Toggle muss ich sogar
gleich zwei Pins opfern: OC0A und OC0B.
Oder wie meinst du das?
Hi
>Damit ich mich nicht auf einen Pin festlegen muss. Das soll nämlich>möglichst flexibel sein.
Ich stehe mehr auf saubere Planung im Vorfeld.
>Und bei automatischem Toggle muss ich sogar>gleich zwei Pins opfern: OC0A und OC0B.
Du brauchts nur die, die notwendig sind. Also zwischen 0 und 2. Da wird
garnichts geopfert.
MfG Spess
spess53 schrieb:> Du brauchts nur die, die notwendig sind. Also zwischen 0 und 2. Da wird> garnichts geopfert.
Nachteil dabei wäre allerdings doch auch noch, dass ich noch externe
Komponenten brauche. Weil ich muss das Ergebnis ja noch irgendwie
zusammenfügen. Da bräuchte ich entsprechend noch ein AND-Gate, oder
nicht?
Allerdings habe ich derzeit auch noch ein weiteres Problem. Ich habe
folgenden Code:
audio_intr() wird dabei mit 22050Hz aufgerufen. Die Samplingrate beträgt
ebenfalls 22050Hz.
Allerdings wird dabei, wenn ich einen Buffer von einer SDCard einlese,
immer nur eine Art Rauschen abgespielt. Man erkennt das Original nicht
einmal annähernd. Es stimmt noch nicht einmal die Länge.
Weiß denn jemand, woran das liegen könnte?
Falk B. schrieb:> Beitrag "Re: Arduino Nano, SD Card, PCM"
Ich war wohl das erste Mal zu voreilig. In dem Code stand tatsächlich
einiges, was man auch übernehmen kann.
Inzwischen läuft es auch.
Allerdings ist die ganze Zeit noch ein Hintergrundrauschen da, wenn ich
Musik abspiele. Wenn ich allerdings den Duty-Cycle gleich lasse (128),
dann höre ich nichts (f=~60kHz).
Was hattest du denn bei deinen Aufnahmen für einen Filter dahinter?
Einfach nur ein RC-Glied? Oder noch eine Spule? Wenn ja, wie genau
geschaltet? Und vor allem auch wie dimensioniert. Vorausgesetzt, du
weißt das noch.
Ich habe jetzt in der Aufnahme einen 220R Widerstand und einen 1mF ElKo
genommen.
@ fliiiiieger (Gast)
>Allerdings ist die ganze Zeit noch ein Hintergrundrauschen da, wenn ich>Musik abspiele.
Hmm. In deiner Aufnahme ist das nicht so recht zu hören, aber die
Qualität ist auch eher begrenzt, so wie die Lautstärke.
>Was hattest du denn bei deinen Aufnahmen für einen Filter dahinter?
Gar keinen, nur den Kopfhörer.
>geschaltet? Und vor allem auch wie dimensioniert. Vorausgesetzt, du>weißt das noch.
Steht im Beitrag, es gab nur einen 100uF Koppelkondensator.
Falk B. schrieb:> @ fliiiiieger (Gast)>>>Allerdings ist die ganze Zeit noch ein Hintergrundrauschen da, wenn ich>>Musik abspiele.>> Hmm. In deiner Aufnahme ist das nicht so recht zu hören, aber die> Qualität ist auch eher begrenzt, so wie die Lautstärke.
Ja, tatsächlich hört man das in der Aufnahme sogar eigentlich gar nicht.
Mein Nachbar hat sonst ein ordentliches Aufnahmegerät, ich werde morgen
einmal nachfragen, ob ich mir das nicht kurz ausleihen kann. Vllt. hört
man es darauf besser.
Wobei das eigentlich auch zu leise ist. Der 1mF ElKo ist wohl einfach zu
groß, der dämpft das ordentlich ab. Vllt. versuche ich es sonst auch mal
mit 9V oder so.
Aber es ist halt immer wie so ein Hintergrundrauschen. Wie beim Radio,
wenn man knapp neben der richtigen Frequenz ist.
>>Was hattest du denn bei deinen Aufnahmen für einen Filter dahinter?>> Gar keinen, nur den Kopfhörer.
Ich habe jetzt einmal kleine alte PC-Boxen angeschlossen. Es klingt zwar
deutlich besser, aber das Rauschen ist immer noch da.
>>geschaltet? Und vor allem auch wie dimensioniert. Vorausgesetzt, du>>weißt das noch.>> Steht im Beitrag, es gab nur einen 100uF Koppelkondensator.
Tatsächlich, das habe ich wohl überlesen.
Sonst probiere ich noch einmal einfach mit der Dimensionierung herum.
Den Widerstand muss ich, glaube ich, auch reduzieren.
Danke aber, man erkennt zumindest die Melodie.
Okay, jetzt noch einmal in besserer Aufnahmequalität.
Leise ist es allerdings immer noch, weshalb ich es mit Audacity noch
verstärkt habe.
Ich habe es jetzt einmal mit dieser Schaltung versucht:
https://upload.wikimedia.org/wikipedia/commons/9/99/Breitbandverst%C3%A4rker.GIF
und dann noch mit einem einfachen Kondenator parallel zu dem
Lautsprecher.
Beides klingt ziemlich gleich.
Ich habe jetzt immer 100µF ElKos genommen.
Ich brauche ja noch nicht einmal eine Lösung.
Nur eine Idee, warum es bei mir nicht funktioniert.
Hier sind so viele erfahrene Leute, wodurch kann solch ein Rauschen denn
entstehen? An der PWM-Frequenz kann es eigentlich nicht liegen, da die
mit 44kHz ja weit außerhalb des hörbaren Bereichs sein müsste.
@ fliiiiieger (Gast)
>Ich habe es jetzt einmal mit dieser Schaltung versucht:>https://upload.wikimedia.org/wikipedia/commons/9/9...
Die braucht man für einen Kopfhörer nicht.
>und dann noch mit einem einfachen Kondenator parallel zu dem>Lautsprecher.
Wenn dein Lautsprecher keinen internen Verstärker hat, ist die Last für
den AVR-Ausgang zu hoch. Da kann viel passieren, u.a.. Verzerrungen. Ob
das hier der Fall ist, weiß ich nicht.
Hmm, dein Rauschen ist komisch. Zeig mal deinen vollständigen Quelltext.
Vielleicht hast du auch die WAV-Dateien falsch konvertiert. Da gibt es
diverse Stolperallen mit Einer und Zweierkomplement. Nimm mal die Daten
hier, die sollten DIREKT abspielbar sein und nicht rauschen.
https://www.mikrocontroller.net/topic/goto_post/5194701
Noch ne Idee. Es kann ein Softwarefehler sein. Es klingt fast so, als ob
jedes 2. Sample unsinnige Daten auf die PWM gibt. Dadurch hört man eine
Mischung aus Rauschen und dem echten Signal.
Erst einmal danke für deine Antworten.
Falk B. schrieb:> Die braucht man für einen Kopfhörer nicht.
Was meinst du denn sonst mit Koppelkondensator? Einen einzelnen
Kondensator in Reihe zu dem Lautsprecher? Parallel?
Falk B. schrieb:> Wenn dein Lautsprecher keinen internen Verstärker hat, ist die Last für> den AVR-Ausgang zu hoch. Da kann viel passieren, u.a.. Verzerrungen. Ob> das hier der Fall ist, weiß ich nicht.>> Hmm, dein Rauschen ist komisch. Zeig mal deinen vollständigen Quelltext.> Vielleicht hast du auch die WAV-Dateien falsch konvertiert. Da gibt es> diverse Stolperallen mit Einer und Zweierkomplement. Nimm mal die Daten> hier, die sollten DIREKT abspielbar sein und nicht rauschen.>> https://www.mikrocontroller.net/topic/goto_post/5194701
Ich habe über einen Transistor verstärkt.
Mit den wav-files von dir hört man quasi nur noch Rauschen und kann fast
gar nichts erkennen außer den Rufen ganz am Schluss. Ich habe die 8000Hz
probiert. Ich habe sonst aber auch immer raw-files ohne wav-Container
benutzt. Aber das macht klanglich keinen Unterschied, wie ich jetzt
bemerken durfte.
Anbei einmal der Quellcode. Zum Einlesen wird FatFS benutzt. Nicht
besonders schöner Code, bei Fragen bitte einfach hier schreiben.
> TCCR0A = (1 << COM0A1) | (1 << WGM00); /* clear OC0A on comp. match */> TCCR0B = (1 << CS00) | (1 << WGM02); /* no prescaler, phase correct pwm*/
Stimmt der Modus? Ich hätte eher 1 erwartet statt 5.
Um welchen uC geht es eigentlich, das muss ich irgendwie verpasst haben.
S. Landolt schrieb:>> TCCR0A = (1 << COM0A1) | (1 << WGM00); /* clear OC0A on comp.> match */>> TCCR0B = (1 << CS00) | (1 << WGM02); /* no prescaler, phase correct pwm*/>> Stimmt der Modus? Ich hätte eher 1 erwartet statt 5.> Um welchen uC geht es eigentlich, das muss ich irgendwie verpasst haben.
Das ist es.
Tatsächlich.
VIELEN Dank.
Was genau macht der Modus 5 denn aber eigentlich anders? Irgendwie
verstehe ich da das Datenblatt nicht ganz.
Im Modus 5 gibt OCRA den TOP-Wert vor, d.h. die Frequenz, hier jedoch
soll mit OCRA der Tastgrad, die eigentliche PWM, bestimmt werden.
(Da findet sich sicher noch jemand, der das besser erklärt)
@ fliiiiieger (Gast)
>> Stimmt der Modus? Ich hätte eher 1 erwartet statt 5.>> Um welchen uC geht es eigentlich, das muss ich irgendwie verpasst haben.>Das ist es.>Tatsächlich.>VIELEN Dank.
Also läuft deine Audiowiedergabe jetzt ohne Rauschen?
Falk B. schrieb:> @ fliiiiieger (Gast)>>>> Stimmt der Modus? Ich hätte eher 1 erwartet statt 5.>>> Um welchen uC geht es eigentlich, das muss ich irgendwie verpasst haben.>>>Das ist es.>>Tatsächlich.>>VIELEN Dank.>> Also läuft deine Audiowiedergabe jetzt ohne Rauschen?
Ja. Ich verstehe zwar irgendwie immer noch nicht so ganz 100%-ig warum,
aber es läuft.
@fliiiiieger (Gast)
>> Also läuft deine Audiowiedergabe jetzt ohne Rauschen?>Ja. Ich verstehe zwar irgendwie immer noch nicht so ganz 100%-ig warum,>aber es läuft.
Du hattest den falschen Timer-Modus aktiviert. An stelle der PWM
(Pulsbreitenmodulation) hast du eine Frequenzmodulation erzeugt. Man hat
zwar trotzdem was gehört, weil dabei natürlich auch die Breite der Pulse
variabel ist und es ungefähr wie PWM wirkt, aber dabei entsteht viel
"Unsinn" als Signal, was bei dir als Rauschen hörbar wurde.
Noch ein Versuch: Ein Digitalsignal soll hörbar gemacht werden, also ist
eine Digital-Analog-Wandlung verlangt; als Verfahren wird hier die
Pulsbreitenmodulation (PWM) gewählt. Der Timer0-Modus 5 mit OCRA als
Eingangsgröße ist aber keine PWM.