Comunicazione seriale

La comunicazione seriale permette ad Arduino di comunicare con altri dispositivi tramite pochi fili Hardware, per i segnali RX (ricezione) e TX (trasmissione), tra Arduino e le periferiche, oltre a un software di comunicazione.

L’Hardware, invia e riceve i dati rappresentati da una serie di bit sequenziali di zero e uno (3,3/5 volt).

Su Arduino, c’è un’uscita per la RS232, che è il più vecchio e usato standard di comunicazione seriale con l’utilizzo di un connettore a 9 pins; i segnali in uscita da Arduino, devono essere convertiti mediante appositi convertitori per adattare i livelli di tensione delle periferiche.

Arduino dispone di adeguate librerie software per comunicare con le periferiche hardware mediante i corretti protocolli di comunicazione (Header, footer, start, stop, speed, parity, end)

https://www.arduino.cc/en/Tutorial/ArduinoSoftwareRS232

All’interno di Arduino c’è un UART (Universal Asynchronous Receiver /Trasmitter) che ha il compito di convertire i segnali provenienti dall’esterno, da seriale a parallelo e viceversa, quando deve comunicare con l’esterno; questa comunicazione può avvenire con una sola periferica alla volta, fortunatamente ci sono librerie software che permettono di utilizzare alcuni I/O in emulazione della porta seriale, anche se necessitano di risorse di tempo e memoria.

Oltre alla porta RS232, c’è un chip che converte il collegamento seriale (TTL) in USB (Universal Serial Bus), che è la porta di collegamento con cui il PC invia il programma ad Arduino e questo ultimo risponde al PC di aver ricevuto i dati.

Flowcode, ha librerie (macro component) per gestire diverso hardware commerciale da interfacciare, tramite collegamenti seriali, con Arduino.

Comunicazione seriale I2C (I squared C) (Inter-Integrate Circuit Bus)

Il bus I2C, è un protocollo di comunicazione seriale che utilizza due fili per trasferire i dati dal “Master” verso gli “Slave”; permette di estendere i pins I/O digitali o analogici o di comunicare con altre schede Arduino , fino a un massimo di  112 unità, con una velocità di trasferimento  minima di 100 kb/sec, in funzione della velocità dello Slave, può raggiungere anche 1Mb per secondo.

Arduino UNO utilizza i pins A4/SDA (Serial Data link) e A5/SCL (Serial Clock line), collegando tutti gli SDA insieme e tutti gli SCL insieme.

Il Master può interrogare gli slave chiedendo dati, ma gli Slave non possono scrivere direttamente nel Master o in un altro Slave.

Ogni Slave ha un unico indirizzo sul bus I2C, in modo che il Master possa interrogare lo slave che gli interessa; un solo Slave alla volta.

La trasmissione I2C, consiste di un segnale di Start, un segnale di Restart e uno di Stop e uno o più gruppi di Dati da 8-bits trasferiti con 8 cicli di clock; ciascun byte inviato, è seguito da un Ack (acknowledged) o Nak ( not acknowledged) da parte dello Slave ricevente richiedendo al Master di inviare il nuovo dato oppure, se non ricevuto correttamente, di inviarlo di nuovo.

Il bus I2C, richiede una resistenza di Pull-up compresa tra 4,7K e 10K ohm, tra i due segnali è VCC, preferibilmente al 3,3 V, permettendo al Master di riconoscere il bus eliminando la necessità del traslatore di livello; alcuni componenti I2C, hanno queste resistenze di pull-up, al loro interno.

Molti sensori (Real Time Clock, temperatura, pressione, inerzia,…) utilizzano il bus I2C; solitamente i sensori si trovano sulla stessa scheda del microcontrollore (Master), se la distanza tra il Master e gli Slave supera 100 cm, potrebbero esserci problemi  di comunicazione a causa della elevata frequenza dei segnali digitali.

Comunicazione Seriale SPI

Il metodo di comunicazione seriale SPI, permette di collegare le apparecchiature elettroniche come computer, stampanti, scanner utilizzando solo quattro fili, per la trasmissione dei segnali digitali, più due fili per l’alimentazione positiva e negativa (massa).

La velocità di trasferimento dati varia da 1 a 100 Mbits per secondo, si usa una resistenza di pull-up sul pin CS, per disabilitare il bus nella  fase di “boot”  del Master; comunicazione tra Master e Slave: uno solo alla volta e cavi corti.

Il bus SPI, non riconosce automaticamente la VCC, pertanto è necessario fare attenzione che tutto funzioni a 3,3 V.

Il protocollo di comunicazione è di tipo “Master-Slave” e sono trasmessi simultaneamente (full Duplex).

Nella comunicazione tra computer e stampante laser, il PC invia il segnale che il documento è pronto per la stampa, la stampante risponde che è pronta per la stampa , quindi il computer invia il documento e la stampante lo stampa.

La comunicazione seriale tra il Master, avviene tramite uno shift register a 8 bit che serializza i dati provenienti dal computer, che sono ricevuti da uno shift register contenuto nello Slave.

Il “digital Clock”, SCLK, sincronizza la trasmissione.

I segnali :

  • MOSI: Master Out, Slave In; Uscita dal Master e ingresso in Slave anche indicato come SDO o DO
  • MISO: Master In, Slave Out; Ingresso in Master e uscita da Slave anche indicato come SDI o DI
  • SCLK: Serial Clock; clock comune     anche indicato come SCK
  • SS: Slave Select; selezione circuito Slave    anche indicato come CS

 

I circuiti Slave, possono essere collegati in parallelo, il segnale Chip select (CS o SS), seleziona il chip, attivando o spegnendo l’uscita dello Slave (MISO).

 

La gestione di un display LCD, è un esempio di come utilizzare il “macro component” LCD per gestire tutte le funzioni (start, clearline, cursor, scrollDisplay,  print…); il “macro component”, emula il collegamento seriale utilizzando qualsiasi porta I/O disponibile.

 

Le SD Card, formattate in FAT16 o Fat32, utilizzano il collegamento SPI; ci sono apposite librerie per la loro gestione.

Miso mosi

Riccardo Monti