Quantcast
Channel: Intel Communities: Message List
Viewing all articles
Browse latest Browse all 18336

variable frequency and duty cycle

$
0
0

Hello to everybody

I need to get the possibility to modify frequency and duty cycle from 1Hz to 1MHz using the console of the IDE on my Mac.

Using AT Mega ... i succeed thanks to a sketch that a guy of yours made some year ago, but obviously it doesn't work on Intel Galileo.

Someone of you can please help me?

thank you

 

following the prig i used through AT Mega (in italian .... )

 

//----------------------------------------------------------------------------------

// di Alessio F. Alessiof76@gmail.it

// licenza creative commons

//----------------- PROGRAMMA PWM CON TimerOne-------------------------------------

//-parte con softstart e i valori di frequenza e dutycicle si inviano dal PC------

//---------------------------------------------------------------------------------

// genera segnali da meno 0Hz a 1 MHz con duty clicle impostabile

 

 

#include "TimerOne.h"  //carico la libreria Timer1

 

 

String inputString = "";         // variabile stringa per ricevere dati dal pc

boolean stringComplete = false;  // variabile per capire se la stringa è completa

long periodo = 100 ;

long frequenza=10000;            //frequenza di funzionamento

int dt=512;                      // variabile del duty cicle da 0 a 1024

 

 

char Data[8];                    // stringa per leggere dal PC

int i;

unsigned long Tempo;

 

 

void setup()

{

  pinMode(13, OUTPUT);          // abilito il pin13 con led interno per segnalare la fine del soft start

 

 

  periodo=1000000/frequenza ;

  Timer1.initialize(periodo);         // initializzo timer1, per un perido di 100microsecondi = 10KHz

  Timer1.pwm(9, dt);             // attivo il pwm on pin 9, 50% duty cycle per un istante

//  ------------------------------------------SOFT START------------------------------------------

  for(int i=1; i<512;i++) {

         Timer1.setPwmDuty(9, i);

         delay(50);          //-----------------------se soft start troppo corto aumenta questo valore----------------

  }

  digitalWrite(13,HIGH) ; // accendo il led per visualizzare la fine del soft start

// ------------------------------------------FINE SOFTSTART----------------------------------------

  Serial.begin(9600);

  Serial.print("IL SOFT START E' TERMINATO ");

        Serial.println(" ");

        Serial.println(" PREMI 'F' PER IMPOSTARE FREQUENZA IN Hz ");

        Serial.println(" PREMI 'D' PER IMPOSTARE DUDY CICLE DA 1 A 1023 ");

        Serial.println(" PREMI 'a' PER AUMENTARE LA FREQUENZA DI UNO STEP");

        Serial.println(" PREMI 'A' PER AUMENTARE LA FREQUENZA DI 10 STEP");

        Serial.println(" PREMI 's' PER DIMINUIRE LA FREQUENZA DI UNO STEP");

        Serial.println(" PREMI 'S' PER DIMINUIRE LA FREQUENZA DI 10 STEP");

        Serial.println(" PREMI 'p' PER AUMENTARE IL DUTY CICLE DI 1%");

        Serial.println(" PREMI 'P' PER AUMENTARE IL DUTY CICLE DI 10%");

        Serial.println(" PREMI 'm' PER DIMINUIRE IL DUTY CICLE DI 1%");

        Serial.println(" PREMI 'M' PER DIMINUIRE IL DUTY CICLE DI 10%");

        Serial.println(" ");

}

 

 

