Beiträge von DL8MBY

    Hallo Forum,

    hatte wieder etwas Zeit und kommte das Gerät partiell zerlegen.
    Anbei die Fotos auf mehrere Beiträge verteilt.
    Werde beim nächsten Mal auch noch die Abschirmungen abnachen,
    um das Darunter zu fotographieren.
    Konnte es Mangels eines starken Lötkolbens nicht sofort machen.

    Meine erste Modifikation an dem Gerät war das Anbringen einer
    N-Buchse, da ich hauptsächlich N-Kabel und N-Zubehär habe.

    Als Endlösung will ich SMA-Buches nehmen, suche nur noch eine
    Variante mit dem selben Flansch.

    Der Tausch ist sehr leicht zu bewerkstellinen, da der Antennenanschluß auf
    einer separaten Platine an der Rückblende montiert ist und nur mittels
    Federkontakte mit dem Mainboard verbunden ist.

    Zudem habe ich das Lautsprecherkabel gekürzt. Es war sehr großzügig
    bemessen und im aufgewickeltem Zustand zwischen den beiden
    Platinen versteckt.

    Einen kleinen Kern auf die Leitung unmittelbar nach dem NF-Verstärker-
    ausgang habe ich auch plaziert.

    Zudem noch einen Kern auf die Stromversorgungsanschlüsse drauf,
    damit nichts ins Gerät einstrahlt.

    Ich hoffe Ihr könnt die einzelnen ICs Aufschriften auf den Bildern noch
    erkennen, wobei ich mir bei der Komprimierungsrate nicht mehr sicher bin.

    Es sind Kandidaten dabei wie AD831, AD9834, AD9913, ADE-1 und
    noch einige mehr.

    Die verwendeten Teile sind zumindest hochwertig, wie sehr das Gerätekonzept
    stimmig ist kann ich noch nicht beurteilen. Muss mich noch durch die Platine
    navigieren und vorallem die Innereien unter den Schirmungsblechen ergründen.

    Soweit ein Zwischenbericht. Weitere Einzelheiten folgen.

    vy73
    Markus

    Hallo Uwe,

    bei mir war der RP-FPGA nach Anbringen eines 5V RPi-Lüfters (30mmx30mm) oberhalb des KK
    nur 48°C warm, laut SW-Monitor. Dabei habe ich die Web-Spec.-App am laufen gehabt (bei 62,5MHz).

    Somit ist der Kühlbedarf nicht so hoch, wenn der kleine Lüfter schon soviel Abkühlung bringt (von 78°C aub 48°C).

    Ich habe allerdings übersehen, dass ja onboard bereits ein Lüfteranschluß vorliegt und habe mich deshalb an
    Pin #1 (+5V) der linken Leiste drangehängt.

    Bei den RP Gehäusen, die es bei Reichelt, Pollin und Elektor gibt, ist ja eine Lüfterhalterung vorhanden.

    Hast Du eigentlich überprüft ob Dir der Lüfter über die Spannungsversorgung oder über seine Kommutierung
    die Störungen im unteren Frequenzband macht?

    Gruß
    Markus

    Hallo Uwe,

    das hört sich nach erheblicher Arbeit an, vorallem was das Ausmessen angeht.

    Hast Du denn schon den Kühlkörper abmontiert?

    Im kalten Zustand hält er sehr fest. Ich habe heute die beiden Stifte herausgenommen,
    konnte aber den KK nicht ohne Kraftaufwand entfernen, was ich mir verkniffen habe.

    Werde morgen versuchen den FPGA vorzuheizen und dann nochmals den Versuch
    nach der Stromabschaltung vernehmen. Manchmal sind die Wärmepasten/Pads dann
    weich und lassen sich besser handhaben.

    Ich bin der Meinung, das ein KK wie im Anhang angedeutet ausreichen würde.

    Mir persönlich würde ein Cu-KK mehr zusagen, wobei das natürlich die teurere und
    auch mechanisch schwerere Lösung ist.

    Aufgrund des Gewichts werden möglicherweise die beiden Befestigungslöcher nicht
    nehr ausreichen und mann muss dann doch die Ecklöcher hinzunehmen.

    Damit würder der KK größer und auch noch höcher vom Aufbau, wenn man die IO-Ports
    nicht zudecken, sondern weiterhin benützen will.

    Werde mir auch dazu Gedanken machen.

    Man könnte ja einen Abdruck mit einer plastelinartigen-Masse machen, oder man hat Zugang
    zu einem 3D-Scanner, der die Oberfläche abtastet und damit ein genaues Modell erstellt.

    Bin gerade noch am Überlegen, während ich diese Zeile schreibe. Wir werden sehen, was
    dabei rauskommt.

    Bis dahin

    Grüße
    Markus

    Hallo Uwe,

    hast Du schon Dir eine CAD-Zeichnung erstellt, oder musst Du noch diese Fleißarbeit machen?
    Mußt Du Dich selber an die Maschine stellen, oder kann die CAD/CAE Daten lesen und gleich
    mehrere Stück rausspucken.

    Ich wäre an zwei solchen Kühlkörpern interessiert, falls Dein Aufwand sich in Grenzen hält.

    Ich selber hätte auch die Möglichkeit vorort sowas in Auftarg zu geben, müsste aber erst die Leute,
    die dies machen darauf ansprechen, da ich sie noch nicht persönlich kenne.

    Wir haben die feinsten Gerätschaften für sowas, allerdings benötige ich einen genauen und maschienen-
    lesbaren Plan für die Herstellung und muss natürlich auch eine Lücke finden in der dies machbar wäre.

    Leider bin ich noch kein Experte für die diversen CAD/CAE Formate und müsste mich erst schlau machen,
    in welcher Art die Vorlage zu sein hat.

    Also sollte es bei Dir aus irgendwelchen Gründen nicht klappen, so kannst Du mich bitte darauf nochmals
    ansprechen und ich werde meine Fühler in der Firma ausstrecken.

    Gruß
    Markus

    Hallo Wolfgang,
    hallo Uwe,

    war am WE unterwegs, so dass ich micht "Spielen" konnte ;-).

    Wolfgang - Hat es mit dem RP SD-Image und dem Vergrößern der Partition geklappt?

    Uwe - Werde es erst heute Abend schaffen weiter zu machen. Interessant ist ob Wolfgangs
    Einwand mit den Verstärkern - dann eine Verbesserung erzielt wird, wenn Du die Schirmung
    zwischen den beiden ICs anbringst, falls es das Layout der Platine zulässt.
    Den Lüfter kann man Ja auch extern speisen. Ich habe meinen Lüfter an den 5V der linken IO-Leiste
    angeschlossen (Pin #1), wenn die SMA-Buchsen nach oben zeigen.
    Habe aber nicht im unteren Frequenzspektrum nach Störungen gesucht.


    Gruß
    Markus

    Hallo Uwe,

    wie hast Du Deine VM mit debian konfiguriert?
    RAM/CPU/DISK.

    Ich habe einen NB mit 4GB RAM und einen mit 8GB RAM.
    Beide unter SUSE 13.1 mit x86_64 OS.

    Meinst Du dass ich auf der 4GB Maschine eine 2GB VM
    für diesen Zweck konfigurieren könnte.

    Wie ist Deine Erfahrung was die Eckdaten für die Vivado
    Installation angeht.

    Bis Dato hatte ich nur FPGA SW für Altera (Quartus Webedition) auf
    meinen Systemen. Xilinx habe ich bewusst vermieden.


    Gruß
    Markus

    Hallo Uwe,

    beide Eingänge waren beschaltet.

    Am Eingang A hing der FA-VA3 mit 5MHz (ca. 4dBm)
    Am Eingang B hatte ich den FA-Testgenerator, wobei das Gerät zu dem Zeitpunkt der
    Messung ausgeschaltet war.

    Wenn ich beide Signale einspeise, ist die Spektrale Linie trotzdem vorhanden.

    Siehe Bilder im Anhang.

    Ich habe die VA Frequenz auf 6MHz geschoben, damit man die 5MHz Linie des
    TG mit 10MHz Signal sieht. Ih habe sie mit einem x gekennzeichnet.

    Gruß
    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

    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,

    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 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

    Hallo OMs,

    die ersten Schritte sind wie immer erwas Mühsam.

    Verstehe ich das soweit richtig, dass der RP im FPGA bereits vorkonfigurierte
    Funktionsblöcke beinhaltet, auf die man dan z.B. über Libs / Header-Files
    zugreifen kann.

    z.B. Arbitrary Waveform Generator (AWG) FPGA controller als Funktionsblock
    kann über die Files fpga_awg.h / fpga_awg.c angesprochen werden.

    Solange der FPGA nicht neu mit Strukturanweisungen gefüllt wird, wozu man ja die
    Xilinx-Tools braucht, kann man auf diese vorkonfigurierten Strukturen, die im
    Auslieferungszustand vorhanden sing, zugreifen.

    Für heute genug gespielt - Jetzt gehts ins Bett ;)

    Morgen ist ja auch noch ein Tag.

    Markus

    Hallo Uwe,

    ich schon wieder,

    habe halt RP Blut geleckt ;)

    ist das der Code in dem Du eine LTU für den Sin/Cos aufbaust
    um sie dann an den Kanal A/B zu schicken?

    for(uint32_t i = 0; i < n; i++) {
    data = round(amp1 * cos(2*M_PI*(double)i/(double)n));
    if (data < 0) {
    data += (1 << 14);
    }

    g_awg_cha_mem[i] = data;

    data = round(amp2 * cos(2*M_PI*(double)((phase_offset + i) % n)/(double)n));
    if (data < 0) {
    data += (1 << 14);
    }

    g_awg_chb_mem[i] = data;

    Anscheinend braucht man diese _agw_ Funktionen um mit dem Konfiguriertem FPGA zu kommunizieren.

    Wo kann man sich über die Aufrufe

    g_awg_reg->state_machine_conf = 0x000041;

    und

    g_awg_reg->state_machine_conf = 0x110011;

    schlau machen, wie sind die Flags zu intepretieren.


    Markus

    Konnte meine Frage selbst beantworten:

    uint32_t state_machine_conf;
    /** @brief Offset 0x04 - Channel A amplitude scale and offset
    *
    * Channel A amplitude scale and offset register (offset 0x04) used to set the
    * amplitude and scale of output signal: out = (data * scale)/0x2000 + offset
    * bits [31:30] - Reserved
    * bits [29:16] - Amplitude offset
    * bits [15:14] - Reserved
    * bits [13: 0] - Amplitude scale (0x2000 == multiply by 1, unsigned)
    */

    aus fpga_awg.h

    Hallo Uwe,

    einen habe ich noch ;)

    Ich verstehe folgenden Zusammenhang nicht:
    In der ersten if-Anweisung wird dafür gesorgt, dass der
    Phasenparameter zwischen -1799 und + 1800 liegt,
    sonst wird der Programmablauf unterbrohen.
    In der Zugehörigen else-Anweisung wird der Phasenwert
    Modulo 3600 geteilt, aber der Rest ist ja immer gleich dem
    ursprünglichem Wert des Phasenparameters, da dieser
    doch immer kleiner 1800 ist.

    Kannst Du mir erklären was Du mit der Modulo 3600 Division
    bezweckst. Irgend wie stehe ich auf dem Schlauch, was diese
    Codesequenz angeht.

    /* Phase Offset */
    int32_t phase_offset = atoi(argv[2]);
    if ((phase_offset < -1799) || (phase_offset > 1800)) { <============= 1.
    fprintf(stderr, "Invalid phase shift: %s\n", argv[2]);
    usage();

    return -1;

    } else {
    phase_offset = phase_offset % 3600; <============== 2.
    if (phase_offset < 0) {
    phase_offset += 3600;
    }

    /* scale it to match AWG buffer length */
    phase_offset = n * phase_offset / 3600;

    }


    Danke für Deine Mühe schon mal im Vorraus.

    Gruß
    Markus