martedì 5 aprile 2016

DGPS cinematico con RTKLib e Ublox M8T

Una prova di usare l'Ublox M8T in modalita' differenziale e dinamica.
L'antenna fissa e' stata quella della ex Provincia di Firenze mentre il rover e' stato l'Ublox con parametri di acquisizione in modalita' raw 1 dato al secondo

La modalita' di acquisizione e' stata identica a quella illustrata qui tranne per il fatto che il rover non era fermo ma in movimento. L'elaborazione e' stata fatta in post-processing


Dal punto di vista del software la modifica da effettuare e' di andare in Options di RTKPost e modificare da Static a Kinematic 


Questo invece e' il plot con il fix differenziale



per avere un riferimento ho camminato sul bordo dei sentieri in asfalto e percorso il bordo della circonferenza. C'e' una discreta discrepanza con l'immagine di Google Earth ma credo che il problema sia principalmente relativo alla georefenziazione dell'immagine e non ai dati del GPS anche perche' le linee risultano rettilinee ed il cerchio ha una ottima forma

Videotel ADF 258 M2P

E' da molto tempo che il mio fornitore ufficiale di hardware (il cassonetto della spazzatura) non mi faceva qualche regalo (anche perche' ora tutti comprano portatili e non vengono piu' lasciati accanto al cassonetto come 10-15 anni fa)

L'Alcatel ADF 258 M2P (datat0 1991) e' un terminale videotel, quindi un semplice terminale stupido con input da modem e da seriale. Si presenta come un cubetto che si apre ribaltando la tastiera che a sua volta protegge lo schermo

Terminale acceso e con tastiera accessibile
Agli inizi degli anni 90 io lavoravo con un terminale Videotel in emulazione su PC su un 286 con modem esterno seriale a 2400 bps. Questo tipo di terminale era molto piu' diffuso in Francia (servizio Minitel), dove e' nato il servizio, anche perche' il terminale era dato gratuitamente al posto dell'elenco del telefono cartaceo. L'interfaccia grafica era testuale ed era disponibile Ascii-art che faceva sembrare il tutto un po' come il servizio Televideo. (non vorrei sbagliarmi ma su schermi a colori come nell'emulazione su Pc era disponibili anche schermate a colori)

Tastiera chiusa
E' inutile cercare il pulsante di accensione. Il terminale e' sempre acceso, nel migliore dei casi e' in standby. Per accendere il monitor si usa il tasto immediatamente sotto il logo rosso della SIP a sinistra del tasto 1

Numero di serie

Pannello posteriore, mancante dello sportellino di sinistra, lato in cui sono presenti il connettore telefonico e l'alimentazione. A destra in basso il connettore seriale
Il terminale e' stato trovato senza cavo di alimentazione ma basta un cavo standard, tipo quello dei registratori portatili. Ovviamente c'e' sempre un po' di paura a dare corrente a 220 V ad un dispositivo di cui non si conosce la storia o se ha subito qualche piovasco (ricordo che e' stato trovato ad un cassonetto). A valle dell'alimentazione e' presente un fusibile in gabbietta plastica

Richiesta di password

La prima brutta sorpresa e' che il terminale e' protetto da password. Come indicato da questo sito, che e' praticamente l'unica fonte di informazioni, e' sufficiente 
1) Inserire la presa
2) digitare FUNZ+M
3) digitare R

e questa e' la schermata iniziale priva della richiesta di password


Altre combinazioni di tasti interessanti sono (link originale)
FUNZ+Agenda (il tasto sotto a quello di accensione) : 
FUNZ+M+1 : Prestel
FUNZ+M+2 : Teletel
FUNZ+M+3 : ASCII 7P1, 300 bps,80 colonne
FUNZ+M+4 : ASCII 7P1, 300 bps,40 colonne
FUNZ+M+5 : ASCII 8N1, 300 bps,80 colonne
FUNZ+M+6 : ASCII 8N1, 300 bps,40 colonne
FUNZ+M+7 : ASCII 7P1, 1200 bps,80 colonne
FUNZ+M+8 : ASCII 7P1, 1200 bps,40 colonne
FUNZ+M+3 : Teletel, 1200 bps,40 colonne
FUNZ+B+1 : 300 bps
FUNZ+B+2 : 2400 bps
FUNZ+B+4 : 4800 bps
FUNZ+M+E : echo

