Interfacciamento di un PIC18F4620 con LCD grafico

Documenti analoghi
A/D CON PIC 16F877. Sommario INTRODUZIONE... 2 SELEZIONARE I BANCHI... 2 ADCON ADCS1, ADCS CH2, CH1 E CH GO/DONE... 6 ADON...

Esame di INFORMATICA

OSCILLOSCOPIO SOFTWARE

Compilatore risorse display grafico LCD serie IEC-line

Dispensa di Informatica I.1

SISTEMI DI ACQUISIZIONE

introduzione I MICROCONTROLLORI

Raggruppamenti Conti Movimenti

LABORATORIO DI SISTEMI

Architettura hardware

C. P. U. MEMORIA CENTRALE

Mon Ami 3000 Provvigioni agenti Calcolo delle provvigioni per agente / sub-agente

MESSA IN SCALA DI ALGORITMI DIGITALI

Lezione 8. La macchina universale

WG-TRANSLATE Manuale Utente WG TRANSLATE. Pagina 1 di 15

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

All interno del computer si possono individuare 5 componenti principali: SCHEDA MADRE. MICROPROCESSORE che contiene la CPU MEMORIA RAM MEMORIA ROM

Architettura del PIC 18F452

Informatica - A.A. 2010/11

4 3 4 = 4 x x x 10 0 aaa

Fogli Elettronici: MS Excel

Appunti sulla Macchina di Turing. Macchina di Turing

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

Logica e codifica binaria dell informazione

Manuale di programmazione BerMar_Drive_Software

Scuola Digitale. Manuale utente. Copyright 2014, Axios Italia

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

FIRESHOP.NET. Gestione Lotti & Matricole.

Introduzione all'architettura dei Calcolatori

PROVA INTRACORSO TRACCIA A Pagina 1 di 6

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

In questo manuale sono indicate le procedure per utilizzare correttamente la gestione delle offerte dei fornitori.

Informazione analogica e digitale

Raccomandazione del Parlamento europeo 18/12/2006 CLASSE PRIMA COMPETENZE ABILITÀ CONOSCENZE. Operare con i numeri

Architettura di un calcolatore

MAPPE DI KARNAUGH. Nei capitoli precedenti si è visto che è possibile associare un circuito elettronico o elettrico ad una funzione logica.

Mon Ami 3000 Produzione interna/esterna Gestione della produzione interna/esterna

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

Laboratorio di Informatica

Capitolo V : Il colore nelle immagini digitali

Gestione Risorse Umane Web

ISTRUZIONI PER LA GESTIONE BUDGET

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Tutorial: Toshiba Controller LCD T6963

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Fondamenti di Informatica Ingegneria Clinica Lezione 16/10/2009. Prof. Raffaele Nicolussi

IMPARIAMO CON IL PIERIN - IL BUS SPI 1

Un ripasso di aritmetica: Rappresentazione binaria - operazioni. riporti

Calcolo numerico e programmazione Architettura dei calcolatori

la scienza della rappresentazione e della elaborazione dell informazione

Organizzazione della memoria

I componenti di un Sistema di elaborazione. Memoria centrale. È costituita da una serie di CHIP disposti su una scheda elettronica

FONDAMENTI di INFORMATICA L. Mezzalira

Architettura del computer (C.Busso)

SOFTWARE. È l insieme delle istruzioni che è necessario fornire alla macchina per il suo funzionamento. Vi sono due categorie di software:

la scienza della rappresentazione e della elaborazione dell informazione

Ing. Paolo Domenici PREFAZIONE

Modulo plug&play MKMB-3-e-3. Interfaccia Modbus/RTU per contatori Iskraemeco MT831 / MT860

Manuale Terminal Manager 2.0

BARCODE. Gestione Codici a Barre. Release 4.90 Manuale Operativo

(71,1), (35,1), (17,1), (8,1), (4,0), (2,0), (1,0), (0,1) 0, = 1, 431 0, = 0, 862 0, = 1, 792 0, = 1, 448 0, = 0, 896

SOMMARIO... 3 INTRODUZIONE...

DISPLAY REMOTO PILOTATO DALLA SERIALE. LCD_SERv10

ALF0021M MANUALE UTENTE MODULO "SETUP"

Generazione della portante sinusoidale

Gestione dei segnali analogici nei sistemi di automazione industriale con PLC.

Sistema acquisizione dati

1.4b: Hardware. (Memoria Centrale)

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

Sistemi Informativi Territoriali. Map Algebra

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

