sábado, 13 de abril de 2013

Teclado Matricial


Los teclados matriciales son ensamblados en forma de matriz como en la siguiente figura.
El diagrama muestra un teclado como una matriz de 4 x 4 – 16 teclas configuradas en 4 columnas y 4 renglones.

Cuando se oprime una tecla se hace una conexión entre la columna y renglón de la tecla.

 



Muchos teclados comerciales ya traen incluid su decodificador, que escanea el teclado y si, una tecla es presionada, regresa a un número que identifica la tecla.

Otra alternativa es adquirir por separado un chip decodificador y conectarlo al teclado.
El decodificador mostrado tiene 8 entradas las 4 entradas X son conectadas a las 4 columnas del teclado y las 4 entradas Y son conectadas a los 4 renglones. No se muestran los capacitores que gobiernan la rapidez a la que se escanea el teclado.

Cuando se oprime una tecla el código de 4 bits de la tecla (con 16 teclas, los códigos están entre 0000 y 1111 en binario) aparecerá en las 4 líneas de la salida y la línea de data disponible (DA) se pone en BAJO. Si se conecta a una línea de interrupción el microprocesador será interrumpido cuando se oprima alguna tecla. La rutina de Servicio de la Interrupción, entonces lee los 4 bits y procesa el dato.

El chip del decodificador se encarga de eliminar el rebote de las teclas, lo que libera al programador de esta responsabilidad, esto es una ventaja al usar un chip decodificador.

 Decodificador De Teclado Matricial Hexadecimal.


 



El principio de funcionamiento de un teclado matricial es muy sencillo. Básicamente cuando pulsamos un botón en el teclado, estamos uniendo una fila con una columna.

Por ejemplo, al presionar la tecla “1”, estaremos conectando la columna 1 con la fila 1; si pulsamos la tecla “4”, estaremos conectando nuevamente la columna 1, esta vez con la fila 2; si pulsamos la tecla “9”, entonces estaremos conectando la columna 3 con la fila 3.

Existen diversas formas de conectar e interpretar el funcionamiento de un teclado matricial. En el diagrama de la figura se puede apreciar un teclado matricial 3x4 conectado a los pines del puerto B.



Los pines RB3, RB4, RB5 y RB6 tienen una resistencia “Pull-up”, lo cual significa que si leemos cualquiera de estas entradas, asumiendo que ninguna tecla ha sido presionada, entonces siempre habrá un uno lógico presente en cada una de ellas.

Convertidores




Podemos encontrar dos clases de convertidores:

1) Convertidor Analógico-Digital.
2) Convertidor Digital-Analógico.

1.    Una conversión analógica-digital consiste en la transcripción de señales analógicas en señales digitales, con el propósito de facilitar su procesamiento (encriptación, compresión, etc.) y hacer la señal resultante (la digital) más inmune al ruido y otras interferencias a las que son más sensibles las señales analógicas.
2.    La conversión digital-analógica es un proceso que permite la lectura del código binario grabado en un CD. Tiene la misma frecuencia de muestreo (controlada por un reloj) con que se grabó el sonido en el cd y tiene una cantidad de bits determinada. Con este aparato se pueden leer los cds y reproducirse. Por eso el nombre: Convierte de Digital a Analógico.

En el mundo real, las señales analógicas (comunes por todos lados) varían constantemente. Estas señales pueden variar lentamente como la temperatura o muy rápidamente como una señal de audio.

Lo que sucede con las señales analógicas es que son muy difíciles de manipular, guardar y después recuperar con exactitud.

Si esta información analógica se convierte a información digital, se podría manipular sin problema y se puede guardar con gran facilidad.
La información manipulada puede después volver a tomar su valor analógico original, con un DAC (convertidor Digital a Analógico)

En el microcontrolador PIC16F877, cada canal de conversión A/D está conectado a un pin ubicado en el puerto “A” y en el puerto “E”. Por ejemplo, el canal AN0 corresponde al pin # 2 del microcontrolador, o expresado de otra manera, al pin RA0 del puerto A. El canal AN1 corresponde al pin # 3; el canal AN2 corresponde al pin # 4 y así sucesivamente; entonces se puede ver claramente que el puerto A cuenta con cinco de los ocho canales del conversor A/D, y los otros tres canales están ubicados en los pines correspondientes al puerto E del microcontrolador.

Un punto importante a considerar al momento de utilizar el convertidor A/D, será decidir si la conversión se hará configurando el conversor a 8 o 10 bits, con lo cual a su vez estaremos definiendo la resolución en el proceso de conversión.

Valores de conversión

Esto significa que si elegimos la conversión de una señal analógica a solo 8 bits (2^8 = 256), los valores digitales resultantes de la conversión estarán comprendidos entre 0 y 255 (en binario es de 00000000 hasta 11111111).

