perifericos de entrada salida

Upload: erika-martinez

Post on 10-Jul-2015

62 views

Category:

Documents


0 download

TRANSCRIPT

PERIFRICOS DE E/S

Perifricos de E/STecladosMuy utilizado para introducir informacin al microcontrolador. Los hay de varios tipos: de lmina flexible, de efecto Hall, de efecto inductivo, de efecto capacitivo. Los ms comunes son los de lmina flexible.

El problema de los rebotes. Debido al efecto muelle del pulsador, se producen oscilaciones en la seal tanto al pulsar como al soltar la tecla. u1 +Vcc SOLUCIONES SOLUCIONESIDEALu1 R

u1REAL

t

Hw: Red R-C Hw: Red R-C Biestables Biestables Sw: Espera de Sw: Espera de un tiempo un tiempo suficiente suficiente

t

Perifricos de E/STeclados linealesMuy sencillos, pero no permiten disponer de muchas teclas.+Vcc

E0 E1

De este modo, cuando el microcontrolador detecte un 0 al final de la lnea, se sabr que se ha pulsado una tecla y, adems, se sabr cul ha sido.

En

Basta con que el programa compruebe peridicamente el estado de las entradas a las que se ha conectado el teclado.

1

Perifricos de E/STeclados matricialesVarias teclas controladas con un nmero reducido de puertos E/S.+Vcc

SF1 SF2 SF3 SF4 E C1 E C2 E C3 E C4

0 0 0 0 1 1 0 1 1

La pulsacin de una tecla se pone de manifiesto en las entradas del microcontrolador conectadas al teclado. En este ejemplo, se sabe que se ha pulsado una tecla de la tercera columna, pero no se sabe cul. Se necesita desarrollar algoritmos que permitan determinar cul es la tecla que se ha pulsada.

Perifricos de E/SMuestreo secuencial. Una vez que se ha detectado que se ha pulsado una tecla, se cambia el valor de las salidas en el microcontrolador de modo que slo una de ellas valga 0 en cada instante. La combinacin que d lugar a un 0 en alguna de las entradas identificar la tecla que se ha pulsado.+Vcc

SF1 SF2 SF3 SF4 E C1 E C2 E C3 E C4 0 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1

S F1 S F2 S F3 S F4 EC1 EC2 EC3 EC4

1 0 1 1 1 1 0 1

Es un mtodo sencillo de implementar, pero tardar ms o menos en encontrar la tecla pulsada en funcin de la posicin que ocupe sta.

2

Perifricos de E/SInversin de lnea. Tras detectar que hay una tecla pulsada, se almacena el valor que hay en las entradas, se invierten las lneas (las que eran entradas pasan a ser salidas y viceversa) y se saca por las nuevas salidas la combinacin almacenada.+ Vcc

EF1 EF2 EF3 EF4 S C1 S C2 S C3 S C4

1 0 1 1 1 1 0 1 1

Esto dar lugar a que en las nuevas entradas slo aparezca un cero en la fila a la que pertenece la tecla pulsada. Como todos los bits son entrada en algn momento, se necesita colocar resistencias en los 8 bits. Este mtodo es ms rpido que el anterior y tarda lo mismo en identificar cualquier tecla.

Perifricos de E/SConexin de teclados matriciales en los PIC. El puerto B de los microcontroladores PIC est especialmente pensado para conectar un teclado matricial de 44.+VccF1 F2 F3 F4

RB0 0 [S] RB1 0 RB2 0 RB3 0 RB4 1 [E] RB5 1 RB6 1 RB7 1

* La posibilidad de habilitar resistencias de reduce el nmero de componentes externos. * La existencia de una interrupcin asociada a cambios en los bits RB avisa de que se ha pulsado una tecla.

C1 C2 C3 C4

3

Perifricos de E/SExtensin a teclados de ms de 16 teclas. Se puede ampliar el tamao del teclado sin ms que utilizar codificadores y decodificadores.

+Vcc

SF1 SF2 SF3 SF4 E C1 E C2 E C3 E C4

0 0 0 0 1 1 1 1 Codif 16 4 Decodif. 4 16

Teclado Matricial 16 16

Perifricos de E/SPantallas de cristal lquido (LCD)Usado para representar caracteres alfanumricos. Control bastante complejo. El control directo de los electrodos del LCD casi necesitara un microcontrolador dedicado exclusivamente a esta tarea. Lo ms habitual es utilizar un LCD con un driver especfico: el HD44780 de Hitachi o compatible.

4

Perifricos de E/SCaractersticas del HD44780Driver para LCD de matriz de puntos para representacin de caracteres y smbolos en formato 58 510. Dispone de 240 patrones de caracteres almacenados en ROM, de los cuales 208 de tamao 58 y 32 de tamao 510.HD44780COM1 . . COM8 SEG1 . . . . . SEG40