E possibile modificare la lingua dei testi dell interfaccia utente, se in inglese o in italiano, dal menu [Tools

5.3 TABELLE RECORD Inserire, eliminare record in una tabella Aggiungere record Eliminare record

Introduzione alla programmazione in C

Guida Software GestioneSpiaggia.it

CHE COS È L INFORMATICA

7^ parte : Acquisizione della temperatura con LM35 e visualizzazione su display LCD. Author: Ing. Sebastiano Giannitto (ITIS M.

Introduzione ai microcontrollori PIC

Architettura hardware

2 - Modifica Annulla ANNULLA TOPOGRAFICO ANNULLA TOPOGRAFICO MULTIPLO FIGURA 2.1

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Università degli Studi di Messina

Informatica per la comunicazione" - lezione 7 -

ARCHITETTURA DI RETE FOLEGNANI ANDREA

EasyPrint v4.15. Gadget e calendari. Manuale Utente

Corso di Informatica

Manuale d uso per la raccolta: Sicurezza degli impianti di utenza a gas - Postcontatore

Volume GESTFLORA. Gestione aziende agricole e floricole. Guidaall uso del software

Università degli Studi di L Aquila. Facoltà di Ingegneria. Corso di Laurea in Ingegneria Elettronica Corso di Sistemi Informativi

FrerEnergy: PROGRAMMA PER LA SUPERVISIONE DEI CONSUMI DI ENERGIA ELETTRICA

Manuale di Aggiornamento BOLLETTINO. Rel DATALOG Soluzioni Integrate a 32 Bit

Esame di Stato Materia: SISTEMI AUTOMATICI PRIMA PARTE

Corso di Sistemi di Elaborazione delle informazioni

RAPPRESENTAZIONE GRAFICA DEGLI ALGORITMI

Uso di base delle funzioni in Microsoft Excel

In un modello a strati il SO si pone come un guscio (shell) tra la macchina reale (HW) e le applicazioni 1 :

Mon Ami 3000 Produzione base Produzione articoli con distinta base e calcolo dei fabbisogni

CONTABILITÀ. Gestione Attività Multipunto. Release 5.20 Manuale Operativo

CORSO SERALE ( TDP ) DEMOBOARD FN1Z PER PIC 16F877/16F877A

BMSO1001. Virtual Configurator. Istruzioni d uso 02/10-01 PC

Transcript:

Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica Elaborato finale in Misure per l'automazione e la Produzione Industriale Interfacciamento di un PIC18F4620 con LCD grafico Anno Accademico 2013/2014 Candidato: Gaia Ambrosino matr. N46/1116

Indice Indice... III Introduzione... 4 Capitolo 1: Strumentazione e ambiente di sviluppo... 5 1.1 MPLAB... 5 1.2 Proteus Professional 7... 5 1.2.1 Componenti... 6 1.3 PIC18F4620... 7 1.4 Termometro TC74 e I 2 C... 8 1.5 Pulsanti... 9 1.6 LCD... 10 Capitolo 2: LCD... 11 2.1 Inizializzazione... 11 2.2 Funzioni Text Area... 13 2.3 Funzioni Graphic Area... 14 2.4 CharacterGenerator RAM... 17 Capitolo 3: Funzioni e main... 19 3.1 Figure geometriche... 19 3.1.1 Rettangolo... 19 3.1.2 Quadrato... 20 3.2 Misura temperatura... 20 3.2.1 MisuraTemperatura1... 21 3.2.2 MisuraTemperatura2... 22 3.3 Disegna segnale... 23 3.4 Main... 25 Capitolo 4: Casi d uso, interazione con l utente... 27 4.1 Casi d uso: misuratemperatura1... 27 4.2 Casi d uso: disegnaquadrato... 29 4.3 Altre visualizzazioni... 30 Conclusioni... 31 Bibliografia... 32

Introduzione Il termine Liquid Crystal Display deriva dal comportamento di alcuni cristalli i quali, sotto una determinata tensione, si compongono andando a comportarsi come un liquido, pur mantenendo proprietà e struttura di un cristallo solido. Sono presenti sul mercato display di grandezze che possono variare da pochi millimetri fino ad arrivare a un numero elevato di pollici 0. Lo scopo di questo elaborato è descrivere i metodi e le procedure usati per l interfacciamento di un PIC18F4620 con l LCD grafico LM4229, di risoluzione 240x128 pixel, gestito internamente dal controllore Toshiba T6963C. I software impiegati per la realizzazione del progetto sono stati MPLAB per lo sviluppo del software, Proteus per la progettazione e simulazione dello schema circuitale, e l applicazione Image2Code per la trasformazione delle immagini, da un formato raster in stringhe di byte. Verranno successivamente illustrate alcune applicazioni pratiche: Composizione e visualizzazione di figure geometriche Acquisizione e visualizzazione grafica e testuale della temperatura Acquisizione e visualizzazione tipo oscilloscopio di un segnale variabile 4

Capitolo 1: Strumentazione e ambiente di sviluppo In questo capitolo verranno esaminati singolarmente gli strumenti utilizzati per la realizzazione dell intero progetto. 1.1 MPLAB MPLAB, Integrated Development Environment (IDE 1 ), fornito dalla casa produttrice Microchip, permette la definizione e la realizzazione di software scritto in Assembly o in linguaggio C per la quale sono realizzati vari compilatori. Avendo utilizzato un PIC della famiglia 18, per il progetto è stato impiegato il compilatore C18. 1.2 Proteus Professional 7 Proteus è un ambiente software che permette l emulazione di circuiti fisicamente realizzabili, consentendo lo studio del loro comportamento. Questo software è stato utile per la creazione dello schema circuitale del progetto. Successivamente saranno descritti i componenti del circuito. 1 Un IDE è un software che agevola la scrittura di un programma e il suo codice sorgente. Un IDE può fare da supporto per il debugging, per lo sviluppo del codice, per la correzione di errori fatti in fase di scrittura del codice [2]. 5

Figura 1: schema circuitale per il controllo dell LCD Il circuito simulato si compone di un microcontrollore PIC18F4620, di un LCD LM4229, di un sensore con output I 2 C e di un interfaccia di input a pulsanti. Per la simulazione sono stati inoltre utilizzati un generatore di forma d onda arbitraria e un oscilloscopio per confronto. 1.2.1 Componenti PIC18F4620 utilizzato per l interfacciamento con l LCD, il quale visualizza i risultati delle operazioni e misurazioni effettuate. Termometro TC74 che comunica via I2C la misura della temperatura. Questo termometro è collegato con il PIC tramite i pin RC3 e RC4. I2C protocollo di comunicazione seriale che controlla la comunicazione tra un Master e uno (o più) Slave. In questo caso il Master è rappresentato dal PIC18F4620 e lo Slave è rappresentato dal termometro TC74. Generatore di forma d onda tramite il quale, durante l esecuzione, può essere impostata manualmente la frequenza e l ampiezza dell onda. Il valore di ampiezza massimo che può essere riprodotto sull LCD è di 5V, oltre il quale si può notare una saturazione. Oscilloscopio per esaminare la forma d onda generata. Pulsanti per interagire con il sistema. LCD LM4229, display grafico opportunamente programmato. 6

1.3 PIC18F4620 Il PIC18F4620 è un microcontrollore; rappresenta un sistema che comprende diversi moduli come ad esempio memorie, periferiche, CPU, clock, timer, ADC. È possibile valutare le caratteristiche del PIC utilizzato [3]: Figura 2: classificazione PIC Possiamo distinguere due tipi di memoria: Program Memory; memoria flash, non volatile di capacità 2 6 Kbyte (1024*64 = 65536 byte). Data Memory; memoria RAM, volatile, che memorizza dati e variabili per un massimo di 4096 byte. L oscillatore può essere interno o esterno. Per il progetto è stato utilizzato l oscillatore interno. Ogni istruzione viene eseguita in quattro colpi di clock [4]. Nello schema di Figura1 si può osservare che, per il collegamento tra i dispositivi esterni e il PIC, vengono utilizzate alcune porte. Queste sono: PORTA, PORTB, PORTC, PORTD, PORTE che, tramite i registri TRIS, coordinano il flusso di dati da e verso il PIC (l input e l output). In particolare: PORTA è collegata al generatore di forme d onda, è una porta configurata analogica e quindi per la manipolazione dei dati si necessita una conversione analogico-digitale che viene fatta tramite SAR 2. PORTB è collegata ai pulsanti (questa porta comprende alcuni pin che di default sono configurati analogici, tramite il registro ADCON1 sono state digitalizzate). PORTC gestisce i pin di configurazione e di controllo dell LCD. PORTD utilizzato per la comunicazione di dati da e verso l LCD. PORTE dove è stato utilizzato un solo pin per l alimentazione del dispositivo. 2 SAR (Successive Approximation Register) utilizza un comparatore e un convertitore digitaleanalogico. Per ogni passo operativo, viene fatto un confronto con un determinato numero di bit, ponendoli a uno, a partire dal MSB. 7

1.4 Termometro TC74 e I 2 C Questo termometro comunica via I2C la misura eseguita fornendo in uscita un valore numerico della temperatura che fornisce un intervallo di valori che va da -65 (0b10111111) a 127 (0b01111111) misurati [5]. Si interfaccia con il PIC tramite i pin RC3 ed RC4, rispettivamente utilizzati come il Serial Clock, linea unidirezionale, che gestisce la temporizzazione da e verso il TC74, e il Serial Data, linea bidirezionale, che gestisce il trasporto dei dati; entrambe le linee sono connesse agli ingressi del TC74. Il protocollo di comunicazione impiegato è l I2C (comunicazione su bus) che connette un Master e uno Slave: il PIC è il Master, dato che il TC74 funziona solo in modalità Slave. La trasmissione viene fatta in maniera sincrona a partire da un colpo di clock generato dal Master. Vengono quindi costruite due procedure per la configurazione e l acquisizione della temperatura: TRISC3 = 1 e TRISC4 = 1 fanno si che siano inizialmente impostati i pin RC3 e RC4 (i pin SCLK e SDA) come input. Viene impostato il registro SSPCON1: o Bit 7-6: questi bit si configurano in maniera automatica quando ci sono anomalie nel protocollo di trasmissione o Bit 5: SSPEN = 1 abilita la periferica o Bit 4: CKP = 0 bit non utilizzato in modalità Master o Bit 3-0: determinano la modalità di utilizzo del dispositivo, in questo caso SSPM3-SSPM0 = 1000. Il clock della comunicazione tra Master e Slave si ottiene come clock = Fosc 4 (SSPADD+1). Per trasformare la frequenza da 4MHz a 100kHz del clock del PIC si sceglie il bit SSPADD = 9 del registro SSPSTAT. Con SMP = 1 del registro SSPSTAT viene scelta la modalità di I 2 C a 100MHz. Con CKE = 1 abilita SMSBus come input (bus di trasporto dei dati) 8

Per quanto riguarda l acquisizione della temperatura viene effettuata la #define della variabile idlei2c che verrà successivamente utilizzata. Questa variabile è usata per indicare lo stato di idle, cioè se la comunicazione è libera oppure no. Ricordando che il TC74 usa modalità di indirizzamento a 7 bit (7 bit per l indirizzo, 1 bit indica se leggere o scrivere) è stata implementata la funzione di acquisizione che segue una specifica procedura: Il processo di acquisizione utilizza il protocollo di comunicazione sincrono effettuando un controllo sui bit del registro SSPSTAT tramite l istruzione while(!idlei2c) mettendosi in attesa. SEN = 1, inizio una condizione di start SSPBUF = 0b10011010, 7 bit di indirizzo del termometro e ultimo bit per la scrittura SSPBUF = cmd, (alla quale verrà passato 0x00) invio richiesta di temperatura RSEN = 1, condizione di restart SSPBUF = 0b10011011, 7 bit di indirizzo del termometro e ultimo bit per la lettura RCEN = 1, abilito ricezione temperatura result = SSPBUF, lettura del risultato ACKDT = 1, ACKEN = 1, determinazione NACK e invio PEN = 1, fine comunicazione 1.5 Pulsanti I pulsanti sono stati inizializzati nel programma con delle #define in modo da facilitarne l utilizzo. Successivamente saranno utilizzati nel main per l interfacciamento con l utente. 9

1.6 LCD Parte fondamentale dell elaborato è l LCD LM4229 pilotato dal controllore T6963 Toshiba tramite determinate istruzioni dettate da una particolare convenzione di interfacciamento. Questo controllore comunica tramite bus con un microcontrollore che definisce le operazioni da compiere. Tra le caratteristiche del controllore T6963 si possono distinguere parametri settati esclusivamente in maniera hardware dai collegamenti sulla PCB 3, altri invece configurabili dall utente. È possibile classificare il controller utilizzato andando a considerare le seguenti caratteristiche: Livello hardware o 128 righe e 30 colonne del display o 8x8 bit per la dimensione del font dei caratteri o 8 linee parallele di comunicazione D7-D0. Livello software o 128 caratteri di default nella ROM (memoria interna) o Stanziamento di area di testo, area grafica e Character Generator o RAM (CG-RAM) fino a 64kB, o Capacità di utilizzo contemporaneo della text e graphic area [6]. 3 PCB printed circuit board è il circuito stampato sulla quale sono posizionati i componenti elettronici collegati tra loro in modo da formare dei veri e propri circuiti elettrici. 10

Capitolo 2: LCD In questo capitolo verranno esposti e considerati nello specifico tutti i passaggi implementativi che sono stati sviluppati al fine di raggiungere l obiettivo preposto, quale l interfacciamento con l LCD grafico. Questo tipo di LCD è composto da una matrice di pixel, come già detto, di grandezza 240x128 pixel. 2.1 Inizializzazione Per inizializzare l LCD è stata definita comunica(char dc, char sl, int port), una funzione generica che gestisce la configurazione di più pin (quali C/D, /WR, D0-D7). Alla funzione viene passato il carattere che può essere d o c (dato o comando), s o l (scrittura o lettura) e infine port che rappresenta l indirizzo per il settaggio del PORTD, collegato alle porte dati D7-D0 dello schermo. Lo scopo è quello di agevolare la scrittura dell inizializzazione dell LCD compattando il codice. Questa procedura è stata quindi utilizzata per scrivere la funzione inizializzalcd( ). 11

Importante, in questa fase, è stata l organizzazione della memoria suddivisa, come mostrato in figura in text area, graphic area e CG-RAM area, dal momento che, un errata gestione della stessa, causa la sovrapposizione e una conseguente visualizzazione a schermo indesiderata. [7] Figura 3: mappa della memoria Per quanto riguarda le istruzioni dell LCD, ci sono vari modi per comunicarle; alcune istruzioni richiedono l invio di due byte dato e un byte comando, altre richiedono l invio di un byte dato e uno comando, infine altre, che richiedono solamente l invio di un byte comando. Per esempio l istruzione MODE SET dell LCD richiede l invio del solo comando, istruzioni come SET TEXT AREA o SET GRAPHIC AREA, richiedono i due byte dati e il byte comando. Viene inizialmente fatto un reset del pin /RST aspettando un tempo necessario per l attivazione dello schermo. L inizializzazione dell LCD deve avvenire quindi effettuando le seguenti operazioni: MODE SET: CGROM mode, OR mode. Sta a significare che è stato impostato il funzionamento memoria interna OR memoria esterna 12

TEXT HOME, TEXT AREA: 0x0000 è l indirizzo iniziale dell area text la cui dimensione è 0x001E che rappresenta proprio le 30 colonne dello schermo GRAPHIC HOME, GRAPHIC AREA: 0x0780 è l indirizzo iniziale dell area graphic, tale che non si sovrapponga all area text, la cui dimensione è ancora 0x001E DISPLAY MODE: text on graphic on, attiva entrambe le aree 2.2 Funzioni Text Area Sono state implementate le funzioni per la gestione della Text Area. [8] Questa funzione riceve in ingresso un indirizzo esadecimale in due byte (del tipo 0x0000) che viene scomposto tramite TH&0xFF che effettua un AND bit a bit (tra l indirizzo di ingresso in 16 bit e l indirizzo 0xFF composto da 8 bit posti a 0 e 8 bit posti a 1, in modo da selezionare l LSB 4 ), l istruzione successiva effettua uno shift a destra andando a selezionare l MSB 5, in generale questa funzione imposta il cursore sullo schermo nel punto definito dall indirizzo. La funzione scrivicarattere(int a) utilizza il comando datawrite autoincrement che setta il parametro a ed effettua un incremento automatico dell indirizzo. La funzione scrivistringa(char * stringa) utilizza, per una stringa, la procedura precedentemente mostrata (scrivicarattere), andando a scrivere carattere per 4 Least Significant Byte, Byte meno significativo 5 Most Significant Byte, Byte più significativo 13

carattere un intera stringa. Avvalendosi della funzione trasformaascii(int ascii) è stato risolto il problema legato al fatto che l LCD non utilizza la codifica ascii. 2.3 Funzioni Graphic Area Con l obiettivo di poter visualizzare forme geometriche e immagini, avvalendosi di funzioni elementari, è stata sviluppata la funzione che illumina un solo bit dell intero schermo (cioè lo pone a 1 ): scrivipunto(int x, int y). Questa funzione riceve in ingresso coordinate (x,y) che vanno a ricoprire l intero spazio della matrice dell LCD, quindi, l intervallo di valori plausibili da dare in ingresso: per la coordinata x è 0-239, per la coordinata y è 0-127. È stata impostata la variabile indirizzo in modo da posizionarsi nel punto (x,y) esatto. Dato che la graphic area ha un indirizzo di partenza 0x0780, considerando le coordinate in input della funzione, è stato sommato ad esso il numero di colonna x/0x08 e di riga y*0x1e. Si può quindi illustrare la struttura dell LCD in questo modo Figura 4: struttura dell'lcd 14

Dalla Figura4 si può notare che l LCD è rappresentato da una matrice 240x128 pixel; ogni carattere è definito da 8x8 pixel e quindi si possono distinguere 16 righe e 30 colonne. In particolare l equazione indirizzo = (y*0x1e + (int)(x/0x08) + 0x0780) calcola l indirizzo del pixel da illuminare : y*0x1e (dove y, scelta tra 0-127, moltiplica 0x1E, cioè la misura della larghezza di una riga) seleziona una riga dell LCD. Figura 5: selezione riga x/08 (dove x, scelta tra 0-239, viene divisa per nil numero di pixel di ogni carattere, cioè 8 pixel) seleziona una colonna dell LCD. Figura 6: selezione colonna Una volta calcolato l indirizzo generale, questo, viene usato come input per le istruzioni che posizionano l address pointer set, (le stesse istruzioni utilizzate per 15

la funzione impostaaddress(int a)), cioè l istruzione che seleziona l indirizzo della text area, stabilendo una posizione apparentemente imprecisa. Figura 7: selezione byte di riga Si procede dunque in modo più particolare prendendo l esatto pixel di colonna. Viene quindi calcolato il pixel da illuminare come setbit = 0x07- (x%0x08) che sarà l input dell istruzione successiva Comunica( c, s,setbit 0xF8) effettuando l OR bit a bit con il comando dell istruzione bit set (0b11111000). Lo stesso blocco è stato utilizzato per la funzione cancellapunto(int x, int y), l unica diversità è nella sostituzione dell istruzione bit set con bit reset (0b11110000). Figura 8: seleziona singolo bit 16

L utilizzo della graphic area permette di visualizzare su schermo delle immagini convertite in stringhe di byte. Un esempio di questa funzionalità è stato mostrato nella funzione disegnatermometro( ) nel quale è stata convertita un immagine di grandezza 240x80 pixel in una stringa di byte e quindi inserita in un vettore. Il vettore è stato dichiarato, per questa immagine, di 2400 elementi ((240x80)/8 = 2400, dove 8 è il numero di bit per carattere). Per raffigurare il termometro è stato impostato come indirizzo di partenza l indirizzo 0x0D20 corrispondente alla riga 6 della graphic area. I comandi Comunica('c','s',0xB0) e Comunica('c','s',0xB2) rappresentano rispettivamente i comandi set autowrite e reset autowrite, il primo (set autowrite) abilita la scrittura in modalità autowrite, cioè, impostato un indirizzo, scrive i dati in locazioni di memoria contigue (effettua un avanzamento dell indirizzo automaticamente), il secondo (reset autowrite) disabilita questa impostazione. 2.4 CharacterGenerator RAM L LCD in questione permette di definire nuovi caratteri e memorizzarli nella memoria esterna chiamata CG-RAM i cui indirizzi possono essere memorizzati a partire dall indirizzo successivo all ultimo carattere della CG-ROM, cioè l indirizzo 0x80. È stata implementata una funzione di inizializzazione e una funzione di scrittura su questa memoria di nuovi caratteri. In questa funzione è stato definito l indirizzo iniziale della CG-RAM. La memoria dedicata all area CG-RAM, come già detto ha la grandezza di 64kB (suddivisa in 32 spazi da 2kB), quindi i possibili indirizzi vanno da 0x0000 a 0xFFFF. Dato che il valore dell offset è legato alla determinazione dell area di memoria CG-RAM da utilizzare, tramite una combinazione del valore dei pin del controllore 17

T6963 (da ad15 a ad0), si sceglie un valore di offset adeguato all intervallo di memoria scelto. Per memorizzare i nuovi caratteri si è optato per l intervallo che va dall indirizzo 0xE000 a 0xE7FF (prendendo lo spazio di 2kB), di conseguenza si è selezionato come valore di offset 00011100 (si nota dall immagine l indirizzo 0x001C) i cui ultimi cinque bit hanno determinano l intervallo di memoria scelto. Fatto questo, è stato necessario collocarsi all indirizzo 0xE400, che segna la fine dei caratteri base della memoria interna (CG-ROM); ora sarà possibile memorizzare i nuovi caratteri a partire da questo indirizzo. L altra funzione implementata fa in modo da andare a memorizzare un carattere, suddividendolo in 8 byte (rappresentato da una matrice 8x8 pixel), nella CG-RAM a partire da 0xE400. Viene ricevuto in ingresso l indirizzo nella quale si vuole memorizzare il carattere, a partire da 0x80 (primo indirizzo libero), e si somma con 0xE400. Un esempio di composizioni di caratteri è presente nel main del programma, dove sono stati costruiti 22 caratteri speciali successivamente impiegati [9]. Per esempio il carattere memorizzato nell indirizzo 0x80 ha questa struttura: Si può quindi evincere la strutturazione del carattere. [10] Figura 9: rappresentazione carattere 18

Capitolo 3: Funzioni e main Una volta implementate le funzioni base per la gestione della memoria e l interfacciamento con l LCD sono state create delle procedure tali da interagire con l utente. Il codice sviluppato comprende funzioni di acquisizione e visualizzazione della temperatura misurata tramite protocollo I 2 C, funzioni di composizione di figure geometriche e funzione di acquisizione di segnale tramite un generatore di segnali. 3.1 Figure geometriche Saranno qui illustrate le funzioni per la composizione di figure geometriche, quali rettangolo e quadrato. 3.1.1 Rettangolo Questa funzione riceve in ingresso le coordinate di due vertici opposti del rettangolo; questo è stato fatto per ottimizzare il codice in modo che con questi due punti si avesse accesso a tutte le coordinate per la composizione della figura geometrica. 19

Si può notare che, tramite la funzione scrivipunto(int x, int y), inserita nei cicli for, sono state generate le linee considerando x, le colonne, e y le righe. In particolare, il primo ciclo parte dal valore del parametro colonna1 per poi fermarsi a colonna4, quindi con scrivipunto(i,riga1) dove l indice di colonna è un numero che va da colonna1 a colonna4 e l indice di riga è un valore costante (su riga1), si può rappresentare il tratto orizzontale superiore del rettangolo. Lo stesso procedimento è stato applicato per gli altri tre lati del rettangolo. Inoltre, la stessa funzione è stata utilizzata per cancellarettangolo(int colonna1, int riga1, int colonna4, int riga4) che al posto di illuminare il pixel, lo spegne. 3.1.2 Quadrato Dato che è una figura che ha tutti i lati uguali, la funzione che disegna il quadrato riceve come parametri di ingresso una sola coordinata (x,y) e la distanza, che servirà a disegnare i lati. Basterà quindi prendere come riferimento i punti del piano riga1, colonna1, riga1+distanza, colonna1+distanza. 3.2 Misura temperatura Sono state implementate due diverse funzioni per misurare la temperatura. Il termometro è stato rappresentato dunque in due modi differenti: il primo è stato costruito tramite la composizione di righe e caratteri, l altro invece è stato costruito tramite la funzione disegna Termometro( ) precedentemente illustrata. Per semplificare la comprensione del codice, questo verrà suddiviso in più sezioni. 20

3.2.1 MisuraTemperatura1 Questa funzione riceve in ingresso il parametro bool che, successivamente, in un ciclo while, verrà utilizzato per stabilire la fine dell acquisizione. Sono state dichiarate due variabili: temp e temporaneo che serviranno per effettuare un confronto tra la temperatura misurata e il valore di temperatura precedente, per ottenere il gap di temperatura necessario per la rappresentazione grafica. Successivamente viene fatta un acquisizione impostando così le due variabili a quel valore misurato. Da qui si può quindi illustrare come viene costruita la barra della temperatura dove il suo punto di partenza sarà il punto di coordinata x = 71, che raggiungerà la tacca di grado 0 dopo 19 pixel, con altezza pari a 13 pixel e quindi coordinata y che va dalla posizione 83 alla posizione 95. L incremento di un grado segnerà un aumento di 3 pixel sullo schermo. L algoritmo funziona in questo modo: viene fatta un acquisizione della temperatura; se il valore appena misurato è uguale a quello precedente, allora verrà mantenuta la posizione, altrimenti, se il valore misurato è minore di quello precedente, saranno cancellati il numero di pixel pari alla differenza tra le due misurazioni. Invece, se la temperatura misurata è maggiore di quella precedente, sarà aggiunto un numero di pixel pari alla differenza delle due misurazioni. Quindi sarà posto temporaneo = temp per aggiornarne il valore. 21

Il funzionamento della funzione e quindi l acquisizione della temperatura saranno arrestati nel momento in cui sarà premuto il pulsante TERMINA, tramite il quale la variabile bool verrà posta al valore basso tale da terminare il ciclo while. Infine si può notare che è stata richiamata la funzione scrivigradi(temp) che mostra a video il valore, della temperatura in Kelvin, gradi centigradi, gradi Fahrenheit, gradi Rankine, gradi Reaumur, calcolandoli in questo modo (tenendo conto che temp rappresenta i gradi centigradi) [11]: faren = (temp*1.8 +32); kelvin = ((faren+459.67)/1.8); rank = (kelvin*1.8); ream = ((faren-32)/2.25); 3.2.2 MisuraTemperatura2 Questa procedura utilizza anch essa la funzione scrivigradi(temp) effettuando una medesima misurazione della temperatura e stabilisce la terminazione tramite il pulsante TERMINA. La differenza tra queste due funzioni è la rappresentazione del termometro. Il termometro è stato disegnato con due linee continue laterali della larghezza di tutto lo schermo (240 pixel) e distanza l una dall altra di 8 pixel; ogni grado è rappresentato da 5 pixel di altezza e 8 pixel di larghezza e per disegnare le tacche dei gradi, sono state definite delle piccole righe verticali li dove l indice di colonna fosse un multiplo di 8 (q%8==0). 22

All esterno delle righe laterali sono stati scritti i numeri da 0 a 30, considerando che i numeri da 10 a 30 sono caratteri speciali scritti nella CG-RAM. Il funzionamento è leggermente diverso: per ogni lettura della temperatura, vengono cancellate tutte le righe dei gradi e vengono riscritte andando a rappresentare la nuova misurazione. Anche qui sono state utilizzate le due variabili temp e temporaneo. Se le due temperature sono uguali, si mantiene la precedente rappresentazione, se sono diverse, vengono cancellati i segni precedenti e viene impostato temporaneo = temp in modo da visualizzare successivamente la nuova temperatura. Tra un grado e l altro viene lasciato lo spazio di 1 pixel per avere una migliore visualizzazione grafica. 3.3 Disegna segnale L ultima funzione implementata è disegna Segnale( ). Questa funzione preleva in tempo reale il campione e lo visualizza. Prima di effettuare il ciclo vengono inizializzati i registri dell ADC: ADCON0, ADCON1, ADCON2. ADCON0 = 0x00 o Bit 7 6: letti come 0 o Bit 5 2: seleziona il channel (in questo caso AN0 0000) o Bit 1: A/D idle o Bit 0: conversione A/D è disabilitata ADCON1 = 0b00001110 o Bit 7 6: letti come 0 o Bit 5: valore di riferimento VSS o Bit 4: tensione di riferimento VDD o Bit 3 0: imposta tutte le porte digitali e la porta AN0 come analogica 23

ADCON2 = 0b00010100 o Bit 7: giustificato a sinistra o Bit 6: letto come 0 o Bit 5-3: considera 4 Tad (tempo di acquisizione) o Bit 2 0: considera Fosc/4 (clock di conversione A/D) Dopo aver impostato questi parametri viene attivato il modulo A/D con ADCON0bits.ADON = 0x01. Per descrivere il segnale è stato utilizzato un ciclo nel quale è stato inserito un blocco di acquisizione. Il ciclo acquisisce 240 campioni che è proprio il numero di pixel colonna dell LCD. Viene abilitata la conversione e si aspetta fino a quando questa non è disponibile. L acquisizione A/D avviene su 10 bit, 8 bit del registro ADRESH e 2 bit del registro ADRESL prelevando complessivamente un intervallo di codici (che va da 0 a 1023) 6. Per questa acquisizione viene prelevato solamente il valore dal registro ADRESH che viene assegnato alla variabile acquisizione; prendendo il campione dal registro ADRESH il range di valori sarà rappresentato quindi dagli 8 bit in modo da avere un intervallo che va da 00000000 a 11111111, in binario, cioè da 0 a 255 in decimale. Per riuscire a visualizzare il valore a video del segnale acquisito, questo è stato dimezzato (0 127) dato che il numero di pixel riga sono rappresentati proprio dal quell intervallo di valori. Per ogni punto messo a video sarà cancellato il punto precedente memorizzato nel vettore vect[i]. 6 0 1023 rappresenta l intervallo di tensione 0 5V 24

Per l onda quadra è stato aggiunto un blocco atto alla visualizzazione della discontinuità. È stata utilizzata la variabile a per fare in modo che si potesse disegnare una sola riga, tra livello alto e livello basso, del segnale. Se i valori acquisiti sono differenti, allora viene disegnata la riga verticale. Nel prossimo capitolo saranno illustrate tutte le funzioni. 3.4 Main Si può dividere il main in due categorie: la parte di inizializzazione e la parte di elaborazione. Per l inizializzazione vengono impostati TRISB = 0b11111111 data la necessità di avere input dai pulsanti, TRISC = 0 e TRISD = 0 per impostare le porte come output. Viene richiamata la funzione inizializzalcd( ), InizializzaCGRam( ), ConfigI2C( ), per effettuare una configurazione iniziale dell LCD. Vengono scritti i 22 caratteri sulla CG-RAM. Per quanto riguarda il codice, avendo preventivamente definito il valore dei pulsanti associandoli ai pin di PORTB, è stato necessario impostare il registro ADCON1 al valore 0x0F in modo che tutte le porte passassero da analogiche (impostazione di default) a digitali. L interazione con l utente consiste nell aspettare che venga premuto un pulsante tra RETTANGOLO, QUADRATO, TERMOMETRO1, TERMOMETRO2, SEGNALE. 25

Se il pulsante è RETTANGOLO o QUADRATO, per visualizzare la forma geometrica in punti casuali dello schermo ogni volta che viene premuto il suddetto pulsante, è stata utilizzata la funzione rand( ) della libreria stdlib.h, in modo da passare parametri plausibili alle due funzioni. Le funzioni di temperatura e acquisizione di segnale vengono richiamate nel momento in cui vengono sollecitati i relativi pulsanti. Per terminare ogni visualizzazione si aspetta che venga premuto il pulsante TERMINA. 26

Capitolo 4: Casi d uso, interazione con l utente L utente ha la possibilità di interagire con il sistema visualizzando quindi la temperatura, il segnale generato e le forme geometriche; a tale scopo, ha la possibilità di premere uno dei pulsanti a disposizione tra RETTANGOLO, QUADRATO, TERMOMETRO1, TERMOMETRO2, SEGNALE. Come esempio è stata rappresentata questa interazione considerando uno schema dei casi d uso riguardante la visualizzazione della temperatura e uno schema riguardante la rappresentazione di una figura geometrica. 4.1 Casi d uso: misuratemperatura1 Figura 10: casi d'uso1 Questo schema rappresenta la simulazione di interazione dell utente con il progetto. In particolare si sta descrivendo l interazione con TERMOMETRO1. Una volta che l utente ha premuto questo tasto, il sistema entra in un loop in cui viene fatta un acquisizione e una successiva visualizzazione della temperatura. 27

Si esegue il progetto: Figura 11: schermata iniziale L utente preme il pulsante e a video compare il termometro e la temperatura misurata. Nella figura sotto una misura con temperatura di 30 C Figura 12: schermata temp30 Successivamente la temperatura del TC74 viene aumentata Figura 13: schermata temp43 Infine la temperatura del TC74 viene diminuita Figura 14: schermata temp8 Questa visualizzazione terminerà nel momento in cui verrà premuto il tasto TERMINA dove si ritornerà alla schermata iniziale, quindi alla scelta della funzione con il quale interagire. 28

4.2 Casi d uso: disegnaquadrato Figura 15: casi d'uso2 Stesso discorso viene fatto per la funzione disegnaquadrato: dopo la visualizzazione della schermata iniziale, l utente preme il tasto QUADRATO e compare la schermata: ogni volta che viene premuto TERMINA e poi nuovamente QUADRATO verrà generato un quadrato con dimensione e posizione diverse. Figura 16: quadrato1 Figura 17: quadrato2 Figura 18: quadrato3 29

4.3 Altre visualizzazioni Si riportano le visualizzazioni delle altre funzioni considerando che il diagramma dei casi d uso è lo stesso: Figura 15: segnale triangolare Figura 16: segnale rettangolare Figura 19: segnale sinusoidale Si può notare che il segnale viene cancellato e visualizzato in tempo reale. Figura 17: rettangolo Figura18: termometro2 30

Conclusioni In questo elaborato, l utilizzo di un LCD grafico, seppur impiegato tramite una simulazione, ha permesso di visualizzare l esecuzione di diverse funzionalità. Tali funzionalità sono state elaborate, mediante un PIC18F4620 opportunamente programmato, avvalendosi di dispositivi di varia natura, quali, termometri, generatori di forma d onda e pulsanti. Si può quindi parlare di versatilità nell utilizzo di questo strumento. 31

Bibliografia [1] Wikipedia, Schermo a Cristalli Liquidi http://it.wikipedia.org/wiki/schermo_a_cristalli_liquidi [2] Wikipedia, Integraded Development Environment http://it.wikipedia.org/wiki/integrated_development_environment [3] micro.deis.unibo.it/~romani/dida01/lezioni/microcontrollori_v2.pdf [4] Data Sheet PIC18F2525/2620/4525/4620 Data Sheet [5] TC74 Data Sheet [6] Application Notes for the T6963C LCD Graphics Controller Chip http://www.lcd-module.de/eng/pdf/zubehoer/t6963.pdf [7] http://www.ccsinfo.com/forum/viewtopic.php?t=51413 [8] http://read.pudn.com/downloads197/sourcecode/others/927463/t6963ccs/t69 63.c.htm [9] Interfacing and set-up of Toshiba T6963C https://www.sparkfun.com/datasheets/lcd/monochrome/an-029- Toshiba_T6963C.pdf [10] T6963 Data Sheet https://www.sparkfun.com/datasheets/lcd/monochrome/datasheet- T6963C.pdf [11] Wikipedia calcolo temperatura http://it.wikipedia.org/wiki/grado_fahrenheit 32