• No se han encontrado resultados

C ONTROL DE D

N/A
N/A
Protected

Academic year: 2019

Share "C ONTROL DE D"

Copied!
16
0
0

Texto completo

(1)

Aprenda a controlar el mundo de La electrónica digital, montando y experimentando los mejores proyectos electrónicos

ELECTRÓNICA

PRACTICA

Aprenda a controlar el mundo de La electrónica digital, montando y experimentando los mejores proyectos electrónicos

| Martin A. Torres Fortelli

PICBASIC

PRO

-

C

ONTROL DE

D

ISPLAY

GLCD

NOKIA

Aprenda a controlar el mundo de La electrónica digital, montando y experimentando los

ONTROL DE

(2)

ETI e-Book nº15

2

CURSO PRACTICO DE

ELECTRONICA MODERNA

CON MICROCONTROLADORES

- CONTROL GLCD PCD8544 -

Martin A. Torres Fortelli

Director Escuela Técnica Virtual – ETI (Educación Técnica Informal)

Profesor de Electrónica - Electricidad - Electromecánica – Automatización – Matemática I-II

Título original:

Introducción a la electrónica Microcontrolada (1ra Edición) Primera edición

DERECHOS RESERVADOS © ETI (Educación Técnica Informal) - ® Escuela Técnica Virtual Diseño de portada: Martin A. Torres Fortelli

Diagramación: Martin A. Torres Fortelli Fotografía: Martin A. Torres Fortelli

e-mail: prof.martintorres@educ.ar - torres.electronico@mail.com

web: https://sites.google.com/a/educ.ar/eti/home - https://www.facebook.com/eductecinformal Comodoro Rivadavia - Provincia del Chubut – Patagonia Argentina

DERECHOS DE COPIA

Esta documentación tiene derechos del autor y copia. Escuela Técnica Virtual (ETI) es una Marca Registrada.

Al descargar este libro por internet, u adquirirlo mediante la compra que viene acompañado con los módulos educativos experimentales y la placa entrenadora, usted acepta los derechos de copia y se compromete a usar este material solamente con fines educativos y no comerciales.. Cualquier otro uso no es permitido y representa una violación de los derechos de copia y propiedad intelectual.

No se permite la reproducción con fines comerciales – Denuncie a las personas que le venden este ejemplar y recupere su inversión.

Prohibida la reproducción parcial o total de este libro por cualquier medio sea electrónico, mecánico, fotocopiado o cualquier otro método, salvo con autorización previa y por escrita del autor.

La reproducción en medios gráficos sin la autorización pertinente, está penada por la Ley.

Todas las marcas que aparecen o se mencionan en este libro son registradas y pertenecen a sus propietarios.

SOBRE LA PRECISIÓN DE ESTE TEXTO

Se realizó un gran esfuerzo para asegurar la precisión de este texto y los experimentos, pero puede haber errores de tipografía.

Si usted encuentra errores o algún tema que requiera información adicional, por favor infórmelo a

(3)

Introducción:

Para quienes ya han estado experimentando con los demás proyectos

están introduciendo en este mundo apasionante de los microcontroladores, se han dado cuenta que llega un momento dado que nuestra sed por aprender más, debe ser saciada con más proyectos,

más conocimientos para simplificar. Dejando de lado el famoso “Hola mundo

vamos a ver cómo controlar e implementar los “display gráficos” NOKIA 3310 proyectos queden más vistosos y ganen más vida aun.

Conociendo el GLCD

Esta es una pantalla LCD GRAFICA (GLCD)

negro, interfaz SPI con una velocidad de datos máxima de 4 Mbit / s anteriormente del display LCD16x2 (que usa un controlador interno HD44780)

internamente un controlador, que es el

La alimentación de este dispositivo puede variar según la marca y modelo de fabricantes; La hoja de datos del controlador, comenta que la Tensión de alimentación

completo que estoy trabajando, funciono correctamente con 4.2v (En tensiones inferiores, el contraste es muy bajo y apenas pueden ver los caracteres)

Conexionado de Display NOKIA 3310 PIN FUNCION

1 RST (Low-High)

2 CE “Selección de chip”(Low)

3 DC “Modalidad: DATOS (High) / Modulo (Low)” 4 Din “Línea SPI datos”

5 CLK “Reloj SPI”