HD44780COM1 . . . COM11

Cursor

SEG1 . . . . . SEG40

Cursor

Ejemplo en 58 y 8 caracteres/lnea

Ejemplo en 510 y 8 caracteres/lnea

Perifricos de E/SMemoria RAM de pantalla (Display Data RAM: DDRAM) con un total de 80 posiciones 8 bits/posicin. En los 8 bits se almacena el cdigo del carcter para un generador de caracteres ROM que dispone de 240 caracteres posibles y 8 posiciones (dobles) para caracteres definibles por el usuario en una memoria CGRAM (caracteres grficos). Visibles 1 2 lneas con 16 caracteres/lnea. Ventana de caracteres visibles (16 posiciones)

Registro:

1 2

......

11

......

26

......

39 40

Memoria de pantalla para una lnea (40 posiciones)

5

Perifricos de E/SLa DDRAM almacena el cdigo de los caracteres que estn siendo visualizados o que se encuentran en posiciones no visibles debido a la posicin de la ventana de visualizacin. Tiene un tamao de 2 lneas 40 bytes/lnea = 80 bytes. Direcciones no contiguas entre las lneas 1 y 2. 0x00 a 0x27: 40 caracteres de la lnea 1. 0x40 a 0x67: 40 caracteres de la lnea 2.00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 ... 25 26 27

40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54

...

65 66 67

Localizacin en display virtual (x,y). x: posicin horizontal (de 1 a 40). y: lnea (1 2).

Display real inicial

Perifricos de E/SInterface hardware LCD con driver HD44780Pines externos. 1.2.3.4.5.6.7.8.9.10.11.12.13.14.VSS VDD VEE RS R/W E D0 D1 D2 D3 D4 D5 D6 D7 Masa 2,7V a 5,5V Alimentacin Mximo contraste a VSS Ajuste de Contraste Seleccin de Registro Bits de control Lectura / Escritura (entradas al driver) Enable Bit de Datos menos significativo Bit de Datos Bit de Datos Bit de Datos Bits de datos (entradas/salidas) Bit de Datos Bit de Datos Bit de Datos Bit de Datos ms significativo

6

Perifricos de E/S

DATOSCONTROL Internos Internos El LCD trabaja con 8 bits El LCD trabaja con 8 bits

MCUDATOS

LCD

Externos Externos Hay dos posibilidades: Hay dos posibilidades: 8 bits (D7 a D0) 8 bits (D7 a D0) 4 bits (D7 a D4) 4 bits (D7 a D4) 1 los 4 bits ms altos 1 los 4 bits ms altos 2 los 4 bits ms bajos 2 los 4 bits ms bajos

