display alfanumÉrico lab 1 + lab 2...

15
LAB 1 + LAB 2 PROGRAMACIÓN EN C, ASSEMBLER MIPS, Y ELO312: LAB. DE EST. DE COMPUTADORES SEPTIEMBRE DE 2012 DISPLAY ALFANUMÉRICO 2X16

Upload: nguyenkhue

Post on 15-Aug-2019

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: DISPLAY ALFANUMÉRICO LAB 1 + LAB 2 2X16ramos.elo.utfsm.cl/~elo312/02-2012/labs/elo312-0212-clase-4.pdflab 1 + lab 2 programaciÓn en c, assembler mips, y elo312: lab. de est. de computadores

L A B 1 + L A B 2

P R O G R A M A C I Ó N E N C , A S S E M B L E R M I P S , Y

E L O 3 1 2 : L A B . D E E S T . D E C O M P U T A D O R E S

S E P T I E M B R E D E 2 0 1 2

DISPLAY ALFANUMÉRICO

2X16

Page 2: DISPLAY ALFANUMÉRICO LAB 1 + LAB 2 2X16ramos.elo.utfsm.cl/~elo312/02-2012/labs/elo312-0212-clase-4.pdflab 1 + lab 2 programaciÓn en c, assembler mips, y elo312: lab. de est. de computadores

OBJETIVOS

• Experimentar con la conexión de dispositivos

externos al microcontrolador.

• Manejar puertos del microcontrolador en forma

bidireccional.

• Aprender a utilizar un display LCD alfanumérico

inteligente y conocer sus ventajas como

herramienta para depurar programas.

Page 3: DISPLAY ALFANUMÉRICO LAB 1 + LAB 2 2X16ramos.elo.utfsm.cl/~elo312/02-2012/labs/elo312-0212-clase-4.pdflab 1 + lab 2 programaciÓn en c, assembler mips, y elo312: lab. de est. de computadores

DISPLAY ANDXX1GST/GST-LED

Page 4: DISPLAY ALFANUMÉRICO LAB 1 + LAB 2 2X16ramos.elo.utfsm.cl/~elo312/02-2012/labs/elo312-0212-clase-4.pdflab 1 + lab 2 programaciÓn en c, assembler mips, y elo312: lab. de est. de computadores

DIAGRAMA DE CONECCIONES

GND1

+5V2

Vo3

RS4

R/W5

E6

DB07

DB18

DB29

DB310

DB411

DB512

DB613

DB714

BL+15

BL-16

LCD

LCD_DISPLAY

10k 1k

+5

+5

+5

RS

EN

DATA[0..7]

10k

10k

10k

10k

10k

10k

10k

10k

RW

Page 5: DISPLAY ALFANUMÉRICO LAB 1 + LAB 2 2X16ramos.elo.utfsm.cl/~elo312/02-2012/labs/elo312-0212-clase-4.pdflab 1 + lab 2 programaciÓn en c, assembler mips, y elo312: lab. de est. de computadores

DIAGRAMA TEMPORAL DE SEÑALES (1)

Page 6: DISPLAY ALFANUMÉRICO LAB 1 + LAB 2 2X16ramos.elo.utfsm.cl/~elo312/02-2012/labs/elo312-0212-clase-4.pdflab 1 + lab 2 programaciÓn en c, assembler mips, y elo312: lab. de est. de computadores

DIAGRAMA TEMPORAL DE SEÑALES (2)

Page 7: DISPLAY ALFANUMÉRICO LAB 1 + LAB 2 2X16ramos.elo.utfsm.cl/~elo312/02-2012/labs/elo312-0212-clase-4.pdflab 1 + lab 2 programaciÓn en c, assembler mips, y elo312: lab. de est. de computadores

DIAGRAMA TEMPORAL DE SEÑALES (3)

Page 8: DISPLAY ALFANUMÉRICO LAB 1 + LAB 2 2X16ramos.elo.utfsm.cl/~elo312/02-2012/labs/elo312-0212-clase-4.pdflab 1 + lab 2 programaciÓn en c, assembler mips, y elo312: lab. de est. de computadores

DIAGRAMA TEMPORAL DE SEÑALES (3)

Page 9: DISPLAY ALFANUMÉRICO LAB 1 + LAB 2 2X16ramos.elo.utfsm.cl/~elo312/02-2012/labs/elo312-0212-clase-4.pdflab 1 + lab 2 programaciÓn en c, assembler mips, y elo312: lab. de est. de computadores

CÓDIGO DE CARACTERES

Page 10: DISPLAY ALFANUMÉRICO LAB 1 + LAB 2 2X16ramos.elo.utfsm.cl/~elo312/02-2012/labs/elo312-0212-clase-4.pdflab 1 + lab 2 programaciÓn en c, assembler mips, y elo312: lab. de est. de computadores

