Temperature Sampling
Dependencies: mbed
Fork of Nucleo-DAC-Algorithm by
main.cpp@0:3106d3fc6696, 2018-01-23 (annotated)
- 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?
User | Revision | Line number | New 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 |