In questo sito viene utilizzato un terminale Videotel, simile ma non uguale all'ADF 258, come terminale seriale per Linux. Un'idea interessante che se ho tempo cerchero' di sviluppare
La mappatura della porta DIN a 5 poli e' la seguente

ed le connessioni (ripresa sempre dal sito indicato in precedenza)





lunedì 4 aprile 2016

wget in Tor

Oltre ad usare la rete Tor per navigare via Web con il comodo Tor Bundle e' possibile utilizzare anche comandi scriptabili (per esempio wget) all'interno di una connessione Tor

Si usa quindi il comando torsocks (apt-get install torsocks)

la sintassi e' estremamente semplice

torsocks wget ..... http://www.test.com


Esempio di connessione http standard (sopra) e wget via Tor (sotto) 

L'unica difficolta' e' avere la conferma che lo scaricamento avvenga da una connessione Tor al posto che dal proprio Ip. Se all'interno di Tor Bundle c'e' una comoda icona con torsocks a linea di comando non ci sono informazioni dirette.

Si puo' usare allora un servizio online che riporta l'ip del chiamante come http://www.get-ip.me/. Ho selezionato questo servizio perche' altri piu' siti piu' famosi, come http://getip.com oppure www.whatsmyip.org non permettono la connessione da wget

venerdì 1 aprile 2016

Raspberry Pi solare

Una cosa che ho sempre desiderato e' quella di avere un calcolatore portatile alimentato ad energia solare.



La cosa che piu' ci si e' avvicinata nel tempo e' stata l'OLPC-X0-1, un computer portatile destinati ai bambini dei paesi in via di sviluppo, che era dotato di un meccanismo a manovella per generare corrente (tipo i telefoni di campagna della prima guerra mondiale)

