4.4 Interrupciones RBI (Interrupciones por cambio de estado)



Documentos relacionados
La familia PIC18 USB posee 4 timers: Timer0, Timer1, Timer2 y Timer3, cada uno de los cuales tiene sus características únicas.

Dependiendo del dispositivo usado, se tienen hasta 5 puertos de entrada/salida disponibles: PORTA PORTB PORTC PORTD PORTE

6 MODULACIÓN DE ANCHO DE PULSO (PWM)

7 CONVERTIDOR ANALÓGICO DIGITAL

MICROCONTROLADORES PIC

Teclado Matricial. Ing. Diego Chacón

b) Las teclas pueden generar varios impulsos tanto al pulsar como al soltar (rebotes durante t < 100 ms, p. ej.). El usuario pulsa la tecla así

PIC 16F87X. Juan González. Escuela Politécnica Superior Universidad Autónoma de Madrid. Flir Networked Systems. Flir Networked Systems

TUTORIAL Teclado matricial. Manejar teclados matriciales por el método RWR. Conocer el uso y la utilidad de las Pull-Up del puerto B.

Capítulo 4 Interfase Humana

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA INGENIERÍA EN COMUNICACIONES Y ELECTRÓNICA

Usando los Codificadores Cuadráticos

Controlador de Interrupciones (Versión programable) Manual de Usuario

TUTORIAL PRIMERA PARTE: GENERACIÓN DE UN RETARDO CON TIMER.

Prueba 1. Figura B.1 Diagrama de Bloques de la Conexión Para la Prueba 1. #include <p18f2321.h> #include <USART.h> #include <delays.

PIC MICRO ESTUDIO Temporizador con el 16F872 Guía de Uso

Segundo Parcial Programación en Mikro C PIC16F877

Microprocesadores. Introducción al Lenguaje C - Parte III. Prof. Luis Araujo. Universidad de Los Andes

CUESTIONES: 1/5. Solución:

SISTEMAS ELECTRÓNICOS AVANZADOS. ING. TÉC. INDUSTRIAL ELECTRÓNICO

PIC 16F87X. Juan González. Escuela Politécnica Superior Universidad Autónoma de Madrid. Flir Networked Systems. Flir Networked Systems

Ensamblador. Interrupciones. Dentro de una computadora existen dos clases de interrupciones:

5 Responde las preguntas. 5.1 Cuál es la razón de que al iniciar el programa se muestre un cero al principio

Tema 14. Interrupciones. Las. C. F. G.S. D.P.E. Módulo de Proyectos 1

CAN-101, HT6P20x2 Encoder para aplicaciones remotas de control

O B J E T I V O I N T R O D U C C I O N M A R C O T E O R I C O

Display 7 segmentos. Ing. Diego Chacón, Mdhd.

C2. Explica que es una MACRO en lenguaje C y para que se emplean. (0.5 puntos).