Cuando la conversión se hace a 10 bits, la resolución aumenta considerablemente en relación a la de 8 bits, ya que tenemos 2^10 = 1024 datos de conversión.

Convertidor (Formulas)

Si configuramos el conversor A/D a 8 bits e introducimos una señal cuya amplitud varía entre 0 y 5 voltios, y donde el voltaje de referencia del conversor es 5 voltios

Esto significa que la resolución a 8 bits para el ejemplo planteado es de 20 mV por cada paso que da el conversor A/D entre 0 y 255.


Si configuramos el conversor A/D a 10 bits, entonces tenemos que 2^10 = 1024 y por lo tanto obtenemos una resolución mayor, lo cual podemos demostrar realizando los cálculos correspondientes:


Convertidor (Directivas)

Para definir en un programa si la conversión A/D se hará a 8 bits o a 10 bits, se deben utilizar las siguientes directivas:

Define ADC_BITS 8 o 10
Define ADC_SAMPLEUS {tiempo}
Define ADC_CLOCK

Convertidor (Instrucción)

ADCin

Sintaxis: ADCin canal, Variable

Esta instrucción solo es válida para microcontroladores que tienen convertidor
A/D, por ejemplo, el PIC16F877, el PIC18F442, el PIC18F452, el PIC18F458
entre otros.

Convertidor (Registros PIC16F886)







Sentencias de control

Sentencias de Control En Pic Basic

Las estructuras de control nos permiten controlar el flujo del programa: tomar decisiones, realizar acciones repetitivas etc., dependiendo de unas condiciones que nosotros mismos establezcamos. Así podemos hacer un script que nos salude cada día de la semana de una manera diferente. O por ejemplo hacer un script que nos pida la contraseña una y otra vez hasta que suministremos la opción correcta.

En lenguajes de programación, las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa.

Con las estructuras de control se puede:

De acuerdo a una condición, ejecutar un grupo u otro de sentencias (If-Then-Else y Select-Case)
Ejecutar un grupo de sentencias un número determinado de veces (For-Next)

IF – THEM – ELSE

Sintaxis:
If expresión 1 {AND / OR expresión 2} Then etiqueta

Con la instrucción If – Then podemos tomar decisiones a lo largo de un programa, basadas en condiciones específicas definidas por el programador. Se trata de una estructura de control que permite redirigir un curso de acción según la evaluación de una condición simple, sea falsa o verdadera.

Si la condición es verdadera, se ejecuta el bloque de sentencias 1, de lo contrario, se ejecuta el bloque de sentencias 2.

Programa ejemplo:
            TRISA = %11111
            TRISB = 000000
            PORTB = $00
Inicio:
            If PORTA.0 = 1 Then PORTB.0 = 1
            Pause 1000
            Low PORTB.0
            Pause 1000
            GoTo inicio
End

FOR… NEXT

Sintaxis:
For variable = inicio to final {step {-} incremento}
*
*
Instrucciones…
*
*
Next {variable}

La sentencia For da lugar a un lazo o bucle, y permite ejecutar un conjunto de sentencias cierto número de veces.

Primero, se evalúan las expresiones 1 y 2, dando como resultado dos números.
La variable del bucle recorrerá los valores desde el número dado por la expresión 1 hasta el número dado por la expresión 2.

El bloque de sentencias se ejecutará en cada uno de los valores que tome la variable del bucle.

Programa ejemplo:
            TRISA = %11111
            TRISB = 000000
            PORTB = $00
            X VAR BYTE
            Led VAR PORTB.0
Inicio:
            FOR X = 1 TO 5
            HIGH Led
            PAUSE 500
            LOW Led
            PAUSE 500
            NEXT
            PAUSE 2000
            FOR X = 1 TO 3
            HIGH Led
End


SELECT CASE

Sintaxis:
SELECT (Variable)
      CASE Valor1
         (Instrucciones 1)
      CASE Valor2
         (Instrucciones 2)
      CASE Valor n
         (Instrucciones “n”)
      CASE ELSE
         (Instrucciones “Else”)
   END SELECT

Esta sentencia permite ejecutar una de entre varias acciones en función del valor de una expresión. Es una alternativa a if-then-else cuando se compara la misma expresión con diferentes valores.

Se evalúa la expresión, dando como resultado un número.

Luego, se recorren los "Case" dentro de la estructura buscando que el número coincida con uno de los valores.

Es necesario que coincidan todos sus valores. Cuando se encuentra la primera coincidencia, se ejecuta el bloque de sentencias correspondiente y se sale de la estructura Select-Case.

Si no se encuentra ninguna coincidencia con ningún valor, se ejecuta el bloque de sentencias de la sección "Case Else".

