Red Pitaya - SDR - Erfahrungsaustausch gesucht

  • HAllo Uwe,


    danke für Deine ausführiche Antwort.


    Zu der Konstantenänderung (auf die schnelle klappt es leider nicht)


    "die Konstante auf 0x410041"


    musst Du mir bitte noch sagen wo ich diese ändern soll.


    Es gibt ja zwei Stellen, wo sie gesetzt werden:


    Zeile 123: g_awg_reg->state_machine_conf = 0x000041;


    und


    Zeile 145: g_awg_reg->state_machine_conf = 0x110011;


    oder sollen beide auf den o.g. Wert geändert werden?


    Markus

  • Hall Markus,
    nur Zeile 123 aendern. Da werden die Generatoren angehalten.
    Aktuell so woe ich das sehe leider nur ein Kanal. Deshalb auch
    der sich langsam akkumulierende Phasenversatz.

  • Hallo Markus und weitere Interessierte,
    Ich habe einen Update im Code gemacht, der hoffentlich die von Markus gefundenen Probleme behebt. Ich selbst werde fruehestens heute Abend dazukommen, alles auszuprobieren. Ueber Rueckmeldungen wuerde ich mich freuen.

  • Hallo Uwe,


    möglicherweise ist dies nicht der Richtige Ort diese Frage zu stellen.
    Ich versuche es trotzdem:


    Sollte es in der fpga_awg.h statt


    typedef struct awg_reg_t {
    /** @brief Offset 0x00 - State machine configuration
    *
    * State machine configuration register (offset 0x00):
    * bits [31:24] - Reserved
    * bit [ 23] - Channel B output set to 0
    * bit [ 22] - Channel B state machine reset
    * bit [ 21] - Channel B set one time trigger
    * bit [ 20] - Channel B state machine wrap pointer
    * bits [19:16] - Channel B trigger selector
    * bits [15: 8] - Reserved
    * bit [ 7] - Channel B output set to 0
    * bit [ 6] - Channel B state machine reset
    * bit [ 5] - Channel B set one time trigger
    * bit [ 4] - Channel B state machine wrap pointer
    * bits [ 3: 0] - Channel B trigger selector
    *
    */


    nicht


    typedef struct awg_reg_t {
    /** @brief Offset 0x00 - State machine configuration
    *
    * State machine configuration register (offset 0x00):
    * bits [31:24] - Reserved
    * bit [ 23] - Channel B output set to 0
    * bit [ 22] - Channel B state machine reset
    * bit [ 21] - Channel B set one time trigger
    * bit [ 20] - Channel B state machine wrap pointer
    * bits [19:16] - Channel B trigger selector
    * bits [15: 8] - Reserved
    * bit [ 7] - Channel A output set to 0
    * bit [ 6] - Channel A state machine reset
    * bit [ 5] - Channel A set one time trigger
    * bit [ 4] - Channel A state machine wrap pointer
    * bits [ 3: 0] - Channel A trigger selector
    *
    */


    oder umgekehrt


    typedef struct awg_reg_t {
    /** @brief Offset 0x00 - State machine configuration
    *
    * State machine configuration register (offset 0x00):
    * bits [31:24] - Reserved
    * bit [ 23] - Channel A output set to 0
    * bit [ 22] - Channel A state machine reset
    * bit [ 21] - Channel A set one time trigger
    * bit [ 20] - Channel A state machine wrap pointer
    * bits [19:16] - Channel B trigger selector
    * bits [15: 8] - Reserved
    * bit [ 7] - Channel B output set to 0
    * bit [ 6] - Channel B state machine reset
    * bit [ 5] - Channel B set one time trigger
    * bit [ 4] - Channel B state machine wrap pointer
    * bits [ 3: 0] - Channel B trigger selector
    *
    */


    heisen?


    Markus

  • Hallo Markus,
    Hier uebrigens noch die offiziellen Anweisungen, wie man DC Offsets messen und kompensieren kann. Damit kannst Du dann Dein persoenliches dcoffs in iq.c entsprechend anpassen. Obwohl, wenn ich so drueber nachdenke: Eigentlich koennte der I/Q Generator ja gleich den EEPROM auslesen anstatt dass ich den DC Offset hart im Quell-Text reinschreibe :thumbup:
    Muss ich bei Gelegenheit mal ausprobieren ...

  • Hallo Uwe,


    kann bestätigen, dass der neue Code immer einen Kreis zeichnet.



    root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 -900 +0.0 +0.0 <==KreIs
    root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 +900 +0.0 +0.0 <==KreIs
    root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 +450 +0.0 +0.0
    root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 +1350 +0.0 +0.0
    root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 -1350 +0.0 +0.0
    root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 -450 +0.0 +0.0
    root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 -900 +0.0 +0.0 <==KreIs
    root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 +900 +0.0 +0.0 <==KreIs


    Glückwunsch.


    Jetzt werde ich den DC-Offset bestimmen.


    Markus

  • Hallo Uwe,


    neues Problem ;-)


    root@red-pitaya:/home/sdr/iqgen2# ./iq 10.0e6 +900 +0.0 +0.0 <= Bild #1 Kreis ok
    root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 +900 +0.0 +0.0 dito
    root@red-pitaya:/home/sdr/iqgen2# ./iq 5.0e6 +900 +0.0 +0.0 dito
    root@red-pitaya:/home/sdr/iqgen2# ./iq 8.0e6 +900 +0.0 +0.0 dito
    root@red-pitaya:/home/sdr/iqgen2# ./iq 9.0e6 +900 +0.0 +0.0 dito
    root@red-pitaya:/home/sdr/iqgen2# ./iq 10.0e6 +900 +0.0 +0.0 <= Bild #2 Kreis verformt
    root@red-pitaya:/home/sdr/iqgen2# ./iq 12.0e6 +900 +0.0 +0.0
    root@red-pitaya:/home/sdr/iqgen2# ./iq 11.0e6 +900 +0.0 +0.0
    root@red-pitaya:/home/sdr/iqgen2# ./iq 15.0e6 +900 +0.0 +0.0 <= Bild #3 kreis verformt und größer!



    Ab zehn MHz wird der Kreis Unsymetrisch - (keine Elipse sondern ein Tropfen!)
    Zudem steigt der Pegel an, verbeulter Kreis wird größer


    Siehe Anhang




    Markus


    Anbei noch meine Calibrationskonstanten aus dem EEPROM:


    root@red-pitaya:/home/sdr/iqgen2# calib -r -v
    FE_CH1_FS_G_HI = 45870551
    FE_CH2_FS_G_HI = 45870551
    FE_CH1_FS_G_LO = 1016267064
    FE_CH2_FS_G_LO = 1016267064
    FE_CH1_DC_offs = 78
    FE_CH2_DC_offs = 25
    BE_CH1_FS = 42755331
    BE_CH2_FS = 42755331
    BE_CH1_DC_offs = -150
    BE_CH2_DC_offs = -150