Hallo uC Programmierer!
Kann mir jemand behilflich sein das AD9912 FrequencyTuningWord (48 Bit!) mit BASCOM zu verarbeiten.
Die Berechnung des AD9912 Tuningwords erfolgt nach dieser Formel:
ftw = round(2^48*(freq/rclk))
Die Referenzfrequenz beträgt 1 GHz:
rclk: 1000000000 (1 GHz)
Daher ist die maximal mögliche DDS-Frequenz 400 MHz:
freqMAX = 0.4*rclk = 400000000 (400 MHz)
Nummerisch ist daher das FTW:
ftw = round(2^48(400000000/1000000000))
= 112589990684262 (dezimal)
= 666666666666 (hex)
= 0110_0110|0110_0110|0110_0110|0110_0110|0110_0110|0110_0110| (dual)
= 48| 40| 32| 24 | 16| (bit)
Mögliche BASCOM Datentypen
Bit, Byte, Integer, Word
long: signed 32 bit -2147483648 to 2147483647
single: signed 32 bit 1.5x10^-45 to 3.4 x 10^38
double: signed 64 bit 5.0x10^342 to 1.7x10^308
Operatoren
shift --> nur bis single, nicht double!
round --> auch double
Typecasting geht, wenn auch nicht so toll wie in C
Das FTW muss in Form von 6 x 8 Bit, d.h. 6 x 1 Byte in den AD9912 geschrieben werden!
Rein rechnerisch kann das FTW mit BASCOM und double gut berechnet werden. Wie aber kann dann der double Wert in die 6 Byte zerlegt werden wenn shift nicht mehr zulässig ist?
Möglicherweise muss die FTW Rechenoperation schon vorher in die 16 MSB (word) und die 32 LSB (long) zerlegt werden. Wie könnte das ablaufen? Oder überhaupt ganz anders?
Bitte um Ideen und Lösungen, Lösungsansätze. Mir geht es nicht um den vollständigen BASCOM code, sondern ums Prinzip.
Beste Grüße
Christian