Analisi del generatore DDS con ATMEGA16A

dds atmega16a
dds atmega16a

Il generatore DDS in oggetto è venduto a pochi euro (7..8) su vari siti cinesi. Permette di avere un generatore di BF da 1Hz fino a 65535Hz con una risoluzione di 1Hz con le seguenti possibilità di generazione di forme d’onda:

Sinusoidale
Onda Quadra
Dente di sega
Rampa crescente
Rampa calante
ECG
Rumore bianco/rosa

In più dispone di una ulteriore uscita a sole onde quadre ad alta frequenza:

1Mhz
2Mhz
4Mhz
8Mhz

Tale generatore è poco più di un giocattolo, utile solo laddove non è necessaria particolare precisione della forma d’onda e dove l’ergonomia di utilizzo non è importante a causa di alcune note dolenti. Come pro abbiamo il fatto che gli integrati sono montati su zoccolo agevolando una eventuale riscrittura del firmware originario.

dds 2.0
dds 2.0 PCB

Le forme d’onda sono ottenute tramite un ladder di resistenze R/2R connesse alla porta A dell’atmega16A. La forma d’onda ottenuta è successivamente bufferata da un doppio operazionale LM358 che permette di variarne l’ampiezza ed il bias. Non esiste nessun tipo di filtrazione, anche se sarebbe stato meglio. La risoluzione della forma d’onda è a 8 bit, quindi abbastanza primordiale. La scelta della forma d’onda e della frequenza viene effettuata tramite pulsanti, operazione non proprio agevole anche a causa della spiacevole “features” per la quale il generatore non è in grado di funzionare mentre si opera sui menù (cambio di frequenza, cambio di forma d’onda etc…) quindi ogni volta è necessario fermare la generazione della forma d’onda, cambiare frequenza, far ripartire la generazione dell’onda. Scordatevi quindi uno sweep sia manuale che automatico.

La scheda va alimentata con le seguenti tensioni:

+5V
+12V
-12V

L’ampiezza dell’onda spazia tra i -5V ed i +5V con la possibilità di variare tramite il potenziometro del bias, senza soluzione di continuita, tra i -10V/0 e 0/+10V

Qui in basso lo schema elettrico:

DDS AVR 2.0
DDS AVR 2.0

Il cuore del sorgente è la routine di generazione delle forma d’onda ed è costituita da poche righe in assembler. Tale routine è l’unica attiva, in continuazione, durante la generazione dell’onda. Non può essere interrotta, per come è stato creato il sorgente, da null’altro ed ecco il perchè è necessario fermarla quando si opera sui menù. In pratica il pulsante start/stop agisce su un interrupt che fa cessare la routine. Un diverso approccio nella programmazione probabilmente permetterebbe di avere almeno la variazione della frequenza senza bloccare la generazione, una idea che cercherò di mettere in pratica a breve. Sarebbe anche da considerare l’impiego di un encoder anzichè di pulsanti.

In definitiva il circuito, pur essendo geniale nella sua ideazione, permette ben poco ciò che non vada oltre una mera generazione di segnale senza troppe pretese.

Alla pagina del progetto originale potete trovare il firmware sia in versione .hex da caricare sul micro sia in versione sorgente.

Pagina originale del generatore AVR 2.0

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.