void loop() {

 

  if (Serial.available() > 0) {

    int inByte = Serial.read();

  

    switch (inByte) {

    case 'F':         // ---------------------------------------- premere f per cambiare frequenza-----------------------------------------

        Serial.print("la frequenza attuale e': ");

        Serial.print(frequenza);

        Serial.print(" Hz ");

        Serial.print(" duty cicle: ");

        Serial.println(dt);

        Serial.println(" ");

        Serial.println("inserisci la nuova frequenza e premi Invio");

        do {

           if (Serial.available()) {

        Data[i] = Serial.read();

        i++;

        }

           if(i<1)Tempo = millis();

           } while (i<7&&(millis()-Tempo) < 500);

 

 

       Data[i] = 0;

       frequenza = atof(Data);

       i=0;

     

       if(frequenza<0) frequenza=1;

       if(frequenza>999999) frequenza=999999;

     

       periodo=1000000/frequenza;

       frequenza=1000000/periodo;

       Timer1.setPeriod(periodo) ;

       Timer1.pwm(9, dt);

       Serial.println(" ");

       Serial.print("la frequenza generata e':");

       Serial.print(1000000/periodo);

       Serial.print(" Hz ");

       Serial.print(" duty cicle ");

       Serial.println(dt);

       Serial.println(" ");

     

       break;

    case 'D':  //------------------------------------------------------premi d per cambiare duti cicle--------------------------------------

        Serial.print("la frequenza attuale e': ");

        Serial.print(frequenza);

        Serial.print(" Hz ");

        Serial.print(" duty cicle: ");

        Serial.println(dt);

        Serial.println(" ");

        Serial.println("inserisci il nuovo duty cicle e premi Invio");

        do {

           if (Serial.available()) {

        Data[i] = Serial.read();

        i++;

        }

           if(i<1)Tempo = millis();

           } while (i<7&&(millis()-Tempo) < 500);

 

 

       Data[i] = 0;

       dt = atof(Data);

       i=0;

     

       if(dt<1) dt=1;

       if(dt>1024) dt=1023;

     

       Timer1.setPeriod(periodo) ;

       Timer1.pwm(9, dt);

       Serial.println(" ");

       Serial.print("la frequenza generata e':");

       Serial.print(1000000/periodo);

       Serial.print(" Hz ");

       Serial.print(" duty cicle ");

       Serial.println(dt);

       Serial.println(" ");

      break;

    case 'a':  //----------------------------------------------a AUMENTA LA FREQUENZA DI UNO STEP----------------------------------------

      

       periodo=periodo-1;

       if(periodo<0) periodo=1;

       frequenza=1000000/periodo;

       Timer1.setPeriod(periodo) ;

       Timer1.pwm(9, dt);

       Serial.println(" ");

       Serial.print("la frequenza generata e':");

       Serial.print(1000000/periodo);

       Serial.print(" Hz ");

       Serial.print(" duty cicle ");

       Serial.println(dt);

       Serial.println(" ");

     

       break;

    case 'A':  //----------------------------------------------a AUMENTA LA FREQUENZA DI 10 STEP----------------------------------------

      

       periodo=periodo-10;

       if(periodo<0) periodo=1;

       frequenza=1000000/periodo;

       Timer1.setPeriod(periodo) ;

       Timer1.pwm(9, dt);

       Serial.println(" ");

       Serial.print("la frequenza generata e':");

       Serial.print(1000000/periodo);

       Serial.print(" Hz ");

       Serial.print(" duty cicle ");

       Serial.println(dt);

       Serial.println(" ");

     

       break;

 

      case 's':  //----------------------------------------------s DIMINUISCE LA FREQUENZA DI UNO STEP----------------------------------------

      

       periodo=periodo+1;

       if(periodo<0) periodo=1;

       frequenza=1000000/periodo;

       Timer1.setPeriod(periodo) ;

       Timer1.pwm(9, dt);

       Serial.println(" ");

       Serial.print("la frequenza generata e':");

       Serial.print(1000000/periodo);

       Serial.print(" Hz ");

       Serial.print(" duty cicle ");

       Serial.println(dt);

       Serial.println(" ");

     

       break;

    case 'S':  //---------------------------------------------- S AUMENTA LA FREQUENZA DI 10 STEP----------------------------------------

      

       periodo=periodo+10;

       if(periodo<0) periodo=1;

       frequenza=1000000/periodo;

       Timer1.setPeriod(periodo) ;

       Timer1.pwm(9, dt);

       Serial.println(" ");

       Serial.print("la frequenza generata e':");

       Serial.print(1000000/periodo);

       Serial.print(" Hz ");

       Serial.print(" duty cicle ");

       Serial.println(dt);

       Serial.println(" ");

     

       break;

 

 

    case 'p':  //----------------------------------------------p AUMENTA IL DUTY CICLE DI 1%----------------------------------------

      

       dt=dt+10;

       if(dt>1023) dt=1023;

       Timer1.setPeriod(periodo) ;

       Timer1.pwm(9, dt);

       Serial.println(" ");

       Serial.print("la frequenza generata e':");

       Serial.print(1000000/periodo);

       Serial.print(" Hz ");

       Serial.print(" duty cicle ");

       Serial.println(dt);

       Serial.println(" ");

     

       break;

    case 'P':  //----------------------------------------------P AUMENTA IL DUTY CILE DI 10%----------------------------------------

      

       dt=dt+100;

       if(dt>1023) dt=1023;

       Timer1.setPeriod(periodo) ;

       Timer1.pwm(9, dt);

       Serial.println(" ");

       Serial.print("la frequenza generata e':");

       Serial.print(1000000/periodo);

       Serial.print(" Hz ");

       Serial.print(" duty cicle ");

       Serial.println(dt);

       Serial.println(" ");

     

       break;

 

case 'm':  //----------------------------------------------m DIMINUISCE IL DUTY CICLE DI 1% ----------------------------------------

      

       dt=dt-10;

       if(dt<1) dt=1;

       Timer1.setPeriod(periodo) ;

       Timer1.pwm(9, dt);

       Serial.println(" ");

       Serial.print("la frequenza generata e':");

       Serial.print(1000000/periodo);

       Serial.print(" Hz ");

       Serial.print(" duty cicle ");

       Serial.println(dt);

       Serial.println(" ");

     

       break;

    case 'M':  //----------------------------------------------M DIMINUISCE IL DUTY CILE DI 10%----------------------------------------

      

       dt=dt-100;

       if(dt<1) dt=1;

       Timer1.setPeriod(periodo) ;

       Timer1.pwm(9, dt);

       Serial.println(" ");

       Serial.print("la frequenza generata e':");

       Serial.print(1000000/periodo);

       Serial.print(" Hz ");

       Serial.print(" duty cicle ");

       Serial.println(dt);

       Serial.println(" ");

     

       break;

 

 

    case 'z':  

      digitalWrite(5, HIGH);

      break;

    case 'e':  

      digitalWrite(6, HIGH);

      break;

    default:

      // turn all the LEDs off:

      for (int thisPin = 6; thisPin < 7; thisPin++) {

      //  digitalWrite(thisPin, LOW);

        Serial.println(" ");

        Serial.println(" PREMI 'F' PER IMPOSTARE FREQUENZA IN Hz ");

        Serial.println(" PREMI 'D' PER IMPOSTARE DUDY CICLE DA 1 A 1023 ");

        Serial.println(" PREMI 'a' PER AUMENTARE LA FREQUENZA DI UNO STEP");

        Serial.println(" PREMI 'A' PER AUMENTARE LA FREQUENZA DI 10 STEP");  // A COME "ALSA" S COME "SBASSA"

        Serial.println(" PREMI 's' PER DIMINUIRE LA FREQUENZA DI UNO STEP");

        Serial.println(" PREMI 'S' PER DIMINUIRE LA FREQUENZA DI 10 STEP");

        Serial.println(" PREMI 'p' PER AUMENTARE IL DUTY CICLE DI 1%"); //P COME PIU' FORTE

        Serial.println(" PREMI 'P' PER AUMENTARE IL DUTY CICLE DI 10%");

        Serial.println(" PREMI 'm' PER DIMINUIRE IL DUTY CICLE DI 1%"); //M COME MENO FORTE

        Serial.println(" PREMI 'M' PER DIMINUIRE IL DUTY CICLE DI 10%");

        Serial.println(" ");

 

 

      }

    }

  }

}


Viewing all articles
Browse latest Browse all 18336

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>