Connessione di microcontrollori

a porte RS-232 e dispositivi PS/2- v. 1.1

Siete il visitatore n.

Click here for English version

Pagina ottimizzata per risoluzione 1024x768

     
 
 
Un PIC 16F877 interfacciato con un mouse PS/2 con un PC; il circuito (sulla destra nelle due immagini) è la versione successiva (v. 2.1) di quello qui presentato, con un maggior numero di canali TX/RX e alcuni LED, ed è al momento sotto test; sullo schermo dell'oscilloscopio sono visibili i segnali PS/2 data e clock
 
 
Torna alla Home Page

Recapiti

Argomenti simili su questo sito:

PIC 16F877 Development Board v. 1.2
Connessione e comunicazione PIC-mouse PS/2
Keypad 4x5 per microcontrollore
 
 
Caratteristiche del circuito

In questa pagina viene presentato un semplice circuito che permette l'interfacciamento di un microcontrollore con un dispositivo PS/2 e con la porta seriale di un PC funzionante con i livelli previsti dallo standard RS-232. Sulla basetta trovano posto anche 4 tasti, il cui valore logico può essere letto dal microcontrollore e quindi utilizzato come input da parte dell'utente. Il circuito è stato progettato per il microcontrollore PIC 16F877 per quanto riguarda il valore dei resistori di protezione verso il connettore PS/2 e verso l'adattatore di livelli logici fra RS-232 e TTL (vedi schema elettrico più avanti). Data comunque la semplicità del circuito e il valore non critico delle resistenze, dovrebbe comunque andare bene anche per altri PIC e altri microcontrollori. Faremo riferimento in questa pagina all'utilizzo con il PIC 16F877.

Il circuito deve essere alimentato a +5 V; nel caso l'alimentazione avesse valori diversi, l'interfaccia per RS-232 potrebbe non funzionare affatto e potrebbe provocare danni alla seriale del PC ed eventualmente al microcontrollore; danni potrebbero aversi anche per il mouse PS/2 collegato all'omonimo connettore. Il microcontrollore e il circuito devono essere inoltre connessi ai medesimi terminali di alimentazione (Vdd = +5 V, GND); se il microcontrollore fosse alimentato con tensioni diverse, le sue porte collegate al circuito potrebbero infatti subire danni.

Per qualche informazione sulla comunicazione con un mouse PS/2, potete leggere l'articolo Connessione e comunicazione PIC-mouse PS/2 su questo stesso sito.

Per la comunicazione con la porta seriale RS-232 viene impiegato il classico MAX232, adattatore di livelli elettrici TTL/RS-232. I canali utilizzabili sono quattro, due in ingresso e due in uscita. Il microcontrollore può essere interfacciato alla seriale 232 con la massima libertà, in quanto i 9 segnali RS-232 sono presenti su due connettori del circuito; i quattro canali di I/O del MAX 232 sono anch'essi accessibili su due connettori; in tal modo, con dei semplici fili, saldati, volanti o con terminazioni a piacere, è possibile connettere quattro porte TTL del microcontrollore ai segnali desiderati della RS232 (2 in ingresso e due in uscita). Tipicamente, due canali saranno TD e RD; gli altri due canali disponibili possono ad esempio essere utilizzati per gestire i segnali RTS e CTS, DTR e DSR o DCD, RI. La presenza dei connettori permette inoltre di effettuare l'handshake simulato, connettendo fra loro ad esempio DTR e DSR, ecc..

 
 
Il circuito versione 1.1

Riconoscimenti e avvertenze

