[Programmation] arduino et DDS AD9850
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

arduino et DDS AD9850



  1. #1
    mourad07

    arduino et DDS AD9850


    ------

    bonjour
    je suis bloqué sur l'algorithme pour le control du AD9850 avec l'Arduino si c possible j'aimerais avoir qlq information pour me guidé un peu je vous pris de m'aidé si c possible

    -----
    Dernière modification par Jack ; 11/02/2016 à 15h43. Motif: Modification du titre

  2. #2
    Jack
    Modérateur

    Re : Abonné de Electronique pratique agacé !!!!

    Quel est le rapport avec ce qui précède?

  3. #3
    Gérard

    Re : Abonné de Electronique pratique agacé !!!!

    Citation Envoyé par mourad07 Voir le message
    bonjour
    je suis bloqué sur l'algorithme pour le control du AD9850 avec l'Arduino si c possible j'aimerais avoir qlq information pour me guidé un peu je vous pris de m'aidé si c possible
    Alors tu ouvres une nouvelle discussion et tu expliques clairement ce sur quoi tu buttes.
    Il est d'usage de donner un lien vers le circuit qui pose problème, dans ton cas, l'AD9850.

  4. #4
    mourad07

    Re : Titre indéfini à préciser

    http://www.ad7c.com/projects/ad9850-dds-vfo/
    VOICI LE lien j'ai pas une grande connaissance pour la programation arduino j'ai trouvé un algorithme avec le microC mais reste a le convertir :s

  5. A voir en vidéo sur Futura
  6. #5
    Yoruk

    Re : Titre indéfini à préciser

    Il y a du code arduino récupérable sur la page que tu donnes...
    La robotique, c'est fantastique !

  7. #6
    mourad07

    Re : Titre indéfini à préciser

    j'ai deja esseyé ce code mais ca marche pas

  8. #7
    Yoruk

    Re : Titre indéfini à préciser

    C'est à dire ? Qu'est ce qui ne marche pas ?

    Tu peux sans doute contacter l'auteur de la page pour lui demander assistance...
    La robotique, c'est fantastique !

  9. #8
    mourad07

    Re : Titre indéfini à préciser

    j'ai pas pu afficher les 2 signaux en meme temps :s

  10. #9
    Yoruk

    Re : Titre indéfini à préciser

    Tu cherches à faire quoi exactement ?

    Donne le code et le schéma.
    La robotique, c'est fantastique !

  11. #10
    mourad07

    Re : Titre indéfini à préciser

    ca c'est le prog que j'ai:
    Code:
    /*
    Main code by Richard Visokey AD7C - www.ad7c.com
    
    Revision by  VK8BN  March 28 2014 
    5 to 5.5 VFO for 6 meter Rig
    Added 1 Hz frequency steps default start step size 10 Hz
    */
    
    // Include the library code
    #include <LiquidCrystal.h>
    #include <rotary.h>
    #include <EEPROM.h>
    
    //Setup some items
    #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); }
    Rotary r = Rotary(2,3); // sets the pins the rotary encoder uses.  Must be interrupt pins.
    LiquidCrystal lcd(12, 13, 7, 6, 5, 4); // I used an odd pin combination because I need pin 2 and 3 for the interrupts.
    int_fast32_t Band = 50000000 ;
    
    int_fast32_t rx= Band; // Starting frequency of VFO
    int_fast32_t rx2=1; // variable to hold the updated frequency
    int_fast32_t increment = 10; // starting VFO update increment in HZ.
    int buttonstate = 0;
    
    int GoUSB = 1;
    String hertz = "10 Hz";
    int  hertzPosition = 5;
    byte ones,tens,hundreds,thousands,tenthousands,hundredthousands,millions ;  //Placeholders
    String freq; // string to hold the frequency
    int_fast32_t timepassed = millis(); // int to hold the arduino miilis since startup
    int memstatus = 1;  // value to notify if memory is current or old. 0=old, 1=current.
    
    
    
    
    
    int ForceFreq = 1;  // Change this to 0 after you upload and run a working sketch to activate the EEPROM memory.  YOU MUST PUT THIS BACK TO 0 AND UPLOAD THE SKETCH AGAIN AFTER STARTING FREQUENCY IS SET!
    
    
    
    
    void setup() {
      pinMode(A0,INPUT); // Connect to a button that goes to GND on push
      pinMode (A5,INPUT); // connect to toggle switch to change from upper to lower sideband
      digitalWrite(A0,HIGH);
      digitalWrite(A5,HIGH);
      lcd.begin(16, 2);
      PCICR |= (1 << PCIE2);
      PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
      sei();
      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 on the AD9850 - see datasheet
      lcd.setCursor(hertzPosition,1);    
      lcd.print(hertz);
       // Load the stored frequency  
      if (ForceFreq == 0) {
        freq = String(EEPROM.read(0))+String(EEPROM.read(1))+String(EEPROM.read(2))+String(EEPROM.read(3))+String(EEPROM.read(4))+String(EEPROM.read(5))+String(EEPROM.read(6));
        rx = freq.toInt();  
      }
    }
    
    
    void loop() {
      if (rx != rx2){    
            showFreq();
            sendFrequency(rx);
            rx2 = rx;
          }
          
      buttonstate = digitalRead(A0);
      if(buttonstate == LOW) {
            setincrement();        
        };
    
    
      // Write the frequency to memory if not stored and 2 seconds have passed since the last frequency change.
        if(memstatus == 0){   
          if(timepassed+10000 < millis()){
            storeMEM();
            }
          }   
    }
     
    ISR(PCINT2_vect) {
      unsigned char result = r.process();
      if (result) {    
        if (result == DIR_CW){rx=rx+increment;}
        else {rx=rx-increment;};       
          if (rx >=56000000){rx=rx2;}; // UPPER VFO LIMIT
          if (rx <=48000000){rx=rx2;}; // LOWER VFO LIMIT
      }
    }
    
    
    
    // frequency calc from datasheet page 8 = <sys clock> * <frequency tuning word>/2^32
    void sendFrequency(double frequency) {  
      if (GoUSB == 1){frequency =frequency / 10 ;}; // devide by 10 to give 5 to 5.5 Mhz
      
    
      int32_t freq = ( frequency  )* 4294967296./125000000;  //    125 MHz clock on 9850. slight adjustment to the 125000000 can be made to correct for any frequency error in each individual DDS board
      for (int b=0; b<4; b++, freq>>=8) {
        tfr_byte(freq & 0xFF);
      }
      tfr_byte(0x000);   // Final control byte for 9850, set to (0x001) for 9851 to enable 6 x multiplier of xtal for 180 MHz clock
      pulseHigh(FQ_UD);  // Done!  Should see output
    }
    // transfers a byte, a bit at a time, LSB first to the 9851 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
      }
    }
    
    void setincrement(){
      if(increment == 1){increment = 10; hertz = "10 Hz"; hertzPosition=5;} 
      else if(increment == 10){increment = 50; hertz = "50 Hz"; hertzPosition=5;}
      else if (increment == 50){increment = 100;  hertz = "100 Hz"; hertzPosition=4;}
      else if (increment == 100){increment = 500; hertz="500 Hz"; hertzPosition=4;}
      else if (increment == 500){increment = 1000; hertz="1 Khz"; hertzPosition=6;}
      else if (increment == 1000){increment = 2500; hertz="2.5 Khz"; hertzPosition=4;}
      else if (increment == 2500){increment = 5000; hertz="5 Khz"; hertzPosition=6;}
      else if (increment == 5000){increment = 10000; hertz="10 Khz"; hertzPosition=5;}
      else if (increment == 10000){increment = 100000; hertz="100 Khz"; hertzPosition=4;}
      else if (increment == 100000){increment = 1000000; hertz="1 Mhz"; hertzPosition=6;} 
      
      else{increment = 1; hertz = "1 Hz"; hertzPosition=5;};  
       lcd.setCursor(0,1);
         lcd.print("           ");
       lcd.setCursor(hertzPosition,1); 
       lcd.print(hertz);
       delay(250); // Adjust this delay to speed up/slow down the button menu scroll speed.
    };
    
    void showFreq(){
        millions = int(rx/1000000);
        hundredthousands = ((rx/100000)%10);
        tenthousands = ((rx/10000)%10);
        thousands = ((rx/1000)%10);
        hundreds = ((rx/100)%10);
        tens = ((rx/10)%10);
        ones = ((rx/1)%10);
        lcd.setCursor(0,0);
        lcd.print("                ");
       if (millions > 9){lcd.setCursor(0,0);}
       else{lcd.setCursor(1,0);}
           lcd.print(millions);
        lcd.print(".");
        lcd.print(hundredthousands);
        lcd.print(tenthousands);
        lcd.print(thousands);
        lcd.print(".");
        lcd.print(hundreds);
        lcd.print(tens);
        lcd.print(ones);
        lcd.print(" Mhz ");
       
       
        
        timepassed = millis();
        memstatus = 0; // Trigger memory write
        
    };
        
    void storeMEM(){
      //Write each frequency section to a EPROM slot.  Yes, it's cheating but it works!
       EEPROM.write(0,millions);
       EEPROM.write(1,hundredthousands);
       EEPROM.write(2,tenthousands);
       EEPROM.write(3,thousands);
       EEPROM.write(4,hundreds);       
       EEPROM.write(5,tens);
       EEPROM.write(6,ones);   
       memstatus = 1;  // Let program know memory has been written
    };
    Dernière modification par Jack ; 11/02/2016 à 15h40. Motif: Balises code

  12. #11
    Jack
    Modérateur

    Re : Titre indéfini à préciser

    ​Merci de penser à ajouter les balises code à l'avenir.

  13. #12
    Yoruk

    Re : Titre indéfini à préciser

    Schéma ?

    Je maintiens ma question : tu cherches à faire quoi ?

    Le code parle d'un afficheur LCD, de boutons et autre potar rotatif... Toi, tu as quoi ?
    La robotique, c'est fantastique !

  14. #13
    mourad07

    Re : arduino et DDS AD9850

    les bouton rotatif se sont des potentiometre pour variée la frequence
    l'afficheur LCD pour afficher le pas la frequence le type de signal(carré ou sinisoidale) et la forme d'onde. le probleme ce que j'ai pas pu afficher les deux forme en meme temps

  15. #14
    Yoruk

    Re : arduino et DDS AD9850

    Donne ton schéma !

    Tu utilises un oscillo pour la visu ?
    La robotique, c'est fantastique !

  16. #15
    Gérard

    Re : Titre indéfini à préciser

    Ce n'est pas un lien vers la doc du produit.

    Citation Envoyé par mourad07 Voir le message
    j'ai pas une grande connaissance pour la programation arduino j'ai trouvé un algorithme avec le microC mais reste a le convertir :s
    Ceci n'est pas compatible avec ton projet.

Discussions similaires

  1. Article défini ou indéfini en mathématiques ?
    Par Médiat dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 10/07/2009, 22h16
  2. Hi-tech: registre IOC indéfini !?!
    Par MofK dans le forum Électronique
    Réponses: 1
    Dernier message: 20/05/2009, 15h12
  3. Moteur alternatif : sens indéfini
    Par invite1587bec3 dans le forum Électronique
    Réponses: 7
    Dernier message: 06/11/2007, 13h50
  4. X/0=Indéfini? Pourquoi?
    Par invite33e3d8e7 dans le forum Mathématiques du supérieur
    Réponses: 19
    Dernier message: 02/10/2005, 16h28
Découvrez nos comparatifs produits sur l'informatique et les technologies.