Un piccolo promemoria per me stesso : per abilitare i tasti funzione Fn su Surface 1 si deve premere il tasto Fn+Blocco Maiuscole
martedì 13 agosto 2019
Alpine Linux
Alla ricerca di una distro Linux leggera ho voluto fare una prova con Alpine Linux
Per l'installazione sono partito dalla versione extended
All'avvio della iso si digita root e senza password ci si trova al prompt. Per iniziare la configurazione si digita
configure-alpine
(i comandi di configurazione iniziano tutti con setup-* come per esempio setup-ntp)
si accede alla scelta del layout di tastiera, la configurazione della rete, la nuova password di root, la timezone, un eventuale proxy ed il servizio NTP. Si configura poi il repository (l'opzione di default ricerca il repository piu' veloce). Si sceglie poi il disco dove effettuare l'installazione (si indica come "sda", "sdb"....) e poi il tipo di utilizzo (normalmente si seleziona "sys")
il packet manager si chiama apk i cui comandi base sono
apk update
apk upgrade
apk add ......
apk del .......
apk search .....
di default e' abilitato solo il repository main, per attivare il community si deve editare con vi il file /etc/apk/repositories (I repositories edge sono considerati di sviluppo con modalita' rolling release)
per installare Xorg si usa
setup-xorg-base
ragionevolmente la prima volta che si lancia startx Xorg crasha per mancanza di configurazione del window manager
Si lancia quindi
apk search xf86-video
per cercare il driver della propria scheda video e si installa (per esempio) con
apk add xf86-video-vesa
si prosegue con
apk add xf86-input-mouse xf86-input-keyboard xf86-input-evdev
apk add xfce4 xfce4-terminal
apk add faenza-icon-theme tango-icon-theme
rc-service dbus start
rc-update add dbus
si lancia quindi la configurazione di Xorg
Xorg -configure
e si lancia startx per accedere ad X
come opzione a XFCE ci sono altri window manager gia' disponibili come Gnome, Mate ed Awesome
Per quanto riguarda Awesome ho trovato non possibile installare aterm mentre funziona correttamente xterm
per installare il compilatore gcc e gli strumenti di sviluppo si usa
apk add build-base
Per l'installazione sono partito dalla versione extended
All'avvio della iso si digita root e senza password ci si trova al prompt. Per iniziare la configurazione si digita
configure-alpine
(i comandi di configurazione iniziano tutti con setup-* come per esempio setup-ntp)
si accede alla scelta del layout di tastiera, la configurazione della rete, la nuova password di root, la timezone, un eventuale proxy ed il servizio NTP. Si configura poi il repository (l'opzione di default ricerca il repository piu' veloce). Si sceglie poi il disco dove effettuare l'installazione (si indica come "sda", "sdb"....) e poi il tipo di utilizzo (normalmente si seleziona "sys")
il packet manager si chiama apk i cui comandi base sono
apk update
apk upgrade
apk add ......
apk del .......
apk search .....
di default e' abilitato solo il repository main, per attivare il community si deve editare con vi il file /etc/apk/repositories (I repositories edge sono considerati di sviluppo con modalita' rolling release)
per installare Xorg si usa
setup-xorg-base
ragionevolmente la prima volta che si lancia startx Xorg crasha per mancanza di configurazione del window manager
Si lancia quindi
apk search xf86-video
per cercare il driver della propria scheda video e si installa (per esempio) con
apk add xf86-video-vesa
si prosegue con
apk add xf86-input-mouse xf86-input-keyboard xf86-input-evdev
apk add xfce4 xfce4-terminal
apk add faenza-icon-theme tango-icon-theme
rc-service dbus start
rc-update add dbus
si lancia quindi la configurazione di Xorg
Xorg -configure
e si lancia startx per accedere ad X
come opzione a XFCE ci sono altri window manager gia' disponibili come Gnome, Mate ed Awesome
Per quanto riguarda Awesome ho trovato non possibile installare aterm mentre funziona correttamente xterm
per installare il compilatore gcc e gli strumenti di sviluppo si usa
apk add build-base
documentazione puo' essere trovata a questo link
lunedì 12 agosto 2019
Arduino Uno blink con Atmel Studio 7
Nota
Nonostante l'uso di Atmel Studio non e' possibile effettuare il debug step by step del programma a meno che di non usare un debugger esterno (come Atmel ICE) del costo di circa 100 euro (esistono in vendita dei dispositivi tipo AVRISP Mkii che pero' risultano essere solo dei programmatori e non dei debuggers)
Negli STM32 con STLink invece si ha gia' a disposizione un programmatore debugger a basso costo (pochi euro)
----------------------------------------------------------
Atmel Studio 7 si puo' scaricare dal seguente link
Si crea un progetto GCC C Executable
e si seleziona ATMega 328p
si va al menu Tools/External tools
a questo punto si puo' editare main.c con il seguente codice (la programmazione avviene in C)
--------------------------------------
#define F_CPU 16000000UL //frequenza del processore
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB |= 0B00100000;
while (1)
{
PORTB |= 0B00100000;
_delay_ms(1000);
PORTB &= 0B11011111;
_delay_ms(500);
}
}
--------------------------------------
si compila con Build Solution (tasto F7) e si fa l'upload su Arduino Uno con Tools/Arduino Uno Bootloader
Ma cosa vuol dire il codice sopra riportato. Si fa riferimento al Data Sheet di AVR Mega328p
DDRB (Data Direction Register= indica come settare le porte digitali (la sigla B indica le porte digitali da 8 a 13, C indica i pin analogici e D indica le porte digitali da 0 a 7) se in lettura od in scrittura
PORTB invece come settare o leggere la porta
DDRB |= 0B00100000; imposta la porta DDB5 come output (fa un OR sul valore della porta stessa con una maschera)
ma come mai proprio la porta DDB5....perche' nella Arduino Uno e' collegata al Pin D13 a cui e' collegato il led
dopo di cio' con PORTB (ed una serie di AND ed OR con una maschera binaria) viene settato il valore di DDB5 (e quindi del pin D13) a 0 ed 1
il corrispondente sketch Arduino e' ovviamente
--------------------------------------
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
--------------------------------------
Nonostante l'uso di Atmel Studio non e' possibile effettuare il debug step by step del programma a meno che di non usare un debugger esterno (come Atmel ICE) del costo di circa 100 euro (esistono in vendita dei dispositivi tipo AVRISP Mkii che pero' risultano essere solo dei programmatori e non dei debuggers)
Negli STM32 con STLink invece si ha gia' a disposizione un programmatore debugger a basso costo (pochi euro)
----------------------------------------------------------
Atmel Studio 7 si puo' scaricare dal seguente link
Si crea un progetto GCC C Executable
e si seleziona ATMega 328p
si va al menu Tools/External tools
Si aggiunge un nuovo tool editando Command ed argomenti con (si deve avere gia' installato Arduino IDE e si fa puntare alle directory)
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude
-C"C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega328p -carduino -PCOM11 -b115200 -D -Uflash:w:"$(ProjectDir)Debug\$(TargetName).hex":i
--------------------------------------
#define F_CPU 16000000UL //frequenza del processore
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB |= 0B00100000;
while (1)
{
PORTB |= 0B00100000;
_delay_ms(1000);
PORTB &= 0B11011111;
_delay_ms(500);
}
}
--------------------------------------
si compila con Build Solution (tasto F7) e si fa l'upload su Arduino Uno con Tools/Arduino Uno Bootloader
Ma cosa vuol dire il codice sopra riportato. Si fa riferimento al Data Sheet di AVR Mega328p
DDRB (Data Direction Register= indica come settare le porte digitali (la sigla B indica le porte digitali da 8 a 13, C indica i pin analogici e D indica le porte digitali da 0 a 7) se in lettura od in scrittura
PORTB invece come settare o leggere la porta
DDRB |= 0B00100000; imposta la porta DDB5 come output (fa un OR sul valore della porta stessa con una maschera)
ma come mai proprio la porta DDB5....perche' nella Arduino Uno e' collegata al Pin D13 a cui e' collegato il led
dopo di cio' con PORTB (ed una serie di AND ed OR con una maschera binaria) viene settato il valore di DDB5 (e quindi del pin D13) a 0 ed 1
il corrispondente sketch Arduino e' ovviamente
--------------------------------------
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
--------------------------------------
una differenza evidente e' che il codice compilato Arduino IDE e' di 930 bytes mentre il codice C con Atmel Studio e' di soli 176 bytes
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);
}
-----------------------------------------------------------
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
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 |
venerdì 26 luglio 2019
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
Iscriviti a:
Post (Atom)
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...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...