annuncio

Comprimi
Ancora nessun annuncio.

RX conversione diretta

Comprimi
X
 
  • Filtro
  • Ora
  • Visualizza
Elimina tutto
nuovi messaggi

  • #16
    Re: RX conversione diretta

    salve a tutti,rieccomi...(ahia),intanto mi rendo conto di essere entrato a gamba tesa in una discussione che riguardava solo marginalmente la domanda che ho posto, e per questo chiedo venia se volete possiamo spostarci e aprirne una dedicata al ad9850.....eppoi per GIF come procede con il ricevitore??Mica ti sarai fermato?
    Ho letto con interesse la spiegazione e l'esempio che hai postato...come dici li mandi su parallela, nei progetti che ho io Arduino li trasferisce serialmente, come in questo esempio che genera una freq. fissa di 10 MHZ, e' piccolo:

    /*
    * A simple single freq AD9850 Arduino test script
    * Original AD9851 DDS sketch by Andrew Smallbone at www.rocketnumbernine.com
    * Modified for testing the inexpensive AD9850 ebay DDS modules
    * Pictures and pinouts at nr8o.dhlpilotcentral.com
    * 9850 datasheet at http://www.analog.com/static/importe...ets/AD9850.pdf
    * Use freely
    */

    #define W_CLK 8 // Pin 8 - connect to AD9850 module word load clock pin (CLK)
    #define FQ_UD 9 // Pin 9 - connect to freq update pin (FQ)
    #define DATA 10 // Pin 10 - connect to serial data load pin (DATA)
    #define RESET 11 // Pin 11 - connect to reset pin (RST).

    #define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }

    // transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line
    void tfr_byte(byte data)
    {
    for (int i=0; i<8; i++, data>>=1) {
    digitalWrite(DATA, data & 0x01);
    pulseHigh(W_CLK); //after each bit sent, CLK is pulsed high
    }
    }

    // frequency calc from datasheet page 8 = <sys clock> * <frequency tuning word>/2^32
    void sendFrequency(double frequency) {
    int32_t freq = frequency * 4294967295/125000000; // note 125 MHz clock on 9850
    for (int b=0; b<4; b++, freq>>=8) {
    tfr_byte(freq & 0xFF);
    }
    tfr_byte(0x000); // Final control byte, all 0 for 9850 chip
    pulseHigh(FQ_UD); // Done! Should see output
    }

    void setup() {
    // configure arduino data pins for output
    pinMode(FQ_UD, OUTPUT);
    pinMode(W_CLK, OUTPUT);
    pinMode(DATA, OUTPUT);
    pinMode(RESET, OUTPUT);

    pulseHigh(RESET);
    pulseHigh(W_CLK);
    pulseHigh(FQ_UD); // this pulse enables serial mode - Datasheet page 12 figure 10
    }

    void loop() {
    sendFrequency(10.e6); // freq
    while(1);
    }


    giustamente, un po' di luce, lui ne spedisce 32, cioe' la frequenza (giusto?),quindi qui andrebbero aggiunti gli altri 8 divisi come sappiamo,ora io mi immagino tanti zero e uno che entrano nel dds, i programmatori invece usano arcane formule per fare lo stesso, i primi 8 poi gli altri 8, boh! e questo non mi aveva aiutato( l'ignoranza e' una brutta bestia).

    Io ho ordinato un'altro DDS, posso fare prove,intanto finisco il genetarore su cui lavoro....ma sono disponibile a testare codici e provare i risultati.
    Non sono, comunque, in grado di scrivermelo e per questo qualunque aiuto e' ben accetto.
    Grazie ancora
    73 de iw0hjz
    alberto

    Commenta


    • #17
      Re: RX conversione diretta

      Originariamente inviato da iw0hjz Visualizza il messaggio
      ?
      Ho letto con interesse la spiegazione e l'esempio che hai postato...come dici li mandi su parallela, nei progetti che ho io Arduino li trasferisce serialmente, come in questo esempio che genera una freq. fissa di 10 MHZ, e' piccolo:

      /*
      * A simple single freq AD9850 Arduino test script
      * Original AD9851 DDS sketch by Andrew Smallbone at www.rocketnumbernine.com
      * Modified for testing the inexpensive AD9850 ebay DDS modules
      * Pictures and pinouts at nr8o.dhlpilotcentral.com
      * 9850 datasheet at http://www.analog.com/static/importe...ets/AD9850.pdf
      * Use freely
      */

      #define W_CLK 8 // Pin 8 - connect to AD9850 module word load clock pin (CLK)
      #define FQ_UD 9 // Pin 9 - connect to freq update pin (FQ)
      #define DATA 10 // Pin 10 - connect to serial data load pin (DATA)
      #define RESET 11 // Pin 11 - connect to reset pin (RST).

      #define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }

      // transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line
      void tfr_byte(byte data)
      {
      for (int i=0; i<8; i++, data>>=1) {
      digitalWrite(DATA, data & 0x01);
      pulseHigh(W_CLK); //after each bit sent, CLK is pulsed high
      }
      }

      // frequency calc from datasheet page 8 = <sys clock> * <frequency tuning word>/2^32
      void sendFrequency(double frequency) {
      int32_t freq = frequency * 4294967295/125000000; // note 125 MHz clock on 9850
      for (int b=0; b<4; b++, freq>>=8) {
      tfr_byte(freq & 0xFF);
      }
      tfr_byte(0x000); // Final control byte, all 0 for 9850 chip
      pulseHigh(FQ_UD); // Done! Should see output
      }

      void setup() {
      // configure arduino data pins for output
      pinMode(FQ_UD, OUTPUT);
      pinMode(W_CLK, OUTPUT);
      pinMode(DATA, OUTPUT);
      pinMode(RESET, OUTPUT);

      pulseHigh(RESET);
      pulseHigh(W_CLK);
      pulseHigh(FQ_UD); // this pulse enables serial mode - Datasheet page 12 figure 10
      }

      void loop() {
      sendFrequency(10.e6); // freq
      while(1);
      }

      73 de iw0hjz
      alberto
      Si, anche io uso la trasmissione seriale solo per comodità e per risparmiare pin. In pratica fa la stessa cosa, manda i bit uno ad uno fino al 32°.
      La parte evidenziata in rosso è la word che contiene i bit di fase (nell'esempio sono settati a zero).
      73 de IZ0GIF - Mimmo

      www.iz0gif.it

      La ragione parla, l'ignoranza urla. --- Chi sa, fa, chi non sa, insegna.

      Commenta


      • #18
        Re: RX conversione diretta

        OK,sai Mimmo come mi sento??
        Hai presente quando apri il cofano della macchina, guardi il motore per una vntina di minuti,poi lo richiudi e speri che la macchina parta?
        Ecco, piu' o meno cosi'.....ho letto il codice non so' quante volte ma non sapevo che guardare....te c'hai messo un'attimo

        bene, stando cosi' le cose si puo' aggiungere una variabile fase da impostare come per la frequenza e metterla al posto di
        tfr_byte(0x000); tipo tfr_byte(fase & 0x000);
        e da seriale metterci un valore..la modifica sarebbe facilmente visibile con l'oscilloscopio....

        ciao,grazie e saluti....
        alberto

        Commenta


        • #19
          Re: RX conversione diretta

          Originariamente inviato da iw0hjz Visualizza il messaggio
          OK,sai Mimmo come mi sento??
          Hai presente quando apri il cofano della macchina, guardi il motore per una vntina di minuti,poi lo richiudi e speri che la macchina parta?
          Ecco, piu' o meno cosi'.....ho letto il codice non so' quante volte ma non sapevo che guardare....te c'hai messo un'attimo
          solo questione di tempo, poi sarà una volata anche per te

          bene, stando cosi' le cose si puo' aggiungere una variabile fase da impostare come per la frequenza e metterla al posto di
          tfr_byte(0x000); tipo tfr_byte(fase & 0x000);
          Non serve fare l'AND, a che pro?
          Basta solo inserire la variabile fase: tfr_byte(fase);
          dove "fase" avrà un valore del genere BXXXXX000
          Le X hanno un valore compreso tra 0 (B00000) e 31 (B11111) che corrispondono ad un sfasamento compreso tra 0 e 360 gradi (a passi di 11,25°)

          Mi sa tanto che conviene aprire un post dedicato altrimenti il MOD prima o poi ci frusta

          Ma nessun altro smanetta con i micro-controller in campo ham?
          73 de IZ0GIF - Mimmo

          www.iz0gif.it

          La ragione parla, l'ignoranza urla. --- Chi sa, fa, chi non sa, insegna.

          Commenta


          • #20
            Re: RX conversione diretta

            ciao Mimmo, ciao a tutti,bentrovati
            Basta solo inserire la variabile fase: tfr_byte(fase);
            dove "fase" avrà un valore del genere BXXXXX000
            Le X hanno un valore compreso tra 0 (B00000) e 31 (B11111) che corrispondono ad un sfasamento compreso tra 0 e 360 gradi (a passi di 11,25°)
            OK, provero' a modificare lo sketch inserendo dei valori per vedere che succede .

            Mi sa tanto che conviene aprire un post dedicato altrimenti il MOD prima o poi ci frusta
            Ho visto che sei molto presente qui sul forum, c'e' anche un thread su ad9850,aperto da te...se mi permetti di farti altre domande, in futuro riprenderei da li.
            Grazie a tutti per la pazienza e per lo sconfinamento e a GIF per i preziosi consigli.
            73 de alberto
            P.S.
            Questo e' quello su cui sto lavorando:
            File allegati

            Commenta

            Sto operando...
            X