I nomi Microchip e PIC sono marchi registrati.
Trattandosi di materiale messo gratuitamente a disposizione di chiunque lo desideri, ne è assolutamente vietata ogni forma di utilizzazione a fini commerciali.
Lo schema elettrico per l'adattamento dei livelli elettrici TTL - RS-232 è assai diffuso in letteratura. Altrettanto dicasi della connessione per la lettura dello stato logico di pulsanti. L'ideazione del circuito stampato è invece totalmente personale, sebbene immagini che circuiti simili possano trovarsi sulla rete. Se in qualche modo si intende utilizzare il layout di questo circuito per scopi non puramente personali o divulgare il materiale contenuto in questa pagina, è fatto obbligo di richiedere un permesso scritto all'autore di questo articolo (anche via e-mail).
E' altresì vietata ogni lieve modifica al layout del circuito se non per fini didattici o strettamente personali; nel caso il layout sia solo lievemente modificato, tali modifiche non debbono comunque rappresentare fonte diretta o indiretta di profitto.
Se in qualche modo si intende divulgare tali lievi modifiche è fatto obbligo di richiedere un permesso scritto all'autore di questo articolo (anche via
e-mail).
Naturalmente è consentito effettuare modifiche sostanziali del layout, per qualunque scopo.

Lo schema elettrico, il layout del circuito e tutte le informazioni contenute in questa pagina sono fornite così come sono, senza alcuna forma di garanzia. Non mi assumo naturalmente alcuna responsabilità per danni diretti o indiretti a persone o a cose derivanti dalle informazioni contenute in questo articolo.
In particolare, sebbene siano stati previsti resistori di protezione, non mi assumo alcuna responsabilità per eventuali danni ai microcontrollori, ai dispositivi PS/2, alle porte seriali dei PC o ai PC stessi.
Sono infine gradite segnalazioni di qualunque genere che possano consentirmi di migliorare il circuito stesso.

In ogni caso, siate sempre certi di sapere con esattezza ciò che state facendo!

Il circuito è stato disegnato con TARGET 3001! Light (licenza 400 pin). Si tratta di un CAD per il disegno di PCB a basso costo e nello stesso molto funzionale.

Il circuito

Nota: le immagini visibili in questa pagina sono in bassa risoluzione (100 dpi). Per avere le stesse immagini, ma a 300 dpi, in una nuova finestra, da dove potrete stamparle o salvarle, potete fare click direttamente su quelle visibili qui sotto o sui link sottostanti. Più avanti, nella sezione "Immagini per la realizzazione", vengono riportati tutti insieme i link per salvare le immagini a 300 dpi.

Come si può notare nell'immagine qui sotto, al connettore K5 sono connessi i 9 fili della seriale. I versi del segnale sono indicati dalle frecce vicine ai vari terminali dei connettori stessi. Fra K5 e K6 sono montate resistenze di protezione da 330 Ohm. I segnali di K6 che si desidera connettere al microcontrollore devono essere collegati agli opportuni terminali di K7 e K8 (livelli RS-232); su K9 e K10, connessi al MAX 232 attraverso resistenze di protezione, sono presenti i segnali TTL corrispondenti a quelli su K7 e K8. Il microcontrollore dovrà dunque essere connesso a K9 e K10. I due connettori K5 e K6 permettono inoltre di effettuare opportune connessioni per l'handshake simulato: ad esempio, si potrebbe connettere DTR su K6 a DSR su K6 o su K5, interponendo quindi fra DTR e DSR nel primo caso una resistenza di 2*330 Ohm e nel secondo caso una resistenza di 330 Ohm. Leggi più avanti le note sui resistori di protezione.

Qui l'immagine di piste e componenti a 300 dpi

