giovedì 30 giugno 2011

Laboratorio: diamo voce ai nostri progetti

"My name is Linux ...Linux-Toolbox", parafrasando il noto 007, tecnologico, invincibile, romantico... interpretato da attori del calibro di Sean Connery e Roger Moore.

Buongiorno a tutti Voi!
Torno con i miei piedi ben piantati sul Pianeta Terra per aiutarvi  a realizzare un interfaccia analogica per i vostri microcomputer. Questo circuito vi consentirà di riprodurre audio (es. MP3), messaggi vocali e segnali analogici arbitrari.


Prima di mostrarvi lo schema elettrico, guardiamo insieme il video che ho realizzato per Voi...


Visto? Un semplice dispositivo, comandato da algoritmi software e che può fare davvero di tutto!

Lo schema elettrico del circuito è il seguente:

(fare click per ingrandire)

Come funziona?
E' semplice! Il componente utilizzato è un DAC (Digital to Analog Converter) la cui sigla è LTC1450.
Questo DAC può generare segnali, con una risoluzione di 12 bit, riferiti alla tensione interna di 2,048V. Il circuito interno di amplificazione, posto nello stadio di uscita, provvederà a fornire una tensione di 1 mV per ciascun LSB (Low Significant Bit), pertanto, potremo generare tensioni comprese tra 0 e 4,096 V.

