Forum: Projekte & Code DDS AD9835 SPI TWI I2C Beispiele ATmega8 Assembler


von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Geschätztes Forum,

ein kleines Assembler Beispiel, wie per SPI ein AD9835 DDS angesteuert 
werden kann.

Die erzeugte Frequenz und die Registerinhalte werden auf dem Display 
angezeigt.

Die Berechnung der Registerinhalte war etwas aufwändig (>32 Bit).

= f(out) x 2^32 : 50.000.000

Formel angepasst (mit vereinfachter Division):

= f(out) x 2.882.303.762 : 2^25



Bernhard

von Thomas D. (thomasderbastler)


Lesenswert?

Wie stellt man den Ausgangsfrequenz ein ?

von Bernhard S. (bernhard)


Lesenswert?

> Wie stellt man den Ausgangsfrequenz ein ?


In diesem Beispiel wurde es ohne Tastatureingaben o.ä. realisiert:


; Frequenz definieren
ldi temp1,BYTE1(1000)
ldi temp2,BYTE2(1000)
ldi temp3,BYTE3(1000)
ldi temp4,BYTE4(1000)

; Frequenz im SRAM ablegen
STS(adr_FREQUENZ_BYTE0),temp1
STS(adr_FREQUENZ_BYTE1),temp2
STS(adr_FREQUENZ_BYTE2),temp3
STS(adr_FREQUENZ_BYTE3),temp4

; Frequenz einstellen
rcall DDS_FREQUENZ

von Stephan (Gast)


Lesenswert?

könntest Du erklären was hier wie vereinfacht wurde?

= f(out) x 2^32 : 50.000.000

Formel angepasst (mit vereinfachter Division):

= f(out) x 2.882.303.762 : 2^25

von Bernhard S. (bernhard)


Lesenswert?

> könntest Du erklären was hier wie vereinfacht wurde?


= f(out) x (2^32) : (50.000.000)

= f(out) x (4.294.967.296)  : (50.000.000)

= f(out) x (4.294.967.296 x 0,67108864) : (50.000.000 x 0,67108864)

= f(out) x (2.882.303.762) : (33.554.432)

= f(out) x (2.882.303.762) : (2^25)

Die Division durch 2^25 ist in Assembler relativ einfach zu realisieren,
z.B. alle Bitts 25 mal nach rechts verschieben.

Bernhard

von Bernhard S. (bernhard)


Lesenswert?

Die Frequenz des DDS AD9835 lässt sich auch auf in 0,1Hz Schritten 
einstellen:


f(out) = 1000,0 Hz = 10.000

= f(out) x (2^32) : (50.000.000 x 10)

= f(out) x (2^32 x 1,073741824 ) : (50.000.000 x 10 x 1,073741824)

= f(out) x (4.611.686.018) : (536.870.912)

= f(out) x (4.611.686.018) : (2^29)


Bernhard

von Uwe S. (de0508)


Lesenswert?

Hallo Bernhard,

mathematisch betrachtet ist deine Aufstellung nicht korrekt, es ist ein 
formaler Fehler.

Links vom Gleichheitszeichen steht nichts, also was soll GLEICH sein ?

von Bernhard S. (bernhard)


Lesenswert?

@alle

Eine konkrete Anwendung des DDS:

Beitrag "Spektrumanalysator Frequenzspektrumanalysator Frequenzspektrometer Speki Wobbelgenerator TFT Atmega8"



@Uwe

>Links vom Gleichheitszeichen steht nichts, also was soll GLEICH sein ?


Bezieht sich auf den ersten Beitrag:

"Die Berechnung der Registerinhalte..."

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
Noch kein Account? Hier anmelden.