BITS DE CONTROL BITS DE CONTROLE: E: Validacin de datos. Validacin de datos. R/W: Operacin de lectura (1) oo de escritura (0). R/W: Operacin de lectura (1) de escritura (0). RS: RS: Seleccin de Registro Interno (1: datos // 0: control). Seleccin de Registro Interno (1: datos 0: control).

Perifricos de E/SControl del LCDE: Seal de validacin de datos. En las transferencias de informacin con el LCD (lecturas o escrituras) se debe poner a 1. Si no se usa el LCD, debe permanecer a 0.

R/W: Selecciona lectura (1) o escritura (0) en el LCD. Lo normal es escribir en el LCD, pero es posible leer la RAM y el estado del LCD (ocupado o disponible) y el contador de direcciones. RS: Se selecciona uno de los dos Registros Internos del LCD. IR (Registro de Instrucciones). Almacena cdigos de instrucciones relativas al manejo del display: borrar display, desplazar cursor, definir interface a 4 u 8 bits, etc. DR (Registro de Datos). Almacena datos a leer o escribir en RAM.

7

Perifricos de E/SOperaciones de control en el LCDRS=0 (Registro de Control) R/W=1 R/W=0 Leer flag de ocupado (BF) y puntero de direcciones (AC) Envo de comando para funcionamiento interno RS=1 (Registro de Datos) Leer contenido de DDRAM o CGRAM Escribir en DDRAM o CGRAM

BF:

o Flag de Ocupado. Si est a 1, el LCD est en modo de operacin interna y no puede procesar nuevos comandos hasta que se pone a 0. o Contador de Direcciones. Es el puntero de la direccin DDRAM o CGRAM a la que se accedera con un comando de lectura o escritura a RAM. El puntero se incrementa o se decrementa (segn el modo elegido) de manera automtica.

AC:

Perifricos de E/SSecuencias de operacinEscritura en un Registro del LCD 1. 2. 3. 4. 5. E 0 RS 0 1 y R/W 0 E 1 Situar dato en el bus E 0

Lectura de un Registro del LCD 1. 2. 3. 4. 5. E 0 RS 0 1 y R/W 1 E 1 Leer dato del bus E 0

8

Perifricos de E/SDescripcin de los comandosBorrar Display: 0 0 0 0 0 0 0 1 Borra todas las posiciones de la DDRAM y sita el display real en la posicin inicial. Adems sita el puntero en la posicin 0 de la DDRAM.(1,1) (16,1)0 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0A 0B 0C 0D 0E 0F 1 0 1 1 1 2 1 3 1 4 ... 25 26 27

(1,2)

4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4A 4B 4C 4D 4E 4F 5 0 5 1 5 2 5 3 5 4

(16,2)

...

65 66 67

Cursor a Casa:

0 0 0 0 0 0 1 x

El cursor es un indicador de la posicin que se puede escribir a continuacin en el LCD. Indica la posicin actual del puntero de direcciones. Este comando enva el cursor a la posicin (1,1) (puntero en 0x00) y el display real se sita en la posicin inicial. No se modifica el contenido de la DDRAM

Perifricos de E/SModo de Funcionamiento: 0 0 0 0 0 1 I/D S

El bit I/D especifica incremento y desplazamiento del cursor a la derecha (I/D=1) o decremento y desplazamiento del cursor a la izquierda (I/D=0) tras realizar una lectura o escritura en DDRAM. Si S=1, se desplaza el display real cada vez que se imprime un carcter. El desplazamiento ser a la izquierda o a la derecha segn el valor de I/D.

Control de Display, Cursor y Parpadeo:

0 0 0 0 1 D C B

Si D=0, el LCD no muestra nada pero la DDRAM mantiene su contenido. Se pueden enviar y leer datos normalmente, pero no aparecer nada en pantalla. Para volver a visualizar normalmente los caracteres de la DDRAM hay que poner D=1. Si C=1, se hace visible el cursor que indica la siguiente posicin donde se imprimira el siguiente carcter que se enve. Si B=1, el carcter situado en la posicin del cursor parpadea con una frecuencia aproximada de 2Hz.

9

Perifricos de E/SDesplazar Cursor / Display: 0 0 0 1 S/C R/L x x Se emplea para desplazar una posicin a la derecha (R/L=1) o a la izquierda (R/L=0) el cursor o el display real sin escribir o leer la DDRAM. Si lo que se desplaza es el cursor (S/C=0), tambin se modifica el contador de direcciones. Si se desplaza el display real (S/C=1), no cambia el puntero de direcciones de la DDRAM. Si el display se define de una lnea, al llegar a la posicin final (carcter 40) se volvera a la primera con un desplazamiento del cursor. Si el display est definido para 2 lneas, tras el 40 carcter de la primera lnea se pasara al principio de la segunda lnea.

Transferencia y Representacin: 0 0 1 DL N F x x El bit DL define el tamao del interface de datos externo. Si DL=1, ser de 8 bits y si DL=0, ser de 4 bits. Si N=1, se gestionan dos lneas; si N=0, se tendr una nica lnea activa en el display. Si F=1, se emplean patrones de tamao 510; si F=0, son de 58 puntos.

Perifricos de E/SSituar Puntero en DDRAM: 1 A6 A5 A4 A3 A2 A1 A0 A6-A0 vlidas de 0x00 a 0x27 para la primera lnea A6-A0 vlidas de 0x40 a 0x67 para la segunda lnea Leer Flag de Ocupado y Puntero de Direcciones Con la combinacin adecuada en RS y R/W las lneas de datos del LCD pasan a ser salidas y en el puerto del MCU se puede leer el estado del BF (bit 7) y la direccin actual del contador (bits 6 a 0). Enviar Datos a DDRAM Se carga la direccin de la DDRAM a la que est apuntando el contador de direcciones y ste se incrementa o decrementa dependiendo del estado configurado con I/D. Leer Contenido de DDRAM Se lee el contenido de la posicin DDRAM a la que apunte el contador de direcciones. Tras la lectura, este contador se incrementa o decrementa dependiendo del modo configurado con I/D.

10

Perifricos de E/SProcesado de los comandosEl LCD precisa de un cierto tiempo para procesar los comandos que se le van enviando. Para que se ejecute un determinado comando, es necesario que se haya finalizado el anterior. Esto puede asegurare de dos modos: a) Esperar a que el Flag de Ocupado (BF) pase a 0. b) Establecer pausas entre comandos que sean superiores a los tiempos mximos especificados para cada comando. En el encendido se produce un reset de inicializacin con varios efectos preestablecidos. Se produce tras superar los 4,5V y dura unos 10ms. DL=1 (8 bits) D=0 (display off) I/D=1 (incremento) N=0 (1 lnea) C=0 (cursor off) S=0 (sin desplaz.) F=0 B=0 (58 puntos) (sin parpadeo)