Al connettore K3 va connessa l'alimentazione a +5V, la stessa del microcontrollore. Come anticipato, se l'alimentazione applicata alla basetta non è uguale a quella del microcontrollore (stessi terminali Vdd e Vss), il microcontrollore stesso potrebbe subire dei danni. Se l'alimentazione utilizzata è diversa da +5 V, potrebbe aversi malfunzionamento dei dispositivi interfacciati, ovvero il mouse PS/2 e la seriale del PC, ad eventualmente dei danni agli stessi. Il connettore K12 permette di portare l'alimentazione ad altri circuiti.
NOTA: il nome dei segnali da 1 - DCD a 9 - RI nell'immagine di piste e componenti (appena qui sopra) è riferito ai pin del connettore K5, alla sinistra dei nomi stessi; i numeri 1-9 associati a detti segnali corrispondono anche alla numerazione fisica dei pin del connettore K4 (SUB-9), che prevede una fila di pin numerati da 1 a 5 e una fila di pin numerati da 6 a 9, ma si noti che nello schema elettrico (immagine poco più avanti) la forma del connettore SUB-9 e la disposizione dei pin, numerati in ordine crescente verso il basso a file alterne, fisicamente non rispecchia la numerazione dei pin del connettore reale. In ogni caso, per utilizzare questo circuito si deve fare riferimento ai segnali su K5 e K6, senza preoccuparsi dell'effettiva piedinatura del connettore SUB-9.

Sul connettore K2 sono presenti i segnali Clock e Data per la comunicazione PS/2.

Sul connettore K11 sono presenti i ivelli logici relativi ai quattro pulsanti; normalmente essi sono alti, per la presenza dei pull-up; premendo un pulsante, il corrispondente pin va a livello logico basso.

Note sui resistori di protezione

Resistori di protezione R1, R2, R13, R14, R15, R16, R17, R18, R19, R20.

Essi limitano la corrente erogata/assorbita da ciascuna porta del microcontrollore nel caso di collegamento errato o programmazione errata dei pin di I/O; il valore massimo di tale corrente è di circa 5 V/ 330 Ohm = 15 mA. Se il vostro microcontrollore non può erogare/assorbire tale corrente, aumentate il valore delle resistenze. Per alcuni microcontrollori si deve rispettare anche un valore massimo di corrente erogabile/assorbibile totale o per un determinato set di porte: ad esempio, con connessioni errate e con errori di programma, facendo erogare/assorbire 15 mA alle 10 porte del microcontrollore che in totale possono essere connesse a questo circuito, si potrebbe superare il limite di corrente consentito.

Resistori di protezione da R5 a R12.

Le specifiche dello standard RS-232 prevedono che un cortocircuito debba essere tollerato dai dispositivi, e che in tale evenienza la corrente sia limitata. In teoria, dunque, i resistori di protezione da R5 a R12 dovrebbero essere superflui. Per motivi precauzionali, comunque, ho deciso di inserire tali resistori, il cui valore (330 Ohm) deve essere considerato di indirizzo, e non un valore corretto per ogni porta seriale 232. Si tenga presente che, utilizzando per l'handshake simulato opportune connessioni direttamente fra i pin del connettore K5, in caso di errore si potrebbe connettere un piedino di output della seriale a massa o ad un altro piedino di output, ottenendo ad esempio la connessione diretta fra +15 V circa e -15 V circa. I driver 232 della seriale del PC dovrebbero in tal caso limitare la corrente circolante, ma, a motivo precauzionale, è meglio eseguire le connessioni per l'handshake simulato fra i terminali del connettore K6, o fra K6 e K5. Stessa cosa per i segnali che vanno connessi a K7 e K8, che, provenendo da K6 anziché da K5, possono passare attraverso le resistenze di protezione da R5 a R12. NOTA BENE: il valore massimo della corrente circolante in seguito ad una connessione errata può essere dell'ordine di (15 - (-15) ) V / 330 Ohm, ovvero 90 mA; se il driver limita la corrente (per cui probabilmente non c'è neppure bisogno dei resistori di protezione), allora non vi saranno conseguenze; se il driver non limita la corrente, allora il valore di 90 mA potrebbe essere troppo elevato per il driver stesso. E' necessario in tal caso aumentare il valore delle resistenze di protezione. Le resistenze di protezione agiscono come indicato anche per il MAX 232.

