Comunicazione dati – Parte 1

Sul blog di Elettronica Open Source puoi leggere non solo tutti gli articoli Premium riservati agli abbonati Platinum 2.0 e inseriti nella rivista Firmware 2.0 (insieme ad articoli tecnici, progetti, approfondimenti sulle tecnologie emergenti, news, tutorial a puntate, e molto altro) ma anche gli articoli della Rubrica Firmware Reload. In questa Rubrica del blog abbiamo raccolto gli articoli tecnici della vecchia rivista cartacea Firmware, che contengono argomenti e temi evergreen per Professionisti, Makers, Hobbisti e Appassionati di elettronica. In questo articolo, attraverso una rassegna di esempi, vedremo come poter interfacciare il proprio hardware al PC o far comunicare due schede embedded tra loro.

Introduzione

Parlando di comunicazione dati tra una scheda embedded ed un PC, le porte seriali asincrone sono probabilmente le porte più facili da utilizzare. Le porte seriali (in genere nello standard RS232) sono ben integrate nei sistemi operativi e di solito hanno bisogno solo di tre fili. Ci sono molti strumenti software per queste porte, gratis o a pagamento, c’è abbondanza di documentazione e il protocollo è facile da capire. Inoltre, molti microcontrollori hanno direttamente integrati uno o più blocchi hardware (UART) di interfaccia seriale e, anche quando non fossero presenti, sono abbastanza facili da implementare tramite software. Oramai sono quasi del tutto scomparse nei computer attuali, ma si trovano varie alternative. Prima di tutto esistono dei convertitori seriale/USB, piccoli circuiti che implementano una seriale su una porta USB e che appaiono al sistema operativo (OS) come una normale seriale RS232, utilizzabile come consueto. Questa soluzione è semplice da usare, basta aggiungere un chip seriale/USB al progetto. Quelli più comuni sono il Prolific PL2303, la famiglia CP210x di Silicon Labs e i dispositivi FTDI (Figura 1).

Figura 1. Il modulo UM232R di FTDI

Figura 1: Il modulo UM232R di FTDI

I driver per i vari OS sono generalmente forniti dal produttore del chip e per l’utente è quasi come una porta seriale tradizionale, anche se a volte questo sistema può risultare lento. Ricordate se possibile di impostare la latenza del driver al minimo e di verificare eventuali conflitti di IRQ. Un’altra possibilità è quella di utilizzare collegamenti seriali Ethernet. In commercio ci sono molti convertitori seriale/Ethernet (chiamati anche server seriali). Utilizzando i driver forniti dai produttori, è possibile aggiungere una o più porte seriali virtuali al sistema operativo del computer. Queste porte (Figura 2) possono essere usate proprio come porte convenzionali, sono più costose delle porte seriali/USB, ma offrono un isolamento elettrico, la possibilità di avere all’interno dello stesso package differenti standard di interfaccia (RS-232, RS-485, ecc.), wireless (Wi-Fi), la copertura di lunghe distanze e un’interfaccia di configurazione user friendly tramite un browser Internet, che spesso consente anche di pilotare un certo numero di ingressi/uscite di tipo non seriale.

Figura 2. Il modulo NE-4110 è un ponte tra la porta seriale (RS-485/RS-422) e Ethernet

Figura 2: Il modulo NE-4110 è un ponte tra la porta seriale (RS-485/RS-422) ed Ethernet

Una terza soluzione è la porta seriale Bluetooth, ma in questo caso saliamo un pò in complessità, poiché è necessario affrontare anche le problematiche del collegamento Bluetooth. Come per i convertitori seriale/USB, i chip Bluetooth spesso includono una porta seriale per rendere più facile la realizzazione di un collegamento wireless. Il vantaggio di questo tipo di connessione è l’isolamento del segnale, intrinseco nel sistema senza fili. Se il computer non è dotato di Bluetooth integrato, per pochi euro è possibile aggiungere ad esso una chiavetta USB Bluetooth che, di fatto, è un convertitore seriale/Bluetooth/USB, mentre sul progetto basterebbe solo aggiungere un piccolo modulo Bluetooth alla porta seriale del microcontrollore (Figura 3). Il lato software di questa soluzione è lievemente più complesso, in quanto il protocollo Bluetooth, con i suoi codici PIN e gli altri comandi, richiede più programmazione per essere gestito. In conclusione, le porte seriali rimangono ancora quelle di più facile impiego, anche se bisogna ricorrere ad adattatori USB o altro. Ma il grande svantaggio delle RS232 è e rimane la sua lentezza. Se si deve solo inviare un comando o leggere qualche dato ogni tanto, questa porta è molto adatta, ma quando sale la richiesta di velocità di trasferimento è meglio usare un altro sistema di comunicazione.

