2011_P23

Table of contents

1. Results [edit]

2. Download [edit]

Afisaj LCD

Project Description

Proiectul nostru consta in a adauga un afisaj LCD pentru placa EV/Z3. Componentele de baza sunt placa EV/Z3 si placa ce contine un microcontroller PIC 16F628A, MAX 232 folosit pentru transmiterea pe seriala si un LCD de  1x16 caractere.

Project Requirements

Am ales 3 butoane de pe tastatura placii Z3 si le-am asociat 3 mesaje. Utilizatorul va putea citi cele 3 mesaje si dupa alegerea mesajului dorit va apasa un al patrulea buton pentru a afisa mesajul respectiv pe LCD. Mesajul de pe LCD se va roti spre stanga.

User Flow

Pentru a vedea mesajele pe LCD-ul de la placa EV/Z3 se folosesc tastele A,B,C de pe tastatura placii. Pentru a trimite mesajul catre LCD de pe placuta secundara se apasa tasta F. In momentul in care a fost apasata tasta F mesajul ales a fost transmis pe seriala si acesta se roteste spre stanga (ca un panou publicitar) atat pe LCD-ul de la placa Z3 cat si pe LCD-ul de la placuta secundara.

Pentru a schimba mesajele se editeaza codul programului.

Functionarea aplicatiei presupune ca placuta secundara sa fie alimentata de la o sursa si ca mufa DB9 TATA din partea dreapta sa fie conectata printr-un cablu serial MAMA-MAMA la mufa TATA de la placa EV/Z3.

Required components

Lista de componente este urmatoarea:

- 3 rezistente de 4.7k (250 mW)

- 1 rezistenta de 100R (250 mW)

- 2 rezistente de 100K (250 mW)

- 2 condensatori de 22pF (50V)

- 2 condensatori de 47nF (50V)

- 5 condensatori de 1uF (63V)

- 1 push-button

- 1 oscilator de cuartz 20.000 MHz

- 1 microcontroller PIC16F628A

- 1 stabilizator de 5V

- 1 circuit integrat MAX232

- 2 socluri de 18 pini

- 2 mufe DB9 TATA

- 1 LCD de 1x16 caractere

- 1 potentiometru

Placa ce contine componentele de mai sus:

 

Pentru proiectarea placutei am folosit schema din laborator la care am adaugat componentele specifice acestui proiect:

Functiile folosite din interfata platform_io.h sunt:

kIo.SerialInit(&serialConf) - initializarea comunicatiei pe seriala

kIo.ReadKey() - citirea butonului apasat de la tastatura

kIo.DisplayString() - afisarea sirului de caractere pe LCD-ul placii Z3

kIo.SerialWrite () - scriere pe seriala

Software Design

Codul pentru placa EV/Z3 a fost scris in OpenWatcom :

#include "platform_io.h"

const char *serialStart = "Please send data";

static SerialConfig serialConf;

unsigned char *car1="Ati apasat A";
unsigned char *car2="Ati apasat B";
unsigned char *car3="Ati apasat C";
unsigned char a="      ";
char c[17];
char aux1,aux2;
int key,i,j;
char b[2];

char convert(int key)
{
static char cod[19] = {'0','2','4','6','8','A','C','E','R','<','1','3','5','7','9','B','D','F','>'};
return cod[key];
}// functia de conversie a caracterelor

static SerialConfig serialConf;
extern const unsigned char __far  * const kSystemEprom[];

int main()
{
key = 0;
b[1]='\0';

/* Serial Initialization */
serialConf.baudRate   = b9600;
serialConf.parity     = none;
serialConf.stopBits   = one;
serialConf.wordLength = eight;

kIo.SerialInit(&serialConf);   

while(1)

key=kIo.ReadKey();        
b[1]=convert(key);     

if(b[1]=='A')
{
kIo.DisplayString(car1);             
j=1;         
}
if(b[1]=='B') 
{
kIo.DisplayString(car2);
j=2;
}
if(b[1]=='C')
{
kIo.DisplayString(car3);
j=3;
}

if(b[1]=='F') 
{
if(j==1)
{kIo.SerialWrite(COM1, car1, 4);
for(i=0;i<16;i++)
c[i]=car1[i];
}
if(j==2)
{kIo.SerialWrite(COM1, car2, 4);
for(i=0;i<16;i++)
c[i]=car2[i];
}
if(j==3)
{kIo.SerialWrite(COM1, car3, 4);
for(i=0;i<16;i++)
c[i]=car3[i];
}

b[1]='D';

// shiftarea textului spre stanga
aux1=c[0];
aux2=a[0];
for(i=0;i<15;i++)
{c[i]=c[i+1];}
for(i=0;i<5;i++)
{a[i]=a[i+1];}
c[15]=aux2;
a[5]=aux1;
}   
}       
return 0;
}

 

Codul folosit pentru programarea PIC-ului este scris in MikroC, program care la compilare genereaza fisierul *.HEX care este apoi incarcat in memoria PIC-ului prin ICPROG.

// modul de conectare al pinilor de la LCD la pinii de la PIC

sbit LCD_RS at RA0_bit;
sbit LCD_EN at RA1_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB3_bit;
sbit LCD_D7 at RA2_bit;
sbit LCD_RS_Direction at TRISA0_bit;
sbit LCD_EN_Direction at TRISA1_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB3_bit;
sbit LCD_D7_Direction at TRISA2_bit;
// End LCD module connections
// Define Messages
char m1[] = "Testare ";
char m2[] = "        ";
char m3[] = "        ";
char a[]="                ";
int i;
char aux1;
char aux2;
char aux3;

void main()
{
CMCON  |= 7;                   // dezactivare comparatoare
Lcd_Init();                        // initializare LCD
UART1_Init(9600);          // initializare comunicare pe seriala
Delay_ms(100);

do {
Lcd_Cmd(_LCD_CLEAR);                       // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
Lcd_Out(1,1,m1);                                   // Scrie mesajul m1 pe primele 8 caracterele alea LCD
Lcd_Out(2,1,m2);                                  // Scrie mesajul m2 pe urmatoarele 8 caractere
Delay_ms(600);

// cod pentru shiftare mesaj la stanga
aux1=m1[0];
aux2=m2[0];
aux3=m3[0];
for(i=0;i<7;i++)
{
m1[i]=m1[i+1];
}
for(i=0;i<7;i++)
{ m2[i]=m2[i+1];
}
for(i=0;i<7;i++)
{
m3[i]=m3[i+1];

}
m1[7]=aux2;
m2[7]=aux3;
m3[7]=aux1;

while(UART1_Data_Ready()==1)
{
UART1_Read_Text(a,"0",16);            //citeste sirul de caractere trimis pe seriala

for(i=0;i<8;i++)
m1[i]=a[i];
for(i=8;i<16;i++)
m2[i]=a[i];}
} while(1);
}

Results [edit]

O imagine de ansamblu a cum functioneaza proiectul, screenshoturi, filmulete cu proiectul functionand. Alte detalii care le credeti importante.

Download [edit]

Arhiva cu schema hardware + cod microcontroller + tot proiectul OpenWatcom.

Arhiva va contine 2 directoare (1 singur pentru proiecte doar software)

Hardware design - schema uC + codul folosit pentru a genera fisierul .HEX

Software design - template-ul Open Watcom folosit

Status

15 Aprilie - achizitionare componente

21 Aprilie - placa secundara ce contine PIC-ul este functionala

17 Mai - testat codul pentru EV/Z3 de transmitere pe seriala

18 Mai - testat codul pentru PIC de citire de pe seriala