El lenguaje C. if (a>3) { printf("hola"); // bloque printf("%d",a); // de getch(); //código } Partes de un programa en C.

Guía de Usuario Teclado capacitivo de 4x4

Proyecto final Microcontroladores: Sistema De Seguridad Caja Fuerte Integrantes:

Microprocesadores. Introducción al Lenguaje C - Parte IV. Prof. Luis Araujo. Universidad de Los Andes

PRÁCTICAS DE ELECTRÓNICA DIGITAL

PRESENTA INTRODUCCIÓN A ARDUINO

TEMA 5 LA MEMORIA DE DATOS MEMORIA RAM D.P.E. DESARROLLO DE PROYECTOS 1

Alarma 3G por teléfono móvil

Maribel Martínez y Ginés Ciudad-Real Fichas para mejorar la atención MATRIZ DE LETRAS

Pines de entrada/salida (I/O) de propósito general. Mediante ellos, el micro PIC puede monitorizar y controlar otros dispositivos.

UNIVERSIDAD DON BOSCO

Assembler para PICs. Permite la utilización de etiquetas, tanto para apuntar a direcciones como para definir valores constantes.

RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 PIC 16F87X. Figura # 1

Anexo III. Programas

Tema: Arreglos de Objetos en C++.

Capacidad : Número de valores diferentes que puede representar un código. Depende del número de dígitos usados.

Arquitectura de computadoras

PIC MICRO ESTUDIO Reloj en tiempo real RTCU2 Clave: 719

Guía #2 Acceso a registros y uso de puertos.

LEY DE OHM EXPERIMENTO 1. CIRCUITOS, TARJETAS DE EXPERIMENTACIÓN

MICROCONTROLADORES (III)

MICROPROCESADORES II LENGUAJE C EN LOS MICROCONTROLADORES PIC

Universidad Tecnológica Nacional Departamento De Electrónica Facultad Regional Buenos Aires. Informática II GUIA DE TRABAJOS PRACTICOS

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Diseño con Microcontroladores

Pequeño Manual del Protoboard

Tema 3. Estructuras de control

Aplicaciones de mc Lenguaje C- CC5x-Temporizadores

Arduino. Teclado matricial. Col1 Col2 Col3 Col4

PRÁCTICA 5 DIRECCIONAMIENTO INDIRECTO Y TECLADO MATRICIAL

Manual de usuario del PicKit2. Manual de usuario del PicKit2

Apéndice B Programa para calcular inclinación con PIC 16F877A

4 PUERTOS DE ENTRADA-SALIDA

Práctica 3 - Sensores Digitales y Análogos

Se permiten variables de 8-bit y 16-bit. Pueden ser definidas como globales o locales. La variable local sólo puede ser usada en su ambito

Curso de Automatización y Robótica Aplicada con Arduino

Cátedra I Informática Autor I Carlos Bartó

CURSO: ELECTRÓNICA DIGITAL SISTEMAS COMBINATORIOS - TEORÍA PROFESOR: ING. JORGE ANTONIO POLANÍA

Aguijón: Introducción Básica

Generación de CFDI con Aspel-CAJA 3.5 en renta (Todo incluido)

TUTORIAL II parte A. Observemos el diagrama de pines del microcontrolador 16F877A:

Cátedra I Informática Autor I Carlos Bartó

Carrera: Técnico Superior en Técnicas Digitales. Alumnos: Emiliano Teseo y José Luis Fernández

Sistemas Electrónicos Digitales HOJA 1 Dpto. Ingeniería Electrónica, Universidad de Sevilla 2 de febrero de PROBLEMA: tiempo 2:00 horas

PROBLEMA 1 (5 puntos):

RECURSOS FUNDAMENTALES

TUTORIAL. Hacer uso de las interrupciones. Conocer el problema de los rebotes en los pulsadores y plantear algunas formas de solucionarlo.

Programación de Microcontroladores

La siguiente función configura el puerto como entrada y realiza su lectura: input_x( )

Guía resumida para utilizar el microcontrolador CY7C68013

Impresora Térmica. Nota de Aplicación No.3. Introducción.

Capítulo 4 Desarrollo del proyecto

vii Contenido CONTENIDO

CAPITULO 6 Interfaz de comunicación con Visual Basic

MICROCONTROLADOR PIC DE MICROCHIP

Tema 9 Periféricos de Entrada

Cuatro registros se utilizan para leer y para escribir los datos en la EEPROM.

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

Apéndice A. Programas y Diagramas de Bloques para los Microprocesadores

Ángel Castillo Jordán TFC EPSC 25

Encender un LED utilizando un pulsador (Ref libro 1 pg 82 pero como y pg 132 como 1.2.3)

TEMA 20 EL CONVERSOR A/D

Practica 1: It s alive!

Periféricos Básicos Visualizador LCD

Examen 22 de Febrero 2006

MICROCONTROLADORES PIC BÁSICO (PIC 16F84A / 16F627)

Se recomienda consultar el siguiente enlace y el datasheet del PIC18F2550.

PROFESOR: Práctica 6. LDC y Teclado Matricial

DIAGRAMA MATRICIAL EN "L"

Anexo del Manual de instrucciones

PIC 18F45XX EL TIMER 0

CONTROL Y MONITOREO DEL MOTOR A PASOS

Microcontrolador PIC16F84: Arquitectura

Transcripción:

49 4.4 Interrupciones RBI (Interrupciones por cambio de estado) Cuatro pines del PORTB (RB7:RB4) son capaces de disparar una interrupción por cambio de estado. Este tipo de interrupciones son comúnmente usadas para el manejo de teclados matriciales, de ahí que estos pines también los denominen KBI0:KBI3. De estos 4 pines, solo producirán interrupción aquellos configurados como entradas, si alguno está configurado como salida, queda excluido de la interrupción por cambio de estado. Cualquiera de estos 4 pines dispara la misma interrupción, es decir la misma bandera de interrupción se activa, la bandera RBIF (INTCON<0>). Para activar esta interrupción se puede usar la función OpenPORTB de la librería portb.h. Figura 4-3. Función para activar interrupción RBI ([7] )

50 4.4.1 Teclado Matricial Un teclado matricial está constituido por una matriz de pulsadores dispuestos en filas y columnas como se muestra en la Figura 4-4. La finalidad es reducir el número de líneas necesarias para la conexión. Como se observa en la figura, cada tecla se conecta a una fila y a una columna. En este caso se tiene un teclado de 4x4 en el cual se necesitan sólo 8 pines del microcontrolador en lugar de 16 si fueran botones independientes. Cuando se pulsa una tecla, queda en contacto una fila con una columna. Si no hay tecla pulsada, las filas están desconectadas de las columnas. Figura 4-4. Teclado matricial con microcontrolador [11] 4.4.2 Conexión del Teclado matricial con el microcontrolador PIC18F4550 La Figura 4-4 muestra una posible conexión de un teclado matricial a un microcontrolador con las siguientes características:

51 Las filas del teclado se conectan a las líneas de la parte baja del PORTB configuradas como salida. Las columnas del teclado se conectan a las líneas de la parte alta del PORTB configuradas como entrada. Observe que estas líneas deben tener resistencias de pull-up. En el caso del PIC18F4550, todos los pines del PORTB poseen resistencias de pull-up internas que pueden ser activadas por software. Para detectar que tecla se pulsa, se aplica a una fila un nivel bajo y a las otras filas un nivel alto. Si se presiona una tecla en la fila por la que se aplica el nivel bajo, ese nivel bajo aparecerá en la columna correspondiente con la que ha hecho contacto. En la Figura 4-4 se pulsa la tecla 3, de tal forma que cuando el microcontrolador explora la fila F1, este cero aparece en la columna C3 y es leído por el pin RB6. 4.4.3 Algoritmo para lectura del teclado El algoritmo de lectura del teclado utilizado en este proyecto hace uso de la interrupción RBI para detectar si se pulsa alguna tecla. Una vez que la interrupción detecta que se pulso una tecla, el siguiente paso es determinar que tecla se pulso. 1. Primeramente a cada tecla se le asigna un código que puede ser el orden de la tecla, como se muestra en la Figura 4-5. Figura 4-5- Codigo asignado a cada tecla

52 2. Luego ejecutamos el algoritmo siguiente: Tecla = 0 Fila1 = 0, demás filas = 1 SI Columna1 = 0? NO Incrementa Tecla SI Columna2 = 0? NO Incrementa Tecla SI Columna3 = 0? NO Incrementa Tecla SI Columna4 = 0? NO Incrementa Tecla Última Tecla? SI Decodifica Tecla NO Siguiente Fila=0, las demas Filas en 1 Fin Figura 4-6. Algorítmo de detección de tecla pulsada

53 A continuación se muestra una función llamada leetecla la cual implementa el algoritmo anterior en lenguaje C: // Esta funcion obtiene la tecla pulsada del // teclado matricial y la decodifica. // Regresa el caracter ASCII que representa la tecla int leetecla(void) int tecla = 0; // Tecla = 0 int fila = 0x0E; // Fila1 = 0, demás filas = 1 PORTB = fila; do //Columna1 = 0? if(portbbits.rb4 == 0) break; //si tecla++; //no //Columna2 = 0? if(portbbits.rb5 == 0) break; tecla++; //Columna3 = 0? if(portbbits.rb6 == 0) break; tecla++; //Columna4 = 0? if(portbbits.rb7 == 0) break; tecla++; //Siguiente Fila=0, las demas Filas en 1 fila <<= 1; fila++; PORTB = fila; while(tecla < 16); //Última tecla? LATB = 0; // Decodifica la tecla switch(tecla) case 0: return '7'; case 1: return '8'; case 2: return '9'; case 3: return '/'; case 4: return '4'; case 5: return '5'; case 6: return '6'; case 7: return 'X'; case 8: return '1'; case 9: return '2';

54 case 10: return '3'; case 11: return '-'; case 12: return 'C'; case 13: return '0'; case 14: return '='; case 15: return '+'; default: return -1; //fin de función leetecla Programa 4-4. Algoritmo de lectura del teclado, función leetecla En la función anterior, una vez terminado el ciclo do-while, en la variable tecla se tiene el número de tecla pulsada (de 0 a 15). Teniendo este número se decodifica al valor final deseado usando un switch (puede ser el que indica la serigrafía del teclado). Ahora la idea es que cuando se pulse cualquier tecla se produzca una interrupción RBI, para esto usamos la función OpenPORTB y habilitaremos las interrupciones con el bit GIE del registro INTCON. La función iniciateclado mostrada en el código siguiente deja listo el microcontrolador para detectar las interrupciones RBI. // Esta función Activa la interrupción RBI y Pull-ups internas // para detectar la tecla pulsada void iniciateclado(void) // Configura el nible alto de PORTB como entrada // y el nible bajo como salida TRISB = 0xF0; PORTB = 0; // Inicia PORTB para recibir interrupcion // Configura interrupcion por cambio de estado en PORTB y // activa pull-ups OpenPORTB( PORTB_CHANGE_INT_ON & PORTB_PULLUPS_ON); // Habilitación de interrupciones INTCONbits.GIE = 1; Programa 4-5. Función iniciateclado La función setteclado se usa para dejar listo el puerto para recibir interrupciones, esta función la podemos usar en caso que el teclado y el display compartan el mismo puerto, ya que las función del LCD modifican el puerto.

55 // Esta función Deja listo el puerto B para detectar una tecla pulsada // Se usa porque las funciones del LCD modifican TRISB y PORTB void setteclado(void) // Configura el nible alto de PORTB como entrada // y el nible bajo como salida TRISB = 0xF0; //Deja listo PORTB para producir interrupcion (salidas enviando 0) PORTB = 0; Programa 4-6. Función setteclado Estas 3 funciones anteriores forman parte de un archivo llamado teclado.c el cual forma parte de una librería denominada teclado.h, cuyo contenido se muestra a continuación: #ifndef TECLADO_H #define TECLADO_H void iniciateclado(void); void setteclado(void); int leetecla(void); #endif Programa 4-7. teclado.h

56 Ejemplo 4-4. Uso de Teclado Matricial El siguiente ejemplo demuestra el uso de un teclado matricial de 4x4 usando el algoritmo explicado anteriormente. Al pulsarse una tecla se muestra su símbolo en el LCD. El diagrama se muestra en la Figura 4-7, observe que las filas (FIL1 FIL4) se conectan a los pines RB0 RB3 y las columnas (COL1 COL4) a los pines RB4 RB7. Las columnas conectadas a los pines RB4 RB7 se usan como entradas de interrupción (KBI0 KBI3) y las filas son son salidas del microcontrolador que envían ceros a las columnas cuando se pulsa alguna tecla del teclado matricial. El código se muestra a continuación Figura 4-7. Diagrama con Teclado Matricial y LCD

57 Programa 4-8. Uso de Teclado Matricial y LCD /* Uso de Teclado Matricial y LCD */ #include <p18f4550.h> #include "lcd.h" #include "teclado.h" void Teclado_ISR(void); //Código para bootloader extern void _startup (void); #pragma code REMAPPED_RESET_VECTOR = 0x1000 void _reset (void) _asm goto _startup _endasm // Seccion de codigo #pragma code void main() char cad[] = "Probando Teclado"; ADCON1 = 0x0f; // Configura pines como digitales // configura LCD OpenLCD(FOUR_BIT & LINES_5X7); putslcd(cad); SetDDRamAddr(0x40); // se coloca en el renglon 2 //Inicia interrupcion RBI, pull-ups y deja listo el teclado iniciateclado(); while(1) // Vector de interrupción #pragma code Interrupcion=0x1008 void VectorInterrupcion (void) _asm GOTO Teclado_ISR _endasm #pragma code // Rutina de interrupción de teclado #pragma interrupt Teclado_ISR void Teclado_ISR(void) int tecla; tecla = leetecla(); while(leetecla()!=-1); // lee y decodifica la tecla pulsada //espera a que se suelte la tecla if(tecla!= -1) // si hay tecla valida WriteDataLCD(tecla); // escribe la tecla pulsada en LCD // deja listo el teclado para la siguiente interrupción setteclado(); // Limpia la bandera de interrupcion INTCONbits.RBIF = 0;

58 PRÁCTICA 4. Cerradura Electrónica Diseñe un sistema de cerradura electrónica con contraseña de 4 dígitos. Usar un teclado matricial para digitar la contraseña. Al encender el circuito se le pedirá al usuario que escriba la contraseña. Si la escribe correctamente, aparecerá en el display PASSW CORRECTA y activará la chapa eléctrica durante 2 segundos aproximadamente. Si la contraseña escrita es incorrecta aparecerá en el display PASSW INCORRECTA Cuando se escriba la contraseña se mostrarán * en lugar del valor de la tecla pulsada.