Figura 3. Il modulo BTM222 di Rayon

Figura 3: Il modulo BTM222 di Rayon

La porta parallela

Dal momento che, proprio come le porte seriali, le porte parallele non esistono più e, inoltre, a differenza delle seriali, i convertitori parallela/USB non si sono mai diffusi, la soluzione impiegante la porta parallela è una soluzione quasi mai percorribile. Esistono delle porte di espansione per notebook che permettono di aggiungere una porta Centronics per la stampa, ma non è la stessa cosa della vecchia cara porta parallela bidirezionale con tutte le sue opzioni EPP/ECP. Inoltre, la comunicazione con questo tipo di interfaccia non è semplice, anche per la scarsa documentazione in circolazione. Quando ci sono molti dati da trasferire è meglio utilizzare porte USB, Ethernet, FireWire, oppure la scheda audio. Se non ci sono altre soluzioni, si può sempre aggiungere una scheda di espansione PCI o qualcosa del genere. Il vantaggio di passare attraverso una porta FireWire o USB è che i sistemi operativi includono già i driver che definiscono i tipi di dati. Per esempio la USB utilizza le classi, che permettono al sistema operativo di caricare il driver appropriato. In questo modo l’applicazione può accedere alla porta in un modo standard, che semplifica la programmazione perché tutto è documentato e gli esempi sono facilmente reperibili su Internet. Rimane comunque da scegliere con cura la classe per la periferica USB, in quanto ciò determinerà la larghezza di banda che il sistema operativo allocherà alla periferica stessa (ad esempio 64 Kb/s per una periferica HID ad “alta velocità”), anche se questo suggerimento sta diventando superato grazie alla velocissima USB “Super Speed”. Per quanto riguarda la periferica le cose sono più complicate, in quanto ora la classe USB deve essere rispettata, cosicché non è più sufficiente aggiungere solo un chip seriale/USB.

Il consiglio è di procurarsi un microcontrollore con una porta USB integrata, che però richiederà del codice extra per essere gestita. Il collegamento FireWire è ancora più complicato, in quanto non sembra esservi in giro nessun componente che permetta di aggiungere facilmente una porta FireWire ad un progetto autocostruito. Una buona alternativa alla FireWire o alla USB è l’Ethernet. Non ci stancheremo di ripetere continuamente che non è difficile adattare una porta Ethernet ad un progetto autocostruito, dato che sono facilmente reperibili molti chip Ethernet facili da usare, ad esempio della Realtek, della National Semiconductor, il ben noto CS8900A (Figura 4) della Cirrus Logic o l'ENC28J60 della Microchip. È anche possibile implementare un collegamento Ethernet senza un controller hardware dedicato, se il processore è abbastanza veloce, ma è altrettanto vero che l’Ethernet ha bisogno di un microcontrollore con molte risorse (in particolare di RAM) e la programmazione risulta più complessa, ma su Internet si possono trovare un gran numero di librerie che possono limitare la quantità di lavoro che si dovrà fare.

Figura 4. il Crystal CS8900A controller Ethernet LAN.

Figura 4: Il Crystal CS8900A controller Ethernet LAN

Per molte persone, Ethernet e Internet sono sinonimi, ma non c’è davvero alcun bisogno di passare attraverso uno stack TCP/IP se si vuole utilizzare una rete Ethernet. In particolare, quando il collegamento tra il computer e la periferica è diretto, può essere molto vantaggioso non utilizzare per niente uno strato TCP/IP. Naturalmente, una connessione con lo stack TCP/IP offre molti vantaggi (tutti i router e le altre periferiche Ethernet operano nativamente con il TCP/IP), ma aumenta il carico dell’applicazione utente e per questo, il “padre fondatore” WIZnet offre dei chip che non comprendono solo un controller Ethernet, ma anche uno stack TCP/IP hardware (Figura 5) e la loro ultima offerta, il W7100, che include anche un processore compatibile 8051. Questi chip possono essere pilotati tramite un bus SPI o addirittura un bus parallelo, se c’è bisogno di maggior velocità. Ci sono anche piccoli moduli che consentono di aggiungere una porta Ethernet a qualsiasi applicazione, i quali inoltre di solito includono già un processore che può essere utilizzato per l’applicazione, evitando così la necessità di aggiungere un altro processore dedicato. La rete Ethernet è molto ben integrata nei moderni sistemi operativi ed è facile con essa inviare o ricevere dati ad alta velocità. Non vi è alcun problema con la classe delle periferiche o altre complicazioni, tutto ciò che resta da fare è aprire la porta Ethernet per poterla utilizzare.

