Εμφάνιση αποτελεσμάτων : 1 έως 3 από 3

Θέμα: BFO με το AD9833

  1. #1
    Μέλος Το avatar του χρήστη Ακρίτας
    Όνομα
    Γιώργος
    Εγγραφή
    Jan 2009
    Περιοχή
    Θεσσαλονίκη - Αλεξανδρούπολη
    Μηνύματα
    1.427

    Προεπιλογή BFO με το AD9833

    Ένα πολύ χρήσιμο module για όπου χρειαζόμαστε μια σταθερή, συγκεκριμένης τιμής συχνότητα, όπως ένα BFO, μέχρι τους 12 MHz. Μπορεί να μας δώσει ημίτονο ή τρίγωνο ή τετράγωνο παλμό (όχι συγχρόνως). Φυσικά χρειάζεται και ένα μικροελεγκτή για τη λειτουργία του, δηλαδή κάποιο αρντουνοειδές (για εμάς τους τεμπέληδες). Συνδυασμένο με ένα Pro Mini αποτελούν ένα πολύ συμμαζεμένο και οικονομικό σύνολο, της τάξης των 6Ε, που μπορεί να μπει ακόμα και σε μια ήδη υπάρχουσα συσκευή αν απαιτείται.

    Εδώ φαίνονται επάνω σε μια bb.

    FrC 003b.jpg

    Ένα ημίτονο στους 1843.2 KHz.

    FrC 004b.jpg

    Και ένα τρίγωνο στους 110 KHz.

    FrC 002b.jpg

    Στο διαδίκτυο βρήκα δυο - τρεις κώδικες για αρντουίνο που όμως είναι πολύ μπερδεμένοι γιατί περιλαμβάνουν LCD, encoders και λοιπά. Ο παρακάτω κώδικας είναι απλούστερος και δεν χρησιμοποιεί κάποια ιδιαίτερη βιβλιοθήκη. Η συχνότητα και η κυματομορφή της εξόδου ορίζονται μέσα στον κώδικα άπαξ.

    Κώδικας:
    /* 
    AD9833 simple frequency BFO.
    Most of the code is based on "AD9833 Waveform Module vwlowen.co.uk".
    Thanks to creators.
    By Akritas.
    */
    
    #include <SPI.h>
    
    const int SINE = 0x2000;
    const int SQUARE = 0x2028;
    const int TRIANGLE = 0x2002;
    
    const float refFreq = 25000000.0;  // this may be changed a little
    long BFO_FREQ = 1843200;           // set BFO frequency here
    
    int FSYNC = 10;     //connected to FSYNC 
    //int SPI_CLK = 13;   connected to SCLK
    //int SPI_MOSI = 11;  connected to SDATA
      
    void setup()
    {
      //SPI.setClockDivider(SPI_CLOCK_DIV2);
      //SPI.setBitOrder(MSBFIRST);
      SPI.setDataMode(SPI_MODE2);
      SPI.begin();
      delay(50);
      digitalWrite(FSYNC,HIGH);
      AD9833_reset;
      setFrequency(BFO_FREQ);
      SPI.end;
    }
    
    void WriteRegister(int dat)
    {
      digitalWrite(FSYNC, LOW);
      delayMicroseconds(10);
      SPI.transfer(highByte(dat));
      SPI.transfer(lowByte(dat));
      digitalWrite(FSYNC, HIGH);
    }
    
    void AD9833_reset()
    {
      WriteRegister(0x100);
      delay(10);
    }
    
    void setFrequency(long frequency)
    {
      long FreqWord = (frequency * pow(2, 28)) / refFreq;
      int MSB = (int)((FreqWord & 0xFFFC000) >> 14);
      int LSB = (int)(FreqWord & 0x3FFF);
      
      LSB |= 0x4000;
      MSB |= 0x4000;
      
      WriteRegister(0x2100);
      WriteRegister(LSB);
      WriteRegister(MSB);
      WriteRegister(0xC000);
      WriteRegister(SINE);    // may be SQUARE or TRIANGLE
    }  
    
    void loop()
    {
      
    }

    Ο παρακάτω κώδικας κάνει στην ουσία το ίδιο πράγμα αλλά είναι επεκτάσιμος στην περίπτωση που θέλουμε να βάλουμε για παράδειγμα δυο ή περισσότερες συχνότητες που θα επιλέγονται με κάποιο μπουτόν (πχ. USB - LSB).

    Κώδικας:
    /* 
    AD9833 simple frequency BFO.
    Most of the code is based on "AD9833 Waveform Module vwlowen.co.uk".
    Thanks to creators.
    By Akritas.
    */
    
    #include <SPI.h>
    
    const int SINE = 0x2000;
    const int SQUARE = 0x2028;
    const int TRIANGLE = 0x2002;
    
    const float refFreq = 25000000.0;  // this may be changed a little
    long BFO_FREQ = 1843200;           // set BFO frequency here
    
    int FSYNC = 10;     //connected to FSYNC 
    //int SPI_CLK = 13;   connected to SCLK
    //int SPI_MOSI = 11;  connected to SDATA
      
    boolean SET_FREQ = true;
    
    void setup()
    {
      //SPI.setClockDivider(SPI_CLOCK_DIV2);
      //SPI.setBitOrder(MSBFIRST);
      SPI.setDataMode(SPI_MODE2);
      SPI.begin();
      delay(50);
      digitalWrite(FSYNC,HIGH);
      
      AD9833_reset;
     
      //SPI.end;
    }
    
    void WriteRegister(int dat)
    {
      digitalWrite(FSYNC, LOW);
      delayMicroseconds(10);
      SPI.transfer(highByte(dat));
      SPI.transfer(lowByte(dat));
      digitalWrite(FSYNC, HIGH);
    }
    
    void AD9833_reset()
    {
      WriteRegister(0x100);
      delay(10);
    }
    
    void setFrequency(long frequency)
    {
      long FreqWord = (frequency * pow(2, 28)) / refFreq;
      int MSB = (int)((FreqWord & 0xFFFC000) >> 14);
      int LSB = (int)(FreqWord & 0x3FFF);
      
      LSB |= 0x4000;
      MSB |= 0x4000;
      
      WriteRegister(0x2100);
      WriteRegister(LSB);
      WriteRegister(MSB);
      WriteRegister(0xC000);
      WriteRegister(SINE);    // may be SQUARE or TRIANGLE
    }  
    
    void loop()
    {
      if (SET_FREQ)
        {
          setFrequency(BFO_FREQ);
          SET_FREQ = false;
        }  
    }

    4 Not allowed! Not allowed!
    So much behind us! Still far to go!
    Pink Floyd

  2. #2
    Μέλος Το avatar του χρήστη SeAfasia
    Όνομα
    SV3IRG Dinos
    Εγγραφή
    Sep 2012
    Περιοχή
    Άργος.
    Μηνύματα
    3.363

    Προεπιλογή

    έχει πιό κάτω;Με κάποιο 602;
    Μου άρεσε το εξής σημείο:"δηλαδή κάποιο αρντουνοειδές (για εμάς τους τεμπέληδες)"...

    0 Not allowed! Not allowed!

  3. #3
    Μέλος Το avatar του χρήστη Ακρίτας
    Όνομα
    Γιώργος
    Εγγραφή
    Jan 2009
    Περιοχή
    Θεσσαλονίκη - Αλεξανδρούπολη
    Μηνύματα
    1.427

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από SeAfasia Εμφάνιση μηνυμάτων
    έχει πιό κάτω;Με κάποιο 602;
    Μου άρεσε το εξής σημείο:"δηλαδή κάποιο αρντουνοειδές (για εμάς τους τεμπέληδες)"...
    Ε...ναί. Βαρέθηκα να παιδεύομαι με τα διάφορα VFO, VCO, VXO...
    Προορίζεται για εκείνο το SSB που έχει στοιχειώσει.

    1 Not allowed! Not allowed!
    So much behind us! Still far to go!
    Pink Floyd

  4. Ένα μέλος ευχαρίστησε τον Ακρίτας για αυτό το χρήσιμο μήνυμα:

    SeAfasia (07-05-17)

Παρόμοια Θέματα

  1. BFO ακριβείας στου 455 KHz
    By Ακρίτας in forum Γενικά
    Απαντήσεις: 10
    Τελευταίο Μήνυμα: 05-10-15, 19:12

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας