ultimo aggiornamento 18 maggio 2014

JLCPCB - 2$ per prototipi di PCB, di qualsiasi colore. Produzione in 24 ore!
L'Azienda di prototipi PCB più popolare, con oltre 700.000 clienti in tutto il mondo!
Sorridi a tutto il mondo qualunque cosa accada!

 

Quella presentata in questa pagina è un'interfaccia che permette di pilotare un display LCD tramite un'interfaccia seriale. Il progetto originale è disponibile sul sito francese Kudelsko.

Le principali caratteristiche dell'interfaccia sono:

La velocità si varia modificando la posizione dei DIP. Il collegamento con la scheda avviene tramite un connettore analogo a quello dei servo (+5V, GND, Sig). La sintassi per l'invio dei comandi è molto semplice.

dove:
"&$" cancella il display
"1XXXXXXXXXXXXXXXX#$" scrive sulla prima riga del display
"2XXXXXXXXXXXXXXXX#$" scrive sulla seconda riga del display

homotix

 

 

 

 

Descrizione del circuito

Il circuito è molto semplice, il cuore di tutto è IC1 un PIC16F628 (oppure PIC 16F628A) che risulta essere l'evoluzione del "vecchio" PIC16F84, avente caratteristiche davvero notevoli. Questo microcontrollore dispone di un'area di memoria programma di 2048 word, essendo in tecnologia Flash, quest'area di programma può essere scritta/cancellata/riscritta fino a 10000 volte. L'area RAM è di 224 byte mentre l'area dati EEPROM è di 128 byte.
La velocità di questo microcontrollore è data dal quarzo Q1 che è di 12MHz. Dispone di 16 Linee di I/O, 3 timers digitali interni, Power-On-Reset, Brown-Out-Detect e dispositivo seriale USART programmabile.
La tensione di alimentazione di 5 volt viene inviata ai pin Vdd (pin 14) e Vss (pin 5) collegati rispettivamente al positivo ed alla massa.  Il condensatore C3 da 100nF è un condensatore di disaccoppiamento, questi si mettono molto vicini ai pin di aumentazione di un integrato (generalmente digitale) per evitare che a causa della resistenza della pista che porta la corrente all'integrato in questione la tensione si abbassi a causa del picco di corrente che viene generato in presenza di commutazioni dei livelli logici, questo sopperisce all'abbassamento di tensione in quell'breve istante.
Il pin MCLR (pin 4) serve per poter effettuare il reset del PICmicro. Normalmente viene mantenuto a 5 volt tramite la resistenza di pull up R1 e messo a zero quando si desidera resettare il PICmicro.
Grazie alla circuiteria interna di reset di cui il PICmicro è dotato, non è necessario collegare al pin MCLR pulsanti o circuiti RC per ottenere il reset all'accensione.
I pin OSC1/CLKIN (pin 16) e OSC2/CLKOUT (pin 15) sono collegati internamente al circuito per la generazione della frequenza di clock utilizzata per temporizzare tutti i cicli di funzionamento interni al chip.
Collegati al quarzo Q1 troviamo i condensatori di sfasamento C1-C2 (necessari per generare l'oscillazione).

RB0 e RB1 sono connessi al dip-switch S1 e permettono di selezionare la velocità di trasmissione:

Velocità RB0 RB1
2400 0 0
4800 1 0
9600 0 1
19200 1 1

 



2400


4800


9600


19200

Nota: tutte le immagini tratte dal datasheet del PIC16F628 sono proprietà di Microchip

Il display a cristalli liquidi o LCD (dall'inglese Liquid Crystal Display) utilizzato in questo modulo è dotato di 2 linee di 16 caratteri ciascuna. I display LCD più comuni reperibili in commercio, hanno un'interfaccia ideata da Hitachi che, nel tempo, è diventata uno standard industriale utilizzato anche da altre case produttrici.
Dei 16 pin presenti se ne utilizzano però solamente 7
RS   Register select signal
E     Enable signal
R/W read/write selection
DB4 Data bit 4
DB5 Data bit 5
DB6 Data bit 6
DB7 Data bit 7

Il trimmer
P1 connesso al pin Vo permette di regolare il contrasto del LCD.
 


 

Elenco componenti

R1

4,7kΩ ¼ W 5%

R2,R4,R5

10kΩ ¼ W 5%

P1

10 kΩ trimmer orizzontale

C1,C2

4,7 pF ceramico

C3,C4

100nF poliestere

Q1

Quarzo 12 MHz

IC1

16F628-04/P oppure 16F628A-I/P+ zoccolo 18 pin

LCD

LCD 16x2 tipo C216L01YBW00 o equivalente + Connettore maschio 14 pin per LCD

S1

interruttore DIL 2 poli

SV1

Pin strip femmina 1x6

SV2

Pin strip femmina 1x4
JP1 Pin strip maschio 3x1 90°
JP 2 Pin strip maschio 2x1 90° + ponticello


Schema Formato EAGLE

 

PIC16F628 - FLASH-Based 8-Bit CMOS Microcontrollers

Piedinatura Datasheet Foto dell'integrato

LCD 16x2 tipo C216L01YBW00
Piedinatura Datasheet display C216L01YBW00 Foto
 

Display LCD - fasi di montaggio

Saldatura dei due ponticelli e delle resistenze

Saldatura dello zoccolo integrato e del quarzo

Saldatura dei due condensatori ceramici e dei due condensatori multistrato

Saldatura del trimmer, dell'interuttore DIL, delle pin strip

Collaudo del modulo

Realizzazione pratica.

Per la costruzione della scheda si procederà iniziando dalla realizzazione del circuito stampato il cui lato rame in scala 1:1 è riportato sotto.
Per la sua realizzazione si utilizzerà una basetta in vetronite (monofaccia) di dimensioni 43x40 mm, il metodo potrà essere quello della fotoincisione o del trasferimento termico utilizzando i cosiddetti fogli blu (PRESS-N-PELL), in questo caso ricordo che l’immagine delle tracce del circuito dovrà essere speculare.


Circuito stampato.

Una volta inciso il rame, si verificherà in controluce o mediante l’utilizzo di un multimetro che non vi siano cortocircuiti soprattutto tra le piste più vicine.
Si passerà quindi alla foratura della stessa, utilizzando principalmente una punta da 0,8 mm, mentre si utilizzeranno una da 1mm per i connettori
In seguito si potrà passare al posizionamento e alla saldatura dei componenti seguendo lo schema visibile sotto.

Per la saldatura si utilizzerà un piccolo saldatore a punta fine, della potenza di circa 25 – 30 W.
S’inizierà dai ponticelli, proseguendo con le resistenze , i condensatori, il quarzo, il dip switch, lo zoccolo dell'integrato.
Continuando con i pin-strip per il collegamento del modulo LCD
Terminato la saldatura si potrà inserire l'integrato (che sarà precedentemente programmato) nello zoccolo facendo attenzione alla tacca di riferimento.

Programmazione del PIC16F628
Occorre prima di tutto scaricare il file esadecimale corrispondente al modello di PIC utilizzato che potrà essere il modello 16F628-20/P (o 16F628-04/p) oppure
16F628A-I/P


File HEX per
16F628-20/P (o 16F628-04/p)

File HEX per
16F628A-I/P

Per la programmazione del microcontrollore può essere utilizzato il programmatore PICkit 2 prodotto dalla Microchip è un programmatore rapido ed affidabile per scaricare il codice sviluppato sui microcontrollori PIC che supportano la programmazione ICSP (In Circuit Serial Programming).
Il programmatore viene fornito con il suo Programma molto facile da utilizzare.   Per programmare il PIC può essere utile disporre di una basetta con appositi zoccoli.

 

scheda_pickit2_collegata.JPG

 

Lanciato il programma questo riconoscerà il modello di PIC ad esso collegato

A questo punto si caricherà il file HEX relativo al PIC utilizzato, verificare che la tensione indicata sia di alemno 4,5V

Dopo aver cliccato sul tasto Write, se tutto è andato a buin fine sarà indicato "Programming Successful"

Programmazione del PIC16F628

Il programma test è molto semplice e come è visibile la gestione del modulo è ridotta al minimo, il programma è scaricabile da questo link.
 
/*####################################################################
 FILE: Test_lcd_seriale.ino
 VERSION: 2.0
 Descrizione: Programma di prova per modulo LCD basato sul modello originale
 tratto dal sito francese http://kudelsko.free.fr/.
 
 Collegamenti
 * +5V   -> 5V
 * GND   -> GND
 * DATA  -> 2
 
 Ultima modifica il 16/5/2014
 Applicazione realizzata da Adriano Gandolfo
 Blog http://it.emcelettronica.com/author/adrirobot/
 
 This example code is in the public domain.
 #################################################################### */

#include <SoftwareSerial.h>
SoftwareSerial LCD(3, 2);

void setup() {                
  LCD.begin(9600);// Apre la porta seriale e la setta a 9600 baud
}
void loop() 
{
  delay (500);
  LCD.print("&$"); // Cancella LCD
  delay (100);
  LCD.print("1 Test di prova#$"); // Scrive riga 1
  delay (500);
  LCD.print("2LCD16x2caratteri#$"); // Scrive riga 2
  delay (1000);
  LCD.print("&$"); // Cancella LCD
  delay (100);
  LCD.print("1Comando  seriale#$"); // Scrive riga 1
  delay (500);
  LCD.print("2www.adrirobot.it#$"); // Scrive riga 2
  delay (2000);
}

 

Elenco revisioni
18/05/2014 Inserito nuova versione stampato, inserito versione HEX per 16F628A
08/04/2011 Aggiornato
21/03/2011 Emissione preliminare