Figura 5. Il Wiz 830MJ è un modulo che comprende non solo un controller Ethernet, ma anche uno stack TCP/IP hardware.

Figura 5: Il Wiz 830MJ è un modulo che comprende non solo un controller Ethernet, ma anche uno stack TCP/IP hardware

Scheda audio

Tutti sanno che la scheda audio può essere utilizzata per trasformare un computer in un oscilloscopio o in un generatore di funzione. Questa interfaccia non solo permette la comunicazione full-duplex, ma ha anche 2 o 6 canali (stereo o 5+1), se non di più. Il grande vantaggio della scheda audio, rispetto alle altre porte, è dovuto alle sue uscite analogiche, che permettono di pilotare i circuiti direttamente tramite tensioni, quando necessario. In questo modo la scheda audio può pilotare un piccolo circuito che non preveda un microcontrollore, dato che è effettivamente molto semplice generare un file audio contenente tensioni di controllo. Per una maggiore flessibilità, è necessario mettere mano alla programmazione della scheda audio, ma in ogni caso questo argomento è ben coperto da un gran numero di siti web. Con questa scheda si possono anche emulare protocolli seriali ed utilizzando una frequenza di campionamento di 96 kHz è possibile raggiungere una velocità di comunicazione accettabile. Gli ingressi della scheda audio permettono di leggere anche tensioni molto piccole, specie se si utilizza l’ingresso microfonico. Però uno svantaggio di questa soluzione è il basso livello dei segnali in uscita, tipicamente 1 Vpp, che andrà spesso amplificato per poter essere utilizzato. Si noti anche che le schede audio di solito non sono in grado di gestire tensioni continue a causa dei condensatori in serie sui loro ingressi e uscite e quindi converrà caratterizzare bene le frequenze minima e massima raggiungibili prima di usarle.

LA PORTA PS/2

La comunicazione tramite porta PS/2 è di tipo seriale sincrona. Le porte PS/2 sono bidirezionali, quindi possono essere utilizzate per pilotare qualcosa, così come per ricevere dati. Normalmente queste porte sono utilizzate per collegare una tastiera e un mouse al computer. Il protocollo di comunicazione è molto semplice e consiste in una linea dati e una linea per il clock di sincronizzazione. Tipicamente i livelli sono compresi tra 0 e 5 V. Ogni microcontrollore con una porta SPI è in grado di poter gestire una comunicazione di tipo PS/2, ma è estremamente semplice implementarla anche solo via software, utilizzando il meccanismo del “bit-banging”. Per impostazione predefinita, il sistema operativo del computer tratta i dati ricevuti nelle sue porte PS/2 come i dati di una tastiera o di un mouse, quindi facendo inviare dal progetto le informazioni giuste, è possibile scrivere direttamente in un file o spostare il cursore del mouse. Utilizzando le scorciatoie da tastiera, è possibile eseguire tutti i tipi di comandi, ma forse la cosa più interessante è quella di inviare alcuni dati ben definiti alla nostra applicazione. Ciò richiede la scrittura di codice aggiuntivo dal lato computer, ma non è nulla di così complicato!

COMUNICAZIONE SCHEDA-SCHEDA

Per la comunicazione tra due singoli circuiti si finisce solitamente con lo scegliere USB, I2C o RS-232. La logica di fondo è la stessa di quella adottata nell’industria, ma l’entità delle problematiche che si riscontrano qui sono di un livello differente e comportano altre necessarie soluzioni. Sebbene la maggior parte dei nostri lettori non ha accesso ai pesanti bilanci dei progetti industriali, ci sembra utile esaminare un pò com’è che vanno le cose lì. Questo stimola il succo della creatività, ed è sempre bene dare uno sguardo oltre il recinto. Nel prossimo articolo vi presentiamo una breve panoramica della categoria "industrial buses". Una sintesi completa andrebbe a riempire numerosi libri, dunque abbiamo limitato la nostra selezione alle soluzioni "out of the box" - questo non è il luogo per cercare di spiegare come avvengono le comunicazioni tra la vostra scheda video e la scheda-madre. Inizieremo con l’industria automobilistica, per poi passare attraverso il regno dell’ingegneria di processo, e terminare con la tecnologia wireless.

Scarica subito una copia gratis

Scrivi un commento

Send this to a friend