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(" ");
}
}
}
}