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

    Hallo Uwe,


    wie sind die Werte


    const int dcoffs = -155;
    const int trans0 = 30;
    const int trans1 = 300;


    aus der iq.c Datei zu verstehen.


    Hast Du diese empirisch ermittelt für Deinen RP?


    Bei mir liefert ein erneuter Aufruf mit +950 oder -850 als Parameter
    für die Phase einen kreisrunden Kreis.


    Sieht aus, alls wenn nach dem erstmalliegem Start, irgend ein Offset von
    50 in Phasen Buffer dazukommen würde.


    Gruß
    Markus
    DL8MBY

    Hallo Wolfgang, Uwe und OMs,


    Ich habe einige Sereenshots zum IQ-Gen vom Uwe angehängt.
    Mir ist aufgefallen, dass ein XY-Darstellung nicht immer den selben
    Wert liefert.


    z.B.


    nach dem Einschalten des RP


    Bild #1: (Punkt in der Bildmitte, da kein Signal am DAC)


    Bild #2: (schöner Kreis bei dem Aufruf von iqgen mit folgenden Parametern)


    ./iq 1.0e6 -900 +0.0 +0.0


    Bild #3: (Nun Phase nicht um 90° sondern um 45° verschoben - Aufruf von iqgen mit folgenden Parametern)


    ./iq 1.0e6 -450 +0.0 +0.0


    Bild #4: (nun wieder den verhergehenden Zustand wieder herstellen d.h. Phase um 90° verschoben)


    ./iq 1.0e6 -900 +0.0 +0.0


    Leider liefert diese erneute Einstellung keinen unverzehrten Kreis mehr.



    Was meinst Du Uwe dazu?



    Wolfgang,


    um eine Partition einer SD-Karte unter Linux zu vergrößern, gehst Du bitte wie folgt vor.



    Partitionstabelle des Karten-Image mit fdisk -l /dev/<SD-Karten-Name> betrachten


    Bei mir ist <SD-Karten-Name> z.B. mmcblck0, könnte aber auch sdb oder sdc sein,
    je nach Anzahl der verbauten Disks im Rechner.


    Hilfreich ist der Befehl lsscsi und auch lsusb, der angeschlossene Devices zeigt.


    Bei meinem RP liefert fdisk -l die folgende Ausgabe



    root@red-pitaya:/home/sdr/iqgen# fdisk -l /dev/mmcblk0


    Disk /dev/mmcblk0: 14.9 GiB, 15931539456 bytes, 31116288 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x0004085a


    Device Boot Start End Sectors Size Id Type
    /dev/mmcblk0p1 8192 30719 22528 11M e W95 FAT16 (LBA)
    /dev/mmcblk0p2 30720 31116287 31085568 14.8G 83 Linux


    Dies ist aber bereits die Ausgabe für meine vergrößerte Partition mmcblk0p2.


    Wenn Du das Original-Image auf die SD-Karte mit dd übertragen hast und der Aufbau
    wie folgt ist:


    /dev/mmcblk0p1 8192 30719 22528 11M e W95 FAT16 (LBA)
    /dev/mmcblk0p2 30720 XXXXXX YYYYYY ZZ.8G 83 Linux


    und du willst die letzte Partition vergroßern, so musst Du:


    1) mit fdisk die Partition #2 löschen
    2) mit fdisk die Partition #2 neu Anlegen (primär Partition)
    2a) als Startwert der Partition #2 den Endwert der Partition #1 + 1 angeben
    hier ist es der Wert 30720 = 30719 + 1
    2b) den Endwert der Partition #2 als letzten größtmöglichen Wert der SD-Karte nehmen.
    Diesen Wert ermittelt man am besten vor dem Draufspielen des Images mit fdisk -l /dev/...
    3) die neu angelegte Partition durch Speichern permanent machen.


    Die einzelnen Kommandos lauten unter fdisk:


    1) fdisk /dev/mmcblk0 (diesmal ohne -l für list d.h. nur ansehen und nichts modifizieren)
    2) <p> <== Partitionstabelle erneut zeigen
    3) <d> Partition
    3) <2> #2 löschen
    4) <n> neue partition anlegen
    5) <p> eine primäre Partition als Type wehlen
    6) ... Start und Stop Block setzen
    7) <p> Partitionstabelle nochmal ansehen und auf Fehler (Überlappungen) prüfen
    8a) <q> quit, ohne speichern raus - wenn nötig
    8b) <w> veränderte Partitionstabelle schreiben.
    8c) <q> program verlassen.


    Hoffe keinen Schritt vergessen zu haben - war aus dem Gedächtnis.


    Bevor man Punkt 1 - 8 durchführt muss man sicherstellen, das beim Einstecken der
    SD-Karte diese nicht sofort vom System eingebunden wurde (mount Befehl)
    Falls man einen Eintrag wie


    /dev/mmcblk0p1 on xyz
    /dev/mmcblk0p2 on xyz


    findet,
    diesen mit umount /dev/mmcblk0p1 oder/und umount /dev/mmcblk0p2 aushängen.


    Alles als root user!!!


    Jetzt muss man nur noch das Filesystem der zweiten Partition mit fsck analysieren


    fsck -f /dev/mmcblk0p2


    und dann den Resize-Vorgang anstoßen:


    resize2fs /dev/mmcblk0p2


    geschafft - und ich auch ;)


    Gruß
    Markus