AD9912 BASCOM Programm FTW ?

  • 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| 8| (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

    73 de Chris, OE3HBW

    3 Mal editiert, zuletzt von chirt ()

  • Hallo Uwe,
    das war doch mal eine klare Antwort, wie man die Daten zerlegen muss, um das trotzdem mit einer 8-Bit CPU trotzdem auflösen zu können. Ich danke Dir vielmals, wie Du das Rätsel so zerlegt hattest. Das hilft mir auch sehr.


    Noch einen schönen Rest-Sonntag ...

    Vy 72/73 de Gerhard

    Einmal editiert, zuletzt von DC4LO ()

  • Hallo
    bin leider erst jetzt dazugekommen ins Forum reinzuschauen, da ich dieses Wochenende mit Freunden meinen 50er gefeiert habe =)


    Insbesondere Uwe hat sich ja mächtig ins Zeug gelegt (vielen Dank!). Wie er schon ausgeführt hat, ging es mir um das Problem mit BASCOM ein 48 Bit FrequencyTuningWord zu errechnen. BASCOM hat keinen dafür notwendigen "uint64" Datentyp. Was beim AD9951 also noch einfach mit Long (32 Bit) ging, ist nun beim AD9912 passe. Die Rechenoperation muss also zerlegt werden. Dazu werde ich mir in den nächsten Tagen die Ausführungen von Uwe zu Gemüte führen und versuchen in BASCOM umzusetzen.
    In C ginge es natürlich einfacher, aber ich hab nunmal den BASCOM Compiler installiert und versuche es halt.


    Natürlich sind zweckdienliche Hinweise weiter sehr willkommen. Die Materie ist ja für Nichtinformatiker und Hobbyprogrammier nicht ganz einfach zu begreifen.


    Beste Grüße
    Christian

    73 de Chris, OE3HBW