venerdì 25 giugno 2010

Il Protocollo I2C

Cos'è il protocollo I2C?

Un protocollo è un insieme di regole condivise tra 2 o più dispositivi al fine di trasmettersi informazioni, senza un protocollo è impossibile avere una comunicazione corretta.

Il protocollo I2C (Inter Integrated Circuit) utilizza un bus di 2 fili bidirezionali, rispettivamente SDA(dati) e SCL(clock).

I segnali che transitano sulle linee sono in codice binario quindi avremo 2 livelli: 1 livello alto, 0 livello basso. Le linee sono a livello alte di default, quindi collegate a resistenze di Pull Up[1], in modo che, quando nessuno trasmette, non si abbiano livelli di incertezza dovuti al rumore.

Questo protocollo nasce negli anni 80 e fu brevettato dalla Philips inizialmente per far comunicare dispositivi all interno di tv e pc, successivamente fu standardizzato e reso più veloce (oggi si parla di 3.4Mbit/s), ma soprattutto la Philips non ebbe più il monopolio su questo standard.

Quali dispositivi I2C possiamo trovare?

I principali dispositivi che possiamo trovare nei cataloghi sono diversi, ma ricordiamoci che con l'I2C non avremo mai comunicazioni in REAL TIME di grosse quantità di dati.In foto un esempio di un bus con varie periferiche I2C collegate.


bus i2c generico


Il numero di periferiche I2C su uno stesso bus di solito dipende dalle capacità parassite introdotte sulla linea dai vari dispositivi, il limite è 400pF.

Definizioni di protocollo

Gli attori principali della comunicazione sono 2, il MASTER e lo SLAVE. Non avremo mai 2 MASTER sulla stessa linea, eccetto casi particolari e in genere il MASTER è un microcontrollore, gli altri dispositivi sono SLAVE. Il master gestisce la tempistica e inizia la trasmissione, lo slave gestisce le richieste del master.

Ogni dispositivo sul bus ha un indirizzo univoco a 7 o 10 bit.

Il master trasmette sulla linea data l'indirizzo dello slave sia che voglia ricevere dati, sia che li voglia trasmettere . Dopo il bit di acknowledge il master procede a trasmettere i dati, oppure li trasmette lo slave se il master lo richiede. L'Ack viene trasmesso dopo ogni byte[2].

In figura vediamo un esempio di comunicazione, è importante osservare come la comunicazione inizi con una condizione di Start (o repeated START) e finisca con una condizione di Stop.

Una volta trasferiti i dati con il secondo byte, se vogliamo trasmettere o ricevere nuovamente, invece di stoppare la trasmissione con la condizione di STOP, ripetiamo la condizione di START[3]. In questo modo il Master non smette mai di trasmettere sul bus e nessun altro eventuale master può prenderne il controllo. La condizione di Repeated Start nel caso in cui abbiamo un solo master è ha la stessa funzione della condizione di STOP.

start stop i2c

In questa foto potete vedere come viene ripartito il bus SDA tra Master e Slave che comunicano.

trasmissione generica

In una comunicazione I2C avremo quindi tre possibili tipi di trasmissioni:

Il master vuole trasmettere dati allo slave

  • Il master trasmette l'indirizzo dello slave a cui vuole trasmettere su SDA

  • Il master invia i dati che vuole trasmettere

  • Il master termina la comunicazione

In questo caso è lo slave che genera il segnale di ack, quando un segnale di NOT ACKNOWLEDGE ('1') viene ricevuto il master dovrà generare una condizione di STOP o di REPEATED START.

master to slave

Il ma ster vuole ricevere dati dallo slave

  • Il master trasmette l'indirizzo dello slave da cui vuole ricevere dati su SDA

  • Lo slave trasmette i dati al master

  • Il master termina il trasferimento

In questo caso il master genera l'ACK dopo aver ricevuto i dati, ma per indicare allo slave che non ha più bisogno di dati genera un NOT ACKNOLEDGE.

slave to master

Comunicazione mista ( ogni parte di questa comunicazione è scomponibile in uno dei due casi precedenti)

mista

Nei casi sopracitati possiamo osservare che la comunicazione da master a slave è gestita completamente dal master e a seconda di come poniamo il bit di indirizzo possiamo leggere o scrivere dati nello slave.

Indirizzamento delle periferiche

La procedura di indirizzamento a 7 bit specifica che il primo byte trasmesso sulla linea I2C,dopo la condizione di START, conterrà l'indirizzo dello slave che vorremo selezionare. C'è un'eccezione chiamata 'general call' in cui il master trasmette un indirizzo generico e ogni slave manda un ack. Tuttavia gli slave possono anche essere stati configurati in modo che ignorino la 'general call'.