6 Vcc “Alimentación 3.3v 7 BL “Back Light (iluminación

8 GND

quienes ya han estado experimentando con los demás proyectos microcontrolados

están introduciendo en este mundo apasionante de los microcontroladores, se han dado cuenta que llega un nuestra sed por aprender más, debe ser saciada con más proyectos,

Hola mundo” con un display LCD 16x2 o encender un

e implementar los “display gráficos” NOKIA 3310 – 5110 para que nuestros proyectos queden más vistosos y ganen más vida aun.

GRAFICA (GLCD) con resolución matriz de 84x48 puntos, caracteres SPI con una velocidad de datos máxima de 4 Mbit / s. , y como vimos en el articulo

(que usa un controlador interno HD44780), este display también contiene PCD8544.

La alimentación de este dispositivo puede variar según la marca y modelo de fabricantes; La hoja de datos del Tensión de alimentación, ronda los + 2.7V y + 3.6V; Pero en la práctica, el modulo jando, funciono correctamente con 4.2v (En tensiones inferiores, el contraste es muy bajo y apenas pueden ver los caracteres).

Conexionado de Display NOKIA 3310 - 5110 FUNCION

“Selección de chip”(Low)

DC “Modalidad: DATOS (High) / Modulo (Low)” Din “Línea SPI datos”

Vcc “Alimentación 3.3v – 4.3v” BL “Back Light (iluminación – 5V)”

ETI e-Book nº15

3

microcontrolados de ETI, y/o recién se están introduciendo en este mundo apasionante de los microcontroladores, se han dado cuenta que llega un

nuestra sed por aprender más, debe ser saciada con más proyectos, con más ejemplos… Con

con un display LCD 16x2 o encender un simple led, en esta ocasión, 5110 para que nuestros

puntos, caracteres en blanco y omo vimos en el articulo

, este display también contiene

(4)

Un poco de teoría sobre cómo trabaja el controlador de la

Inmediatamente después de encender nuestra pin “Reset” (RST). Es necesario asegurarse de que el control de los pines, al poner en alto algunos

podemos dañar el controlador, y este no tiene reparación alguna. Después del reset, ponemos en estado alto el PIN RST

secuencia de comandos que viene...

El pin encargado de establecer el modo de trabajo del controlador, es el pin O sea, para establecer si esta en modo escritura

pin (0=comand – 1=data).

Al poner el PIN DC en estado bajo, habilitamos el controlador en modo lectura y se queda a la espera de los datos que afectaran los registros comandos para el

Estos datos son enviados mediante el

Habilitamos SPI poniendo en bajo el pin

SDIN o DN, también es conocido como MOSI (Master Out Slave IN). El pin SCE o CS (Chip Select), debe activarse para indicarle al

que ya conocen el protocolo SPI y han trabajado con otros dispositivos, SCE / CS, también es conocido como SS (Slave Select).

La transferencia de datos, se lleva a cabo en el flanco ascendente de comunicación y transferencia de datos.

Viéndolo de otra manera, la secuencia seria

Un poco de teoría sobre cómo trabaja el controlador de la

nuestra pantalla, se debe restablecer el modulo poniendo en estado bajo el Es necesario asegurarse de que todos los pasos se tengan en cuenta, ya que implementar mal

l poner en alto algunos pines específicos en un momento dado que no es el correcto , y este no tiene reparación alguna.

, ponemos en estado alto el PIN RST, y el controlador está listo para

El pin encargado de establecer el modo de trabajo del controlador, es el pin “Data Co

O sea, para establecer si esta en modo escritura (data) o lectura (comand), se pone en nivel bajo o alto este Al poner el PIN DC en estado bajo, habilitamos el controlador en modo lectura y se queda a la espera de los

comandos para el control del display. Estos datos son enviados mediante el protocolo SPI estándar:

Habilitamos SPI poniendo en bajo el pin SCE, y se hace recepción de los bits de datos SDIN o DN, también es conocido como MOSI (Master Out Slave IN).

El pin SCE o CS (Chip Select), debe activarse para indicarle al dispositivo que se le van a enviar datos. Para los e ya conocen el protocolo SPI y han trabajado con otros dispositivos, SCE / CS, también es conocido como

se lleva a cabo en el flanco ascendente del PIN SCLK, o sea, este pin es el que rige la

Viéndolo de otra manera, la secuencia seria así:

ETI e-Book nº15

4

Un poco de teoría sobre cómo trabaja el controlador de la pantalla

el modulo poniendo en estado bajo el todos los pasos se tengan en cuenta, ya que implementar mal

en un momento dado que no es el correcto,

el controlador está listo para trabajar y grabar la

Data Comand Select” (DC); , se pone en nivel bajo o alto este Al poner el PIN DC en estado bajo, habilitamos el controlador en modo lectura y se queda a la espera de los

los bits de datos por el PIN SDIN. El pin

dispositivo que se le van a enviar datos. Para los e ya conocen el protocolo SPI y han trabajado con otros dispositivos, SCE / CS, también es conocido como

(5)

ETI e-Book nº15

5

Registros de Control

(6)

ETI e-Book nº15

6

Variando los bytes de la pantalla de vídeo, podemos cambiar la imagen; O sea, para mostrar la información en l pantalla, es necesario poner el cursor sobre el banco deseado e imprimir el punto. Dicho en otras maneras, seleccionamos las coordenadas X e Y, y dibujamos el punto. .

Dicho de una manera más práctica. Esto seria así:

LCD_GotoXY: LOW DC

LcdData= %01000000 | PosY :GOSUB LCD_ByteOut ' 0х40+numero de banco (0…5)

LcdData= %10000000 | PosX :GOSUB LCD_ByteOut ' 0х80+coordenanda X (0…83)

RETURN

Invirtiendo el estado de DC, pasamos el display a modo de visualización

Cada columna (Xi) de una línea determinada (Yj) corresponde a 1 byte de memoria (Figura superior), el píxel superior corresponde al bit menos significativo (LSB). Selecciónanos el número de fila y columna, colocamos el valor de los datos de estas en formato byte, y se muestra la columna 8x1. Después de un byte de escritura incrementa automáticamente la dirección del puntero de la columna. Por lo tanto, el siguiente byte se muestra en la misma línea, pero con un desplazamiento de 1 pixel a la derecha.

Cuando la impresión llegue al final de la recta:

y=yi x = 83

Salta a la siguiente línea:

y = yi + 1 x = 0

Tener en cuenta que si el puntero se encuentra ubicado casi al final de la recta, y los bits que tenemos superan las posiciones que quedan libres, estos saltaran automáticamente a la línea siguiente.

Lo que vimos anteriormente, es válido cuando el bit de direccionamiento es cero V = 0.

(7)

ETI e-Book nº15

7

Pasemos a la práctica con PBP… Vamos a ver como se inicializa nuestro GLCD

---Configuración de Puertos ---

DC VAR GPIO.2 'especifica el puerto que conecta la pantalla

DTA VAR GPIO.1

RST VAR GPIO.4 CLK VAR GPIO.0

'---Definición de Variables---

Chr VAR Byte 'Para contador del bucle para limpiar la pantalla Posición PosX VAR Byte 'el cursor en la coordenada X

Posición PosY VAR Byte 'el cursor sobre coordenada Datos LcdData VAR Byte 'para enviar el SPI PAUSE 100

GOSUB LCD_INIT PAUSE 100

GOSUB LCD_Clear 'para borrar la pantalla Menu::

'Programa principal

'aquí colocamos nuestro programa principal…

End

'--- '--- Sub-inicializar la pantalla --- '---

LCD_Init: 'display rutinas de inicialización LOW RST: Pause 20: HIGH RST 'y restablecer la pantalla LCD de reinicio

LOW DC 'Nivel Bajo para Modo Comando

LcdData = $ 20: GOSUB LCD_ByteOut 'Función Comando SET ($ = 20% 0010 0000) p = 0, V = 1, H = 0 - normal,

LcdData = $ 0c: GOSUB LCD_ByteOut 'Control Display ($ 0c =% 0000 1100) D = 1, E = 0

LcdData = $ 21: GOSUB LCD_ByteOut 'Función Comando SET ($ = 21% 0010 0001) p = 0, V = 1, H = 1-avanzada

LcdData = $ 06: GOSUB LCD_ByteOut 'Control de Temperatura ($ 06 = 0000 0110) para establecer el coeficiente de temperatura LcdData = $ 13: GOSUB LCD_ByteOut 'Sistema de Bias($ 13 = 0001 0011) control para suministro de energía

LcdData = $ c8: GOSUB LCD_ByteOut 'Set Vop ($ c8 = 1100 1000) Invertir opción de energía

RETURN

'--- '--- es enviar comandos de SPI - --- 'Esta rutina es proporcionar por separado de todo el proceso de inicialización, ya que constantemente 'buscar para transmitir registros de control comandos

'---

LCD_ByteOut: 'rutina es para enviar comandos de SPI SHIFTOUT DTA, CLK, 1, [LcdData] 'pereda?m por SPI byte de comando. RETURN

'--- '--- borrar la pantalla --- --- '---

LCD_Clear: 'Sub-borrar la pantalla PosX = 0: PosY = 0 'Set X = 0, Y = 0 origen GOSUB LCD_GotoXY

HIGH DC 'ALTA alto nivel de modo de datos DC '

FOR Chr = 1 TO 252 'Borrar la pantalla llenándolo de "0" - punto de luz

LcdData = 0: GOSUB LCD_ByteOut LcdData = 0: GOSUB LCD_ByteOut NEXT Chr

RETURN

'--- '--- Sub posicionar el cursor --- --- 'Esta rutina es proporcionar por separado de todo el proceso de inicialización, ya que constantemente 'tratar de establecer el derecho de tener una fila o columna

'---

LCD_GotoXY: 'definir la posición del cursor

LOW DC ' BAJA bajo nivel de modo de comando DC '

LcdData =% 01000000 | PosY:GOSUB LCD_ByteOut '0x40 + numero de banco (0 ... 5)

(8)

Resumiendo, como verán, la inicialización de la pantalla LCD no es complicada. Al iniciar el dispositivo, solo tenemos que implementar la rutina LCD_Init

programa sin necesidad de volver a implementarlo La rutina LCD_Clear, se implementara

Las subrutinas LCD_GotoXY y LCD_ByteOut

estas son las rutinas para cambiar de fila, columna, parte del pr

que más nos interesa; Imprimir el primer “HOLA MUNDO” en la pantalla.

Imprimir en pantalla

Un poco de teoría nuevamente... A diferencia de los display alfa numéricos 16x2 con controlador HD44780, la pantalla del Nokia 3310 es gráfica y no contiene

elementos (números, letras) tienen que

artículo de los display lcd16x2, creación de caracteres CGRAM)

