DDS met een 12F683: doel sinus 700Hz

Arco

Special Member

Zo wordt 't eigenlijk altijd gedaan...
Anders zou het zeer lastig worden als je meerdere tonen tegelijk op moet wekken (bijv. DTMF). Je zou dan een tabel per toon moeten hebben.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Nog een toevoeging op het verhaal van DeKees: er zijn natuurlijk ook situaties waar je niet precies een integer deling krijgt (7 in dat voorbeeld); in dat geval kun je de stapgrootte variëren, je zet dan bijvoorbeeld 7, 7, 6, 7, 7, 6... stappen in de tabel. Je kunt dat doen door eerst de kleinste stapgrootte uit te rekenen (6 in dit geval), en dan een lopend totaal van de fout bij te houden. Zodra die fout groter wordt dan de grenswaarde, zet je in die cyclus een stapje extra.

De DDS chip doet dat in hardware. Stel je gebruikt een teller van 16 bits. Elke stap tel je een vast getal bij de teller. Een groter getal geeft een hogere frequentie. Dan gebruik je de hoogste 8 bits als index in de lookup tabel. De rest van de teller geeft dan de lopende fout.

Dat werkt natuurlijk alleen als de tabel-grootte een macht van 2 is.

Patrick de Zeester

Golden Member

Tijdens mijn studie (vorige eeuw) heb ik een functie generator gemaakt volgens het principe dat deKees beschrijft met TTL & EPROM chips. In de EPROM waren de golfvormen geprogrammeerd, de digitale logica bestond een full-adder (ik geloof iets van 24 bits, het is alweer heel lang geleden), wat latches om de ingestelde frequentie en het laatste resultaat van de full-adder vast te houden en een D/A converter. De full-adder telde de ingestelde frequentie op bij het laatst geproduceerde resultaat en de meest significante bits werden gebruikt als adres voor de EPROM. In de basis heel simpel maar wel een groot breadbord vol IC's. Tegenwoordig kan je zoiets reduceren tot een eenvoudige microcontroller.

blackdog

Golden Member

Hi,

Als het niet goed lukt de Sinus tabel in je processor te krijgen en je hebt SPI beschikbaar dan is onderstaand printje een goed optie.

https://webshop.domoticx.nl/index.php?route=product/product&product_id…

Groet,
Bram

You have your way. I have my way. As for the right way, the correct way, and the only way, it does not exist.
Arco

Special Member

Op 21 februari 2023 10:51:48 schreef blackdog:
Hi,

Als het niet goed lukt de Sinus tabel in je processor te krijgen en je hebt i2c beschikbaar dan is onderstaand printje ee ngoed optie...

De 9833 is geen I2C, maar SPI... (werkt wel prima verder. gebruik hem regelmatig)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
blackdog

Golden Member

Hi Arco, :-)

Je hebt gelijk het is SPI bij de AD9833!
Ik heb mijn post hierover aangepast, dank voor het melden van het foutje.

Groet,
Bram

You have your way. I have my way. As for the right way, the correct way, and the only way, it does not exist.
Arco

Special Member

Ik gebruik de AD9833 o.a. voor het opwekken van sinus tot 10kHz met een 0.001Hz resolutie... ;)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

TS ben je bezig met de CW-Morse call gever van PI4RAZ ?

Guus@Sint-Michielsgestel
EgbertG

Golden Member

Nee, volledig eigen ontwerp.

Doet PI4RAZ dat toevallig ook met deze PIC?