www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ideen gesucht zum Experimentieren mit dem TDA1543 DA-Wandler


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vor mir liegt eine Versuchssschaltung zum TDA1543 (serieller
DA-Wandler, zwei Kanäle) auf dem Tisch. Das Testprogramm ist im Stande,
einen Sägezahn auszugeben, indem es einfach die 16 Bits aufwärts zählt.
Ist etwas langweilig auf die Dauer.

Was könnte man damit noch anstellen? Einen kleinen DDS-Synthesizer
programmieren für 9 oder 10 Bit vielleicht? Einen Voltmeter nach der
Vergleichsmethode mit Komparator? Hat jemand andere Ideen? Der
Übertragungsfaktor zwischen Binärwert und analoger Ausgangsspannung ist
jedenfalls linear.

Gruß

Autor: till (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bist du dir deiner sache sicher? wenn du die bits durchzählst müsste da
nicht etwas von einem sägezahn sich unterscheidendes rauskommen, weil
der TDA twos complement- formatierte datenworte erwartet?

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

auf dem Oszilloskop erscheint ein Sägezahn (kann auch auf dem Kopf
stehen, die Sägezahnform hat er aber dennoch). Der nachfolgende
invertierende OPAmp invertiert das analoge Ausgangssignal.
Hier mal ein kleiner Ausschnitt aus dem Testprogramm, das ich genau um
dies heraus zu finden so einfach gestaltet habe:

main:  adiw  r30,1  ; Doppelregister aufwärts zählen
  mov  temp3,r30  ; kopieren
  mov  temp2,r31  ; oberes Register kopieren
  rcall  out_rechts
  mov  temp3,r30  ; weil zuvor durch das Schieben alle Einsen 
verschwunden
sind
  mov  temp2,r31  ; muss man das Kopieren wiederholen
  rcall  out_links
  rjmp  main

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... die Schrift der orangefarbenen Kopfzeile scheint sich selbständig zu
ändern und durch "(neu)" zu ergänzen. Welche Abwandlung erscheint als
nächstes?...

Autor: Frank Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, kannst Du bitte mal posten, wie du die Daten in den Wandler
geschoben hast?
Mit freundlichen Grüßen
Frank Simon

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natuerlich kannst du einen DDS auch selber programmieren. Sowas verwende
ich als Signalgenerator.

Und wenn du schon einen Signalgenerator hast dann kannst du auch mal
einen FIR-Filter programmieren wenn noch einen AD-Eingang hast. Mache
ich gerade mit dem R8C. :-)

Olaf

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du ein scope hast bietet sich ne scope-clock an...

http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=10606

da bieten sich 16bit auflösung geradezu an...

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Chris

Cool. Interessant was du da machst. Mit welcher Samplerate gibst du
denn die Samples aus ? (sprich wie schnell ist der Wandler).


@Olaf

hört sich interessant an mit dem R8C. werde ich demnächst auch mal
machen, aber mit iir-filtern. Mal schauen was dabei rauskommt. Kannst
ja mal ein MP3 reinstellen wie es nachher klingt *gg

Gruß
Rene

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der R8C hat einen Assemblerbefehl der multiplziert und gleich addiert.
Da bieten sich halt Filter an wo bn-Koeffizienten 0 sind.

Ich hab auch mal ein IIR Filter probiert. Da konnte ich beliebige
Sinuskurven reinschicken und es kam immer Rauschen raus. Muss ich mir
mal patentieren lassen. :-) Vermutlich irgendwo ein Rechenproblem mit
dem Wertebereich.

Mein FIR Filter laeuft aber schon ganz gut. (mit 50Taps und 40kHz fs)
Momentan verwende ich bloss als DA-Wandler den PWM Ausgang und da
werden leider hoehere Frequenzen (alles ueber 5kHz) durch den PWM-Takt
etwas vergurkt.

Aber da kann man mal schoen die guten alten Kenntnisse aus dem Studium
wieder auffrischen....

Olaf

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Olaf,

wenn die Berechnung der FIR-Koeffizienten nicht so lange dauern würde
bzw. mehr möglichkeiten bieten würde (überschwingen usw). würde ich
wahrscheinlich auch eher FIR nutzen, aber ich will ja gerade das es
quietscht, zirpt und knarzt :-))
Aber deinen Rauschgenerator solltest du dir echt Patentieren lassen
*gg.
Hatte auch mal einen Synthesizer in einem FPGA realisiert (bzw bin
immer noch dabei) und größere Probleme was das Rechnen von IIR-Filtern
angeht hatte ich eigentlich nicht (ok es kommt zwar leider nicht das
heraus was ich möchte, aber das liegt an meiner struktur)
Bei dem R8C hab ich vor einen DAC0808 als DA Wandler zu nehmen, da ich
mir kein Widerstands-DA-Wandler aufbauen wollte. Bin mal gespannt was
dabei rauskommt.
Aber ein paar Audio-Beispiele würden mich echt mal interessieren.

Gruß
Rene

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hatte mit dem IIR auf dem PC auch keine Probleme, aber da hab
ich halt Fliesskommazahlen verwendet. Irgendwo beim umstellen auf
Festkomma und skalieren muss ich wohl noch einen Fehler gemacht haben.

DA_Wandler mit Parallelport gefallen mir nicht so weil sie soviele
Pinne verwenden. Ich werde wohl noch einen seriellen Wandler an SPI
pappen den ich aus einem CD-Player geschlachtet habe.
Fuer erste Tests ist aber der PWM-Ausgang auch ganz okay. Der macht
79kHz Takt bei 8Bit Aufloesung. Da man Puls und Pausenzeiten getrennt
einstellt muesste es sogar moeglich sein noch deutlich hoehere
Taktraten zu erreichen wenn man z.B nur 6 oder 7Bit verwendet. Muss ich
heute Abend mal probieren.

Olaf

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Olaf,

also mit Fließkomma ists ja kein Problem. Bei Festkomma muß man sich
lediglich auf feste Größen (Audio-Daten und Koeffizient) achten.
Bei meinem FPGA-Biquad hab ich 32Bit Audio (24Bit Daten + 8Bit
Overhead) und 32Bit Koeffizienten (8Bit Vorkomma, 24Bit Nachkomma)
benutzt. Einfach multiplizieren, begrenzen (wichtig), um 8 Bit nach
rechts schieben, abschneiden, fertig.
Funktioniert sehr gut.
So hatte ich es auf dem PC in Festkomma auch gemacht. Klappt
hervorragend.
Das einzige was bei der portierung auf einem uC nervig ist, das man bei
der Koeffizientenberechnung Fließkomma nutzen muß (sollte), was einfach
irre viel zeit kostet. Aber da kommt man nicht drum herum wenn der
Filter moduliert werden soll.
Können ja mal zwecks Erfahrungsaustausch Emailen.
Hab auch deinen Thread zum Wecker gelesen.
Ich würd nen DA-Wandler nehmen, einen Oszillator mit Multiplizierer
(für die Lautstärke) und eine Hüllkurve (einfache Attack-Decay), sowie
einen kleinen Sequencer (8 Schritte) für die Tonhöhe nehmen.
Insgesamt dürfte das bestenfalls 2k Code kosten und sehr einfach zu
implementieren sein.

Gruß
Rene

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ICH habe keinen Wecker, das muss dann wohl ER sein. Vielleicht
gehoert ER ja auch zu IHNEN, aber ICH nicht. :-)

Olaf (der Echte)

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh entschuldigung bitte ... hatte den unterschied zwischen
olafK und olaf für marginal gehalten *gg.

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.