Temperature Sampling

Dependencies:   mbed

Fork of Nucleo-DAC-Algorithm by Giuseppe Falagario

Committer:
pinofal
Date:
Tue Jan 23 10:19:50 2018 +0000
Revision:
0:3106d3fc6696
Child:
1:ffc7a5d0f629
Nucleo DAC PSK generation algorithm

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pinofal 0:3106d3fc6696 1 #include "mbed.h"
pinofal 0:3106d3fc6696 2
pinofal 0:3106d3fc6696 3 AnalogIn in(A0);
pinofal 0:3106d3fc6696 4 Serial pc(SERIAL_TX, SERIAL_RX);
pinofal 0:3106d3fc6696 5
pinofal 0:3106d3fc6696 6 #if !DEVICE_ANALOGOUT
pinofal 0:3106d3fc6696 7 #error You cannot use this example as the AnalogOut is not supported on this device.
pinofal 0:3106d3fc6696 8 #else
pinofal 0:3106d3fc6696 9
pinofal 0:3106d3fc6696 10 AnalogOut OutLocale(PA_4);
pinofal 0:3106d3fc6696 11 AnalogOut OutCampagna(PA_5);
pinofal 0:3106d3fc6696 12 #endif
pinofal 0:3106d3fc6696 13 // numero di campioni che compongono un periodo della sinusoide
pinofal 0:3106d3fc6696 14 #define SAMPLENUM 360 // consigliabile avere multipli di 180
pinofal 0:3106d3fc6696 15 // periodo in millisecondi della 83.3 Hz
pinofal 0:3106d3fc6696 16 #define T833 (1/83.3)
pinofal 0:3106d3fc6696 17 // periodo in millisecondi della 50 Hz
pinofal 0:3106d3fc6696 18 #define T50 (1/50.0)
pinofal 0:3106d3fc6696 19 // periodo in millisecondi del Bridge tra le diverse fasi = 9,6 ms
pinofal 0:3106d3fc6696 20 #define T96 (0.0096)
pinofal 0:3106d3fc6696 21 // numero di campioni in 1/4 di periodo
pinofal 0:3106d3fc6696 22 #define QUARTERSAMPLENUM SAMPLENUM/4
pinofal 0:3106d3fc6696 23
pinofal 0:3106d3fc6696 24 // parametri dell'onda coseno da generare
pinofal 0:3106d3fc6696 25 #define PI (3.141592653589793238462)
pinofal 0:3106d3fc6696 26 #define AMPLITUDE 32767 //(1.0) // x * 3.3V
pinofal 0:3106d3fc6696 27 #define PHASE (PI/2) // 2*pi is one period
pinofal 0:3106d3fc6696 28 //#define RANGE (1.0) //(0x7FFF)
pinofal 0:3106d3fc6696 29 #define OFFSET 32767 //(0x7FFF)
pinofal 0:3106d3fc6696 30
pinofal 0:3106d3fc6696 31 // Buffer contenente la sinusoide da porre in output.
pinofal 0:3106d3fc6696 32 unsigned short usaSine[SAMPLENUM];
pinofal 0:3106d3fc6696 33
pinofal 0:3106d3fc6696 34 //uint16_t usaBuffer[SAMPLENUM];
pinofal 0:3106d3fc6696 35
pinofal 0:3106d3fc6696 36 void CalculateSinewave(void);
pinofal 0:3106d3fc6696 37
pinofal 0:3106d3fc6696 38
pinofal 0:3106d3fc6696 39 // Output LED di diagnostica
pinofal 0:3106d3fc6696 40 DigitalOut led(LED1);
pinofal 0:3106d3fc6696 41
pinofal 0:3106d3fc6696 42 // ticker per la generazione dell'onda
pinofal 0:3106d3fc6696 43 Ticker SampleTicker;
pinofal 0:3106d3fc6696 44
pinofal 0:3106d3fc6696 45
pinofal 0:3106d3fc6696 46 // indice per i cicli
pinofal 0:3106d3fc6696 47 int nIndex;
pinofal 0:3106d3fc6696 48 // carattere in arrivo dal PC
pinofal 0:3106d3fc6696 49 volatile char cReadChar;
pinofal 0:3106d3fc6696 50 // valore letto dall'ADC
pinofal 0:3106d3fc6696 51 volatile unsigned short usReadADC;
pinofal 0:3106d3fc6696 52
pinofal 0:3106d3fc6696 53 // Tipo di PSK da generare
pinofal 0:3106d3fc6696 54 volatile int nPSK;
pinofal 0:3106d3fc6696 55 // indice, nell'array, del campione da porre in output
pinofal 0:3106d3fc6696 56 int nSampleIndex;
pinofal 0:3106d3fc6696 57 // contatore dei campioni inviati
pinofal 0:3106d3fc6696 58 int nSampleCount;
pinofal 0:3106d3fc6696 59 // Periodo di generazione campioni in output DeltaT = T/NumSample
pinofal 0:3106d3fc6696 60 double fDeltaT;
pinofal 0:3106d3fc6696 61 // amplificazione per il dato da spedire sull'ADC
pinofal 0:3106d3fc6696 62 volatile double fAmp;
pinofal 0:3106d3fc6696 63 //volatile double fAmpNew;
pinofal 0:3106d3fc6696 64 // Step attuale e nuovo Step nella generazione di una PSK
pinofal 0:3106d3fc6696 65 int nStep;
pinofal 0:3106d3fc6696 66 int nNewStep;
pinofal 0:3106d3fc6696 67
pinofal 0:3106d3fc6696 68 // ritardo tra un campione e l'altro della generazione ADC
pinofal 0:3106d3fc6696 69 //volatile int nDelay;
pinofal 0:3106d3fc6696 70 //variabile ausiliaria
pinofal 0:3106d3fc6696 71 volatile unsigned short usAux;
pinofal 0:3106d3fc6696 72 // variabili in cui memorizzare i prossimi valori da implementare
pinofal 0:3106d3fc6696 73 //volatile int nDelayNew;
pinofal 0:3106d3fc6696 74 // flag per bloccare la generazione del segnale
pinofal 0:3106d3fc6696 75 volatile bool bStop;
pinofal 0:3106d3fc6696 76 // frequenza segnale da generare
pinofal 0:3106d3fc6696 77 volatile double fFreq;
pinofal 0:3106d3fc6696 78
pinofal 0:3106d3fc6696 79 //****************************
pinofal 0:3106d3fc6696 80 // Create the sinewave buffer
pinofal 0:3106d3fc6696 81 //****************************
pinofal 0:3106d3fc6696 82 void CalculateSinewave(int nOffset, int nAmplitude, double fPhase)
pinofal 0:3106d3fc6696 83 {
pinofal 0:3106d3fc6696 84 // variabile contenente l'angolo in radianti
pinofal 0:3106d3fc6696 85 double fRads;
pinofal 0:3106d3fc6696 86 // indici per i cicli
pinofal 0:3106d3fc6696 87 int nIndex;
pinofal 0:3106d3fc6696 88 // passo in frequenza fissato dal numero di campioni in cui voglio dividere un periodo di sinusoide: DeltaF = 360°/NUMSAMPLE
pinofal 0:3106d3fc6696 89 double fDeltaF;
pinofal 0:3106d3fc6696 90 // angolo per il quale bisogna calcolare il valore di sinusoide: fAngle = nIndex*DeltaF
pinofal 0:3106d3fc6696 91 double fAngle;
pinofal 0:3106d3fc6696 92
pinofal 0:3106d3fc6696 93 fDeltaF = 360.0/SAMPLENUM;
pinofal 0:3106d3fc6696 94 for (nIndex = 0; nIndex < SAMPLENUM; nIndex++)
pinofal 0:3106d3fc6696 95 {
pinofal 0:3106d3fc6696 96 fAngle = nIndex*fDeltaF; // angolo per il quale bisogna calcolare il campione di sinusoide
pinofal 0:3106d3fc6696 97 fRads = (PI * fAngle)/180.0; // Convert degree in radian
pinofal 0:3106d3fc6696 98 //usaSine[nIndex] = AMPLITUDE * cos(fRads + PHASE) + OFFSET;
pinofal 0:3106d3fc6696 99 usaSine[nIndex] = nAmplitude * cos(fRads + fPhase) + nOffset;
pinofal 0:3106d3fc6696 100 }
pinofal 0:3106d3fc6696 101 }
pinofal 0:3106d3fc6696 102
pinofal 0:3106d3fc6696 103
pinofal 0:3106d3fc6696 104 //***************************
pinofal 0:3106d3fc6696 105 // generazione sample da DAC
pinofal 0:3106d3fc6696 106 //***************************
pinofal 0:3106d3fc6696 107 void SampleOut()
pinofal 0:3106d3fc6696 108 {
pinofal 0:3106d3fc6696 109
pinofal 0:3106d3fc6696 110 // se è stato inviato il comando Stop, non fare niente fino a nuovo comando
pinofal 0:3106d3fc6696 111 if(bStop)
pinofal 0:3106d3fc6696 112 {
pinofal 0:3106d3fc6696 113 }
pinofal 0:3106d3fc6696 114 else // se non è stato inviato il comando di bStop continua
pinofal 0:3106d3fc6696 115 {
pinofal 0:3106d3fc6696 116 // output del campione della forma d'onda
pinofal 0:3106d3fc6696 117 //usAux=(usaSine[nSampleIndex])/fAmp;
pinofal 0:3106d3fc6696 118 //usAux=usaSine[nSampleIndex];
pinofal 0:3106d3fc6696 119 OutLocale.write_u16(usaSine[nSampleIndex]);
pinofal 0:3106d3fc6696 120 OutCampagna.write_u16(usaSine[nSampleIndex]);
pinofal 0:3106d3fc6696 121
pinofal 0:3106d3fc6696 122 // incrementa l'indice del campione in output, modulo NUMSAMPLE: se NUMSAMPLE è 360, nSAmpleIndex va da 0 a 359
pinofal 0:3106d3fc6696 123 nSampleIndex++;
pinofal 0:3106d3fc6696 124 if(nSampleIndex >= SAMPLENUM)
pinofal 0:3106d3fc6696 125 {
pinofal 0:3106d3fc6696 126 nSampleIndex=0;
pinofal 0:3106d3fc6696 127 }
pinofal 0:3106d3fc6696 128 // incrementa il numero di campioni inviati, e individua la fase in cui ci si trova, relativamente alla modulazione PSK selezionata
pinofal 0:3106d3fc6696 129 nSampleCount++;
pinofal 0:3106d3fc6696 130 //pc.printf(" nSampleIndex= %3d ; nSampleCount= %5d ; nPSK = % 1d ; nNewStep = %1d \n\r",nSampleIndex, nSampleCount, nPSK, nNewStep);
pinofal 0:3106d3fc6696 131
pinofal 0:3106d3fc6696 132 switch(nPSK)
pinofal 0:3106d3fc6696 133 {
pinofal 0:3106d3fc6696 134 case 1:
pinofal 0:3106d3fc6696 135 {
pinofal 0:3106d3fc6696 136 switch(nSampleCount)
pinofal 0:3106d3fc6696 137 {
pinofal 0:3106d3fc6696 138 case 0: //if(nSampleCount == 0) // dopo il ciclo completo, si ritorna allo step 1
pinofal 0:3106d3fc6696 139 {
pinofal 0:3106d3fc6696 140 nNewStep = 1; // genera 23 periodi di sinusoide
pinofal 0:3106d3fc6696 141 //pc.printf(" nStep = %1d \n\r",nNewStep);
pinofal 0:3106d3fc6696 142 } break;
pinofal 0:3106d3fc6696 143 case (23*SAMPLENUM): //if(nSampleCount == (23*SAMPLENUM)) // dopo 23 periodi a 83.3 Hz, passa allo step 2 in cui genera il primo Bridge
pinofal 0:3106d3fc6696 144 {
pinofal 0:3106d3fc6696 145 nNewStep = 2; // genera Bridge
pinofal 0:3106d3fc6696 146 //pc.printf(" nStep = %1d \n\r",nNewStep);
pinofal 0:3106d3fc6696 147 } break;
pinofal 0:3106d3fc6696 148 case (24.25*SAMPLENUM): //if(nSampleCount == ((23*SAMPLENUM)+(1.25*SAMPLENUM))) // dopo 23 periodi a 83.3 Hz, e un Bridge genera 15 sinusoidi a 83.3 Hz
pinofal 0:3106d3fc6696 149 {
pinofal 0:3106d3fc6696 150 nNewStep = 3; // genera 15 periodi di sinusoide
pinofal 0:3106d3fc6696 151 //pc.printf(" nStep = %1d \n\r",nNewStep);
pinofal 0:3106d3fc6696 152 }
pinofal 0:3106d3fc6696 153 case (39.25*SAMPLENUM): //if(nSampleCount == ((23*SAMPLENUM)+(1.25*SAMPLENUM)+(15*SAMPLENUM))) // dopo 23 periodi a 83.3 Hz, Bridge e 15 periodi a 83.3 Hz, genera un bridge
pinofal 0:3106d3fc6696 154 {
pinofal 0:3106d3fc6696 155 nNewStep = 4; // Genera Bridge
pinofal 0:3106d3fc6696 156 //pc.printf(" nStep = %1d \n\r",nNewStep);
pinofal 0:3106d3fc6696 157 } break;
pinofal 0:3106d3fc6696 158 case (40.5*SAMPLENUM): //if(nSampleCount == ((23*SAMPLENUM)+(1.25*SAMPLENUM)+(15*SAMPLENUM)+(1.25*SAMPLENUM))) // dopo 23 periodi a 83.3 Hz, Bridge, 15 periodi a 83.3 Hz, bridge, genera 7 periodi a 83.3Hz
pinofal 0:3106d3fc6696 159 {
pinofal 0:3106d3fc6696 160 nNewStep = 5; // genera 7 periodi di sinusoide
pinofal 0:3106d3fc6696 161 //pc.printf(" nStep = %1d \n\r",nNewStep);
pinofal 0:3106d3fc6696 162 } break;
pinofal 0:3106d3fc6696 163 case (47.5*SAMPLENUM): //if(nSampleCount == ((23*SAMPLENUM)+(1.25*SAMPLENUM)+(15*SAMPLENUM)+(1.25*SAMPLENUM)+(7*SAMPLENUM))) // dopo 23 periodi a 83.3 Hz, Bridge, 15 periodi a 83.3 Hz, bridge,7 periodi a 83.3Hz, genera bridge
pinofal 0:3106d3fc6696 164 {
pinofal 0:3106d3fc6696 165 nNewStep = 6; // Genera Bridge
pinofal 0:3106d3fc6696 166 //pc.printf(" nStep = %1d \n\r",nNewStep);
pinofal 0:3106d3fc6696 167 } break;
pinofal 0:3106d3fc6696 168 case (48.75*SAMPLENUM): //if(nSampleCount == ((23*SAMPLENUM)+(1.25*SAMPLENUM)+(15*SAMPLENUM)+(1.25*SAMPLENUM)+(7*SAMPLENUM)+(1.25*SAMPLENUM))) // dopo 23 periodi a 83.3 Hz, Bridge, 15 periodi a 83.3 Hz, bridge,7 periodi a 83.3Hz, bridge, genera 7 periodi a 83.3Hz
pinofal 0:3106d3fc6696 169 {
pinofal 0:3106d3fc6696 170 nNewStep = 7; // genera 7 periodi di sinusoide
pinofal 0:3106d3fc6696 171 //pc.printf(" nStep = %1d \n\r",nNewStep);
pinofal 0:3106d3fc6696 172 } break;
pinofal 0:3106d3fc6696 173 case (55.75*SAMPLENUM): //if(nSampleCount == ((23*SAMPLENUM)+(1.25*SAMPLENUM)+(15*SAMPLENUM)+(1.25*SAMPLENUM)+(7*SAMPLENUM)+(1.25*SAMPLENUM)+(7*SAMPLENUM))) // dopo 23 periodi a 83.3 Hz, Bridge, 15 periodi a 83.3 Hz, bridge,7 periodi a 83.3Hz, bridge, 7 periodi a 83.3Hz, genera bridge
pinofal 0:3106d3fc6696 174 {
pinofal 0:3106d3fc6696 175 nNewStep =8; // genera bridge
pinofal 0:3106d3fc6696 176 //pc.printf(" nStep = %1d \n\r",nNewStep);
pinofal 0:3106d3fc6696 177 } break;
pinofal 0:3106d3fc6696 178 case (57*SAMPLENUM): //if(nSampleCount == ((23*SAMPLENUM)+(1.25*SAMPLENUM)+(15*SAMPLENUM)+(1.25*SAMPLENUM)+(7*SAMPLENUM)+(1.25*SAMPLENUM)+(7*SAMPLENUM)+(1.25*SAMPLENUM))) // dopo 23 periodi a 83.3 Hz, Bridge, 15 periodi a 83.3 Hz, bridge,7 periodi a 83.3Hz, bridge, 7 periodi a 83.3Hz, bridge, ritorna a generare 23 periodi a 83.3Hz
pinofal 0:3106d3fc6696 179 {
pinofal 0:3106d3fc6696 180 nNewStep =1;
pinofal 0:3106d3fc6696 181 nSampleCount =0;
pinofal 0:3106d3fc6696 182 //pc.printf(" nStep = %1d \n\r",nNewStep);
pinofal 0:3106d3fc6696 183 } break;
pinofal 0:3106d3fc6696 184 default: {} break;
pinofal 0:3106d3fc6696 185 }
pinofal 0:3106d3fc6696 186 } break;
pinofal 0:3106d3fc6696 187 default: break;
pinofal 0:3106d3fc6696 188 }
pinofal 0:3106d3fc6696 189
pinofal 0:3106d3fc6696 190 //led = !led;
pinofal 0:3106d3fc6696 191 }
pinofal 0:3106d3fc6696 192 }
pinofal 0:3106d3fc6696 193
pinofal 0:3106d3fc6696 194
pinofal 0:3106d3fc6696 195
pinofal 0:3106d3fc6696 196
pinofal 0:3106d3fc6696 197 //*******************
pinofal 0:3106d3fc6696 198 // Loop Principale
pinofal 0:3106d3fc6696 199 //*******************
pinofal 0:3106d3fc6696 200 int main()
pinofal 0:3106d3fc6696 201 {
pinofal 0:3106d3fc6696 202 // configura velocità della comunicazione seriale su USB-VirtualCom e invia messaggio di benvenuto
pinofal 0:3106d3fc6696 203 pc.baud(921600); //921600 bps
pinofal 0:3106d3fc6696 204 pc.printf("*** SineWave Generation ***\n\r");
pinofal 0:3106d3fc6696 205
pinofal 0:3106d3fc6696 206 //inizializza variabili
pinofal 0:3106d3fc6696 207 fAmp = 1.0;
pinofal 0:3106d3fc6696 208 cReadChar = 0;
pinofal 0:3106d3fc6696 209 nSampleIndex=0;
pinofal 0:3106d3fc6696 210 nSampleCount=0;
pinofal 0:3106d3fc6696 211 nPSK =0;
pinofal 0:3106d3fc6696 212 bStop= false;
pinofal 0:3106d3fc6696 213 fFreq = 83.3;
pinofal 0:3106d3fc6696 214
pinofal 0:3106d3fc6696 215 // genera sinusoide
pinofal 0:3106d3fc6696 216 CalculateSinewave(32767, 32767, (PI/2.0));
pinofal 0:3106d3fc6696 217
pinofal 0:3106d3fc6696 218 // avvia il ciclo di generazione sinusoide
pinofal 0:3106d3fc6696 219 while(true)
pinofal 0:3106d3fc6696 220 {
pinofal 0:3106d3fc6696 221
pinofal 0:3106d3fc6696 222 // verifica se è arrivato un carattere dalla seriale del PC
pinofal 0:3106d3fc6696 223 if(pc.readable())
pinofal 0:3106d3fc6696 224 {
pinofal 0:3106d3fc6696 225 cReadChar = pc.getc(); // Read hyperterminal
pinofal 0:3106d3fc6696 226 bStop = false; // è stato inviato un comando, quindi resetta il flag di Stop: bStop = False
pinofal 0:3106d3fc6696 227
pinofal 0:3106d3fc6696 228 if(cReadChar == '1') // genera sinusoide a 83.3Hz con ampiezza ridotta a metà della nominale
pinofal 0:3106d3fc6696 229 {
pinofal 0:3106d3fc6696 230 pc.printf("--- Selezionato PSK-I ---\n\r");
pinofal 0:3106d3fc6696 231 bStop = false; // è stato inviato un comando, quindi bStop = False
pinofal 0:3106d3fc6696 232 nPSK = 1;
pinofal 0:3106d3fc6696 233 fAmp = 1.0;
pinofal 0:3106d3fc6696 234 nSampleIndex=0;
pinofal 0:3106d3fc6696 235 nSampleCount=0;
pinofal 0:3106d3fc6696 236 nStep = 0; // inizializza lo step che sarà aggiornato nella routine di generazione campione
pinofal 0:3106d3fc6696 237 //fAmpNew = 1.0;
pinofal 0:3106d3fc6696 238 //fDeltaT= T833/SAMPLENUM; // frequenza di generazione iniziale
pinofal 0:3106d3fc6696 239 }
pinofal 0:3106d3fc6696 240 if (cReadChar == 'a') // genera sinusoide a 83.3Hz con ampiezza nominale
pinofal 0:3106d3fc6696 241 {
pinofal 0:3106d3fc6696 242 fFreq = 83.3;
pinofal 0:3106d3fc6696 243 pc.printf("--- Generazione %.1f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 0:3106d3fc6696 244 bStop = false; // è stato inviato un comando, quindi bStop = False
pinofal 0:3106d3fc6696 245 nPSK = 0; // nessuna PSK da generare
pinofal 0:3106d3fc6696 246 fAmp = 1.0;
pinofal 0:3106d3fc6696 247 fDeltaT = 1.0/(fFreq*SAMPLENUM);
pinofal 0:3106d3fc6696 248 SampleTicker.attach(&SampleOut,fDeltaT);
pinofal 0:3106d3fc6696 249 }
pinofal 0:3106d3fc6696 250 if (cReadChar == 'b') // genera sinusoide a 50 Hz con ampiezza ridotta a metà della nominale
pinofal 0:3106d3fc6696 251 {
pinofal 0:3106d3fc6696 252 fFreq = 50.0;
pinofal 0:3106d3fc6696 253 pc.printf("--- Generazione %.1f Hz ampiezza 1/2 della nominale ---\n\r", fFreq);
pinofal 0:3106d3fc6696 254 nPSK = 0; // nessuna PSK da generare
pinofal 0:3106d3fc6696 255 fAmp = 1.0;
pinofal 0:3106d3fc6696 256 // genera sinusoide
pinofal 0:3106d3fc6696 257 CalculateSinewave(32767, (32767/2), (PI/2.0));
pinofal 0:3106d3fc6696 258 // attach ticker
pinofal 0:3106d3fc6696 259 fDeltaT = 1.0/(fFreq*SAMPLENUM);
pinofal 0:3106d3fc6696 260 SampleTicker.attach(&SampleOut,fDeltaT);
pinofal 0:3106d3fc6696 261 }
pinofal 0:3106d3fc6696 262 if (cReadChar == 'c') // genera sinusoide a 45 Hz con ampiezza ridotta a 1/4 del valore nominale
pinofal 0:3106d3fc6696 263 {
pinofal 0:3106d3fc6696 264 fFreq = 45.0;
pinofal 0:3106d3fc6696 265 pc.printf("--- Generazione %.1f Hz ampiezza 1/4 della nominale ---\n\r", fFreq);
pinofal 0:3106d3fc6696 266 nPSK = 0; // nessuna PSK da generare
pinofal 0:3106d3fc6696 267 fAmp = 1.0;
pinofal 0:3106d3fc6696 268 // genera sinusoide
pinofal 0:3106d3fc6696 269 CalculateSinewave(32767, (32767/4), (PI/2.0));
pinofal 0:3106d3fc6696 270 // attach ticker
pinofal 0:3106d3fc6696 271 fDeltaT = 1.0/(fFreq*SAMPLENUM);
pinofal 0:3106d3fc6696 272 SampleTicker.attach(&SampleOut,fDeltaT);
pinofal 0:3106d3fc6696 273 }
pinofal 0:3106d3fc6696 274
pinofal 0:3106d3fc6696 275 if (cReadChar == 'z') // Stop
pinofal 0:3106d3fc6696 276 {
pinofal 0:3106d3fc6696 277 pc.printf("--- Stop Generazione ---\n\r");
pinofal 0:3106d3fc6696 278 bStop=true;
pinofal 0:3106d3fc6696 279 }
pinofal 0:3106d3fc6696 280 led.write(1);
pinofal 0:3106d3fc6696 281 } // if (pc.readable())
pinofal 0:3106d3fc6696 282
pinofal 0:3106d3fc6696 283
pinofal 0:3106d3fc6696 284 // In base alla PSK selezionata, ci saranno diversi step da seguire
pinofal 0:3106d3fc6696 285 switch (nPSK)
pinofal 0:3106d3fc6696 286 {
pinofal 0:3106d3fc6696 287 case 1: // PSK-I
pinofal 0:3106d3fc6696 288 {
pinofal 0:3106d3fc6696 289 // Avvia il primo step della PSK selezionata. Nello Step 0 non si ritornerà più
pinofal 0:3106d3fc6696 290 if(nStep == 0)
pinofal 0:3106d3fc6696 291 {
pinofal 0:3106d3fc6696 292 pc.printf("*** Avvio generazione ***\n\r");
pinofal 0:3106d3fc6696 293 nNewStep = 1;
pinofal 0:3106d3fc6696 294 }
pinofal 0:3106d3fc6696 295 // se è stato raggiunto il numero di campioni per la variazione di Step, aggiorna il numero di Step e modifica i parametri di generazione
pinofal 0:3106d3fc6696 296 if(nStep != nNewStep)
pinofal 0:3106d3fc6696 297 {
pinofal 0:3106d3fc6696 298 // aggiorna il numero di Step e modifica i parametri di generazione
pinofal 0:3106d3fc6696 299 nStep = nNewStep;
pinofal 0:3106d3fc6696 300 switch (nStep)
pinofal 0:3106d3fc6696 301 {
pinofal 0:3106d3fc6696 302 case 1:
pinofal 0:3106d3fc6696 303 {
pinofal 0:3106d3fc6696 304 // genera 23 periodi a 83.3 Hz
pinofal 0:3106d3fc6696 305 //+++pc.printf("+++ 23 sinusoidi a 83,3Hz +++\n\r");
pinofal 0:3106d3fc6696 306 fDeltaT = double((double)T833/(double)SAMPLENUM);
pinofal 0:3106d3fc6696 307 SampleTicker.attach(&SampleOut,fDeltaT);
pinofal 0:3106d3fc6696 308 } break;
pinofal 0:3106d3fc6696 309 case 2:
pinofal 0:3106d3fc6696 310 {
pinofal 0:3106d3fc6696 311 // dopo 23 periodi a 83.3 Hz, genera il primo Bridge
pinofal 0:3106d3fc6696 312 //+++pc.printf("+++ Primo Bridge +++\n\r");
pinofal 0:3106d3fc6696 313 fDeltaT = (double)((double)T96/(double)(SAMPLENUM));
pinofal 0:3106d3fc6696 314 SampleTicker.attach(&SampleOut,fDeltaT);
pinofal 0:3106d3fc6696 315 } break;
pinofal 0:3106d3fc6696 316 case 3:
pinofal 0:3106d3fc6696 317 {
pinofal 0:3106d3fc6696 318 // dopo 23 periodi a 83.3 Hz, e un Bridge genera 15 sinusoidi a 83.3 Hz
pinofal 0:3106d3fc6696 319 //+++pc.printf("+++ 15 sinusoidi a 83,3Hz +++\n\r");
pinofal 0:3106d3fc6696 320 fDeltaT = double((double)T833/(double)SAMPLENUM);
pinofal 0:3106d3fc6696 321 SampleTicker.attach(&SampleOut, fDeltaT);
pinofal 0:3106d3fc6696 322 } break;
pinofal 0:3106d3fc6696 323 case 4:
pinofal 0:3106d3fc6696 324 {
pinofal 0:3106d3fc6696 325 // dopo 23 periodi a 83.3 Hz, Bridge e 15 periodi a 83.3 Hz, genera un bridge
pinofal 0:3106d3fc6696 326 //+++pc.printf("+++ Secondo Bridge +++\n\r");
pinofal 0:3106d3fc6696 327 fDeltaT = (double)((double)T96/(double)(SAMPLENUM));
pinofal 0:3106d3fc6696 328 SampleTicker.attach(&SampleOut, fDeltaT);
pinofal 0:3106d3fc6696 329 } break;
pinofal 0:3106d3fc6696 330 case 5:
pinofal 0:3106d3fc6696 331 {
pinofal 0:3106d3fc6696 332 // dopo 23 periodi a 83.3 Hz, Bridge, 15 periodi a 83.3 Hz, bridge, genera 7 periodi a 83.3Hz
pinofal 0:3106d3fc6696 333 //+++pc.printf("+++ 7 Sinusoidi a 83.3Hz +++\n\r");
pinofal 0:3106d3fc6696 334 fDeltaT = double((double)T833/(double)SAMPLENUM);
pinofal 0:3106d3fc6696 335 SampleTicker.attach(&SampleOut, fDeltaT);
pinofal 0:3106d3fc6696 336 } break;
pinofal 0:3106d3fc6696 337 case 6:
pinofal 0:3106d3fc6696 338 {
pinofal 0:3106d3fc6696 339 // dopo 23 periodi a 83.3 Hz, Bridge, 15 periodi a 83.3 Hz, bridge,7 periodi a 83.3Hz, genera bridge
pinofal 0:3106d3fc6696 340 //+++pc.printf("+++ Terzo Bridge +++\n\r");
pinofal 0:3106d3fc6696 341 fDeltaT = (double)((double)T96/(double)(SAMPLENUM));
pinofal 0:3106d3fc6696 342 SampleTicker.attach(&SampleOut, fDeltaT);
pinofal 0:3106d3fc6696 343 } break;
pinofal 0:3106d3fc6696 344 case 7:
pinofal 0:3106d3fc6696 345 {
pinofal 0:3106d3fc6696 346 // dopo 23 periodi a 83.3 Hz, Bridge, 15 periodi a 83.3 Hz, bridge,7 periodi a 83.3Hz, bridge, genera 7 periodi a 83.3Hz
pinofal 0:3106d3fc6696 347 //+++pc.printf("+++ 7 sinusoidi a 83.3Hz +++\n\r");
pinofal 0:3106d3fc6696 348 fDeltaT = double((double)T833/(double)SAMPLENUM);
pinofal 0:3106d3fc6696 349 SampleTicker.attach(&SampleOut, fDeltaT);
pinofal 0:3106d3fc6696 350 } break;
pinofal 0:3106d3fc6696 351 case 8:
pinofal 0:3106d3fc6696 352 {
pinofal 0:3106d3fc6696 353 // dopo 23 periodi a 83.3 Hz, Bridge, 15 periodi a 83.3 Hz, bridge,7 periodi a 83.3Hz, bridge, 7 periodi a 83.3Hz, genera bridge
pinofal 0:3106d3fc6696 354 //+++pc.printf("+++ Quarto Bridge +++\n\r");
pinofal 0:3106d3fc6696 355 fDeltaT = (double)((double)T96/(double)(SAMPLENUM));
pinofal 0:3106d3fc6696 356 SampleTicker.attach(&SampleOut, fDeltaT);
pinofal 0:3106d3fc6696 357 } break;
pinofal 0:3106d3fc6696 358 default: break;
pinofal 0:3106d3fc6696 359 } //switch (nStep)
pinofal 0:3106d3fc6696 360 } // if(nStep != nNewStep)
pinofal 0:3106d3fc6696 361 } break; //case 1:
pinofal 0:3106d3fc6696 362 default: {} break;
pinofal 0:3106d3fc6696 363 } //switch (nPSK)
pinofal 0:3106d3fc6696 364 } // while(true)
pinofal 0:3106d3fc6696 365 }
pinofal 0:3106d3fc6696 366
pinofal 0:3106d3fc6696 367
pinofal 0:3106d3fc6696 368
pinofal 0:3106d3fc6696 369
pinofal 0:3106d3fc6696 370
pinofal 0:3106d3fc6696 371
pinofal 0:3106d3fc6696 372
pinofal 0:3106d3fc6696 373
pinofal 0:3106d3fc6696 374
pinofal 0:3106d3fc6696 375
pinofal 0:3106d3fc6696 376
pinofal 0:3106d3fc6696 377
pinofal 0:3106d3fc6696 378
pinofal 0:3106d3fc6696 379