bibliotecas de símbolos), pero por otro lado, el problema radica en que esta memoria del microcontrolador.

El método de creación de caracteres es simple; Tomando como dato que el t

carácter es de 5x8 pixel. Hacemos la tabla, y completamos con ceros y unos cada espacio, donde el uno marca el pixel color negro, y cero en blanco.

En el siguiente ejemplo, se ve la creación del carácter “A”. Una vez que tenemos la tabla completa, número BINARIO y lo convertimos en HEX

Recuerden que para escribir el numero binario, debemos escribirlo del byte menor al un ejemplo $ 7E = St.b. 0111 Ml.b. 1110

En la practica, para hacer esta acción en PBP, el carácter generado se guarda de la siguiente manera:

'...

Data $ 7E, $ 11, $ 11, $ 11, $ 7E, $ 00

'Data registra en EEPROM cinco símbolos de

'cero. Al final de una columna, se necesita separar los caracteres uno de otro con el signo $ y

inicialización de la pantalla LCD no es complicada. Al iniciar el dispositivo, solo a rutina LCD_Init tan solo una vez, y luego, seguir con el resto del cuerpo del programa sin necesidad de volver a implementarlo.

, se implementara si usted tiene que limpiar la pantalla de las entradas anteriores

LCD_ByteOut, serán las más implementadas en el resto del programa, ya que ar de fila, columna, parte del procedimiento de impresión,