Visto che i tempi sono cambiati ho voluto provare ad usare una Raspberry 2 collegato ad un PowerBank da 10000 mA e un pannello solare da 7W (per rendere la cosa completa la Raspberry doveva essere fornita di un monitor da 5 pollici ed una tastiera/trackpad della Logitech ma al momento non e' ancora arrivato il corriere con lo schermo)

Il problema si e' pero' evidenziato subito. Il pannello solare, in piena insolazione ed orientato direttamente verso il Sole, riesce a generare a malapena 450 mA. Considerando che il solo Raspberry 2 consuma  circa 330 mA e' presto detto che in condizioni non ottimali di illuminazione solare sara' utilizzata la sola carica della batteria senza possibilita' di ricarica da parte del pannello

Qualche speranza in piu' usando una Pi Zero (220 mA) ma in generale direi che dovro' ancora rimandare il mio progetto di calcolatore portatile solare

giovedì 31 marzo 2016

PIC 16F877A e ATMEGA328P standalone su breadboard

Era da un po' di tempo che volevo provare ad usare un ATMEGA328P (il microcontrollore di Arduino Uno) separato dalla sua scheda. Cio' permette di rispamiare un po' di soldi (la spesa piu' importante e' il microcontrollore con flashato il bootloader) e di elettronica (regolatore di tensione, programmatore via USB)

Per rendere le cose semplici l'obbiettivo era quello di far girare lo sketch Blink (lampeggio di un led su PIN D13)

Ho scoperto quindi che la circuiteria per usare un ATMEGA ed un PIC su una breadboard sono molto simili e si riducono sostanzialmente ad alimentare il microcontrollore e fornire il clock da un quarzo con due condensatori accessori

PIC 16F877A
Il microcontrollore e' stato programmato con PicKit 3. A differenza di ATMEGA si possono impostare differenti frequenze di clock secondo le modalita' LP (Low Power, 32.768 KHz), XT (fino a 8MHz) ed HS



Il led e' stato posto sulla pin D0



ATMEGA 328P

La configurazione minimale di un ATMEGA 328P e' molto simile a quella del PIC. In pratica e' sufficiente prima programmare il chip direttamente sulla Arduino usando la normale procedura via IDE


Il pin 1 del microcontrollore deve essere orientato verso il connettore ISCP della Arduino. Il microcontrollore e' smontato dalla Arduino Uno

Poi si rimuove il chip e lo si inserisce sulla breadboard (ATTENZIONE: i pin sono estremamente delicati e facili da piegare) . Sono sufficienti  un quarzo oscillatore da 16 MHz tra i pin 9 e 10 (vedi schema successivo) e due condensatori da 22 pF a ponte tra GND ed i due piedini dell'oscillatore. Successivamente si devono connettere i pin 7 e 20 a Vcc +5V e pin 8 e 22 a GND




Fatto cio' si puo' inserire un led sul pin 19 (che corrisponde alla porta digitale 13 nel linguaggio Arduino) per vedere se tutto funziona (ho omesso per semplicita' la resistenza sul led perche' la prova e' durata pochi secondi e non c'era il rischio di fare danni all'elettronica)










E' possibile far funzionare l'ATMEGA 328P anche con il suo clock interno a 8 MHz (senza quindi necessita' di nient'altro che l'alimentazione) ma cio' richiede di modificare il bootloader

venerdì 25 marzo 2016

Display 7 Led su Pic Dev Board

Lo schema elettrico per attivare il display a 7 Led sulla Pic Dev Board e' mostrato qui sotto




Per comandare quale posizione dei display si deve agire sulla porta A. Per esempio impostando la maschera dei bit della porta A a 0xFD si attiva il secondo posto da sinistra (maschera 11111101)  mentre con 0xDF si attiva il 6° posto da sinistra (maschera 11011111)
Impostando la porta D si decide quale carattere mostrare

Per attivare il display a 7 Led si deve spostare il jumper bianco del connettore 5x2 sulla prima posizione (VCC-SW)

Questo e' il programma
-----------------------------------
#include <xc.h>


// CONFIG
#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

const unsigned char LED[]=
{                         
0xc0,0xf9,0xa4,0xb0,//0~3
0x99,0x92,0x82,0xf8,//4~7
0x80,0x90,0x88,0x83,//8~b
0xc6,0xa1,0x86,0x8e //c~f
};

void delay(unsigned int count);

void main(void)            
{
  unsigned int i;
  
    TRISA&=0XFD;        
TRISD=0B00000000; 
    PORTD=0xFF;       
    PORTA=0XFD;       

    while(1)        
    {
    for(i=0;i<16;i++)
      {
       PORTD=LED[i];
       delay(30);
      }
    }
}

void delay(unsigned int count)
{
unsigned int a,i;
for(i=0;i<count;i++)
{
for(a=0;a<5000;a++)
 asm("NOP");  
}
}

-----------------------------------









Programmazione PIC con PicKit3 e MPLAB Ide

Ho iniziato ad interessarmi ai PIC nel lontano 2004 quando mi sono comprato un programmatore seriale ed un paio di integrati alla Fiera dell'Elettronica di Empoli. La programmazione dei PIC non e' pero' banale rispetto alle schede Arduino per cui in seguito ho abbandonato PIC per usare le piu' intuitive Arduino con processore ATMEL...fino ad oggi.


Per programmare un PIC prima di tutto si deve acquistare un programmatore, nel mio caso un PicKit 3 comprato per una decina di euro su un e-commerce cinese

Da notare i colori della pedinatura tra il programmatore e lo zoccolo ZIF


Il programmatore viene venduto con uno zoccolo ZIF (Zero Inserction Force). Per le prove mi sono comprato dei PIC 16F877A in formato 40 pin. Per vedere l'orientazione del processore sullo zoccolo si possono leggere le istruzioni nella parte sottostante, nel mio caso il Pin 1 e' vicino alla leva di blocco dello ZIF


Per programmare i PIC si puo' usare MPLAB X Ide, scaricabile  dal sito Microchip. Attenzione che questo e' il solo ambiente di sviluppo. Per compilare i programmi dovra' essere scaricato anche il compilatore (per esempio XC8)

Creazione di un nuovo progetto in MPALB


Selezione del microcontrollore


Selezione del programmatore


Selezione del compilatore
Quando si crea un nuovo progetto un MPLAB non viene creato un file sorgente da compilare. Dopo aver creato il progetto si deve selezionare la cartella Source Files ed Add New C Main File


Per poter programmare il PIC in PICKIT 3 si deve impostare l'alimentazione dal programmatore. Questo si effettua da Run/Set Project Configuration/Customize/PicKit3/Power/Power target circuit form PicKit3





Ovviamente il primo tentativo di programmare il microprocessore e' stato quello di usare un Led. Il PIC16F877A ha 4 porte digitali (A,B,C,D) programmabili da 8 bit in input ed output



Il PIC 16F877A non e' in grado di funzionare in modo autonomo perche' necessita di un oscillatore esterno (alcuni integrati della famiglia PIC hanno invece l'oscillatore integrato). Il quarzo deve essere posto ai pin 13 e 14 con a valle dei condensatori.
Si possono usare varie combinazioni di clock (per esempio 4MHz con condensatori da 15 pF)

http://www.elektrojo.com/img/cms/fig4-29.png


Per rendere l'apprendimento un po' piu' semplice mi sono comprato una Pic Dev Board da un AliExpress. Prima nota : e' stata una pessima scelta perche' la documentazione a bordo e' tutta in cinese e organizzata in modo confuso. Sono riuscito a farla funzionare solo perche' insieme alla scheda era presente un CD con dei video tutorial (in cinese ma comunque comprensibili)



Sulla scheda sono gia' montati diversi dispositivi.
1) 8 Display a 7 Led
2) connettore per display LCD 12864
3) connettore per display LCD 1602
4) connettore per DS18B20 (termometro digitale)
5) tastiera 4x4
6) tastiera 4x1
7) 2 potenziometri collegati all'ADC del PIC
8) DS1302 (RealTime Clock) con batteria tampone
9) connettore PS2
10) RS232 connettore seriale DB9 con Max 232
11) interruttore di accesione
12) buzzer
13) 24C02 EEPROM 512 Bytes
14) HS0038 Universal IR Receiver
15) pulsante di reset per il PIC
16) resistenza variabile per gli LCD
17) 8 led verdi 

