[Programmation] Utilisation du SPI arduino pour contrôler un générateur
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Utilisation du SPI arduino pour contrôler un générateur



  1. #1
    Bsartek

    Utilisation du SPI arduino pour contrôler un générateur


    ------

    Bonjour,
    j'essaie de contrôler ce mini-générateur
    (https://learn.sparkfun.com/tutorials...444.1552684906 )
    pour faire sortir un signal sinusoïdal dont je ferai varier la fréquence dans un filtre. Je souhaite contrôler le signal avec un arduino Uno

    Voici mon montage : Nom : Arduino montage minigen.PNG
Affichages : 754
Taille : 129,5 Ko
    Attention : j'ai utilisé l'image de l'arduino pro mini mais c'est bien le générateur sparkfun (https://cdn.sparkfun.com//assets/par...3/11420-03.jpg) que j'utilise (l'image n'était pas présente)
    Le fil rouge et le fil noir correspondent au + et au - du générateur.

    La diode du générateur s'allume mais je ne reçois pas le signal que je veux générer. Des fois j'ai un signal sinusoïdal des fois un signal continu des fois rien... Mais je n'ai pas eu le signal carré que j'essaie de mettre en place pour confirmer le montage et le programme
    Je pense qu'il y a un problème dans le code car je n'ai sûrement pas réussi à programmer correctement la liaison SPI

    Code PHP:
    #include <SPI.h>
    #include <SparkFun_MiniGen.h>

    // Create an instance of the MiniGen device; note that this has no provision for
    //  alternate CLK and MOSI pins, but you *can* pass it a different CS (or FSYNC,
    //  as it's referred to elsewhere) pin number.
    MiniGen gen;

    void setup()
    {
      
    Serial.begin(9600);
      
    digitalWrite(10HIGH);
      
    SPI.begin();
      
      
    // Clear the registers in the AD9837 chip, so we're starting from a known
      //  location. Note that since the AD9837 has no DOUT, we can't use the
      //  read-modify-write method of control. At power up, the output frequency
      //  will be 100Hz.
      
    gen.reset();
      
    delay(2000);
      
      
    // SQUARE is, as it suggests, a square wave. SQUARE is at the current output
      //  frequency.
      
    gen.setMode(MiniGen::SQUARE);
      
    delay(3000);
      
      
    // This needs a little explanation. The choices are FULL, COARSE, and FINE.
      //  a FULL write takes longer but writes the entire frequency word, so you
      //  can change from any frequency to any other frequency. COARSE only allows
      //  you to change the upper bits; the lower bits remain unchanged, so you
      //  can do a fast write of a large step size. FINE is the opposite; quick
      //  writes but smaller steps.
      
    gen.setFreqAdjustMode(MiniGen::FULL);
    }

    void loop(){
      
    int tension;
      
    tension analogRead(A0);
      
    float voltage = (tension/1024.0)*5;
      
    Serial.println(voltage); 
          
      
       
    byte c;

      
    // enable Slave Select
      
    digitalWrite(SSLOW);    // SS is pin 10

      // send test string
      
    for (const char "Fab" = *pp++)
        
    SPI.transfer (c);

      
    // disable Slave Select
      
    digitalWrite(SSHIGH);

      
    delay (100);
      } 

    J'ai donc utilisé cet exemple : https://github.com/sparkfun/SparkFun...n_Library_Test

    Ma broche A0 et le serial.begin me servent à voir le signal lorsque je n'ai pas d'oscilloscope.

    Pourriez-vous m'aider à faire marcher ce générateur svp ?

    Merci beaucoup de m'avoir lu

    -----

  2. #2
    Seb.26

    Re : Utilisation du SPI arduino pour contrôler un générateur

    Regarde le tuto chez sparkfun, il y a une librairie qu'il faut utiliser à priori ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  3. #3
    Bsartek

    Re : Utilisation du SPI arduino pour contrôler un générateur

    Merci d'avoir répondu !
    J'ai lu et suivi le tuto et j'ai utilisé la librairie associée : https://github.com/sparkfun/SparkFun...rduino_Library
    Cependant même l'exemple fourni : https://github.com/sparkfun/SparkFun...n_Library_Test ne fonctionne pas. Peut-être faut-il rajouter des lignes de codes sur la liaison SPI mais je ne m'y connais pas du tout.

  4. #4
    Bsartek

    Re : Utilisation du SPI arduino pour contrôler un générateur

    Bonjour,
    J'ai modifié un peu le code en lisant un peu des tutos sur la liaison SPI mais ça ne marche toujours pas...
    Code:
    #include <SPI.h>
    #include <SparkFun_MiniGen.h>
    
    // Create an instance of the MiniGen device; note that this has no provision for
    //  alternate CLK and MOSI pins, but you *can* pass it a different CS (or FSYNC,
    //  as it's referred to elsewhere) pin number.
    MiniGen gen;
    
    void setup()
    {
      pinMode(10, OUTPUT);
      Serial.begin(9600);
      digitalWrite(10, HIGH);
      SPI.setDataMode(SPI_MODE2);
      SPI.begin();
      SPI.setBitOrder(LSBFIRST);
    
      delay(100);
      
      // Clear the registers in the AD9837 chip, so we're starting from a known
      //  location. Note that since the AD9837 has no DOUT, we can't use the
      //  read-modify-write method of control. At power up, the output frequency
      //  will be 100Hz.
      gen.reset();
      delay(2000);
      
      // SQUARE is, as it suggests, a square wave. SQUARE is at the current output
      //  frequency.
      gen.setMode(MiniGen::SINE);
      delay(3000);
      
      // This needs a little explanation. The choices are FULL, COARSE, and FINE.
      //  a FULL write takes longer but writes the entire frequency word, so you
      //  can change from any frequency to any other frequency. COARSE only allows
      //  you to change the upper bits; the lower bits remain unchanged, so you
      //  can do a fast write of a large step size. FINE is the opposite; quick
      //  writes but smaller steps.
      gen.setFreqAdjustMode(MiniGen::FULL);
    }
    
    void loop(){
      int tension;
      tension = analogRead(A0);
      float voltage = (tension/1024.0)*5;
      Serial.println(voltage); 
          
      
      byte c;
    
      // enable Slave Select
      digitalWrite(10, LOW);    // SS is pin 10
    
      // send test string
      for (const char * p = "Fab" ; c = *p; p++)
        SPI.transfer (c);
    
      // disable Slave Select
      digitalWrite(10, HIGH);
    
      delay (100);
      }

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

    Re : Utilisation du SPI arduino pour contrôler un générateur

    Tu utilise bien la bonne pin CS ?? car ton constructeur ne la défini pas, c'est donc la valeur par défaut ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  7. #6
    Bsartek

    Re : Utilisation du SPI arduino pour contrôler un générateur

    J'utilise cette carte arduino Nom : arduino pin.PNG
Affichages : 2056
Taille : 433,9 Ko
    J'ai essayé en branchant :
    FSYNC -> 10
    SDATA -> 11
    SCLK -> 13

    puis en branchant :
    FSYNC -> 10
    SDATA -> SDA
    SCLK -> SCL

    Mais rien n'y fait je n'ai toujours pas le signal recherché.

  8. #7
    invite03481543

    Re : Utilisation du SPI arduino pour contrôler un générateur

    Bonsoir,

    mon souvenir est que l'AD9837 transmet MSB first, votre programme indique LSB first.
    Essayez ou lisez la doc pour vous en assurer.

  9. #8
    Seb.26

    Re : Utilisation du SPI arduino pour contrôler un générateur

    Citation Envoyé par Bsartek Voir le message
    J'utilise cette carte arduino Pièce jointe 385612
    J'ai essayé en ...
    ... tu prends le fichier source de la librairie, tu regardes si les ports que tu utilises sont les bons et sinon tu utilises le constructeur qui permet de définir le CS ...
    Ensuite tu regardes si la carte peut bien être utilisée avec un Arduino en 5v (c'est ton cas je crois, non ?)
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  10. #9
    Bsartek

    Re : Utilisation du SPI arduino pour contrôler un générateur

    Merci d'avoir répondu
    J'ai essayé LSB et MSB mais ça ne change rien
    J'ai essayé de voir ce qui pourrait manquer dans la librairie (https://github.com/sparkfun/MiniGen/...es/Arduino/src) mais je ne trouve toujours pas... Je n'ai pas changé le code donc si quelqu'un peut m'aider je suis toujours partant ..

Discussions similaires

  1. [Programmation] Utiliser arduino pour contrôler la SK9822 led bande
    Par alanwangwang dans le forum Électronique
    Réponses: 0
    Dernier message: 08/02/2017, 02h51
  2. Réponses: 1
    Dernier message: 31/01/2017, 22h16
  3. [Numérique] Utilisation de Arduino pour journal lumineux ?
    Par Yvescompaore dans le forum Électronique
    Réponses: 13
    Dernier message: 05/05/2016, 06h35
  4. utilisation d'un PIC pour controler un triac
    Par arisse dans le forum Électronique
    Réponses: 1
    Dernier message: 28/04/2012, 13h14
  5. Programmer un carte Arduino pour contrôler un moteur pas à pas
    Par JFSGeneva dans le forum Électronique
    Réponses: 2
    Dernier message: 22/05/2008, 06h28
Découvrez nos comparatifs produits sur l'informatique et les technologies.