Che applicazioni può avere questo circuito?
Moltissime! E' possibile generare delle forme d'onda arbitrarie (programmate all'interno di tabelle dati), periodiche e/o aperiodiche.
Nel nostro caso, un semplice software gestito dal sistema tuttofare Linux-Toolbox (che ho descritto qui) effettuerà delle operazioni di lettura dalle tabelle dati e scrittura nel registro di input del DAC. I risultati li avete già visti e sentiti nel video ...possiamo generare voce, musica e forme d'onda.

Questo è il codice per generare 1000 sinusoidi prelevate da una tabella dati (per creare la tabella vedere qui):

/* sine wave */
for (t=0; t<1000; t++) {
  for (i=0; i<256; i++) {
    (*((unsigned char *)(cs3_base)+0)) = 
    (unsigned char)(sinetable[i]);
    for (k=0; k<200; k++); //dummy delay 
  }
}

Adesso la "parola" passa a Voi! Create l'applicazione che avete sempre sognato.

Qui Pianeta Terra, a presto.

giovedì 23 giugno 2011

Laboratorio: hardware liquido!

Non è certo l'ultima novità, ma è una delle innovazioni di maggior successo nel campo dei circuiti integrati. Parliamo, oggi, dei Circuiti Logici Programmabili.


Field Programmable Gate Array (FPGA) oppure Complex Programmable Logic Device (CPLD), sono i nomi che più spesso contraddistinguono tali componenti.

Vediamo di cosa si tratta, io propongo alcune definizioni:
  • circuiti elettronici che non hanno una specifica funzione, ma che sarà l'utente a fornirgliela
  • sistemi hardware la cui metodologia di sviluppo è esattamente quella del software
  • circuiti che possono essere ripetutamente aggiornati durante il ciclo di vita del prodotto, riducendo i rischi di obsolescenza
  • circuiti che posso essere riparati (entro certi limiti) mediante una semplice riconfigurazione, utilizzando risorse "spare"
  • circuiti che possono contenere al proprio interno un intero sistema di elaborazione e che aggiorneremo, nel tempo, così come facciamo con le applicazioni per il nostro PC.

Quest'ultima definizione, nota anche come System on Programmable Chip (SoPC), significa che possiamo progettare un intero elaboratore all'interno di un FPGA, utilizzando componenti software (Core o Intellectual Property) di nostra concezione o di terze parti.

Ma allora esisterà anche l'hardware Open Source?
Certo! Esistono moltissimi progetti di sistema con schemi di licenza "open" tipo GNU e LGPL, basta guardare il sito http://opencores.org/ e scegliere il progetto che meglio si addice al nostre necessità (es. ci sono numerose CPU e non mancano UART, Timer, I2C, SPI, ecc.).

Ma come si usano questi circuiti programmabili?
Vi mostro un banale esempio ...l'importante è il concetto!

Supponiamo di voler realizzare un contatore binario e di non voler acquistare, cablare e provare un chip con questa specifica funzione. Bene, programmiamocelo dal nulla!
Così:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity counter is
    Port (
        clk : in std_logic;
        output : out std_logic_vector(1 downto 0)
    );
end counter;

architecture behavioral of counter is
    signal cnt : std_logic_vector(1 downto 0);
begin
    process(clk)
        begin
            if clk'event and clk='1' then
                cnt <= cnt + 1;
            end if;   
    end process;
    output <= cnt;
end behavioral;

In questo progetto (semplificato al massimo) ho utilizzato il linguaggio VHDL (VLSI Hardware Description Language) per codificare le funzionalità di un contatore binario a 2 bit.

Procediamo con la Simulazione, la Sintesi e l'Implementazione (passi simili alla compilazione, link e debug, di un normale software)...


...diamo una guardatina all'interno del chip...


...è quasi tutto vuoto, ma si possono vedere i fili, cioè le route ed i blocchi logici occupati dal nostro contatore e resta tantissimo spazio per aggiungere altre funzionalità.

Poi, versiamo il tutto all'interno del chip ....pardon, programmiamo il chip.


Ecco fatto!

Verifichiamo con l'oscilloscopio che il nostro contatore binario funzioni realmente...

(il bit 0 è la traccia in basso)
...Ok, funziona tutto!

Non mi resta che augurarvi: "buona programmazione dell'hardware".

Qui Pianeta Terra, a presto.

lunedì 20 giugno 2011

Laboratorio: ...una sana alimentazione

Anche i circuiti elettronici richiedono una corretta alimentazione, pertanto, dobbiamo fornire loro tensioni regolate entro le tolleranze limite accettabili dal carico e dobbiamo immettere su di esso una quantità minima di rumore. Per queste ragioni, oggi, descriverò un semplice alimentatore lineare che ho realizzato per Voi.

Questo circuito è tra i più semplici (apparentemente) che si possano realizzare. Esso si basa sull'impiego di due Circuiti Integrati che hanno fatto la storia dei regolatori lineari: LM7805 e LM1086.

Vediamo lo schema elettrico...
Più semplice di così.... Ma come funziona questo alimentatore?
La tensione VIN viene prelevata da una sorgente non regolata (es. un accumulatore da 12V nominali), il Diodo D1 protegge dalle inversioni accidentali di polarità che risulterebbero distruttive per il circuito (...forse anche per il generatore se non sufficientemente protetto). Il componente U1 provvede a fornire una tensione stabile di uscita di 5V, mentre il componente U2 ha il compito di generare una tensione stabile di 3,3V. Il Led D2 ci fornisce una indicazione visuale che tutto è ok, rappresentando anche un utile precarico.
Ma è veramente tutto ok?
Solo una prova strumentale ci può fornire ulteriori indicazioni!
Con il nostro tester misuriamo le tensioni in uscita dai due regolatori lineari e assicuriamoci che il primo generi 5V +/- 2% ed il secondo generi 3,3V +/- 2%.
Tutto bene?
Guardiamo adesso i segnali di uscita con un oscilloscopio...

(i due canali sono accoppiati in AC e la scala è regolata su 20mV/Divisione)

E' questo il punto forte dei regolatori lineari!
Essi introducono, nei circuiti a valle, una quantità di rumore estremamente bassa e, pertanto, li utilizzeremo soprattutto quando dovremo alimentare dei circuiti analogici (es. amplificatori, convertitori A/D e D/A, ecc.) garantendoci, così, un ottimo rapporto S/N (segnale/rumore).

Quali sono gli svantaggi?
L'unico reale problema è costituito dalla dissipazione di energia che essi comportano. Supponiamo di voler alimentare un carico che richiede una tensione di 3,3V (es. un microcontrollore), a partire da un accumulatore Pb-gel, sapendo che il nostro carico assorbirà ipoteticamente 100mA. Supponendo una tensione di 12V, fornita dall'accumulatore, il regolatore lineare dissiperà un potenza P = (Vin-Vout)*I = (12-3,3)*0,1 = 0,87 Watt. Tutta energia convertita in calore.
Serviva una stufa? No, serviva un circuito a basso rumore!
Questo alimentatore non può mancare nel vostro laboratorio e si monta in mezz'ora ...al massimo :)

Qui Pianeta Terra, a presto.

martedì 14 giugno 2011

Laboratorio: robotica ...un passo alla volta

Ciao a Tutti,
oggi voglio parlarvi di un semplice esperimento che potrete replicare senza eccessive difficoltà: vedremo come utilizzare i motori passo-passo o step motor.


Questo particolare tipo di attuatore elettromeccanico è molto diffuso nelle apparecchiature elettroniche super-pervasive, che ci circondano (es. stampanti, fotocopiatrici, scanner, macchine fotografiche, ecc.) e che sono tutti piccoli "robot" specializzati in una particolare funzione.

Prima di proseguire, guardiamo insieme il video che ho realizzato per Voi (Nota: se avete perso qualche precedente post, potete trovare i video sul canale YouTube "liberaelettronica" oltre che nel blog ...naturalmente).


Bene, come sempre un video comunica più di mille parole e, come avrete osservato, le principali doti di questo attuatore sono: semplicità, affidabilità, velocità (la coppia però decresce all'aumentare della velocità!), ripetibilità di posizionamento senza richiedere circuiti di retroazione (es. encoder).

Il circuito di comando utilizzato nell'esperimento è il seguente:
 
E' uno switch a BJT di tipo High-Side ...leggermente dissipativo su R1 e quindi, per i vostri esperimenti, consiglio di provare anche quest'altro schema di principio:


Il dimensionamento dipende dalle caratteristiche del motore, ma l'importante e non dimenticare il diodo di recupero ...altrimenti vedrete del fumo sul vostro banco di prova :)
Io ho utilizzato un motore Astrosyn EM-188, dotato di due fasi, ma comandabile in modalità unipolare, replicando per ciascun semi avvolgimento lo schema di principio.
I circuito di potenza è stato pilotato mediante quattro uscite LVCMOS (3,3V) comandate dal sistema tuttofare Linux-Toolbox che vi ho descritto qui.
Per ulteriori dettagli sul funzionamento dei motori stepper, vi riporto i link alle pagine Wikipedia in italiano e in inglese. Sono un buon punto di partenza, ma in rete troverete tantissimi altri contenuti.

Ok, nel video avete seguito il suggerimento di provare a replicare il moto della freccia con le vostre dita?

Se non ci siete riusciti potete dare uno sguardo al prossimo video ...è molto interessante, guardiamolo.

Se, invece, ci siete riusciti ...vuol dire che anche i Robot, ormai, leggono noi umani blogger.

Qui Pianeta Terra, a presto.

mercoledì 8 giugno 2011

Storia: Home Computer

Carissimi, oggi volevo parlarvi di Leibniz (Gottfried Wilhelm von Leibniz), nato a Lipsia nel 1646 e ideatore, da buon matematico, oltre che filosofo, economista, ecc., di una macchina calcolatriche che utilizzava il sistema numerico in base 2 (sistema binario), oggi universalmente impiegato in tutti i sistemi elettronici digitali ...cioè i computer, di ogni forma, dimensione e scopo.
Quei sistemi elettronici pervasivi che popolano la nostra quotidianietà!
Ma, cercando nel mio laboratorio, tra qualche cimelio dimenticato, ho trovato qualcosa che ha attratto la mia attenzione e risvegliato le mie emozioni "storiche". Ho trovato dei frammenti della mia storia personale.
Voglio mostrarveli, così come il tempo li ha conservati alla stregua di fossili di una era passata.


Supporti di memorizzazione di massa (80 kbyte, 360 k, 1440 k)

Il termine "memorizzazione di massa" fa un pò ridere, se pensiamo alla nostra SD HC da 4 Gigabyte e più, che inseriamo in una comune macchina fotografica digitale.

Ma, il pezzo forte dovevo ancora trovarlo...


(fare click per ingrandire)

Eccolo, un potentissimo Home Computer, il Commodore VIC-20, dotato di microprocessore 6502 da 1 MHz (che oggi si potrebbe tradurre meglio in 0,001 GHz) e ben 3,5 Kbyte di memoria RAM (tradurre in 0,0000035 Gbyte).
Che dire? Eppure, all'epoca, cioè tra la fine degli anni '70 e l'inizio degli '80, questa era la "Rivoluzione Informatica". Non c'è dubbio, si è trattato di una vera e propria rivoluzione.

Io ne facevo parte! Ero un rivoluzionario ...elettronico. Infatti, realizzai, per necessità, una espansione di memoria per il VIC-20, da ben 3 Kbyte di memoria, utilizzando n°6 chip di memoria 2114. Dovrei conservarne ancora qualcuno. Quei chip erano in tecnologia NMOS, un altro fossile tecnologico...

Guardiamo la copertina di questa rivista dell'epoca (parliamo di poco più di 30 anni fa, non del 1600)


Si narravano le doti del mitico IBM Personal Computer ...un vera rivoluzione, al punto che i moderni PC conservano ancora la compatibilità logica con questo "dinosauro informatico".

Ma, anche all'epoca esistevano temibili architetture concorrenti...



...il  mitico Olivetti M20, basato su microprocessore Z8000, e tanti altri...


...come lo Xerox 820 ...un  mostro! Il darwinismo tecnologico, ha fatto il resto.

Bene! Concludo dicendo che non esisteva ancora Windows, Linux, OS-X, non esistevano i Telefoni Cellulari,  gli iPhone, e non esisteva la madre di tutte le reti, Internet, ...esisteranno solo dopo pochi anni le reti BBS, per chi le ricorda, insieme ai modem V23 o V90 per i più giovani :)

Tutto è cambiato e tutto cambierà ancora. I popoli che non ricordano la propria storia, sono destinati a riviverla ...non è vero?

Ah si! Il sistema binario? Noi umani del pianeta preferiamo il sistema in base 10 (decimale), che suona così, per esempio:

101 = 1*10E2 + 0*10E1 + 1*10E0

mentre per Leibniz era utile anche:

101 = 1*2E2 + 0*2E1 + 1*2E0 = 5 (nel sistema decimale)

Direi che aveva visto giusto ...il genio.

Qui Pianeta Terra, a presto.

sabato 4 giugno 2011

Laboratorio: Sensori Inerziali - Post n°2

Cari amici, proseguendo nella realizzazione dei nostri progetti elettronici (liberi!), oggi ho costruito per Voi un Robot che si interfaccia al Sensore Inerziale che ho descritto qui.


Guardiamo insieme il video e, poi, vi fornirò ulteriori dettagli...


...nei successivi post.

Qui Pianeta Terra, a presto.