Per usare il programmatore con la Dev Board quest'ultima deve essere alimentata separatamente mediante una alimentatore a 5 V (pin + al centro) oppure dalla porta microUsb (altrimenti MPLAB IDE segnala che non c'e' abbastanza tensione, circa 4.85 V) per procedere con la programmazione)

Da notare la pedinatura di connessione tra il PICKIT3 e la Dev Board
La Dev Board ha gia' montato un quarzo da 4MHz. I led, come si vede dallo schema elettrico della Dev Board sono connessi alla porta D



Per alimentare i led si deve pero' fare un passo ulteriore. Si deve aggiungere un Jumper sul connettore 5x2 tra i pin VCC e LED VCC

Jumper bianco a fianco delle due resistenze variabili


Questo e' il programma. A differenza di Arduino si deve impostare la configurazione del processore mediante i Configuration Bits in cui si indica per esempio la sorgente dell'oscillatore ed eventuali protezioni 
Per impostare i Configuration Bits si seleziona da dentro MPLAB Window/PIC Memory Views/Configuration Bits. Si selezionano i valori desiderati e poi si clicca su Generate Source Code to Output. Si copia e si incolla quindi il risultato nel codice del sorgente


In questo programma viene acceso e spento il led connesso alla porta D0
------------------------------------
#include <xc.h>

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

// CONFIG
#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)


         

void delay(void);

void main(void)         
{
  TRISD=0x00;      
  PORTD=0xFF;      
  while(1)         
    {
     RD0=!RD0;     
     delay();
    }
}

void delay(void)
{
unsigned int a;    
for(a=0;a<50000;a++);   
}
------------------------------------




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...