TRABAJO PREVIO

• Completar / Diseñar las siguientes funciones: • void udelay(unsigned int x);

• Retardos vía asm(“nop”) -> 125 [ns] a 8 [MHz].

• void init_display(void);

• 8 bit, corrimientos a la derecha, mostrar cursor pestañeando.

• unsigned char get_pos(void);

• Esta función es similar (idéntica) al diseño de wait_BF();

• char get_data(void);

• wait_BF(); luego setear bits: RS + R/nW

• LCD_READ(value);

• Diseño de un circuito eliminador de rebotes. • Uso del Timer A, alimentado por ACLK (32,768 [KHz])

• Contador de pulsador

Page 11: DISPLAY ALFANUMÉRICO LAB 1 + LAB 2 2X16ramos.elo.utfsm.cl/~elo312/02-2012/labs/elo312-0212-clase-4.pdflab 1 + lab 2 programaciÓn en c, assembler mips, y elo312: lab. de est. de computadores

EN EL LABORATORIO

• Implementar

• udelay(x);

• Implementar

• int putchar(unsinged int c);

• Incorporar: ´\n´, ´\t´ • Ayuda: ver lcd_scroll_up() para ‘\n’

• Probar usando void new_line()

• Diseñar

• show_time(unsigned char p, unsinged int s)

• Diseñar

• unsigned char wait_BF(void)

• OPCIONAL: (+20pts.) Estimador de frecuencia de pulsador

• Barra horizontal proporcional a la frecuencia del pulsador btn2

• Al presionar pulsador btn1 mostrar hora

Page 12: DISPLAY ALFANUMÉRICO LAB 1 + LAB 2 2X16ramos.elo.utfsm.cl/~elo312/02-2012/labs/elo312-0212-clase-4.pdflab 1 + lab 2 programaciÓn en c, assembler mips, y elo312: lab. de est. de computadores

TIPS & TRICKS (1)

• Para eliminar rebotes de largo X [ms] solo basta con

– encuestar – el pin (pulsador/interruptor) cada Y

[ms] con Y > X.

• Configure el timer para interrumpir cada Y [ms].

• En la rutina de servicio de interrupción (RSI) del

timer encuestar pin (pulsador/interruptor) y

eventualmente subir flag F.

• En programa main verificar si flag F está en alto,

actuar y resetear flag F.

Page 13: DISPLAY ALFANUMÉRICO LAB 1 + LAB 2 2X16ramos.elo.utfsm.cl/~elo312/02-2012/labs/elo312-0212-clase-4.pdflab 1 + lab 2 programaciÓn en c, assembler mips, y elo312: lab. de est. de computadores

TIPS & TRICKS (2)

// invocada en RSI timer

void scanPS()

{

static int ps = 0;

int cps = P?IN & BIT?;

if (cps && ps == 0)

flag = 1;

ps = cps;

}

// invocada en main

// retorna > 0 ssi

// se presiono un boton

int checkPS()

{

int cFlag = flag;

flag = 0;

return cFlag;

}

NOTA: - hay que definir – flag – global - definir P?DIR bit ? como entrada

Page 14: DISPLAY ALFANUMÉRICO LAB 1 + LAB 2 2X16ramos.elo.utfsm.cl/~elo312/02-2012/labs/elo312-0212-clase-4.pdflab 1 + lab 2 programaciÓn en c, assembler mips, y elo312: lab. de est. de computadores

TIPS & TRICKS (3)

• Display shift

• send_cmd(0x18) 1 posición hacia la derecha (.. o izquierda?)

• send_cmd(0x02); volver a la posición 0 (origen)

• Los comandos no alteran el contenido de la memoria del display

• use get_pos(); para – actualizar – la imagen

Page 15: DISPLAY ALFANUMÉRICO LAB 1 + LAB 2 2X16ramos.elo.utfsm.cl/~elo312/02-2012/labs/elo312-0212-clase-4.pdflab 1 + lab 2 programaciÓn en c, assembler mips, y elo312: lab. de est. de computadores

TIPS & TRICKS (4): USE AUTO-INDENT

void tic (void)

{

if (++TIC_CLK == TIC_1SEG)

{

TIC_CLK = 0;

SWclk();

}

if (P5IN & BIT7)

scs_setup();

else

scs_reset();

if (++BUT_CLK == TIC_1SEG / 100)

{

BUT_CLK = 0;

Tec_Matrix();

}

}

void tic (void)

{

if (++TIC_CLK == TIC_1SEG)

{

TIC_CLK = 0;

SWclk();

}

if (P5IN & BIT7)

scs_setup();

else

scs_reset();

if (++BUT_CLK == TIC_1SEG / 100)

{

BUT_CLK = 0;

Tec_Matrix();

}

}