; Imprimir el primer “HOLA MUNDO” en la pantalla.

A diferencia de los display alfa numéricos 16x2 con controlador HD44780, la a y no contiene una biblioteca de símbolos. Esto significa que todos los elementos (números, letras) tienen que crearlos para luego imprimirlos (Algo similar a lo ya expuesto en el

de los display lcd16x2, creación de caracteres CGRAM). Por un lado es bueno (se pueden cr

pero por otro lado, el problema radica en que esta acción toma una gran cantidad de

de caracteres es simple; Tomando como dato que el tamaño completo

pixel. Hacemos la tabla, y completamos con ceros y unos cada espacio, donde el uno marca

, se ve la creación del carácter “A”. Una vez que tenemos la tabla completa, número BINARIO y lo convertimos en HEX.

Recuerden que para escribir el numero binario, debemos escribirlo del byte menor al

1110 = 0111111

En la practica, para hacer esta acción en PBP, el carácter generado se guarda de la siguiente manera:

... DEC | Chr | HEX '65 | A | 41

símbolos del caracteres en un byte, comenzando en la posición de una columna, se necesita separar los caracteres uno de otro con el signo $ y

ETI e-Book nº15

8

inicialización de la pantalla LCD no es complicada. Al iniciar el dispositivo, solo tan solo una vez, y luego, seguir con el resto del cuerpo del

si usted tiene que limpiar la pantalla de las entradas anteriores.

implementadas en el resto del programa, ya que ocedimiento de impresión, etc. Ahora veamos lo

A diferencia de los display alfa numéricos 16x2 con controlador HD44780, la una biblioteca de símbolos. Esto significa que todos los crearlos para luego imprimirlos (Algo similar a lo ya expuesto en el

. Por un lado es bueno (se pueden crear toma una gran cantidad de

amaño completo de cada matriz de pixel. Hacemos la tabla, y completamos con ceros y unos cada espacio, donde el uno marca

, se ve la creación del carácter “A”. Una vez que tenemos la tabla completa, tomamos el

Recuerden que para escribir el numero binario, debemos escribirlo del byte menor al más alto; Veámoslo con

En la practica, para hacer esta acción en PBP, el carácter generado se guarda de la siguiente manera:

(9)

Primer ejemplo práctico

En el siguiente ejemplo, lo que vamos a realizar, es imprimir tan solo un carácter dibujado / creado, se almacena en la eeprom mediante el comando DATA.

DEFINE OSC 4 CLK VAR PORTB.3 DTA VAR PORTB.2 DC VAR PORTB.1 RST VAR PORTB.0 TRISA=%1

TRISB=%11110000 Chr VAR Byte BitMap VAR Word PosX VAR Byte PosY VAR Byte

columna VAR Byte [6] LcdData VAR Byte

PAUSA 100 GOSUB LCD_INIT PAUSA 100 GOSUB LCD_Clear inicio:

PosX = 0: PosY = 0 : GOSUB LCD_GotoXY FOR Chr = 0 TO 5 READ Chr, Columna (Chr) NEXT Chr

HIGH DC

SHIFTOUT DTA, CLK, 1, [columna (0),columna (1), columna (2), columna (3),columna (4),columna (5)] GOTO inicio

LCD_Init:

LOW RST : PAUSE 100 : HIGH RST: LOW DC LcdData = $21: GOSUB LCD_ByteOut

LcdData = $c8: GOSUB LCD_ByteOut LcdData = $06: GOSUB LCD_ByteOut LcdData = $13: GOSUB LCD_ByteOut LcdData = $20: GOSUB LCD_ByteOut

LcdData = $0c: GOSUB LCD_ByteOut RETURN

LCD_ByteOut:

SHIFTOUT DTA, CLK, 1, [LcdData] RETURN

LCD_Clear:

PosX = 0 : PosY = 0 : GOSUB LCD_GotoXY HIGH DC

FOR Chr = 1 TO 252

LcdData = 0: GOSUB LCD_ByteOut LcdData = 0: GOSUB LCD_ByteOut NEXT Chr

RETURN LCD_GotoXY: LOW DC

LcdData =%01000000 | PosY: GOSUB LCD_ByteOut LcdData =%10000000 | PosX: GOSUB LCD_ByteOut RETURN

'--- 'Tabla de DATOS de las Fuentes '--- DATA $20, $54, $54, $54, $78, $00

Primer ejemplo práctico

En el siguiente ejemplo, lo que vamos a realizar, es imprimir tan solo un carácter; Recuerden que el carácter la eeprom mediante el comando DATA.

'array

'coloca el cursor en la posición deseada

'se lee de la EEPROM a partir de 0, y el dato se coloca

'array columna (Chr)

olumna (0),columna (1), columna (2), columna (3),columna (4),columna (5)]

: HIGH RST: LOW DC 'LCD RESET

'CONTRASTE

'SET coeficiente TEMP 'LCD MODO BIAS

'LCD modo normal

LcdData =%01000000 | PosY: GOSUB LCD_ByteOut LcdData =%10000000 | PosX: GOSUB LCD_ByteOut

ETI e-Book nº15

9

; Recuerden que el carácter

se coloca en

(10)

Excelente, si ya estamos en estas líneas, tomo por superado lo visto anteriormente… Ahora vamos implementar una tabla con más gráficos y vamos a imprimir un par de símbolos estáticos en la pantalla

DEFINE OSC 4 CLK VAR PORTB.3 DTA VAR PORTB.2 DC VAR PORTB.1 RST VAR PORTB.0 TRISA=%1

TRISB=%11110000 x VAR byte a VAR byte Chr_1 VAR Byte Chr VAR Byte char VAR byte offset VAR byte BitMap VAR Word PosX VAR Byte PosY VAR Byte Columna VAR Byte [6] LcdData VAR Byte

'--- 'Tabla de DATOS de las Fuentes '---

DATA @0,$3E,$51,$49,$45,$3E,_ ;/caracter en posicion 0/ numero 0

$00,$42,$7F,$40,$00,_ ;/caracter en posicion 1/ numero 1

$42,$61,$51,$49,$46,_ ;/caracter en posicion 2/ numero 2

$21,$41,$45,$4B,$31,_ ;/caracter en posicion 3/ numero 3

$18,$14,$12,$7F,$10,_ ;/caracter en posicion 4/ numero 4

$27,$45,$45,$45,$39,_ ;/caracter en posicion 5/ numero 5

$3C,$4A,$49,$49,$30,_ ;/caracter en posicion 6/ numero 6

$01,$71,$09,$05,$03,_ ;/caracter en posi

$36,$49,$49,$49,$36,_ ;/caracter en posicion 8/ numero 8

$06,$49,$49,$29,$1E,_ ;/caracter en posicion 9/ numero 9

$08,$08,$3E,$08,$08,_ ;/caracter en posicion 10/ signo +

$08,$08,$08,$08,$08,_ ;/caracter en posicion 11/ signo

$00,$60,$60,$00,$00,_ ;/caracter en posicion 12/ signo .

$7E,$11,$11,$11,$7E,_ ;/caracter en posicion 13/ letra A

$1F,$20,$40,$20,$1F,_ ;/caracter en posicion 14/ letra V

$7F,$09,$09,$09,$01 ;/caracter en posicion 15/ letra F

PAUSE 100 GOSUB LCD_INIT PAUSE 100

GOSUB LCD_Clear

PosX = 0 : PosY = 0 : GOSUB LCD_GotoXY inicio:

; posicionamos el puntero en los ejes X e Y

Lcddata = %01000000 + 17 ' cursor X en posicion 17 call PrintCtrlLcd

Lcddata = %10000000 +40 ' cursor Y en posicion 40 call PrintCtrlLcd

Char = 2 ;caracter de la posicion 2 (que es el numero "2") call PrintChar

Char = 1 ;caracter de la posicion 1 (que es el numero "1") call PrintChar

Char = 12 ;caracter de la posicion 12 (que es el signo ".") call PrintChar

Char = 5 ;caracter de la posicion 5 (que es el numero "5") call PrintChar

Char = 4 ;caracter de la posicion 4 (que es el numero "4") call PrintChar

Char = 14 ;caracter de la posicion 14 (que es la letra "V")

, si ya estamos en estas líneas, tomo por superado lo visto anteriormente… Ahora vamos implementar una tabla con más gráficos y vamos a imprimir un par de símbolos estáticos en la pantalla

;/caracter en posicion 0/ numero 0

;/caracter en posicion 1/ numero 1 ;/caracter en posicion 2/ numero 2 ;/caracter en posicion 3/ numero 3 ;/caracter en posicion 4/ numero 4 ;/caracter en posicion 5/ numero 5 ;/caracter en posicion 6/ numero 6 ;/caracter en posicion 7/ numero 7 ;/caracter en posicion 8/ numero 8

;/caracter en posicion 9/ numero 9 ;/caracter en posicion 10/ signo + ;/caracter en posicion 11/ signo -;/caracter en posicion 12/ signo .

;/caracter en posicion 13/ letra A ;/caracter en posicion 14/ letra V

;/caracter en posicion 15/ letra F

PosX = 0 : PosY = 0 : GOSUB LCD_GotoXY

00000 + 17 ' cursor X en posicion 17 0 +40 ' cursor Y en posicion 40

la posicion 2 (que es el numero "2") Char = 1 ;caracter de la posicion 1 (que es el numero "1") Char = 12 ;caracter de la posicion 12 (que es el signo ".") Char = 5 ;caracter de la posicion 5 (que es el numero "5") Char = 4 ;caracter de la posicion 4 (que es el numero "4") Char = 14 ;caracter de la posicion 14 (que es la letra "V")

ETI e-Book nº15

10

(11)

ETI e-Book nº15

11

call PrintChar goto inicio PrintChar:

offset = Char * 5 for a = 1 to 5 read offset, LcdData call PrintDataLcd offset = offset + 1 next a

LcdData = 0 call PrintDataLcd return

PrintCtrlLcd:

DC = 0 PrintDataLcd:

for x = 1 to 8 DTA = LcdData.7 CLK = 1

LcdData = LcdData << 1 CLK = 0

next x DC = 1 return LCD_Init:

low RST : Pause 20: high RST : LOW DC LcdData = $21: GOSUB LCD_ByteOut LcdData = $c8: GOSUB LCD_ByteOut LcdData = $06: GOSUB LCD_ByteOut LcdData = $13: GOSUB LCD_ByteOut LcdData = $20: GOSUB LCD_ByteOut LcdData = $0c: GOSUB LCD_ByteOut RETuRN

LCD_ByteOut:

SHIFTOUT DTA, CLK, 1,[LcdData] RETuRN

LCD_Clear:

PosX = 0 : PosY = 0 : GOSUB LCD_GotoXY high DC

for Chr = 1 to 252

LcdData = 0 : GOSUB LCD_ByteOut LcdData = 0 : GOSUB LCD_ByteOut next Chr

RETuRN LCD_GotoXY: LOW DC

LcdData =%01000000 | PosY : GOSUB LCD_ByteOut LcdData =%10000000 | PosX : GOSUB LCD_ByteOut RETURN

END

Como pudimos ver en el ejemplo anterior, generamos una tabla con los distintos caracteres generados; Cada carácter, ocupa 5 espacios de cada posicion; Disculpen que sea reiterativo, pero hay cosas que es mejor

repetirlas varias veces para que queden en claro… Bien, si la tabla la organizamos de tal manera de recordar en que posicion de ésta está cada carácter, fíjense en el programa que asignando a la variable “char” el valor de la posicion y llamando la rutina “PrintChar”, leemos la posicion de la eeprom e imprimimos el carácter.

(12)

Partiendo de las líneas donde establecemos como inicio del puntero en los ejes X e Y eje (+17 para el eje X y +40 para el eje Y), esto significa que de las coordenadas 0 pixeles para un lado, y 40 pixeles para el otro.

Lcddata = %10100000 + 17 ' cursor X en posicion 17 call PrintCtrlLcd

Lcddata = %01000010 +40 ' cursor Y en posicion 40 call PrintCtrlLcd

Si queremos que inicie desde la posicion 1 valores

Lcddata = %01000000+1 ' cursor X en posicion 1 call PrintCtrlLcd

Lcddata = %01000000 +1 ' cursor Y en posicion call PrintCtrlLcd

Bien, hay muchas maneras de desplazar el puntero e imprimir cada carácter; Eso

programador; En mi caso, para poder no repetir líneas de programación cada vez que quiero desplazar posiciones e imprimir cada carácter, implemente la

PrintChar:

offset = Char * 5 for a = 1 to 5 read offset, LcdData call PrintDataLcd offset = offset + 1 next a

LcdData = 0 call PrintDataLcd return

Básicamente, la idea fue partir de la posicion de cada carácter) para luego imprimir…

Partiendo de las líneas donde establecemos como inicio del puntero en los ejes X e Y

eje (+17 para el eje X y +40 para el eje Y), esto significa que de las coordenadas 0-0, estaremos desplazados 17 o, y 40 pixeles para el otro.

Lcddata = %10100000 + 17 ' cursor X en posicion 17 Lcddata = %01000010 +40 ' cursor Y en posicion 40

Si queremos que inicie desde la posicion 1-1 (esquina superior izquierda), tendríamos que colocar los siguientes

' cursor X en posicion 1 ' cursor Y en posicion 1

Bien, hay muchas maneras de desplazar el puntero e imprimir cada carácter; Eso está

programador; En mi caso, para poder no repetir líneas de programación cada vez que quiero desplazar posiciones e imprimir cada carácter, implemente las siguientes líneas:

Básicamente, la idea fue partir de la posicion del puntero, e ir sumando saltos de 5 pixeles (que es la anchura de

ETI e-Book nº15

12

Partiendo de las líneas donde establecemos como inicio del puntero en los ejes X e Y con un agregado en cada 0, estaremos desplazados 17

superior izquierda), tendríamos que colocar los siguientes

está en el ingenio de cada programador; En mi caso, para poder no repetir líneas de programación cada vez que quiero desplazar

(13)

Veamos un último ejemplo para ir cerrando la idea de cómo manejar / controlar estos display gráficos… Hasta acá, hemos visto como inicializar

crear una tabla con los caracteres, vimos como imprimir estos carácter…etc.

Ahora vamos a ver cómo hacer un programa, interactuar con las variables del programa e imprimir el valor de estas variables, para que pasemos un paso más adelante, y dejemos atrás el “hola mundo” estático al que estamos acostumbrados desde el inicio de este articulo…

Como el pic 16F628 no tiene ADC, para realizar el próximo ejemplo, vamos a implementar un PIC 16F armaremos un simple monitor de tensión y corriente.

Como carga, para poder simular nuestro proyecto, notaran que implemente tres motores en paralelo con sus respectivos switch para habilitar y así poder sumar o decrementar peso a la carga.

Veamos un último ejemplo para ir cerrando la idea de cómo manejar / controlar estos display gráficos…

Hasta acá, hemos visto como inicializar el display grafico, vimos como crear, generar un carácter, vimos como crear una tabla con los caracteres, vimos como imprimir estos carácter…etc.

Ahora vamos a ver cómo hacer un programa, interactuar con las variables del programa e imprimir el valor de stas variables, para que pasemos un paso más adelante, y dejemos atrás el “hola mundo” estático al que estamos acostumbrados desde el inicio de este articulo…

Como el pic 16F628 no tiene ADC, para realizar el próximo ejemplo, vamos a implementar un PIC 16F armaremos un simple monitor de tensión y corriente.

Como carga, para poder simular nuestro proyecto, notaran que implemente tres motores en paralelo con sus respectivos switch para habilitar y así poder sumar o decrementar peso a la carga.

ETI e-Book nº15

13

Veamos un último ejemplo para ir cerrando la idea de cómo manejar / controlar estos display gráficos… el display grafico, vimos como crear, generar un carácter, vimos como

Ahora vamos a ver cómo hacer un programa, interactuar con las variables del programa e imprimir el valor de stas variables, para que pasemos un paso más adelante, y dejemos atrás el “hola mundo” estático al que

Como el pic 16F628 no tiene ADC, para realizar el próximo ejemplo, vamos a implementar un PIC 16F876A y

(14)

ETI e-Book nº15

14

DEFINE OSC 4

;**************** ADC chanel setting ************************

DEFINE ADC_BITS 10 DEFINE ADC_CLOCK 3 DEFINE ADC_SAMPLEUS 50 INTCON = 0

CMCON=7

ADCON1=%10000010 TRISA=%00001111 TRISB=%00000000 TRISC=%00000000 PORTA=0

PORTB=0 PORTC=0

CLK VAR PORTB.2 DTA VAR PORTB.3 DC VAR PORTB.0 RST VAR PORTB.1 SCE VAR PORTB.4

'--- ; variables para control del programa '--- HAM VAR word

HAM2 VAR WORD X1 VAR WORD VOLT VAR WORD HVD VAR word AMPER VAR word MV VAR BYTE MA VAR BYTE

'--- ; variables para control del display

'---

x var byte y var byte z var byte a var byte PosX var byte PosY var byte Chr var byte LcdData var byte Offset var byte Char var byte adval var word w1 var word vt var word cnt var byte grup var word

'--- 'Tabla de DATOS de las Fuentes '---

DATA @0,$3E,$51,$49,$45,$3E,_ ;/caracter en posicion 0/ numero 0 $00,$42,$7F,$40,$00,_ ;/caracter en posicion 1/ numero 1

$42,$61,$51,$49,$46,_ ;/caracter en posicion 2/ numero 2

$21,$41,$45,$4B,$31,_ ;/caracter en posicion 3/ numero 3

$18,$14,$12,$7F,$10,_ ;/caracter en posicion 4/ numero 4

$27,$45,$45,$45,$39,_ ;/caracter en posicion 5/ numero 5

$3C,$4A,$49,$49,$30,_ ;/caracter en posicion 6/ numero 6

$01,$71,$09,$05,$03,_ ;/caracter en posicion 7/ numero 7

$36,$49,$49,$49,$36,_ ;/caracter en posicion 8/ numero 8

$06,$49,$49,$29,$1E,_ ;/caracter en posicion 9/ numero 9

(15)

ETI e-Book nº15

15

$08,$08,$08,$08,$08,_ ;/caracter en posicion 11/ signo

$00,$60,$60,$00,$00,_ ;/caracter en posicion 12/ signo .

$7E,$11,$11,$11,$7E,_ ;/caracter en posicion 13/ letra A

$1F,$20,$40,$20,$1F,_ ;/caracter en posicion 14/ letra V

$7F,$09,$09,$09,$01 ;/caracter en posicion 15/ letra F

PAUSe 100

GOSUB LCD_INIT PAUSe 100

GOSUB LCD_Clear

PosX = 0 : PosY = 0 : GOSUB LCD_GotoXY

;================ programa principal ==============================

INICIO:

ADCIN 0,HAM BAK:

IF ADCON0.2=1 THEN BAK PAUSE 5

GOSUB F_VOLT ADCIN 1,HAM PAUSE 5

GOSUB F_AMP PAUSE 1000 GOSUB N3310 GOTO INICIO

;========================= V - A ==================================

F_VOLT:

HVD=((HAM+1)*/875)/10 VOLT=HVD/10

MV=(HVD)//10 RETURN F_AMP:

HVD=(HAM+1)*/250 AMPER=HVD/100 MA=HVD//100 RETURN

'================== L C D N3310 ========================================

N3310:

'~~~~~~~~~~~~~~~~~ cursor display volt

Lcddata = %10100000 + 17 ' cursor X

call PrintCtrlLcd

Lcddata = %01000010 +40 ' cursor Y

call PrintCtrlLcd

Char = (VOLT dig 1) call PrintChar

Char = (VOLT dig 0) call PrintChar

Char = 12 call PrintChar

Char = (MV dig 0) call PrintChar ;Char = (MV dig 1) ;call PrintChar

Char = 14 call PrintChar

'~~~~~~~~~~~~~~~~~ cursor display amp

Lcddata = %10100000 + 17 ' cursor X

call PrintCtrlLcd

Lcddata = %01000010 + 50 ' cursor Y

call PrintCtrlLcd

Char = (amper dig 1) call PrintChar

Char = (amper dig 0) call PrintChar

(16)

ETI e-Book nº15

16

call PrintChar

Char = (Ma dig 1) call PrintChar Char = 13 call PrintChar RETURN

PrintChar:

offset = Char * 5 for a = 1 to 5 read offset, LcdData call PrintDataLcd offset = offset + 1 next a

LcdData = 0 call PrintDataLcd return

PrintCtrlLcd:

DC = 0 PrintDataLcd:

for x = 1 to 8 DTA = LcdData.7 CLK = 1

LcdData = LcdData << 1 CLK = 0

next x DC = 1 return LCD_Init:

low RST : Pause 20: high RST : LOW DC LcdData = $21: GOSUB LCD_ByteOut LcdData = $c8: GOSUB LCD_ByteOut LcdData = $06: GOSUB LCD_ByteOut LcdData = $13: GOSUB LCD_ByteOut LcdData = $20: GOSUB LCD_ByteOut LcdData = $0c: GOSUB LCD_ByteOut RETuRN

LCD_ByteOut:

SHIFTOUT DTA, CLK, 1,[LcdData] RETuRN

LCD_Clear:

PosX = 0 : PosY = 0 : GOSUB LCD_GotoXY high DC

for Chr = 1 to 252

LcdData = 0 : GOSUB LCD_ByteOut LcdData = 0 : GOSUB LCD_ByteOut next Chr

RETuRN LCD_GotoXY: LOW DC

Referencias

Documento similar

Dos profesores en los grupos de no SSEE en Inglés, Matemáticas y Lengua Proyectos de Innovación Educativa: Trabajo por centros de interés (tecnología, E. Física, Plástica y

 Buscar Buque Base, esta botón nos lanzará a un archivo Excel, en donde existe una amplia base de datos de cada tipo de buque, que ayudará al usuario, en el caso

El objetivo, en todo caso, debe ser que la información sea co- nocida por todos los miembros del equipo de aprendizaje, que esté disponible y que sea com- prensible para que

The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,

Volviendo a la jurisprudencia del Tribunal de Justicia, conviene recor- dar que, con el tiempo, este órgano se vio en la necesidad de determinar si los actos de los Estados

1. LAS GARANTÍAS CONSTITUCIONALES.—2. C) La reforma constitucional de 1994. D) Las tres etapas del amparo argentino. F) Las vías previas al amparo. H) La acción es judicial en

Por consiguiente, el propósito y objetivo central de este estudio es conocer los factores que pueden motivar a las personas adultas mayores en Puerto Rico a

Para suelos impermeables arenosos (o con grava) con un 40 a 85% en peso (de la fracción más fina que el tamiz nº 4) de partículas más finas que el tamiz 200, el filtro de