primo byte


Il secondo byte che sarà trasmesso sulla linea sarà quello che conterrà le informazioni importanti per definire la comunicazione, quindi le azioni che saranno fatte.

L'indirizzo dello slave può essere fisso o variabile, tutto questo dipenderà dalla casa costruttrice. Ci sono dei dispositivi I2C che lasciano al progettista la libertà di scegliere (via Hardware) l'indirizzo del dispositivo stesso. Infatti ci sono dei pin ,che in genere rappresentano i bit meno significativi dell'indirizzo, che se messi a massa o a Vcc cambieranno i rispettivi bit a 0 o a 1. Un esempio pratico è il PCA9555 che ha 3 pin che rappresentano i bit meno significativi dell'indirizzo I2C, mentre i 4 bit più significativi sono posti a 0100 di default dalla casa madre. Quindi potremo indirizzare 23 PCA9555 sullo stesso bus.

In questa tabella vediamo vari tipi di indirizzi che vengono inviati sul bus per diversi scopi.

Tabella indirizzi

E' necessario dire che utilizzeremo soltanto lo Start byte e al limite il 10-bit slave addressing nei nostri progetti a microcontrollori, però per completezza inserisco informazioni riguardanti anche gli altri metodi di indirizzamento.

1. General call, serve per indirizzare tutte le periferiche sulla linea capaci di gestirla.

Se una periferica riceve una general call ed è capace di gestirla manderà un ack e si comporterà come uno slave-ricevitore. Il secondo byte sulla linea e i successivi saranno riconosciuti da ogni periferica che ha generato un ack. Se una periferica non sarà in grado di gestire questo tipo di dati allora ignorerà la general call.

Il senso della general call si capisce dal secondo byte trasmesso, in particolare dal bit B.

general call

Sono possibili quindi due casi

  • se il bit B=0 allora il secondo byte avrà 3 diverse forme:
  1. 00000110 (H‘06’) : Resetta e abilita le periferiche a ricevere sull indirizzo programmabile via Hardware.

  2. 00000100 (H‘04’) : Abilita le periferiche a ricevere sull'indirizzo programmabile via Hardware ma non resetta le periferiche.

  3. 00000000 (H‘00’) : Questo codice non può essere utilizzato come secondo byte.
Le varie procedure di programmazione con relative sequenze di dati da inviare sono pubblicate sui vari datasheet delle periferiche I2C.
  • Se il bit B=1 allora la general call sarà una 'hardware general call'. Questo significa che la sequenza di due byte è stata trasmessa da una periferica hardware ad esempio una 'keyboard scanner' che non può essere programmata per indirizzare un singolo slave. Dato che queste periferiche hardware non conoscono all'inizio della comunicazione a quale periferica dovranno trasmettere, il secondo byte conterrà il proprio indirizzo per identificarsi. Un dispositivo intelligente come un microcontrollore, che può comportarsi sia da master che da slave, quindi reindirizzerà il traffico da questa periferica allo slave desiderato.

2.(1)Dopo il bit di start nessuna periferica è abilitata a dare l'ack.

3.(2)Questo tipo di indirizzo serve a rendere compatibile un bus di tipo C-BUS con il Bus I2C.

I dispositivi C-Bus possono essere connessi ad un bus I2C in modalità Standard, tuttavia servirà un terzo filo chiamato DLEN e l'ack dovrà essere omesso. In questo tipo di struttura le periferiche I2C e le C-Bus condivideranno un bus di 2 fili, ma le I2C non risponderanno ai dati C-Bus e viceversa.

c-bus

4.(3)Riservato ad altri tipi di bus compatibili con l'I2C

5.Riservato per usi futuri

6.Riservato alle comunicazioni I2C in Hs-mode che è una delle tre modalità di comunicazione I2C, in questo caso la bit rate sarà 3.4MBits/s. Le altre 2 modalità sono Fast-mode (400 kbits/s) e 10-bit addressing.

7.Riservato per usi futuri

8. Riservato a comunicazioni tra periferiche che hanno un indirizzo di 10 bit. Per indirizzare una periferica a 10 bit, semplicemente si invia in 2 diversi byte l'indirizzo a 10 bit. Periferiche indirizzate a 7bit e a 10 bit possono essere collegate allo stesso bus e possono comunicare sia in HS-mode e in Fast-mode.

