giovedì 8 agosto 2019

Touch GPIO su ESP32

Stavo pensando di crearmi uno strumento musicale con una Arduino ma avevo bisogno di un interruttore capacitivo ..stavo per comprarmi una decina di questi componenti (un paio di euro di costo ciascuno)



quando ho scoperto che la ESP-WROOM-32 ha ben 10 pin GPIO che possono essere utilizzati come interruttori capacitativi



il codice per abilitare un pin GPIO come capacitivo e' il seguente
-----------------------------------------------------------
void setup() {
 Serial.begin(115200);

}

void loop() {
  Serial.println(touchRead(4));
  delay(100);

}
-----------------------------------------------------------

Abilitando il plotter seriale della Arduino IDE si vede che il valore on/off non e' assoluto...e' quindi necessario tarare una soglia

Il valore alto e' quando il pin non e' toccato, il valore basso e' quando il pin e' toccato dalla mano


Kiss FFT



------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include <kiss_fft.h>
#include <tools/kiss_fftr.h>


#define NUM_FFT 256

int main()
{

float samples[NUM_FFT];


// si crea un segnale fittizio
for (int i = 0; i < NUM_FFT; i++) {
    samples[i] = sin(i*0.1);
    // con questo incremento si che i varia da 0 a 25.6 rad
    // ovvero circa 4 volte 2pigreco (ovvero 4 circonferenze)


}

    int isinverse = 1;
    kiss_fft_scalar zero;
    memset(&zero,0,sizeof(zero));
    kiss_fft_cpx fft_in[NUM_FFT];
    kiss_fft_cpx fft_out[NUM_FFT];
    kiss_fft_cpx fft_reconstructed[NUM_FFT];
    kiss_fftr_cfg fft = kiss_fftr_alloc(NUM_FFT ,0 ,0,0);
    kiss_fftr_cfg ifft = kiss_fftr_alloc(NUM_FFT,isinverse,0,0);

// azzera le matrici
for (int i = 0; i < NUM_FFT; i++) {
    fft_in[i].r = zero;
    fft_in[i].i = zero;
    fft_out[i].r = zero;
    fft_out[i].i = zero;
    fft_reconstructed[i].r = zero;
    fft_reconstructed[i].i = zero;
}

//inserisce i campioni nella parte reale della matrice di input
for (int i = 0; i < NUM_FFT; i++) {
     fft_in[i].r = samples[i];
     fft_in[i].i = zero;
     fft_out[i].r = zero;
     fft_out[i].i = zero;
 }

 kiss_fftr(fft, (kiss_fft_scalar*) fft_in, fft_out);
 kiss_fftri(ifft, fft_out, (kiss_fft_scalar*)fft_reconstructed);

// calcolo della potenza
for (int i = 0; i < NUM_FFT/2; i++) {
    samples[i] = sqrt((fft_out[i].i*fft_out[i].i)+(fft_out[i].i*fft_out[i].i))/(NUM_FFT*2);
    printf("%.6f\n\r", samples[i]);

}

    printf("Terminato!\n\r");
    return 0;
}
------------------------------------------------------------------------------------------------


Dato input

Potenza



Segnale ricostruito

martedì 23 luglio 2019

Astronomia luglio 2019



Luna vista con un cannocchiale da bird watching dall'Oasi WWF di Burano (foto da cellulare accoppiato all'oculare)


Congiunzione Luna-Giove


Eclisse lunare (foto da cellulare) del 16 luglio. Loc. Albinia


Video del passaggio ISS del 16 luglio ore 23:09. Loc. Albinia

venerdì 7 giugno 2019

Traiettorie Mandelbrot con GeoGebra

Ho trovato su GeoGebra un visualizzatore delle orbite di Mandelbrot. Non sapevo che le orbite di fuga (o stabilita') dei punti potessero essere cosi' eleganti e simmetriche






Flip Flop per orologi al quarzo

Ho trovato oggi una risposta di quando ero bambino...come funzionano gli orologi al quarzo.

In estrema sintesi viene creato un generatore di onda quadra ed il segnale viene passato ad una cascata di circuiti Flip Flop JK. Per ogni passaggio la frequenza del segnale viene divisa per due



Se si sceglie con astuzia la frequenza del generatore di onda quadra (l'oscillatore al quarzo) di una potenza di due sara' semplice avere dopo alcuni passaggi una frequenza di esattamente 1 Hz. Nello specifico negli orologi al quarzo la frequenza del quarzo e' impostata a 32768 Hz che guarda equivale a 2 elevata alla 15. Se si usano quindi 16 flip flop in sequenza si avra' una frequenza in uscita di 1 Hz

Nel circuito dello schema sui pin J e K si imposta una tensione continua di 5 V. Il pin Q segnato deve essere collegato al segnale del flip flop successivo

Perche' tutto funzione il tempo di delay del flip flop deve essere adeguato alla frequenza che si sta utilizzando come segnale...se il flip flop e' troppo lento a reagire agli impulsi non seguira' il segnale

Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...