Durante todo el proceso de inicializacin se tiene BF=1.

Perifricos de E/SLCD en el compilador C de CCSEl compilador C de CCS incluye un driver para manejar LCDs: el que define las funciones indicadas a continuacin. fichero lcd_init ();Debe llamarse antes que ninguna otra funcin del fichero . Tal y como aparece en el fichero, adems de borrar el display, configura el LCD para trabajar como sigue: a) En formato de 4 bits, con dos lneas y con caracteres de 58 puntos. b) Con display encendido, cursor apagado y sin parpadeo. c) Con autoincremento del puntero de direcciones y sin desplazamiento del display real.

lcd_gotoxy (x , y);Establece la posicin del LCD a la que se debe acceder. Recurdese que la primera posicin de la primera lnea tiene coordenadas (1 , 1), y que la primera posicin de la segunda lnea es la (1 , 2).

11

Perifricos de E/Slcd_putc (dato);Escribe dato en la posicin a la que apunta el puntero de direcciones. , y se definen algunos caracteres La variable dato es de tipo especiales: \f Borra el display \n Se posiciona en el inicio de la segunda lnea \b Retrocede una posicin

lcd_getc (x , y);Devuelve el carcter que ocupa la posicin (x , y) del LCD.

Por defecto, este driver usa siete bits del puerto B para establecer la comunicacin entre el LCD y el microcontrolador. B0 Enable B4 Bit de datos D4 B1 RS B5 Bit de datos D5 B2 R/W B6 Bit de datos D6 B3 B7 Bit de datos D7

Perifricos de E/STambin es posible escribir en el LCD usando la siguiente funcin. printf(lcd_putc,cadena,vars);cadena: Cadena de caracteres que puede formarse usando el contenido de una o ms variables. vars: Variables incluidas en la cadena (separadas por comas).

Para indicar la posicin y el tipo de las variables a incluir en la cadena, se usa el formato %wt, donde w es opcional.w: 1-9 Indica el nmero de caracteres a mostrar (opcional) 01-09 Indica el nmero de ceros a la izquierda 1.1-9.9 Indica cuntos decimales se han de mostrar t: c s u xX d % Carcter Cadena o carcter Entero sin signo Entero hexadecimal Entero con signo Simplemente un % e f lu lx lX ld Flotante (formato exp) Flotante Entero largo sin signo Entero largo hexadecimal Entero largo con signo

12

Perifricos de E/SAlgunos ejemplos. printf(lcd_putc , Hola); printf(lcd_putc , Tecla %c pulsada %u veces , key , cont ); Ejemplos de formato. Especificador%03u %u %2u %3u %d %x %X %4X

Valor=18018 18 18 _18 _18 12 12 0012

Valor=254254 254 ??? 254 -2 fe FE 00FE

NOTA: NOTA Slo se puede visualizar enteros y caracteres en el LCD.El compilador de CCS no admite salida formateada de flotantes.

Perifricos de E/SLa comunicacin entre el microcontrolador y el LCD se lleva a cabo mediante 7 bits del Puerto B usando el driver lcd.c de CCS.Este hecho hara que la conexin de un LCD fuera incompatible con la conexin tpica de un teclado matricial 44.

La inicializacin que por defecto lleva a cabo este driver tambin puede modificarse sin ms que cambiar un par de lneas del mismo.En concreto hay que cambiar 3 4 valores que se hacen llegar al LCD como comando.

El driver lcd.c est pensado para manejar un LCD usando 4 bits de datos externos al interface.Sera posible adaptarlo para que usara 8 bits. El driver lcd_ATE.c que se facilita con este curso lleva a cabo las modificaciones necesarias.

13

Perifricos de E/SPara evitar conflicto con la conexin de teclados matriciales, haremos que el LCD se comunique con el microcontrolador mediante el puerto D (ubicado en la direccin 08h) en lugar de hacerlo a travs del puerto B.#if defined (__PCH__) #byte lcd = 0xF81 #else #byte lcd = 6 #endif

// This puts the entire structure // on to port B (at address 6)

#if defined (__PCH__) #byte lcd = 0xF83 #else #byte lcd = 8 #endif

// This puts the entire structure // on to port D (at address 8)

Perifricos de E/S#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines #define lcd_line_two 0x40 // LCD RAM address for the second line byte CONST LCD_INIT_STRING[4] = {0x20 | (lcd_type