Nel primo byte inviato dopo la condizione di Start o di Sr (repeated start) si invia 11110 e i 2 bit più significativi dell'indirizzo a 10 bit, il bit R/W viene posto a zero e il secondo byte conterrà gli 8 bit meno significativi dell'indirizzo.

La comunicazione con periferiche a 10bit è spiegata in questa figura

10 bit

CONCLUSIONI

Il protocollo I2C visto così, può sembrare molto complesso, ma se avrete la pazienza di leggere il tutorial sulla comunicazione i2c e arduino vi accorgerete che bastano poche funzioni per riuscire a indirizzare e trasferire dati a questo tipo di periferiche.

Io personalmente trovo questo protocollo utilissimo, pensate che con soltanto un bus di 2 fili potrete espandere il vostro port di I/O di ben 320 bit. Inoltre esistono anche sensori, display e memorie i2c che potrete utilizzare con soltanto 2 fili. Per avere più bus inoltre esistono hub i2c prodotti dalla NXP (la maggior parte delle periferiche i2c viene prodotta dalla NXP, un'azienda della Philips che produce semiconduttori).

NOTE

[1]Pull Up: se tra una linea e il valore alto (stabilito dal tipo di logica che utilizziamo, es nella logica TTL il valore 1 o High o H è uguale a 5v per definizione), mettiamo una resistenza questa prenderà il nome di resistenza di pull up. Come dice il nome tiene a livello H in tensione la linea, allo stesso tempo il valore alto è debole quanto basta da permettere la commutazione al livello basso senza far circolare grandi quantità di corrente che andrebbe sprecata.

[2] Un byte sono 8 bit. 1 bit è l'elemento fondamentale e può valere 1 o 0.

[3]La ricezione di una condizione di START o di Repeated START, comporta il reset di ogni periferica sul bus. Su questa cosa dobbiamo stare molto attenti in fase di programmazione del Master.

BIBLIOGRAFIA

1. THE I 2C-BUS SPECIFICATION VERSION 2.1 JANUARY 2000 by Philips Semiconductors

2. Simulazione di una comunicazione fra dispositivi che utilizzano il protocollo i2c by Piccolo Fabio

3. Wikipedia

giovedì 24 giugno 2010

Circuit Snippets

Salve a tutti cari lettori, scusate la lunga assenza. Il trasferimento del blog e` avvenuto con successo, molti dei miei articoli li potete trovare su www.gioblu.com, ma ho deciso di ripostarli pure qui.
Arriviamo al dunque, oggi mi sono imbattuto in circuiti che sono molto utili per crearsi effetti da chitarra e li voglio ripostare qui per non perderli se eventualmente il sito da cui li ho presi venisse cancellato :D
I circuiti sono stati progettati da Tim Escobedo.
Ho scoperto questi circuiti grazie a questo video:

mercoledì 19 maggio 2010

Timer Bromografo e Novità

Purtroppo il nuovo sito è sempre in beta, lo shop non è attivo al 100%, ma sto inserendo molti contenuti e molte cose interessanti.




E tanto altro sui dispositivi, inoltre sto portando a termine un percorso suddiviso in diverse tappe in cui spiego come fare i circuiti stampati a casa propria. Questo percorso è suddiviso in:


Esposizione (da questa fase mi è venuta in mente l'idea di creare un timer per bromografo)


Foratura (in fase di sviluppo)

Insomma date un'occhiata e fatemi sapere qui cosa ne pensate, se trovate errori mi farebbe piacere ricevere una mail in cui scriverete cosa ho sbagliato.
Buona lettura (se ne avrete voglia) ;P

giovedì 6 maggio 2010

Trasferimento Blog

Scusate, è tanto che non scrivo perchè sono impegnato con un'altro sito, dove potrete trovare dei nuovi tutorial e molte altre spiegazioni, partendo dal pcb etching fino ad arrivare al protocollo i2c.
Appena il sito sarà up posterò vi darò l'indirizzo :D

domenica 14 marzo 2010

Un paio di Controller per Arduino

Ci sono vari metodi per mandare degli input ad Arduino, sicuramente con i controller ideati per i videogiochi il divertimento è maggiore!
Il primo con cui mi sono interfacciato è stato un controller Wireless della PlayStation 2.
Qui, ovvero nel Playground italiano del sito Arduino.cc, troverete una piccola guida con schemi e le cose che ho modificato per far funzionare la manopola della PS2.




Il secondo controller che ho avuto modo di utilizzare è il famosissimo Nunchuck per la Wii.



  • Come Procedere
Per prima cosa procuratevi un Nunchuck e una Board Arduino ( Cpt Obvious :D), poi procuratevi la seguente libreria.
Nei Nunchuck presi su dealextreme a meno di 5 euro la piedinatura è la seguente.

Marrone - GND
Rosso - GND
Giallo - 3V3
Bianco - CLK
Blu - DATA

Essendo il nunchuck un dispositivo che comunica tramite I2C andrà inclusa nel codice anche la libreria Wire.h (magari su questo protocollo creerò un post a parte che è importante).

La prova che ho fatto io con processing e arduino richiede i seguenti codici:

sabato 13 marzo 2010

Scrivere Bootloader ARDUINO Con UsbAsp (Windows Vista)

Dopo la rottura del mio arduino Mega sono rimasto bloccato nelle mie sperimentazioni e il mio "lavoro" non è più andato avanti.
Avevo anche un arduino diecimila non funzionante, o meglio la cosa che non funzionava era il chip.
Mi sono comprato un atmega168 e un paio di programmatori usbasp per poterci mettere il bootloader Arduino e quindi farlo funzionare.
Dopo giorni passati a maledire l'elettronica sono finalmente riuscito a flashareil bootloader dentro il chip e a riuscire finalmente a utilizzare questo Arduino Diecimila! Non so come mai con le ultime versioni dei driver non funziona nulla.

  • Materiale Occorrente
    • Un programmatore UsbAsp preso su questo sito, è un kit, ma non servono particolari skill per montarlo. Basta seguire il video e la component list. Sul pcb c'è scritto tutto. Inoltre devo dire che gli admin di questo sito sono molto disponibili. Mi hanno risposto a tutte le mail anche dopo aver comprato. Cosa che non è successa con protostack.com.
    • Arduino Diecimila
    • Atmega168
  • Come fare su Windows Vista.
  1. Scaricatevi WinAvr, ma non l'ultima versione bensì questa versione, naturalmente installatela
  2. Di LibUsb dovete installare questa versione. Prima di installarlo dovete cliccare col destro su proprietà->compatibilità->Esegui il programma in modalità compatibilità per-> windows xp service pack 2. Se avrete installato tutto correttamente vedrete questa schermata:
  3. Ora scaricate i driver di usbasp da qui e connettete il programmatore.
    Scegliete l'istallazione manuale e fate la ricerca in tutta la cartella dei driver.
  4. Premete il tasto start, cercate il programma CMD poi cliccateci col destro e aprite il percorso file.
  5. Eseguite cmd come amministratore e riducetelo a icona per il momento
  6. Connettete il jumper di Arduino Diecimila su alimentazione Ext e alimentatelo con un generatore da 9 V
  7. I collegamenti tra UsbAsp e Arduino Diecimila sono i seguenti
    Arduino -> ISP10(porta dell'UsbAsp)

    1 (MOSI) -> 1
    12 (MISO) -> 9
    13 (SCK) -> 7
    Reset -> 5
    GND -> 4
  8. Se avrete fatto tutto bene potrete scrivere:
    C:\Windows\system32>avrdude -c usbasp m168
    e vedrete :
    Microsoft Windows [Versione 6.0.6000]
    Copyright (c) 2006 Microsoft Corporation. Tutti i diritti riservati.

    C:\Windows\System32>avrdude -c usbasp -p m168
    found 7 busses

    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.01s

    avrdude: Device signature = 0x1e9406

    avrdude: safemode: Fuses OK

    avrdude done. Thank you.
  9. Adesso dovrete scaricarvi il Bootloader Arduino da qui
  10. Per scrivere il bootloader l'istruzione di AvrDude è questa
    C:\Windows\system32>avrdude -p m168 -c usbasp -U flash:w:\Users\xxx\Desktop\ATmegaBOOT_168_diecimila.HEX
  11. Ora collegate Arduino Diecimila con il pc e interfacciate l'IDE di Arduino, provate quindi lo sketch blink. Se il led sul pin 13 lampeggierà allora tutto sarà andato a buon fine.
Naturalmente ci sono tantissimi modi per usare UsbAsp, ma questo è il mio preferito.

martedì 2 marzo 2010

Oscilloscopio Low Cost + Aggiornamenti R2D2



Questo è l'oscilloscopio in kit che mi è stato regalato. Il costo è relativamente basso (23€ + spedizione su www.seeedstudio.com), ma lo sbattimento per montarlo è immenso.
Se non si hanno skill in saldatura SMD è altamente sconsigliato il kit di seeedstudio, mentre è consigliabile di prenderlo su www.sparkfun.com in cui da saldare ci sono soltanto i componenti dip.

Fortunatamente, anche se ormai non ci speravo più, quello che ho montato io FUNZIONA.
Non c'è stato bisogno di mettere il firmware nell'atmega1280, quindi basta "semplicemente" montare il kit e sarà tutto pronto per l'uso.

Ecco una foto da davanti...


eccovi le caratteristiche:
  • 5 Mega sample al secondo
  • possibilità di accoppiare il segnale in AC o in DC
  • banda massima 1Mhz
  • da 100mV a 5V per divisione
  • possibilità di mettere un trigger esterno
  • possibilità di catturare forme d'onda e salvarle nel buffer interno, per poterle poi leggere sul pc
  • possibilità di misurare la frequenza di segnali ttl
  • -alimentazione dai 9 ai 12 volt.

Sarebbe molto interessante se implementassero la FFT e magari uno metodo di switching efficace tra la modalità "misura frequenze" e la modalità "oscilloscopio".

Comunque devo dire che come oggetto merita di essere acquistato e dà veramente un sacco di soddisfazione riuscire a costruirlo.

Aggiornamento su R2D2

Avevo escluso a priori il comando tramite infrarossi per via dei disturbi esterni però dopo ques'ultimo esperimento mi ritengo abbastanza soddisfatto.


Per ora è soltanto un led in futurò sarà R2D2!

giovedì 18 febbraio 2010

L293B + Arduino Mega

Ho fatto cambiamenti importanti nel progetto di R2-D2, nella fattispecie sostituirò i 2 ponti H con l'integrato L293B.

A parità di numero di pin occupati vi elencherò i pro e i contro.

Ponti H

Pro:
  • Dimensioni
Contro
  • Replicabilità, ovvero è difficilissimo farne 2 che funzionino nello stesso modo.
  • Sopportano basse correnti.
L293B
Pro:
  • Sopporta fino a 2A per un tempo di 5 ms.
  • Pilota in maniera pressochè identica 2 motori in dc
Contro:
  • Dimensioni
  • Necessita di un dissipatore se lo si usa a piena potenza.
  • Consuma massimo 5W.

Sebbene i ponti H siano ottime soluzioni, ho deciso di adottare l'integrato L293B perchè è di gran lunga più affidabile.

Nel post precedente ho scritto che il motorino non partiva per via della poca corrente, mi sbagliavo, perchè dopo aver creato altri 2 ponti H mi sono reso conto che funzionavano in maniera diversa.

Mi spiego meglio: il motore con il primo ponte H partiva con una leggera spinta, il secondo ponte H faceva partire il motore da solo ma con una velocità leggermente inferiore al terzo.
Si capisce bene che è scomodissimo tarare i vari ponti H in modo che funzionino ugualmente.

Eccovi lo schema che ho utilizzato:


Ho collegato i pin 1,8,9,16 a +5v della board Arduino Mega.

Per non affaticare troppo il vostro PC alimentate la board con un alimentatorino a 9volt in DC, ma non fate girare il programma troppo a lungo perchè il regolatore di tensione sulla board si "sforza" parecchio.

Eccovi il codice che ho utilizzato

A breve le misure di corrente e tensione sui motorini.
Ecco un video dell'integrato all'opera:

lunedì 15 febbraio 2010

C1-P8

Salve a tutti, scusate se ho lasciato passare molto tempo dall'ultimo articolo, ma sono stato un po' impegnato.
Il progetto a cui sto lavorando adesso è veramente interessante, infatti sto cercando di automatizzare un C1-P8 (conosciuto nel mondo come R2-D2) trovato in un Happy Meal.


Come progetto è abbastanza complicato, il primo schemettino è questo:



Questo robottino avrà essenzialmente 2 modalità:

1. Telecomandato utilizzando gli integrati RX-2C e TX-2C che si trovano nella macchinine R/C da 2 lire della coop.

2. Va a giro e evitando oggetti.

In queste 2 modalità comunque il range sensor misurerà le distanze che verranno tradotte come variazione di colore.
Inoltre potrei implementare la modalità Demo in cui il robot sta fermo e fa uno show con colori. Ma vedremo, ancora è presto

  • IR-RANGE SENSOR

Ho creato l'IR-Range Sensor, con 2 diodi led uno ricevitore e un trasmettitore secondo questo schema:


Facendo alcuni test mi sono reso conto che funziona abbastanza bene, grazie a NetWorm (utente del forum di Arduino), che mi ha suggerito come isolare il ricevitore dalla luce solare, sono riuscito a migliorarlo. Infatti il ricevitore è bianco quindi l'involucro non filtra i raggi solari, se viene posto vicino ad una luce la sensibilità diminuisce molto. Rivestendo il ricevitore con dei negativi neri si riesce a filtrare la luce esterna.


Ed ecco alcuni risultati ottenuti utilizzando la mia Arduino Board come oscilloscopio.

Allontanando la mano dal sensore la tensione aumenta, mentre se la avvicino la tensione diminuisce.


  • Movimenti
Un ringraziamento particolare va a mio cugino che mi ha fornito degli elicotteri telecomandati che buttava via. Infatti ho potuto recuperare dei motorini in DC perfetti per il mio progetto come si vede da queste foto.




Per pilotare i due motori in DC ho costruito due ponti H veramente piccoli seguendo
questo schema.


Ho utilizzato 4 Transistor PNP BC33725, 4 Diodi 1N4148 e 4 resistenze da 1K. Tutto funziona alla perfezione escluso il fatto che la porta usb fornisce poca corrente per far partire in il motore, comunque non è importante perchè alimenterò tutto tramite una batteria più potente. Non ho utilizzato le porte logiche nel mio circuito perchè sono praticamente inutili e non mi permettono di pilotare la velocità con la PWM!

Ed ecco un video del primo risultato.

Ho finito anche il secondo ponte H e l'ho inserito nella seconda "zampa". Ora come ora devo scrivere le funzioni in attesa che mi arrivi il programmatore AVR e i vari microcontrollori che ho ordinato.

  • Alimentazione

Questa è "l'incredibile" batteria che utilizzerò, l'ho tirata fuori da un elicotterino telecomandato e i vantaggi grossi sono che, oltre a erogare 7.5V, ha un circuito esterno per la carica risparimando così spazio nel case del robottino.


Ora come ora sto scrivendo qualche funzione per gestire i motori e il sensore. Successivamente verranno il controllo remoto e la gestione del led RGB.

giovedì 4 febbraio 2010

Sample

Recentemente ho scoperto che si possono richiedere dei sample, ovvero esempi, dalle case produttrici di integrati.
Prima di comprare un integrato controllate se sui seguenti siti hanno dei sample equivalenti:

http://www.st.com/
http://www.ti.com
http://www.maxim-ic.com
http://www.microchip.com/

La maggior parte dei sample che spediscono sono in formato smd o simili quindi ci vogliono o adattatori da smd a dip, oppure ci vogliono skill in saldatura. Comunque controllate sempre se il sample che volete ci sia formato DIP.
  • Note personali
La microchip da come sample dei sensori di temperatura TCN75-5.0, l'unica pecca è che puoi ordinare solo 2 tipi diversi di sample e massimo 3 per pezzo. Dopo devi aspettare 30 per il prossimo ordine di sample. La TI è molto professionale, infatti dopo 4 giorni mi sono arrivati a casa i sample con corriere espresso.Ancora non mi sono arrivati i sample della maxim e della microchip, ma è ancora presto e vi terrò aggiornati.

Inoltre vi consiglio di essere sinceri quando vi iscrivete ai vari siti e vedrete che i sample arriveranno senza problemi. Non dite che siete aziende e che ordinerete più di 50000 integrati perchè rischiate che vi bannino dal sito e potrebbero decidere di sospendere questo tipo di servizio che è molto utile.

domenica 31 gennaio 2010

Hacking Alimentatore ATX PC

L'alimentatore è senza dubbio una delle parti più sottovalutate del pc, ma può dare molte soddisfazioni. In questo articolo vi illustrerò come simulare una scheda madre per far funzionare un vecchio alimentatore ATX.
Io ne ho utilizzato uno di un pc che mi sono deciso a buttare via, quindi non utilizzate alimentatori di pc che intendete usare.
  • Consigli
Per prima cosa scollegare l'alimentatore dalla rete elettrica per lavorare nella massima sicurezza.
Se l'alimentatore viene da un pc particolarmente vecchio vi consiglio di aspirare la polvere decennale che si trova all'interno del case. La polvere mista all'umidità può rivelarsi molto dannosa per i circuiti, inoltre se ne siete allergici rischiate di stare male.
  • Iniziamo
L'alimentatore si presenta essenzialmente così:



con 2 tipi di connettori, un tipo che si collega alla scheda madre (connettore ATX) e un tipo che si collega alle periferiche (HD, lettori cd/dvd ecc ecc).

Al connettore ATX arrivano fili di vari tipi di colori, il cavetto verde(o grigio in alcuni, ma rari casi) è quello che ci interessa. Infatti dovrete saldare un interruttore tra questo cavetto e un cavo nero (GND).

In questa foto potete osservare la mia soluzione. Tagliando il connettore ATX e aprendo il case dell'alimentatore, ho potuto mettere un interruttore e un led che mi indica il funzionamento dell'alimentatore.
Il led è collegado ad un rosso (+5V) e ad un GND tramite una resistenza da 10K, in modo da limitare la corrente e allungare la vita di questo componente.
Prima di tagliare il connettore ATX vi consiglio di cercare le due coppie di cavi formate da un cavo arancione più spesso e un cavo arancione più fine. Mettete un po' di scotch sulle coppie in modo da riconoscerle successivamente.
Tagliate pure il cavo ATX e saldate insieme il cavo spesso e quello fine delle coppie arancioni.

L'alimentatore ancora non funzionerà perchè ha bisogno di un piccolo carico (essendo uno switching), io ho fatto le mie prove con un HD, che ho sostituito con una ventola successivamente.
Io consiglio la ventola, come carico perchè è molto utile, ad esempio quando saldate potrete aspirare i fumi prodotti dal saldatore.

Ora vi troverete con un groviglio di cavi in mano e una ventola che gira, ma non vi scoraggiate, ce l'avete quasi fatta.

Sappiate che i colori dei cavi rispettano questi tipi di voltaggi.
  • + 5V, colore tipico del cavo : rosso
  • + 12V, colore tipico del cavo : giallo

  • + 3.3V, colore tipico del cavo : arancio

  • - 5 V, colore tipico del cavo : bianco

  • - 12 V, colore tipico del cavo : blu

  • + 5 Vstby , colore tipico del cavo : viola

Ora starà alla vostra fantasia creare un' interfaccia che utilizzerete per connettere questi cavi ai vostri circuiti. Personalmente ho optato per una soluzione "audio", utilizzando un pannello di rca e saldandoci i cavi dell'alimentatore.



Non è molto bello esteticamente, ma l'importante è che funzioni.
Se volete potrete mettere il tutto in una scatola di legno migliorandone il lato estetico. Inoltre aggiungendo dei led blue all'interndo del case, creerete quell'effetto tamarro che ci sta sempre bene :D.

  • Soluzione finale && prova con Arduino Mega
Tramite dei distanziatori ho attaccato il pannello di RCA alla griglia superiore dell'alimentatore.












Con i +5v possiamo alimentarci le nostre schede Arduino, non gravando più sull'usb del pc. La prima prova l'ho fatta con il classico sketch Blink e funziona.
Un alimentatore da pc, teoricamente è in grado di alimentare fino a un centinaio di schede Arduino.
Prima di buttare via un PC controllate che all'interno non ci siano pezzi utili per le vostre future invenzioni.

Non sarò responsabile di qualsiasi cosa succeda a voi o al vostro alimentatore se deciderete di seguire questo tutorial.

mercoledì 27 gennaio 2010

"Hello World"

Ho deciso di iniziare questo blog perchè da poco ho iniziato ad utilizzare la piattaforma Arduino e voglio condividere con il mondo i miei progetti e le mie piccole conquiste.
  • Introduzione
Molto spesso mi capita che le persone mi chiedano, "ma cosa è Arduino?". Una risposta semplice non esiste.

Sul sito ufficiale troverete:

" Arduino è uno strumento che permette di costruire computer in grado di interagire con l'ambiente in cui si trovano. E' una piattaforma open-source di physical computing basata su una semplice scheda a microprocessore unita a un ambiente di sviluppo con cui programmarla."

Per le persone che non hanno conoscenze tecniche avanzate, Arduino è una piattaforma opensource che interagisce con sistemi fisici utilizzando software e hardware (nello specifico sensori e attuatori).

Il sensore è un oggetto che trasforma una grandezza fisica in un segnale elettrico che poi sarà acquisito da un sistema digitale, mentre l attuatore al contrario, trasforma un segnale elettrico in una grandezza fisica (es Microfono -> sensore; altoparlante -> attuatore).

Secondo me questa piattaforma è rivoluzionaria perchè mette a disposizione ottimi strumenti per lo sviluppo di progetti, non solo a livello di codice ma anche di hardware. L' unico limite che avrete sarà la vostra immaginazione e il numero di pin :D.

  • About Arduino
Arduino nasce nel 2005 dall'esigenza di avere un micro controllore performante e semplice da usare. Il padre di questa fantastica piattaforma è l'italiano Massimo Banzi.
Naturalmente non ha fatto tutto da solo, insieme a David Cuartielles (ingegnere elettronico spagnolo) e ad uno studente David Mellis,(che ha scritto il codice per la programmazione) hanno dato vita al "sogno Americano".

Con un "piccolo" investimento iniziale hanno prodotto 200 schede di cui soltanto 50 sono state vendute alla scuola di Design di Ivrea in cui insegnava Banzi, ma successivamente grazie al passaparola ne sono state ordinate a centinaia. Da lì la crescita esponenzianle delle ordinazioni. (leggendo la loro storia nel dettaglio mi sono venuti in mente Steve Jobs e Steve Wozniak che vendono il loro camioncino e costruiscono Apple I nel loro garage :D)

La particolarità di questa invenzione è l'utilizzo della licenza Attribution Share Alike (Creative Commons). Ovvero chiunque può replicare questa scheda senza dover pagare niente alla società di Banzi ovvero la Tinker.it, al contrario di quello che potete pensare questo è stato il fattore che ha fatto vincere il team Arduino. Migliaia di persone si sono interessate e hanno contribuito a migliorare il progetto per renderlo perfetto.

In poche parole l'utente di questa board non solo può adoperarla per i suoi scopi e replicarla come vuole, ma può contribuire per renderla migliore.

Un'altra scelta vincente è che la programmazione delle Board Arduino avviene tramite un'interfaccia scritta in Java. Quindi variando il sistema operativo, il risultato non cambia, potrai comunque programmare la tua Board senza problemi.
  • Come ho conosciuto Arduino.
Ho conosciuto arduino grazie al canale youtube di Make Magazine, una rivista americana, passatemi il termine, "spettacolare" per il Fai Da Te. Su questo canale utilizzavano Arduino Duemilanove per realizzare sketch relativamente semplici, ma la mia curiosità sempre maggiore mi ha spinto a informarmi e a cercare dati e progetti. Successivamente ho acquistato una scheda
Arduino Mega1280 con un unico rimpianto. Non è originale.
  • No ai cloni
La licenza di Arduino sarà pure free come il codice, ma l'azienda di Banzi si è riservata l'utilizzo esclusivo del nome. Il nome Arduino infatti fa la differenza e chi vuole utilizzarlo deve pagare una piccola commissione alla Tinker.it perchè, giustamente, non vogliono che siano messi in commercio dei cloni di pessima qualità.

Vi posso dire che c'è differenza tra un originale e un clone. I cloni li trovate sui siti non autorizzati, ovvero tutti quelli che non sono in questa lista.

Senza troppa ipocrisia vi posso dire che ho comprato su ebay la mia scheda Arduino Mega e ho risparmiato una 30ina di euro, ma sono soddisfatto?
La risposta è no.

Il pcb è originale, ma le saldature e le rifiniture lasciano veramente a desiderare (e mi fanno credere che se non la tratto benissimo durerà veramente poco).

Inoltre lo starter kit che ho preso è veramente pessimo: i jumper si rompono facilmente, spesso i componenti inseriti nella board non fanno contatto e l'unica cosa buona è il display lcd 16x2 che però ti vendono senza "attacchi" per la board quindi se non sai saldare non puoi utilizzarlo.

Quindi lettori, comprate sui siti autorizzati perchè avrete assistenza e molte più garanzie di aver fatto un ottimo acquisto! Inoltre non favorirete l'economia dei copioni. (Nel mio caso cinesi perchè il pacco veniva da Honk Kong).

Rimedierò presto al mio errore comprando un Arduino Duemilanove da un rivenditore ufficiale.
  • Testi Consigliati[1][2]
  1. "Getting Started" di Make in Inglese (+ Giapponese e Cinese) di Massimo Banzi[2]
  2. "Making Things Talk" di Tom Igoe (Inglese) della rivista Make
  3. "Practical Arduino" di John Oxer (Inglese)
  4. Programming Interactivity di Joushua Noble che ha un capitolo su Arduino (inglese)
  5. "Arduino- Physical Computing für Bastler, Designer und Geeks" di Alex Wenger et al (Tedesco)
  6. "Tinkering with Arduino" di Nick Weldin (In inglese, è una versione espansa e corretta del mio primo booklet su Arduino)
[1]Suggeriti da Massimo Banzi
[2]"Arduino La guida ufficiale" non è un libro autorizzato dalla Tinker.it ed è spacciato per ufficiale.
  • Link Utili
Il sito ufficiale di Arduino
Dove comprare Arduino
Il software di Arduino
Il forum di Arduino
Come nasce Arduino

Visite