Attenzione, però: aumentare troppo il valore delle resistenze di protezione da R5 a R12 potrebbe portare ad errori nella interpretazione del segnale ricevuto; lo standard RS-232 prevede infatti una impedenza di ingresso dei ricevitori fra 3 KOhm e 7 KOhm; volendo connettere ad esempio DTR e DSR, e utilizzando un resistore di protezione da 3 KOhm, la tensione su DSR potrebbe arrivare a essere la metà di quella su DTR, magari uscendo dai noise margins; nel caso di errata connessione, comunque, la corrente sarebbe limitata a circa 30 V / 3 KOhm = 10 mA. A voi dunque stabilire il valore adatto alla vostra applicazione in dipendenza dai driver 232 del PC e dell'adattatore TTL-232 da voi utilizzato.

Per verificare l'eventuale alterazione delle forme d'onda introdotta dai resistori di protezione, ho provato a convertire TD su livelli TTL, a reinviarlo sul primo canale di input TTL connettendo fra loro i due pin di K9, e a connettere ad RD il primo canale di uscita del MAX232, ovvero, in pratica, a riportare TD su RD dopo una doppia conversione. La comunicazione seriale è stata testata nella seguente modalità: resistori di protezione da 330 Ohm, 115200 bps, TD su K6 connesso a K7 (1 <--), pin 1 <-- di K9 (ovvero TD trasformato in livello TTL) connesso a 1--> di K9, e 1--> di K7 (ovvero TD nuovamente su livelli 232) connesso a RD di K6; l'oscilloscopio ha mostrato una lieve alterazione della forma d'onda di RD, ma assolutamente non sufficiente a uscire dai noise margins, e, su centinaia/migliaia di byte testati, in ricezione si è avuto esattamente quanto trasmesso (01010101 B).

Qui lo schema elettrico a 300 dpi

Elenco dei componenti

Nota: tutti i resistori hanno tolleranza del 5%.

C1-C2-C5 10µF ELKO2.5-6 50 V
C3-C4 1µF ELKO2.5-6 50 V
C6 100 nF MKS2.5X7.2
C7 47µF ELKO2.5-6.3 50 V
R1, R2, R5-R20 (18 resistori) 330 Ohm 1/4 W
R3, R4, R21, R22, R23, R24 4.7 KOhm 1/4 W
IC1 MAX232 DIL16
K1 connettore MINI DIN 6 POLI
K2, K3, K7, K8, K9, K10, K12 connettore 2 poli passo 2.54 mm
K11 connettore 4 poli passo 2.54 mm
K5, K6 connettore 9 poli passo 2.54 mm
K4 connettore sub-D-9 poli femmina da circuito stampato
S1, S2, S3, S4 pulsante da circuito stampato 7 x 10 mm
basetta monofaccia 80 x 100 mm (va bene anche 75 x 100 mm)

Qui la disposizione dei componenti a 300 dpi

Qui il layout a 300 dpi

Immagini per la realizzazione

Se volete costruire questo circuito (dopo aver letto in particolare la sezione "Riconoscimenti e avvertenze"), potete trovare qua sotto i links per salvare le immagini necessarie (risoluzione 300 dpi), accessibili comunque anche in altri punti di questa pagina.

Disposizione dei componenti e disegno delle piste a 300 dpi (187 KB)
Schema elettrico a 300 dpi (158 KB)
Disposizione dei componenti (silkscreen) a 300 dpi (140 KB)
Layout lato rame a 300 dpi (128 KB)

 
 
 

Se volete, fatemi conoscere la vostra opinione (anche in forma anonima)

   
Il vostro Paese

Trovo questo circuito

Utile

Poco utile

Inutile

Sarebbe comodo trovare il PCB già pronto

No

Eventuali commenti

Se desiderate una risposta, inserite qui il vostro indirizzo

   
 
 
 
Buon lavoro!
 
 
Circuit designed with
 
 

Se volete contattarmi per chiarimenti o suggerimenti potete farlo al seguente indirizzo:

f_iacopetti@libero.it

 
Ultimo aggiornamento: 17 Novembre 2003