Hallo, ich möchte einen Sinuston oder zumindest einen stark sinus-ähnlichen Ton mittels ATMEGA32 in Assembler generieren. Es soll kein reiner Rechteck sein, da der Ton dann absolut grausig kling. Weitere Anforderungen: Die Tonhöhe soll wählbar sein. Und zwar zwischen 500 und 1000Hz. Weiter soll die Dauer des Tones variabel sein. Und zwar zwischen 24 und 1200ms. Ist das realisierbar? Habe ein Eval-Board mit ATMEGA32@16MHz. Oder gibt es Tongenerator ICs, die programmierbar sind? Z.B. via 1-Wire? Gruß Cheffe
>Ist das realisierbar? Habe ein Eval-Board mit ATMEGA32@16MHz.
Ja, per PWM, per R-2R Netzwerk oder einen SPI oder I2C DAC.
Hier ist meine aktuelle Lösung dafür. Das ganze ist noch in Entwicklung.
Hallo, danke für die Antworten. Ich könnte ja auch einen Rechteck ausgeben und dann durch ein SC-Filter-IC schicken. Tiefpass fünfter Ordnung reicht. Gibt es günstige, die man als Privatmensch einkaufen kann und die nach Möglichkeit mit nur einer positiven Versorgungsspannung auskommen? Gruß Cheffe
Habe gerade noch ein paar Unstimmigkeiten in meinem Code entdeckt. :-O Werde mich die Tage noch darum kümmern.
So als Anregung: Nimm doch einfach eine Tabelle mit einer Handvoll berechneter Werte (z.B. 15). Diese legst Du in den Speicher hinein. Ich kenne die Adressierung des Mega32 nicht, aber angenommen, Deine Daten fangen bei $FFF0 an, und reichen bis $FFFF, so fragst Du die Werte aus dem Speicher mit $FFFX ab. X ist dabei ein Zählerwert. Dadurch, dass Du das $FFF nicht inkrementierst, springst Du beim Übertrag automatisch auf $FFF0 zurück. Deine Werte werden damit in einer Schleife gelesen und du erhälst keine Verzögerung durch den Sprung auf die Basisadresse. Aschließend (soweit der Mega32 dafür überhaupt genügend Speicher hat) lässt Du das Signal durch einen IIR-Filter laufen. Mit Matlab kannst Du die Koeffizienten dafür berechnen lassen. Schnell wird das mit Sicherheit nicht, aber im kHz-Bereich ist auf jedenfall was machbar. > Oder gibt es Tongenerator ICs, die programmierbar sind? Z.B. via 1-Wire? Braucht es nicht. Zur Not gibt es den MAX7400
Such doch mal nach "Jesper miniDDS" und guck hier: Beitrag "Re: ASM von MiniDDS in WinAVR kompilieren. Wie?" 9 Zeilen Assembler
Cheffe schrieb: > Hallo, > > ich möchte einen Sinuston oder zumindest einen stark sinus-ähnlichen Ton > mittels ATMEGA32 in Assembler generieren. Es soll kein reiner Rechteck > sein, da der Ton dann absolut grausig kling. > > Weitere Anforderungen: Die Tonhöhe soll wählbar sein. Und zwar zwischen > 500 und 1000Hz. Weiter soll die Dauer des Tones variabel sein. Und zwar > zwischen 24 und 1200ms. Das Verfahren, das hier üblicherweise eingesetzt wird, heisst "Direct Digital Synthesis" DDS. Erklärung: http://www.analog.com/static/imported-files/tutorials/450968421DDS_Tutorial_rev12-2-99.pdf Mit einem AVR sollte es wohl möglich sein, ein dsPIC wäre aber die bessere Architektur für solche Sachen. fchk
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.