10 resistor Arduino vågform Generator (2 / 8 steg)
Steg 2: Något för nördar
En grundläggande DDS vågform generator behöver en phase_accumulator ökas stegvis med en phase_step på en frekvens f_clock.
Tidigare vågform generatorer använda Arduino Uno har genomfört DDS generatorer med en f_clock frekvens baserat på en timer avbryta vid 100 kHz. Detta begränsar praktiskt användbara DDS vågform utdata frekvensen till f_clock /8 eller vågformer till 12,5 kHz.
Den nuvarande strategin försöker maximera f_clock. Genom att implementera DDS slingan använder ett tag funktionen vari ett minsta antal instruktioner cykler utnyttjas.
Avfart från while loopen är baserad på en variabel uppdaterad utifrån USART Rx avbrottet
Nuvarande medan loop 43 cykler och f_clock skulle vara 16 MHz/43 = 372.09 kHz
Det bästa vi kunde ha gjort om Arduino Uno avslutar från skulle medan baserades på en återställning ha varit 40 instruktioner eller 400 kHz.
f_clock/8 är 372 kHz/8 = 46,5 kHz som är praktiskt taget 50 kHz!
Koden är implementerad i "c" med Atmel Studio 6.0
C-kod implementerar en 24-bitars phase_accumulator som de högre 7-bitarna används som en adress till en 128 steg vågform tabell som innehåller 6-bitars vågformsdata med värden från 0x00 till 0x1F Hex.
Använda 007DDS. Hex programmera Arduino Uno med Avrdude.