Programa ejemplo:
            I VAR Byte
            Z VAR Byte
            Pause 200
            LCDOut $fe, 1
            Z = 0
Inicio:
            Z = Z + 1
            Select Case Z
                        Case 1
            LCDOut $fe, 2
            LCDOut "Select Case 1"
            Pause 1500
            GoTo Inicio
                        Case 2
            LCDOut $fe, 2
            LCDOut "Select Case 2"
            Pause 1500
            GoTo Inicio
                        Case Else
            Z > 2
            GoTo Final
            End Select
Final:
            GoTo Final
End

Conexión De Una LCD




Una pantalla de cristal líquido o LCD (sigla del inglés liquid crystal display) es una pantalla delgada y plana formada por un número de píxeles en color o monocromos colocados delante de una fuente de luz o reflectora.
A menudo se utiliza en dispositivos electrónicos de pilas, ya que utiliza cantidades muy pequeñas de energía eléctrica.
El compilador PBP permite definir los pines del micro controlador que se conectan al LCD (pines tales como datos, enable, escritura, etc.) usando la función DEFINE.
Tenemos las siguientes definiciones:

Definición de puerto y bits para el LCD.
DEFINE LCD_DREG PORTA
'Puerto de datos del LCD
DEFINE LCD_DBIT 0
'Inicio de datos del bit 0 o 4
DEFINE LCD_RSREG PORTA
'Selección del puerto del registro
DEFINE LCD_RSBIT 4
'Selección del bit de registro
DEFINE LCD_EREG PORTB
'Puerto del pin de habilitación (enable)
DEFINE LCD_EBIT 3
'Pin de enable
DEFINE LCD_RWREG PORTE
'Puerto de Lectura y Escritura
DEFINE LCD_RWBIT 2
'Pin de Lectura y Escritura
DEFINE LCD_BITS 4
'Tamaño del bus de datos: 4 o 8
DEFINE LCD_LINES 2
'Número de líneas del LCD
DEFINE LCD_COMMANDUS 2000
'Tiempo de retardo de comandos
DEFINE LCD_DATAUS 50
'Retardo de envío de datos


Una vez definidos los puertos y los pines del LCD, es necesario realizar una pausa de medio segundo antes de enviar los datos al LCD, esto para que tenga tiempo de inicializar la memoria RAM el dispositivo. Usamos la función PAUSE.
A continuación se muestra las sentencias para escritura del LCD, usando LCDOUT:

Comandos de escritura del LCD.
Comando
Operación
$FE, 1
Limpia visor
$FE, 2
Vuelve a inicio (comienzo de la primera línea)
$FE, $0C
Apagar cursor
$FE, $0E
Subrayado del cursor activo
$FE, $0F
Parpadeo del cursor activo
$FE, $10
Mueve cursor una posición hacia la izquierda
$FE, $14
Mueve cursor una posición hacia la derecha
$FE, $C0
Mueve cursor al comienzo de la segunda línea

Definición de Pines


Pin 1, 2 y 3: como se puede observar en la figura 6.4, en la mayoría de las pantallas LCD, el Pin No. 1 y 2 corresponden a la alimentación de la pantalla, GND y Vcc, donde el voltaje máximo comúnmente soportado es de 5 Vdc. El

Pin No.3 corresponde al control de contraste de la pantalla.

Pin 4: "RS" (trabaja paralelamente al Bus de datos del modulo LCD, Pines 7 al 14, es decir, cuando RS es cero, el dato presente en el bus corresponde a un registro de control o instrucción, pero cuando RS es uno, el dato presente en el bus corresponde a un registro de datos o caracter alfanumérico.

Pin 5: "R/W" (Read/Write), este pin es utilizado para leer un dato desde la pantalla LCD o para escribir un dato en la pantalla LCD. Si R/W = 0, esta condición indica que podemos escribir un dato en la pantalla. Si R/W = 1, esta condición nos permite leer un dato desde la pantalla LCD.

Pin 6: "E" (Enable), este es el pin de habilitación, es decir, si E = 0 el módulo LCD se encuentra inhabilitado para recibir datos, pero si E = 1, el módulo LCD se encuentra habilitado para trabajar, de tal manera que podemos escribir o leer desde el modulo LCD.

Pin 7 al14: "Bus de Datos”, el Pin 7 hasta el Pin 14 representan 8 líneas que se utilizan para colocar el dato que representa una instrucción para el modulo LCD o un carácter alfanumérico.

Pin 15-16: "BackLight", en muchos modelos de LCD, los pines 15 y 16 son respectivamente el “Ánodo” y el “Cátodo”, aunque se pueden encontrar en el mercado modelos de pantallas LCD

SEGUNDO PARCIAL