Forum: Mikrocontroller und Digitale Elektronik AD9833 knackt


von Martin (Gast)


Lesenswert?

Ich möchte einen AD9833 mit einem ESP32 Devkit V1 ansteuern und dabei 
einen Ton erzeugen, der unterbrochen ist, also piept.
Zur Ansteuerung nutze ich die Library AD9833-Library-Arduino 
(https://github.com/Billwilliams1952/AD9833-Library-Arduino). Ich habe 
mir dieses AD9833-Board gekauft:
https://www.ebay.de/i/173745496388?chn=p...WaEALw_wcB

Ich habe verschiedene Dinge ausprobiert, wie z.B. mit 
gen.SleepMode(true); bzw. gen.SleepMode(false); zu arbeiten. Aber immer 
wenn ich gen.SleepMode aufrufe knackt es im Verstärker. Im Datenblatt 
des AD9833 
(https://www.analog.com/media/en/technical-documentation/data-sheets/AD9833.pdf) 
steht, dass man zwischen VDD und AGND zwei Kondensatoren schalten 
sollte. Soweit ich den Schaltplan des Bords verstehe, sind die schon 
vorhanden 
(https://www.ebay.com/itm/AD9833-DDS-Signal-Generator-Module-Programmable-Microprocessors-Sine-Square-Wave/382093041897?epid=2134752143&hash=item58f68520e9:g:tg0AAOSwigla3VCq).
Gibt es eine bessere Methode das piepen zu realisieren, oder was mache 
ich sonst falsch?

von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?

Ähm. Wenn du den DDS chip schlafen lässt, dann schaltet er seinen Takt 
ab.
D.h. der Ausgang bleibt "stehen".

Das muss "knack" machen!

73

Beitrag #6282736 wurde vom Autor gelöscht.
von W.S. (Gast)


Lesenswert?

Martin schrieb:
> Gibt es eine bessere Methode...

Ja. Verstehe mal, daß so ein DDS-IC eine Ausgangsspannung erzeugt, die 
irgendwo je nach Kurve und Zeitpunkt zwischen GND und VCC liegt. Wenn du 
also z.B. einen Sinus erzeugst, dann ist der Mittelwert, also quasi die 
"Null-Linie" mittendrin auf VCC/2.

Wenn du den DDS dann irgendwann anhältst, dann bleibt dessen Ausgang 
(zumeist) auf eben der Spannung stehen, wo er gerade war. Wenn du ihn 
hingegen ausschaltest, dann nehme ich mal an, daß der Ausgang auf GND 
geht - und das ist dann das Knacken am Ende deines Pieps. Das zweite 
Knacken kommt dann beim Anfang des nächsten Pieps.

Und was ist "gen.SleepMode(true);" ?? Sowas kommt im Datenblatt des 
Chips nicht vor und du weißt offenbar nicht, was da in irgend einer 
finsteren Bibliotheksroutine tatsächlich angestellt wird.

Mein Rat: Laß den DDS durchlaufen und setze an dessen Ausgang einen 4066 
o.ä. in die Ausgangsleitung. Alternativ beobachte den Ausgang per 
Komparator und wenn er durch VCC/2 geht, dann setzt du das 
Phaseninkrement auf 0 zum Anhalten des DDS.

W.S.

von Jens M. (schuchkleisser)


Lesenswert?

W.S. schrieb:
> dann setzt du das
> Phaseninkrement auf 0 zum Anhalten des DDS.

Wäre das Ergebnis nicht ident zum anhalten des Taktes?

W.S. schrieb:
> Sowas kommt im Datenblatt des
> Chips nicht vor und du weißt offenbar nicht, was da in irgend einer
> finsteren Bibliotheksroutine tatsächlich angestellt wird.

Das ist mit Sicherheit ein großer Anteil am Problem.

von Wolfgang (Gast)


Lesenswert?

Martin schrieb:
> Gibt es eine bessere Methode das piepen zu realisieren, oder was mache
> ich sonst falsch?

Du erzeugst einen Sprung im Ausgangssignal deines AD9833.
Dieser Sprung wird von deinem Verstärker in einen schnelle Bewegung der 
Membran deines Lautsprechers o.w.a.i. umgesetzt, was wiederum eine 
Druckwelle erzeugt, die von deinem Ohr als Knacken wahrgenommen wird.
Diesen Signalsprung musst du vermeiden.
Durch Abschalten des DAC mit dem SLEEP12-Bit im Controlregister 
schaltest du das Ausgangssignal ab. Du musst es aber auf 0 halten.
Damit das Piepen nicht zu hart einsetzt, ist es sinnvoll, die Amplitude 
mit einer Rampe ansteigen zu lassen.

von foobaz (Gast)


Lesenswert?

Jetzt werden von den D.A.U.s schon D.D.S. verbaut um mal Piep zu machen. 
Und das noch nicht mal richtig.

von Cyblord -. (cyblord)


Lesenswert?

foobaz schrieb:
> Jetzt werden von den D.A.U.s schon D.D.S. verbaut um mal Piep zu machen.
> Und das noch nicht mal richtig.

Weil halt irgendeine lib genommen wird, die bietet 5 Methoden an und 
niemand weiß was da gemacht wird.
Das passiert wenn man die Bausteine die man einsetzt nicht verstehen 
will.
Also Datenblatt lesen, verstehen wie das funktioniert und dann kann man 
auch einschätzen ob eine vorhandene lib brauchbar ist und was deren API 
bedeutet soll und ob man überhaupt eine externe lib braucht.

von Wolfgang (Gast)


Lesenswert?

Cyblord -. schrieb:
> Weil halt irgendeine lib genommen wird, die bietet 5 Methoden an und
> niemand weiß was da gemacht wird.

Wenn jemand des Lesens nicht kundig ist, soll er die Finger davon 
lassen.

Der Code der verwendeten Funktion SleepMode() hat vier Zeilen. Die kann 
man sich vielleicht gerade noch durchlesen.

Ohne Datenblattverständnis und eine grundlegende Vorstellung, was 
Knacken ist, nützt einem das allerdings überhaupt nichts.
Schon ein Oszi würde helfen, um zu erkennen, woher das Geräusch kommt.

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.