You are on page 1of 246

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

DIGIBOOK SECCION 2 TUTORIAL DE LPM


LENGUAJE DE PROGRAMACIN MODULAR POR MACROS

PARA PIC GAMA ALTA 16 BIT PIC 18FXX2: 242/252/442/452

Gua de Proyectos Microcontrolados By: Ing. Oscar J. Cabrales Baena


e-mail: oscar_cabrales@hotmail.com Colombia Cel: 310-7374112
Mat. Prof: NS 206-45262

1 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

LENGUAJE DE PROGRAMACIN MODULAR POR MACROS LPM


PROBLEMA
La preparacin de profesionales especializados en las reas relacionadas con la Electrnica Digital Microcontrolada es de gran importancia actual y futura para la regin y el pas. El sector industrial colombiano est abocado a una inminente competencia de calidad en el mercado nacional e internacional, lo cual exige una gran flexibilidad de adaptacin y una calidad suficiente a costos competitivos. Estas condiciones slo se logran con una gran dedicacin de recursos humanos y econmicos a la transferencia e incorporacin de nuevas tecnologas en los lenguajes de programacin modular o estructurada que facilite y optimice los recursos de un microcontrolador en el desarrollo de proyectos en el sector productivo tales como la robtica, la visin artificial, el control numrico, el control digital, el control adaptativo, la microelectrnica, la economa energtica, la gestin de la produccin, la informtica industrial, la telemtica industrial, la gestin ambiental, etc. optimizado de interrupciones (Handler Interruptions) (lase hndoel interwraptions)

METODOLOGIA
Los cursos se desarrollarn a travs de clases tericas fundamentales acompaadas de prcticas como proyectos de aplicacin en los temas que lo requieran. Elaboracin de prototipos, maquetas, y montaje de circuitos en protoboard, sustentacin y verificacin de las prcticas de laboratorios.

OBJETIVO GENERAL
Desarrollar habilidades en la programacin de microcontroladores microchip de la gama alta mediante la aplicacin del programa LPM y el verstil software de simulacin avanzada Proteus Profesional.

OBJETIVOS ESPECIFICOS
Impartir informacin bsica relevante a la Electrnica Digital, unificar criterios fundamentales previos a la incursin en el mundo de los microcontroladores. Introducir al estudiante en las tcnicas de interfaz de perifricos avanzados, diseo optimizado de desarrollo tecnolgico con circuitos digitales microcontrolados segn las caractersticas del fabricante. Desarrollar habilidades en la programacin estructurada de la familia 18FXXXX de microchip, respetando la sintaxis y estructura de un cdigo para microcontroladores.

JUSTIFICACION
El modelo LPM de programacin estructurada y modular por macros de assembler y compilado condicional de subrutinas optimizadas y funcionales es un freeware creado en el ao 2005 y persigue proporcionar a programadores de microcontroladores PIC, expertos y/o novatos, herramientas prcticas que permitan el desarrollo rpido, fcil y optimizado de aplicaciones electrnicas. Con la implementacin de nmerosos mdulos y potentes macros se ofrece una amplia gama de posibilidades a nivel de hardware y software que sin duda corroborar al desarrollo de innumerables proyectos. El sistema de programacin modular est habilitado para microcontroladores de la familia microchip 16F y 18F. La principal ventaja de la programacin estructurada por macros es el control o gestor automatizado y

BIBLIOGRAFIA
MICROELECTRONIC CIRCUITS. Adel. S. Sedra & K. C. Smith. Editorial OXFORD UNINERSITY PREES Diseo Electrnico. Circuitos y sistemas. Savant, Roden y Carpenter. 2. Edition. Addison Wesley App Notes de Microchip (www.microchip.com) Tutorial PIC Basic profesional Tutorial MPLAB IDE versin 8.4 de Microchip Data sheet microcontroladores microchip

2 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

Autor de LPM2
Ing. OSCAR JOS CABRALES BAENA

Ingeniero Electrnico nacido el 5 de Noviembre de 1978 en Momps Bolvar (Colombia). Curs el bachillerato en el colegio Nacional Pinillos de Momps y egresado de ingeniero electrnico de la Universidad de Pamplona en abril de 2001. 9 aos de experiencia laboral en docencia universitaria y desarrollo tecnolgico. Actualmente reside en valledupar cesar y es docente de tiempo completo en la Universidad Popular del Cesar (Valledupar-Colombia). Director, asesor y jurado de diversos trabajos de grado. Docente en Ingeniera Electrnica, Ingeniera de Sistemas, Ingeniera Elctrica, Ingeniera Mecatrnica, Tecnologa en Redes y Sistemas Teleinformticos. Ha sido profesor de tiempo completo ocasional en la Universidad de Pamplona, Universidad Popular del Cesar, Instituto Superior de Educacin Rural ISER y corporacin UPARSISTEM DE VALLEDUPAR en el rea de mantenimiento de computadoras, electrnica analgica, circuitos digitales, lenguajes de programacin visual y programacin de microcontroladores. Con amplia experiencia en Control y Automatizacin, programacin WEB, Diseo de Redes de computadoras, programacin orientada a objetos como Visual Basic .NET, programacin de Microcontroladores Microchip y Motorola, Diseo Web, Bases de datos ACCESS, My SQL, lenguaje assembler, arreglos lgicos programables FPGA, VHDL, Programacin de DSP (Digital Signal Processor), lenguajes de programacin visuales bajo plataforma Windows, PLCs NAIS, FESTO, control avanzado de perifricos del Computador (Puerto Paralelo, serial, USB, MODEM, Tarjeta de Red, Tarjeta de sonido), sistemas de posicionamiento global GPS, sistemas biomtricos, sistemas GPRS SMS GSM, sistemas IVR-DTMF, RFID, Protocolos TCPIP SNMP, comunicacin inalmbrica ZIGBEE, sistemas SCADA y diseo de circuitos impresos asistido por Computador EAGLE, PROTEUS. Con trabajo de grado propuesto para laurear con el proyecto LABORATORIO DE IDIOMAS INTELIGENTE CON TECNOLOGIA DE AVANZADA, artculos publicados en revista cientfica indexada, conferencista y ponente en diversos eventos cientficos a nivel internacional. Fundador de la empresa en rgimen comn DIGISOFT ELECTRONIC Ltda en el ao 2005 y la empresa en rgimen simplificado DIGITAL CONTROL B&J en el ao 2009. Diseador del sistema de control de acceso biomtrico BIOMETRIC SYSTEM 1.0 instalado en las principales clnicas y hospitales del cesar. Diseador del novedoso sistema de asignacin de turno computarizado FOTOTURNO SOFT 1.0, diseador del aplicativo SMART HOTEL SOFT de automatizacin de hoteles y moteles.

3 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

4 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

INDICE GENERAL SECCION 2


INTRODUCCIN AL MODELO DE PROGRAMACIN MODULAR POR MACROS LPM ALGORITMO MEDIANTE FLOW CHART (DIAGRAMA DE FLUJO) FASES DE UN PROYECTO MICROCONTROLADO DIAGRAMA DE FLUJO DE UN PROYECTO MICROCONTROLADO SOFTWARE O INFORMACION REQUERIDA PARA EL DESARROLLO DE UN PROYECTO EN LPM HARDWARE Y EQUIPOS REQUERIDO PARA EL DESARROLLO DE UN PROYECTO EN LPM RESUMEN DATA SHEET 18FXX2 DIAGRAMA DE PINES DE PIC GAMA ALTA 18FXX2 PLANO DEL HARDWARE BASICO DE UN PROYECTO LPM CREACION DE UN PROYECTO LPM: PRIMER PASO CREACION DE UN PROYECTO LPM: SEGUNDO PASO CREACION DE UN PROYECTO LPM: TERCER PASO CREACION DE UN PROYECTO LPM: CUARTO PASO CONFIGURACIN DEL EDITOR MPLAB IDE 7.1 CREACION DE UN PROYECTO LPM: QUINTO Y ULTIMO PASO BLOQUES DE UN PROYECTO LPM BLOQUE 0 INFORMACION GENERA Y CONFIGURACINES ESPECIALES DEL MICROCONTROLADOR BLOQUE 1 DE LPM ACTIVACION / DESACTIVACION DE MODULOS BLOQUE 2 DE LPM CONFIGURACIN DE MDULOS Y ASIGNACIN DE PINES DE CONTROL BLOQUE 3 DE LPM DECLARACIN DE VARIABLES RAM DEL PROGRAMA DE USUARIO BLOQUE 4 DE LPM DECLARACION DE CONSTANTES, DEFINICION DE BANDERAS (FLAGS) Y MACROS EXTRAS DEL PROGRAMA DE USUARIO BLOQUE 5 DE LPM CONFIGURACIN MANUAL DE PUERTOS, REGISTROS ESPECIALES ASIGNACION Y CONFIGURACIN MANUAL DE PINES DE ENTRADA/SALIDA BLOQUE 6 DE LPM DESARROLLO DE CONDICIONES INICIALES DEL PROGRAMA DE USUARIO BLOQUE 7 DE LPM DESARROLLO DEL PROGRAMA PRINCIPAL (MAIN PROGRAM) BLOQUE 8 DE LPM CONTROL AUTOMATICO DE INTERRUPCIONES DE ALTA Y BAJA PRIORIDAD BLOQUE 9 DE LPM DESARROLLO DE SUBRUTINAS Y TABLAS DEL PROGRAMA DE USUARIO BLOQUE 10 DE LPM ESCRITURA EN LA MEMORIA EEPROM DE DATO EN TIEMPO DE DISEO COMPILACIN EXITOSA DE UN PROYECTO LPM WINPIC 800 INSTALACION CARGADOR DE CODIGO HEXADECIMAL EN PIC CONFIGURACIN WINPIC 800 A HARDWARE JDM INFORMACION GENERAL DE LPM PUNTUACION Y REQUISITOS PARA EL INFORME DE PROYECTOS METODOLOGA DE SUSTENTACION DEL PROYECTO INFRACCIONES EN PRESENTACION DE UN PROYECTO FORMAS DE SUBIR LA NOTA SOLUCIN DE PROBLEMAS DE HARDWARE SIGNIFICADO DE ERRORES EN EL COMPILADOR MPASM SIGNIFICADO DE WARNINGS (ADVERTENCIAS) EN EL COMPILADOR MPASM SIGNIFICADO DE MENSAJES EN EL COMPILADOR MPASM TIPOS DE DATOS SEGN LA LONGITUD FORMATO DE DATOS ADMITIDOS EN ASSEMBLER Y LPM CONVENCION DE SIMBOLOS PARA INSTRUCCIONES O COMANDOS DE ASSEMBLER INSTRUCCIONES, MNEMONICOS O COMANDOS DE ASSEMBLER PARA REGISTROS ORIENTADOS A BYTES (SFR),

PAG
11 11 11 13 14 14 15 16 17 18 19 21 22 29 31 32 35 37 38 40 41 43 44 45 46 47 48 49 50 56 60 60 61 63 64 64 65 65 66 66 66 67

5 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


INSTRUCCIONES O COMANDOS DE ASSEMBLER PARA REGISTROS ORIENTADOS A BIT INSTRUCCIONES O COMANDOS DE ASSEMBLER PARA CONTROL DE OPERACIONES INSTRUCCIONES O COMANDOS DE ASSEMBLER PARA OPERACIONES CON CONSTANTES COMANDOS DE ASSEMBLER PARA LECTURA DE TABLAS EN MEMORIA DE PROGRAMA CONVENCION DE SIMBOLOS EN MACROS Y ARGUMENTOS DE LPM2 MACROS CONFIGURACIN DE BIT DE REGISTRO ESPECIALES MACROS CONFIGURACIN DE REGISTROS ESPECIALES FSR MACROS ACTIVACION / DESACTIVACION DE INTERRUPCIONES MACROS CONTROL DE BANDERAS DE INTERRUPCION MACROS CONTROL DE FLANCOS DE SUBIDA Y BAJADA DE INTERRUPCIONES MACROS CONTROL DE PRIORIDAD DE INTERRUPCIONES MACROS REGISTRO STATUS MACROS MOVIMIENTO DE DATOS ENTRE REGISTROS MACROS CONTROL DE BIT DE PUERTOS MACROS OPERACIONES CON REGISTROS MACROS MODULO INCREMENTAR Y DECREMENTAR VARIABLES MACROS OPERACIONES MATEMATICAS MACROS FOR DE SUBRUTINAS MACROS COMPARACION DE BIT Y REGISTROS MACROS CLAVE MACROS CONVERSION DE TIPO DE DATOS MACROS DELAY MACROS PULSO_LOW Y PULSO_HIGH MACROS BLINK MACROS RANDOM MACROS DISPLAY CRISTAL LIQUIDO LCD 2X16, 2X20, 2X24, 2X40 TEORIA DISPLAY DE CRISTAL LIQUIDO LCD ALFANUMERICA PLANO DE CONEXIN DE LCD 2X16 ALFANUMERICA MACROS ISD 25XXX_1 MACROS ISD 25XXX_2 TEORA DEL REPRODUCTOR / GRABADOR DE VOZ DE ESTADO SLIDO ISD 25XXX PLANO DE CONEXIN GENERAL DE CONTROL DEL ISD 25XXX GRABACIN DE MENSAJES MANUALMENTE EN EL ISD 25XXX REPRODUCCION DE MENSAJES CONSECUTIVOS MANUALMENTE EN EL ISD 25XXX REPRODUCCIN DE MENSAJES NO CONSECUTIVOS MANUALMENTE EN EL ISD 25XXX MACROS DIRECCIONAMIENTO INDIRECTO FSR0,FSR1,FSR2 MACROS VECTOR0_TIPO_BYTE, VECTOR0_TIPO_WORD MACROS VECTOR1_TIPO_BYTE, VECTOR1_TIPO_WORD MACROS VECTOR2_TIPO_BYTE, VECTOR2_TIPO_WORD MACROS MEMORIA EEPROM DE DATO MACROS RELOJ CON TIMER MACROS SPI DE 8 BIT INTERFAZ PERIFERICO SERIAL MACROS I2C BUS MACROS TIMEKEEPER DS1307 I2C TEORIA DEL TIMEKEEPER GENERADOR DE FECHA Y HORA PLANO DE CONEXIN DE UN TIMEKEEPER DS1307 DS1302 MACROS DE MEMORIA SERIAL 24LC256 I2C (256KBITS = 32KBYTES) 68 68 69 69 70 71 71 72 73 73 73 74 75 75 76 78 79 79 80 81 89 90 90 91 91 92 95 95 96 97 98 99 100 101 101 102 103 103 103 106 107 108 108 108 110 110 111

6 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


MACROS COUNTER 9 DIGITOS MACROS DISPLAY 7 SEGMENTOS TEORA DISPLAY DE 7 SEGMENTOS MATRICIAL CON MANEJO DINAMICO PLANO DE CONEXIN DE UN DISPLAY DE 7 SEGMENTOS MATRICIAL MACROS EXPANSOR DE SALIDAS SIPO 4015B DE 32 BIT PLANO DE EXPANSION DE PUERTOS DE SALIDA CON REGISTRO DE DESPLAZAMIENTO SIPO (4015B 74LS164) MACROS EXPANSOR DE ENTRADAS PISO 4021B DE 32 BIT PLANO DE EXPANSION DE PUERTOS DE ENTRADA CON REGISTRO DE DESPLAZAMIENTO PISO (4021B 74LS165) MACROS TABLA EN MEMORIA DE PROGRAMA FLASH EN EL BLOQUE 9 MACROS TIMER0 TABLA DE CONTANTES DE CONFIGURACIN DE TIEMPO DE TIMER0 TEORIA DE TEMPORIZADORES DEL PIC (TIMER0 Y TIMER1) CONFIGURACIN DEL MODULO TEMPORIZADOR TIMER0 / TIMER1 MACROS TIMER1 TABLA DE CONTANTES DE CONFIGURACIN DE TIEMPO DE TIMER1 TABLA DE CONTANTES DE CONFIGURACIN DE TIEMPO DE TIMER1 SEGN TABLA DE NMERO DE CANALES PWM, POWER AC Y MOTOR PASO PASO TABLA DE NMERO DE INSTRUCCIONES CONSUMIDAS POR CADA MODULO INVOLUCRADO CON TIMER1 MACROS PUSH POP MACROS PWM 1 A PWM8 CON BASE DE TIEMPO EN TIMER1 CONTROL DE VELOCIDAD DE 8 MOTORES DC U 8 SERVOMOTES POR TIMER1 EN BAJA PRIORIDAD TEORA DEL CONTROL PWM POR TIMER1 CONTROL DE POTENCIA POR PWM EN CORRIENTE DIRECTA PLANO DEL CONTROL DE VELOCIDAD POR PWM OPTOACOPLADO Y DIRECCION MEDIANTE RELE DE DOBLE CONTACTO CONTROL DE MOTOR DC OPTOACOPLADOS SIN PUENTE H TEORIA DE CONTROL DE SERVOMOTORES CON PWM DC PLANO DE CONEXIN DE UN SERVOMOTOR A UN PIC MACROS MOTOR PASO A PASO 1 A 8 CON BASE DE TIEMPO EN TIMER1 CONTROL DE VELOCIDAD DE 8 MOTORES PASO A PASO UNIPOLARES O BIPOLARES CON BASE DE TIEMPO EN TIMER 1 CONFIGURADO EN BAJA PRIORIDAD EN BLOQUE 1 TEORIA DE MOTORES PASO A PASO BIPOLAR SECUENCIAS PARA MANEJAR MOTORES PASO A PASO BIPOLARES TEORIA DE MOTOR PASO A PASO UNIPOLAR SECUENCIAS PARA MANEJAR MOTORES PASO A PASO UNIPOLARES SECUENCIA (ALTO TORQUE) MOTOR UNIPOLAR SECUENCIA WAVE DRIVE (BAJO TORQUE) MOTOR UNIPOLAR SECUENCIA MOTOR UNIPOLAR DEL TIPO MEDIO PASO (HALF STEP) COMO SELECCIONAR UN MOTOR PARA UNA APLICACION? MACROS CONTROL DE POTENCIA DE ALTERNA PAC1 A PAC8 CON BASE DE TIEMPO EN TIMER1 TEORA DE CONTROL DE POTENCIA ALTERNA MONOFASICA CONTROL DEL ANGULO DE DISPARO DEL GATE DE UN TRIAC (POWER AC - PAC) PLANO DE CIRCUITO CROSS OVER OPTOACOPLADO PLANO DE CONTROL DE POTENCIA DE AC/DC MEDIANTE RELE U OPTOACOPLADOR MACROS CAD CONVERSOR ANALOGO DIGITAL TABLA DE NMERO DE CANALES Y VOLTAJES DE REFERENCIA DEL CONVERSOR A/D TABLA DE VELOCIDAD DE CONVERSION O FRECUENCIA DE MUESTREO DEL CONVERSOR A/D 112 112 113 114 115 116 117 118 119 120 120 121 121 122 122 123 123 124 126 129 130 131 132

138 138 139 141 141 141 142 142 144 145 147 148 149 151 152

7 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


TEORIA DE CONVERSORES ANALOGO/DIGITAL (CAD) PARAMETROS DE CONVERSORES ANALOGO/DIGITAL (CAD) PLANO DE CONEXIN GENERAL DE SENSORES PARA CONVERSOR A/D TABLA DE SENSORES COMERCIALES MACROS DECODIFICADOR DE CONTROL REMOTO INFRA ROJO TEORA DEL DECODIFICADOR DE CONTROL REMOTO INFRARROJO PLANO RECEPTOR DE CONTROL REMOTO INFRARROJO IR CON INTERRUPCIN CMO PROGRAMAR LAS TECLAS DEL CONTROL REMOTO IR TEORA DEL SENSOR DE PROXIMIDAD INFRARROJO PLANO DE SENSOR DE PROXIMIDAD INFRARROJO MACROS DEL DECODIFICADOR TECLADO PS2 DE COMPUTADORA TEORA DE TECLADO PS2 AT DE LA PC PLANO DE CONEXIN DE 1 A 5 TECLADOS PS2 DE COMPUTADORA DIAGRAMA DE CONEXIN DEL PLUG DEL TECLADO PS2 PROTOCOLO DE COMUNICACIN DE TECLADO A PIC PROTOCOLO DE COMUNICACIN DE PIC A TECLADO CODIGOS ENVIADOS POR EL CODIFICADOR DEL TECLADO PS2 MACROS TECLADO MATRICIAL 4X4 / 4X3 PLANO DEL TECLADO MATRICIAL 4X4, 4X3 PLANO DE CONEXIN DE LCD Y TECLADO MATRICIAL COMPARTIENDO CIERTOS PINES DE CONTROL MACROS TRANSCEIVER TRF 2.4GHz (TRANSMISOR RECEPTOR RF) PROTOCOLO IEEE 802.15.4 PLANO DE CONEXIN ENTRE PIC Y TRANSCEIVER TRF 2.4 GHZ MACROS DEL DECODIFICADOR DE TONOS DUAL MULTIFRECUENCIA (DTMF) MT 8870 TEORIA DEL DECODIFICADOR DTMF MT8870 DE TONOS DE TELEFONO FIJO O CELULAR PLANO DE CONEXIN DEL DECODIFICADOR DTMF MT 8870 MACROS UART RS 232 TEORIA DEL PUERTO SERIAL RS232 UART ENTRE PC Y PIC TABLA DE SELECCIN DE VELOCIDAD EN BAUDIOS DEL MODULO UART RS232 POR PTC7 Y PTC6 TABLA DE SELECCIN DE VELOCIDAD EN BAUDIOS DE LOS MDULOS UART0, UART1 Y UART2 CALCULO DE VELOCIDAD EN BAUDIOS PARA EL MODULO UART INTERNO DEL PIC CONFIGURACIN DE LA TRAMA RS232 PARA COMUNICACIN HALF DUPLEX PC - PIC NIVELES DE VOLTAJE RS232 TRAMA RS232 SIGNIFICADO DE LOS PINES DEL CONECTOR DB9 DEL PUERTO SERIAL DEL PC PLANO DE CONEXIN UART RS232 ENTRE PIC Y PC MEDIANTE MAX232 PLANO DE CONEXIN UART RS232 ENTRE PIC Y PC MEDIANTE TRANSISTORES TABLA DE CONSTANTES DEL TECLADO DEL PC POR RECEPCIN UART RS232 TABLA ORDEN EN DETECCION AUTOMATICA DE TABLA REGISTROS DESTINO DE MODULOS LPM INTERRUPCIONES DE LPM 153 154 157 158 160 160 162 162 163 164 165 165 167 167 168 168 169 170 171 172 173 177 178 179 179 180 181 182 182 183 183 184 184 185 187 188 189 190 191

8 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

INDICE DE MACROS, PLANOS Y TABLAS DE LPM2


MACROS ACTIVACION / DESACTIVACION DE INTERRUPCIONES MACROS BANDERAS DE INTERRUPCION MACROS BIT DE PUERTOS MACROS BLINK MACROS CAD CONVERSOR ANALOGO DIGITAL MACROS CLAVE DE ACCESO MACROS COMPARACION DE BIT Y REGISTROS MACROS CONFIGURACIN DE REGISTROS ESPECIALES FSR MACROS CONFIGURACIN DE BIT DE REGISTRO ESPECIALES MACROS CONTROL REMOTO INFRA ROJO DECODIFICADOR MACROS CONVERSION DE TIPO DE DATOS MACROS COUNTER 9 DIGITOS MACROS DELAY MACROS DIRECCIONAMIENTO INDIRECTO FSR0,FSR1,FSR2 MACROS DISPLAY 7 SEGMENTOS MACROS DTMF DECODIFICADOR DE TONOS DUAL MULTIFRECUENCIA MT 8870 MACROS FLANCOS DE SUBIDA Y BAJADA DE INTERRUPCIONES MACROS FOR DE SUBRUTINAS MACROS I2C BUS MACROS INCREMENTAR/DECREMENTAR VARIABLES MACROS ISD 25XXX MACROS LCD DISPLAY CRISTAL LIQUIDO LCD 2X16, 2X20, 2X24, 2X40 MACROS MEMORIA EEPROM DE DATO DEL PIC MACROS MEMORIA SERIAL 24LC256 I2C (256KBITS = 32KBYTES) MACROS MOTOR PASO A PASO 1 A 8 CON BASE DE TIEMPO EN TIMER1 MACROS MOVIMIENTO DE DATOS ENTRE REGISTROS MACROS OPERACIONES CON REGISTROS MACROS OPERACIONES MATEMATICAS MACROS PISO EXPANSOR DE ENTRADAS PISO 4021B DE 32 BIT MACROS POTENCIA DE ALTERNA PAC1 A PAC8 CON BASE DE TIEMPO EN TIMER1 MACROS PRIORIDAD DE INTERRUPCIONES MACROS PULSO_LOW Y PULSO_HIGH MACROS PUSH POP MACROS PWM 1 A PWM8 CON BASE DE TIEMPO EN TIMER1 MACROS RANDOM MACROS RELOJ CON TIMER MACROS SIPO EXPANSOR DE SALIDAS SIPO 4015B DE 32 BIT MACROS SPI DE 8 BIT INTERFAZ PERIFERICO SERIAL MACROS STATUS REGISTRO MACROS TABLA EN MEMORIA DE PROGRAMA FLASH EN BLOQUE 9 MACROS TECLADO MATRICIAL 4X4 / 4X3 MACROS TECLADO PS2 DE COMPUTADORA

PAG
72 73 75 91 149 81 80 71 71 160 89 112 90 102 112 178 73 79 108 78 96 92 106 111 132 75 76 79 117 144 73 90 123 124 91 107 115 108 74 119 170 165

9 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


MACROS TIMEKEEPER DS1307 I2C MACROS TIMER0 MACROS TIMER1 MACROS TRANSCEIVER TRF 2.4GHz EN MODO SHOCK BURST TRF 2.4 GHZ (TRANSMISOR RECEPTOR DE RADIOFRECUENCIA) PROTOCOLO IEEE 802.15.4 MACROS UART RS 232 (UART, UART0, UART1, UART2) MACROS VECTOR0 MACROS VECTOR1 MACROS VECTOR2 PLANO BSICO PLANO CAD CONVERSOR A/D (SENSORES DE TEMPERATURA, PRESION, LUMINOSIDAD) PLANO CONTROL DE POTENCIA DE AC/DC MEDIANTE RELE U OPTOACOPLADOR PLANO CROSS OVER OPTOACOPLADO PLANO DISPLAY DE 7 SEGMENTOS MATRICIAL PLANO DTMF MT 8870 PLANO ISD 25XXX PLANO LCD 2X16 ALFANUMERICA PLANO LCD Y TECLADO MATRICIAL PLANO PISO EXPANSION DE PUERTOS DE ENTRADA (4021B 74LS165) PLANO PWM OPTOACOPLADO PARA CONTROL DE MOTOR DC Y DIRECCION MEDIANTE RELE PLANO RECEPTOR DE CONTROL REMOTO INFRARROJO IR PLANO SENSOR DE PROXIMIDAD INFRARROJO PLANO SERVOMOTOR A UN PIC PLANO SIPO EXPANSION DE PUERTOS DE SALIDA (4015B 74LS164) PLANO TECLADO MATRICIAL 4X4, 4X3 PLANO TECLADOS PS2 DE COMPUTADORA PLANO TIMEKEEPER DS1307 Y DS1302 PLANO TRANSCEIVER TRF 2.4 GHZ (TRANSMISOR RECEPTOR DE RADIOFRECUENCIA) PROTOCOLO IEEE 802.15.4 PLANO UART RS232 ENTRE PIC Y PC MEDIANTE MAX232 TABLA CAD NMERO DE CANALES Y VOLTAJES DE REFERENCIA DEL CONVERSOR A/D TABLA CAD VELOCIDAD DE CONVERSION O FRECUENCIA DE MUESTREO DEL CONVERSOR A/D TABLA ORDEN EN DETECCION AUTOMATICA DE TABLA REGISTROS DESTINO DE MODULOS LPM INTERRUPCIONES DE LPM 108 120 121 173 180 103 103 103 17 157 148 147 114 129 99 95 172 118 179 162 164 131 116 171 167 110 177 187 151 152 190 191 120 122 123 123 189 182 182

TABLA TIMER0 CONTANTES DE CONFIGURACIN DE TIEMPO TABLA TIMER1 CONTANTES DE CONFIGURACIN DE TIEMPO TABLA TIMER1 CONTANTES DE CONFIGURACIN DE TIEMPO DE TIMER1 SEGN NMERO DE CANALES, POWER AC Y MOTOR PASO PASO TABLA TIMER1 NMERO DE INVOLUCRADO CON TIMER1 INSTRUCCIONES CONSUMIDAS POR CADA MODULO

TABLA UART CONSTANTES DEL TECLADO DEL PC POR RECEPCIN UART RS232 TABLA UART SELECCIN DE VELOCIDAD EN BAUDIOS DEL MODULO UART RS232 POR PTC7 Y PTC6 TABLA UART0, UART1, UART2 SELECCIN DE VELOCIDAD EN BAUDIOS

10 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

INTRODUCCIN AL MODELO DE PROGRAMACIN MODULAR POR MACROS LPM


El modelo de programacin modular y estructurada por macros de assembler y compilado condicional de subrutinas optimizadas y funcionales persigue proporcionar a programadores de microcontroladores PIC GAMA ALTA O MEDIA expertos y/o novatos, herramientas prcticas que permitirn el desarrollo rpido, fcil, optimizado y funcional de aplicaciones electrnicas. Con la implementacin de potentes macros y subrutinas de assembler, se ofrece una amplia gama de posibilidades a nivel de hardware y software que sin duda corroborar al desarrollo de innumerables proyectos. El sistema de programacin modular est habilitado para los microcontroladores de la gama media y alta de la familia microchip: 16F y 18F, tales como PIC18F242/252/442/452, PIC16F84A/16F62X. Los PICs mencionados slo difieren en nmero de puertos disponibles, tamao de memoria RAM, tamao de memoria de programa, etc.

ALGORITMO MEDIANTE FLOW CHART (DIAGRAMA DE FLUJO)


Para desarrollar una aplicacin o un proyecto microcontrolado se recomienda escribir un algoritmo (especificacin paso a paso de la solucin de un programa mediante un diagrama de flujo - flow chart). La representacin mediante un algoritmo debe garantizar: 1. 2. 3. 4. 5. Que sea fcilmente comprensible para una tercera persona que pretenda leerlo. Debe obtener el resultado deseado de forma rpida. Debe ocupar el menor espacio de memoria de programa y menor nmero de variables. Cada bloque o seccin del programa debe estar debidamente documentado mediante comentarios. El programa debe estar dividido en subrutinas o secciones elementales, es decir, ser estructurado o modular para facilitar un eventual cambio o actualizacin

FASES DE UN PROYECTO MICROCONTROLADO


Cada nuevo proyecto nace con una idea y termina con el prototipo que la implementa. La realizacin de un proyecto se puede descomponer en 10 fases. Un amplio dominio de las diferentes opciones y configuracines a nivel de software en un microcontrolador optimiza y simplifica notablemente el diseo del hardware, lo cual se traduce en una disminucin del costo de implementacin del producto final. LAS 10 FASES DE UN PROYECTO MICROCONTROLADO 1. DEFINICION DEL PROYECTO: Definir claramente el proyecto que se desea realizar con sus caractersticas hasta la absoluta comprensin de lo que se desea implementar. Se determinan los requerimientos de hardware as como las partes que integrarn el programa. 2. DISEO DEL HARDWARE: Realizar el esquemtico del circuito fsico a controlar. 3. IMPLEMENTACIN Y VERIFICACION DEL HARDWARE: Se deben adquirir todos los componentes y/o dispositivos electrnicos del diseo. Se recomienda montarlo inicialmente en Proto board, sino en wrapping o placa de circuito impreso. Comprobar el funcionamiento (en lo posible) de los dispositivos de hardware tales como: led, rels, transistores, sensores anlogos y digitales, continuidad en conductores, estabilidad y potencia de la fuente de alimentacin, TRIAC, SCR, etc. 4. DIAGRAMA DE FLUJO DEL ALGORITMO DEL PROGRAMA: Todo el tiempo invertido en la depuracin y

11 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


perfeccionamiento del flow chart se ahorrar en la fase de edicin del programa. EDICION DEL PROGRAMA: Escribir el cdigo fuente del programa mediante instrucciones de assembler y/o macros de LPM en el editor MPLAB IDE de microchip. ENSAMBLAR EL CODIGO FUENTE: Mediante el programa MPASM de MPLAB IDE se genera el cdigo de mquina hexadecimal (archivo .Hex) que se cargar en la memoria de programa del PIC. SIMULACION DEL CODIGO FUENTE: Implica comprobar el funcionamiento paso a paso del programa antes de grabarlo en la memoria de programa del PIC. Se realiza mediante el aplicativo MPLAB-SIM o PROTEUS ISIS PROFESSIONAL. Si se detecta errores en el funcionamiento se deben repetir los pasos 5 a 7. GRABACION DEL CODIGO DE MAQUINA EN MEMORIA DE PROGRAMA DEL PIC: Mediante el programa de libre distribucin IC PROG o WIN PIC se carga el archivo Hex generado con MPASM en la memoria de programa del PIC. El hardware cargador puede ser serial (JDM) o USB (GTP USB PLUS). COMPROBACION DEL HARDWARE CON EL PIC: Verificar el correcto funcionamiento de cada una de las opciones del circuito. Si no cumple el funcionamiento previsto se deben repetir los pasos 5 a 9. DOCUMENTACION DEL PROYECTO FINIQUITADO: Elaborar una gua fcilmente comprensible para una tercera persona ajena al proyecto.

5. 6. 7.

8.

9. 10.

12 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

DIAGRAMA DE FLUJO DE UN PROYECTO MICROCONTROLADO

13 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

SOFTWARE O INFORMACION REQUERIDA PARA EL DESARROLLO DE UN PROYECTO EN LPM (contenida el CD DIGIBOOK Agosto/2007)
1. Mplab Ide V. 7.1 (Editor De Assembler De Libre Distribucin por la empresa MICROCHIP) 2. Proteus Professional 6.7 (Simulador de circuitos electrnicos) 3. WinPic800 Aplicativo Software cargador de cdigo hexadecimal en microcontrolador 4. Carpeta modelo LPM

HARDWARE Y EQUIPOS REQUERIDO PARA EL DESARROLLO DE UN PROYECTO EN LPM


1. Computador Con Sistema Operativo Win Xp Sp1/Sp2, 256 RAM mnimo, 4GB libre en Disco Duro. 2. Hardware Cargador Programador De Pics 18F Serial o USB (JDM, GTP u otro equivalente) 3. Pic 18FXXXX (se recomienda 18F452) 4. Cristal De 4 A 20MHz (se recomienda 20 MHz), 2 Condensadores de 27pF, Pulsador NA, R 10k, R 100, 2 Condensadores 104pf = 100nf = 0.1uf A 16v 5. Protoboard Generico De 2 Secciones Mnimo 6. Fuente de +5vdc (+- 10%) / 1amp, Fuente De +12vdc (+- 10%) / 1amp 7. Multimetro Digital De Propsito General, puentes, herramientas bsicas. Si dispone de todas las herramientas antes mencionadas y los software debidamente instalados puede iniciar la creacin de un proyecto en programacin modular LPM.

14 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

15 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

DIAGRAMA DE PINES DE PIC GAMA ALTA 18FXX2

16 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO DEL HARDWARE BASICO DE UN PROYECTO LPM (PLANO BASICO)

R1 es la resistencia de pull up del reset maestro (master clear) . R2 es una resistencia de proteccin del microcontrolador contra picos negativos de voltaje al presionar el pulsador RESET. C1 y C2 son condensadores cermicos de 27pF/10V cuya funcin es estabilizar la oscilacin del cristal X1. Por norma general (efecto de seales electromagnticas de altas frecuencia) C1,C2 y X1 deben conectarse lo 1 ms cerca posible al microcontrolador. C3 y C4 son condensadores cermicos (By pass) de 100nF = 104pF = 0.1uF/10V cuya funcin es filtrar ruidos de relativa alta frecuencia (no el rizado de 60 120Hz) en la alimentacin del PIC, por lo tanto, es prioritario conectarlos lo ms cerca posible a los pines de alimentacin del PIC como se indica en la figura anterior. C5 es un condensador de 1000uF a 4700uF entre VCC y tierra para filtrar y eliminar el posible rizado de 60 120Hz de la fuente de alimentacin.

Nota: Cercirese que C1 y C2 sean de 27pF a 33pF, algunos condensadores nominados como 27K en su presentacin no son realmente de 27 pF, entonces procure utilizar condensadores nominados 27 solamente.

17 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

FUENTE DE ALIMENTACION 5VDC/100 mA SIN TRANSFORMADOR CON DIODO ZENER

Este circuito obtiene su alimentacin directamente de la red elctrica sin necesidad de transformador ni fuente conmutada. El conjunto formado por la resistencia de 220 ohms a 1Watt, el capacitor de 1uF, el zener de 1Watt a 5.1V, el condensador electroltico de 2200uFy los 4 diodos 1N4007 conforman la fuente de +5VDC a 100mA del PIC. La resistencia de 1M se encarga de descargar el capacitor de poliester de 1uF cuando se desconecta el equipo de la red para prevenir choques elctricos indeseados. Tenga precaucin de no trabajar descalzo o tener contacto con piso, paredes o cualquier sistema de tierra pues podra sufrir sacudidas elctricas.

18 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

FUENTE DE ALIMENTACION 5VDC/500 mA SIN TRANSFORMADOR CON LM7805

FUENTE DE ALIMENTACION 5VDC/300 mA CON ADAPTADOR DE CELULAR

Se recomienda este tipo de alimentacin con adaptador de celular debido a la ausencia del tpico rizado de 60 o 120Hz de las fuentes convencionales con transformador. Este tipo de fuentes operan con otra tcnica (fuentes suicheadas o conmutadas). Pueden proporcionar hasta 300mA a 5VDC aproximadamente. Los PIC pueden trabajar con tensiones comprendidas entre 2 a 5.5VDC y consumen 2mA aproximadamente en modo normal de funcionamiento, no obstante, considerando que la fuente tambin debe alimentar a los perifricos del microcontrolador (led, LCD, teclado PS2, etc) se recomienda que mnimo proporcione 100mA. Si el adaptador genera ms de 5 VDC se recomienta poner en serie y en directa diodos 1N4001. Cada diodo captura 0.7VDC aproximadamente, es decir, si la tensin del adaptador es de 7VDC entonces conecte 3 diodos en serie.

19 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

CREACION DE UN PROYECTO LPM: PRIMER PASO


Copie la carpeta modelo (LPM2) segn el PIC que emplear del CD DIGITAL BOOK y pguela en el directorio raz de cualquier disco duro (C:\ D:\ E:\)

20 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

CREACION DE UN PROYECTO LPM: SEGUNDO PASO


Verifique que en el interior de la carpeta LPM2 se encuentren los siguientes archivos y carpeta:

En la carpeta SIMULACIN PROTEUS se debe incluir el plano del hardware para efectos de simulacin (*.dsn). En la carpeta PLANOS PROTEUS DEL CD DIGITAL BOOK se encuentran varios ejemplos de planos en proteus, copie el ejemplo que ms se acerque a su aplicacin y pguelo en la carpeta SIMULACION PROTEUS de la carpeta que acaba de crear en el directorio raz.

21 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

CREACION DE UN PROYECTO LPM: TERCER PASO


Cambie el nombre de la carpeta LPM2 que acaba de pegar por el nombre de su proyecto, el nombre no debe incluir caracteres especiales (puntos, comas, guiones altos, asteriscos, etc) ni debe exceder 45 caracteres. El nombre de la carpeta contenedora no debe exceder 45 caracteres y debe seguir el siguiente for formato: ORDEN DEL PROYECTO + NOMBRE DEL PROYECTO + NOMBRE DEL GRUPO. Por ejemplo: si va a presentar el primer proyecto del semestre llamado "semaforo inteligente" por la empresa "DIGISOFT ELECTRONIC" del grupo digitales 3A, entonces la carpeta debe llamarse "P1 SEMAFORO INTEL DIG3A ". Es imprescindible que se copie en directorio raz C:\ D:\ E:\ (esta restriccin obedece a limitaciones impuestas por el editor MPLAB IDE 7.1, el cual mximo permite 62 caracteres entre la ruta completa y el nombre del archivo .asm que se compilar) . Nota: No copie la carpeta LPM2 en el escritorio o en Mis documentos pues supera los 65 caracteres mximos que permite el editor MPLAB IDE para compilar un archivo .asm.

22 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

CREACION DE UN PROYECTO LPM: CUARTO PASO CONFIGURACIN DEL EDITOR MPLAB IDE 7.1
Nota1: El cuarto paso slo se debe realizar la primera vez que abre el editor MPLAB IDE 7.1, esta configuracin permanece para todos los proyectos LPM de aqu en adelante. Nota2: Se recomienda trabajar LPM2 con la versin MPLAB IDE 7.1 prescindiendo de la disponibilidad de versiones ms recientes. Abra el editor MPLAB v 7.1 y cargue (men file open) el archivo FORMATO GRAL.ASM de la carpeta BRAZO ROBOTICO que acaba de crear.

Como recomendacin general Nunca elimine los renglones bsicos del formato general, ni comentarios (lneas en color verde que inician con punto y coma!. Es importante que PROGRAME SIEMPRE EN MAYUSCULA FIJA e identifique los renglones de programa dependiendo del color de letra: LETRA VERDE : Indica comentario, lneas de programacin para ayuda del programador y no para la memoria del PIC. LETRA AZUL : Indica instruccin de assembler o directiva para el editor. En total hay 75 instrucciones de assembler y decenas de directivas.

23 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


LETRA CARMES : Indica etiqueta, macro de LPM, argumento de una instruccin o argumento de una macro. Nota: Los archivos MACROS.INC, SUBRUTINAS.INC y PIC18F452.INC no deben modificarse en ningn momento (a menos que usted sepa editar o agregar nuevas macros y subrutinas al lenguaje LPM).

SELECCIN DE MICROCONTROLADOR Note en la barra de estado que el PIC seleccionado por defecto es el PIC18F452, cambie de microcontrolador si fuese necesario, esta opcin se encuentra en el men configure - selec device.

CONFIGURACIN DEL EDITOR MPLAB IDE A continuacin configure el editor de la siguiente forma:

24 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

25 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

26 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


Continuacin de configuracin del editor: asignacin de la tecla de funciones F5 para compilacin rpida (Quickbuild).

Configure la ventana Settings Workspace de la siguiente manera:

Por defecto la ventana Settings Hot Keys (teclas de acceso rpido) tiene asignado ALT + F10 para compilar (generar el archivo .Hex o hexadecimal con cdigo de mquina para el microcontrolador), se recomienda suprimir (con la tecla Delete o Supr) el texto (ALT + F10) y cambiarlo por la tecla de funciones F5 (no digite la F y el 5 por separado si no la tecla funcin F5). El sistema le pedir guardar un archivo con la configuracin de los cambios, gurdelo en C:/mis documentos, no en la propia carpeta que acaba de crear en el directorio raz.

27 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

ACTIVACION Y DESACTIVACION DEL SIMULADOR MPLAB - SIM La activacin del simulador MPLAB SIM permite ejecutar paso a paso (step by step con F7) las instrucciones y macros del programa, la forma de activarlo es como se muestra a continuacin. No se recomienda tenerlo activado si no piensa simular un programa.

28 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


CONFIGURACIN DE RESOLUCIN DE PANTALLA La resolucin de pantalla ptima es 1024 x 768 a 32 bit, configrese en el escritorio de windows, dando click derecho y seleccionado propiedades:

29 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

CREACION DE UN PROYECTO LPM: QUINTO Y ULTIMO PASO


Identifique los 11 bloques (BLOQUE 0 A BLOQUE 10) de programacin modular en el formato general y no elimine ningn rengln, todos los bloques tienen un inicio y un final claramente visible.

30 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

Para saltar de un bloque a otro digite CONTROL F y digite el nombre del bloque seguido de la tecla enter:

Para buscar una lnea del programa digite CONTROL G y digite el nmero de la llnea seguido de la tecla enter:

Para pasar uno ms renglones a mayscula (Uppercase), minscula (Lowercase), convertir en comentario (Comment Block), deshacer comentario (Uncomment Block), Tabular a la derecha o izquierda (Indent Block, OutDent Block) debe seleccionarlo y dar clic derecho sobre el bloque seleccionado, aparecer el siguiente men contextual.

31 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

BLOQUES DEL FORMATO GENERAL EN UN PROYECTO LPM


El modelo de programacin modular es muy sencillo, lgico e intuitivo, en pocas horas se adquiere la destreza en la implementacin de complejas e intrincadas aplicaciones que de otro modo implicara una considerable inversin de tiempo. LPM comprende once (11) bloques (BK0 a BK10) en el archivo Formato Gral.asm, el usuario debe familiarizarse con la funcin de cada bloque y respetar la sintaxis de programacin en cada uno. Edicin de Informacin general del proyecto Seleccin del cristal oscilador (XTAL) Configuracin de Brown Out Reset (BOR) Configuracin de Wath Dog Timer (WDT) Configuracin del Code Protect Activacin (SI) y Desactivacin (NO) de mdulos, interrupciones, perifricos funciones requeridas en el proyecto Asignacin de Pines de control de perifricos activados en bloque 1 Configuracin de mdulos activados en bloque 1 Declaracin de variables tipo Byte (mximo 868) Declaracin de variables tipo Word (mximo 128) Definicin de constantes Declaracin de Banderas (Flags) Declaracin de Macros temporales del programa Lista de Mensajes en ISD reproductor/grabador de voz Reset inicial de todos los registros o variables de la memoria RAM (CLR_ALL_RAM_GPR). Reset inicial de todos los puertos del pic (CLR_PORTS) Configuracin manual de registros especiales (SFR) Definicin y asignacin de pines de entrada o salida no declarados en bloque 1 y 2 Acciones iniciales del programa al energizar o resetear el PIC Inicializacin de Puertos, perifricos, variables, banderas, contadores Mensajes y efectos de bienvenida en LCD ISD Activacin / Desactivacin inicial del WATCH DOG TIMER Activacin / Desactivacin inicial del PULL UP interno del puerto B Activacin / Desactivacin inicial de PRIORIDAD DE INTERRUPCIONES Activacin / Desactivacin inicial de INTERRUPCIONES EN ALTA PRIORIDAD Activacin / Desactivacin inicial de INTERRUPCIONES EN BAJA PRIORIDAD Main Program (Programa principal). Activacin/desactivacin del mtodo SLEEP (ahorro de energa por Stand By) Implementacin de tcnica POLLING (sensado cclico de entradas) Control automtico de interrupciones activadas en bloque 1 Desarrollo de subrutinas del programa de usuario Desarrollo de tablas en memoria de programa Escritura inicial en la memoria EEPROM de dato (256 direcciones x 8 bit) Fin del Programa y

BLOQUE 0

BLOQUE 1

BLOQUE 2

BLOQUE 3

BLOQUE 4

BLOQUE 5

BLOQUE 6

BLOQUE 7 BLOQUE 8 BLOQUE 9 BLOQUE 10

Nota: El bloque 2 y 3 est invertido con respecto al formato general de gama media 16F.

32 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PROGRAMACION EN BLOQUE 0
INFORMACION GENERAL Y CONFIGURACINES ESPECIALES DEL MICROCONTROLADOR El bloque cero de LPM comprende desde el primer rengln del formato general hasta el inicio del bloque 1, est compuesto por ms de 5000 lneas de comentario (en color verde e inician con punto y coma). En la lnea 28 a 102 el usuario debe proporcionar una serie de datos tecnicos y generales del proyecto. Es de vital importancia leer y esforzarse por comprender todos los comentarios e informacin solicitada en el bloque 0 del formato general de LPM.

La seleccin del cristal de oscilacin constituye la primera configuracin en el editor MPLAB sobre el formato general, en la lnea 5202 (esta lnea puede ser diferente). Se puede seleccionar entre 4, 8, 10, 16, 20 40 MHz, en la imagen se ilustra la seleccin de un cristal de 20MHz. Se recomienda trabajar con una frecuencia de oscilacin igual a 20MHZ, el ciclo de mquina (tiempo que emplea el PIC por cada instruccin o rengln del programa) equivale a 200nSeg (CM=4/20MHz). La familia de la gama alta de microcontroladores microchip (18F) tiene la opcin de activar un circuito PLL (phase locked loop) el cual multiplica por 4 la frecuencia de oscilacin natural del cristal fsico que se conecte en el circuito, es decir, para que el PIC trabaje a 40MHz slo es necesario conectar un cristal de 10MHz y activar el mdulo PLL por

33 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


software, esto lo hace automticamente el sistema de programacin modular cuando configuramos la opcin OSCILADOR_40MHZ. Para cualquier otra frecuencia menor de 40 MHz se debe colocar el respectivo cristal en el hardware del circuito y desactivar la opcin PLL; esto tambin lo hace automticamente el sistema modular, de esta forma si deseamos colocar un cristal de 20MHz, slo configuramos la opcin de la siguiente forma OSCILADOR_20MHZ e insertamos un cristal de 20MHz en el circuito. Una desventaja de activar el mdulo PLL es que el C consume aproximadamente 20mA mientras el cristal est oscilando, en contraste con los 2 mA que consumira con el mdulo PLL desactivado y oscilando a la frecuencia natural del cristal, esto es especialmente importante cuando el circuito es alimentado con batera.

34 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

Una vez realizadas las configuracines especiales del microcontrolador se procede con la programacin en cada bloque del formato general. Se recomienda configurar (a menos que el usuario requiera una opcin diferente) BROWN OUT RESET EN DISABLE (opcin 1), WATCH DOG TIMER EN DISABLE (opcion 1) , PROTEC_ALL_MEMORY EN OFF (opcin 1).

35 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PROGRAMACIN EN EL BLOQUE 1 DE LPM (BLOQUE1)


ACTIVACION / DESACTIVACION DE MODULOS En este bloque se activan (SI) o desactivan (NO), los mdulos funcionales segn el requerimiento de cada aplicacin. La expresin SI en frente de un mdulo implica que todas las macros y subrutinas de dicho mdulos estarn disponibles en los bloques consecutivos. Por ejemplo, si se desea activar la interrupcin del Timer0 (TMR0) en alta prioridad es necesario activar (SI) el mdulo INTERRUPCION_HP_TMR0 como se aprecia en la siguiente figura.

Como pudo observar es muy sencillo, la funcin que se requiera se le escribe al frente un SI. Es importante que el usuario no active mdulos que no requiera en su aplicacin pues incrementar el consumo de memoria de programa y recuerde que slo dispone 8192 renglones o instrucciones (PIC 18Fx42), 16384 renglones (PIC 18FX52) . Algo digno de aclarar es que existen mdulos cuyas subrutinas se pueden activar en baja o alta prioridad (LP, HP), esto quiere decir que el usuario puede especificar si alguna interrupcin requiere mayor prioridad (mayor importancia desde el punto de vista funcional). Por ejemplo, observe en la ilustracin anterior que la interrupcin por el pin PTB7 est disponible en 4 modos diferentes:

36 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


1. 2. 3. 4. INTERRUPCION_HP_PTB7_FL INTERRUPCION_HP_PTB7_FH INTERRUPCION_LP_PTB7_FL INTERRUPCION_LP_PTB7_FH : Interrupcin de alta prioridad (HP) por flanco de bajada en PTB7 : Interrupcin de alta prioridad (HP) por flanco de subida en PTB7 : Interrupcin de baja prioridad (LP) por flanco de bajada en PTB7 : Interrupcin de baja prioridad (LP) por flanco de subida en PTB7

FUENTE DE INTERRUPCIN EXTERNA: Son pines del microcontrolador configurados como entrada que al cumplirse una determinada condicin (flanco de subida/bajada) generan un salto de interrupcin. (PTB0, PTB1, PTB2, PTB4, PTB5, PTB6, PTB7, RA4_T0CKI) FUENTE DE INTERRUPCIN INTERNA: Son recursos internos del microcontrolador mediante los cuales se genera un salto de interrupcin. Por ejemplo: CONVERSOR A/D, TIMER0, TIMER1, TIMER2, USB, PWM, EEPROM. Nota1: No se permite la activacin de dos prioridades simultneamente para una misma fuente de interrupcin. Nota2: La interrupcin por los pines PTB0, PTB1 y PTB2 NO ADMITE la activacin de dos flancos simultneamente. Por ejemplo, no sera correcta la siguiente configuracin en el bloque 1:

Nota3: La interrupcin por los pines PTB4, PTB5, PTB6 Y PTB7 simultneamente.

SI ADMITE la activacin de dos flancos

Nota4: El puerto PTB0 slo tiene disponible interrupcin en alta prioridad con flanco de bajada o subida.

37 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PROGRAMACIN EN EL BLOQUE 2 DE LPM (BLOQUE2)


CONFIGURACIN DE MDULOS Y ASIGNACIN DE PINES DE CONTROL En este bloque se configuran los mdulos TIMER0, TIMER1, PWM, UART RS232, CONVERSOR A/D, INFRAROJO, ISD 25XXX, etc. Tambin se asignan los pines de control de aquellos mdulos que lo requieran, por ejemplo: LCD, TECLADO MATRICIAL 4X4, ISD 25XXX, DISPLAY DE 7 SEGMENTOS, etc. Cabe destacar que algunos mdulos no tienen la opcin de configurar o escoger todos sus pines de control, por ejemplo, los mdulos TECLADO PS2 DE COMPUTADORA, RECEPTOR INFRA ROJO, TRANSMISIN UART RS232, CONVERSOR CAD y PWM tienen predefinidos parcial o totalmente los pines de control respectivos, la razn de ello radica en la particularidad y funcionalidad de los pines seleccionados, por ejemplo: el mdulo teclado PS2 de computadora requiere un pin de entrada del PIC con interrupcin, si se diera la libertad al usuario de escoger los pines de control se corre el riesgo de confusin o error en la seleccin, por todas estas razones los desarrolladores de LPM optaron por pre-asignar los pines de control para ciertos mdulos. Nota: El pin PTA4 tiene salida de drenador abierto (Open Drain OutPut), lo cual implica que cuando se configure como salida slo podr enviar 0 lgicos, nunca saldr 1 lgico por dicho pin. Cuando se configure como entrada funcionar normalmente. La presente nota debe ser tenida en cuenta al asignar el pin PTA4 como control de salida de algn mdulo. Como norma general no asigne el pin PTA4 a algn mdulo como salida si tiene la opcin de utilizar cualquier otro pin. Si no tiene otra opcin, entonces debe conectar un Pull UP externo (1k aproximadamente) a PTA4 para usarlo como salida.

38 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

39 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PROGRAMACIN EN EL BLOQUE 3 DE LPM (BLOQUE3)


DECLARACIN DE VARIABLES RAM DEL PROGRAMA DE USUARIO La declaracin de variables de 8 16bits tiene lugar en este bloque. Pese a disponer de 1536 variables de 8 bit, el core (ncleo) de la familia 18F distribuye dichas variables en bancos de 256 direcciones cada uno, es decir, el PIC 18F452 tiene sus 1536 variables distribuidas en 6 bancos (banco 0 a banco 5). La subrutinas y macros del sistema LPM ocupa las direcciones 100 a 383 y 768 a 895 de la RAM de datos, lo cual implica que el usuario dispone de 1124 variables de 8 bit o 1 byte distribuidas de la siguiente forma:

DISTRIBUCION DE MEMORIA DE DATOS (DIR 0 TO 1536) DE 18F452 EN LPM ;BANCO0 : 0 A 99 :VARIABLES 8BIT PARA USUARIO : 100 BYTE ;BANCO0 : 100 A 256 :VARIABLES EXCLUSIVAS LPM : 156 BYTE ;BANCO1 : 256 A 511 :VARIABLES 16BIT PARA USUARIO : 128 WORD : 256 BYTE : 256 BYTE : 256 BYTE : 256 BYTE : 128 BYTE

;BANCO2 : 512 TO 767 :VARIABLES EXCLUSIVAS LPM ;BANCO3 : 768 TO 1023 :VARIABLES 8BIT PARA USUARIO ;BANCO4 : 1024 TO 1279 :VARIABLES 8BIT PARA USUARIO ;BANCO5 : 1280 TO 1535 :VARIABLES 8BIT PARA USUARIO

;BANCO15 : 3968 TO 4095 :REGISTRO FUNCIONES ESPECIALES (FSR)

;EN TOTAL SE RESERVAN 1124 BYTE PARA EL USUARIO Y 412 BYTES PARA LPM EN PIC 18F4X2 ;EN TOTAL SE RESERVAN 356 BYTE PARA EL USUARIO Y 412 BYTES PARA LPM EN PIC 18F2X2 VARIABLES TIPO BYTE = 8 BITS = 0 a 255 : VAR1, VAR5, VAR6 VARIABLES TIPO WORD = 16 BITS = 0 a 65535 : VAR2, VAR7 VARIABLES TIPO DOUBLEWORD = 32 BITS = 0 a 4.294967.296 : VAR3, VAR4

40 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

Las variables declaradas de la direccin 0 a la direccin 99 (100 bytes) son tipo bytes u 8 bits, es decir, se puede guardar mximo un dato de 0 a 255, VAR1, DIGITO1 y REG0 son ejemplos de variables declaradas tipo byte. Las direcciones 768 a 1535 (768 Bytes) tambin estn reservadas para variables tipo byte, por ejemplo: VAR5, VAR6, REG3. Las variables declaradas de la direccin 256 a 511 son exclusivamente tipo Word o 16 bit, es decir, se puede guardar un dato de 0 a 65535, VAR3, VAR4, REG1 son ejemplos de variables tipo Word. Note que para considerar una variable como tipo Word es imprescindible declararla entre las direcciones 256 a 511 y adems debe escribirse :2 despus del nombre de la variable, por ejemplo VAR3:2. El 2 indica el nmero de bytes que componen la variable, en efecto, una variable tipo byte tambin podra declararse como VAR1:1. En ciertas aplicaciones en las cuales se requiera direccionamiento indirecto (tcnica de programacin mediante la cual accedemos al contenido de una variable mediante su nmero de direccin en memoria y no a travs de un nombre con el mtodo tradicional del CBLOCK) es de utilidad declarar una o ms variables en una direccin especfica de la RAM. Por ejemplo: si el usuario necesita declarar 200 variables tipo byte en las direcciones 1000 a 1199 podra pegar el siguiente cdigo al inicio del bloque 3 de LPM:

41 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PROGRAMACIN EN EL BLOQUE 4 DE LPM (BLOQUE4)


DECLARACION DE CONSTANTES, DEFINICION DE BANDERAS (FLAGS) Y MACROS EXTRAS DEL PROGRAMA DE USUARIO La programacin en este bloque es opcional, slo persigue facilitar la programacin mediante asignar nombres propios a constantes, banderas (flags) o macros del programa. Una CONSTANTE es una expresin que no cambia su valor en todo el cdigo fuente de un programa. Puede tener tantos formatos como las variables. Para declarar una constante llamada MAX_TEMP como el decimal 50 basta con igualar un nombre de dicha palabra al valor, por ejemplo: MAX_TEMP = 50 CARCTER= A MAXIMO = H4A5F MAXIMO = B00011100 ;constante Decimal ;constante Ascii ;constante Hexadecimal ;constante binaria de 8 bit

Nota: el nombre de la constante debe escribirse en la primera columna como si fuera una etiqueta. BANDERA (FLAG): Una bandera podra verse como una variable booleana (slo toma dos valores: 0,1). En LPM y ASSEMBLER una bandera del programa de usuario se declara con la MACRO BANDERA y se asigna a un BIT de una variable definida por el usuario. El nombre de la bandera es escogido por el diseador y usualmente su significado est relacionado con la funcin que cumplir en el programa. Por ejemplo, si se est diseando una alarma y se desea dejar constancia (para posteriores verificaciones) que la alarma est activada, podra definirse un Flag de la siguiente forma en el bloque 4 de LPM: BANDERA FLAG_ALARMA_ON FLAG1,0

Donde FLAG_ALARMA_ON es el nombre arbitrario que el programador define para el Flag, FLAG1,0 alude al bit 0 (LSB) de una variable de 8 bit llamada FLAG1 y declarada en el bloque 3 de LPM. La variable FLAG1 debe ser necesariamente tipo byte. Con la directiva MACRO se define una MACRO llamada PULSO_LUZ, es decir, del bloque 6 en adelante al escribir en la segunda columna (columna de instrucciones y macros) la palabra PULSO_LUZ, automticamente se insertarn los tres renglones que componen la macro. Ntese que una macro es diferente a una subrutina la cual se invoca con CALL y se regresa con RETURN.

42 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PROGRAMACIN EN EL BLOQUE 5 DE LPM


CONFIGURACIN MANUAL DE PUERTOS, REGISTROS ESPECIALES (SFR), ASIGNACION Y CONFIGURACIN MANUAL DE PINES DE ENTRADA/SALIDA En este bloque se ofrece la posibilidad al usuario de realizar una configuracin manual y personalizada (custom) de los puertos y registros especiales (SFR) del PIC. Los pines que un MDULO DE LPM requiera como entrada o salida se configuran automticamente. Por ejemplo, si en el bloque 1 se activo la interrupcin PTB0 no es necesario que el usuario configure manualmente el pin PTB0 como entrada. No obstante, si el usuario requiere un grupo de pines (ms de 1 pin) como entrada o salida y dicha funcin no est implementada como un mdulo especfico, entonces s debe configurar manualmente dicho pin en el bloque 5. Por ejemplo, para introducir un dato binario de 4 bit por el puerto C debe configurarse como entrada 4 bit de los 8 del puerto respectivo. En la lnea 604 de la siguiente figura se aprecia que los 4 bit externos ingresarn al microcontrolador mediante los ltimos 4 bit del puerto C (1 entrada, 0 salidas). Si lo que se requiere es la conexin de un perifrico de entrada o salida de un solo pin (por ejemplo un led, rel, sensor digital on/off, etc) la configuracin se realiza con las MACROS ENTRADA, SALIDA de LPM. Por ejemplo, en la lnea 623 y 624 se aprecia la declaracin y configuracin de una entrada llamada SENSOR_PUERTA por el pin PTB0. La macro ENTRADA automticamente configura PTB0 como entrada y asigna el nombre SENSOR_PUERTA para este pin, es decir, de esta lnea del programa en adelante puede aludirse a PTB0 con el nombre SENSOR_PUERTA y el compilador as lo interpretar. En la lnea 625 se realiza la declaracin y configuracin de la salida LED_POWER al pin PTE0. La macro SALIDA automticamente configura PTE0 como salida, inicia el pin en cero lgico y asigna el nombre LED_POWER a PTE0 de aqu en adelante. Por ejemplo si en el bloque 6 (subrutinas iniciales del programa) se desea que el led inicie encendido el cdigo es: ON LED_POWER.

43 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


En la figura anterior se observa la configuracin por defecto (default setting) del registro ADCON1 (lnea 616), esto se debe al puerto A y puerto E, los cuales requieren el valor (6 7 = 110b 111b) en el registro ADCON1 para comportarse como entradas o salidas digitales y no como entradas analgicas. Si la aplicacin se disea en su totalidad con los mdulos de programacin modular entonces no es necesario programar en el bloque 5 de configuracin manual, no cambie los valores que trae por default el Formato Gral.asm en este bloque. Si un puerto o registro especial (SFR) pertenece a un mdulo activo en el bloque 1 entonces prevalecer la configuracin automtica establecida en el bloque 2 sobre la configuracin manual en el bloque 5 de los registros especiales. Por ejemplo, si activ el CONVERSOR CAD en el bloque 1 y se configur en el bloque 2 como una entrada analgica y 7 digitales (A1_D7) entonces esta configuracin prevalecer sobre cualquier modificacin que el usuario establezca manualmente en el registro ADCON0 Y ADCON1 del bloque 5. Cabe destacar que si no se activa el mdulo CONVERSOR CAD todos los pines del puerto A y E estn configurados por defecto como entradas digitales. Lo mismo ocurre con el resto de puertos (B,C,D), es decir, si no son configurados en el bloque 1 2, todos los puertos y pines del PIC estn configurados por defecto en el bloque 5 como entradas digitales.

44 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PROGRAMACIN EN EL BLOQUE 6 DE LPM


DESARROLLO DE CONDICIONES INICIALES DEL PROGRAMA DE USUARIO En este bloque se desarrollan las acciones iniciales que el microcontrolador ejecutar (slo una vez) al resetear o energizar el circuito. dichas acciones estan relacionadas con mensajes de bienvenida, inicializacion de puertos, variables, banderas, etc. Las interrupciones activadas en bloque1 slo estarn disponibles funcionalmente al salir del bloque 6, se habilitan mediante la macro "ACT_INT_HIGHP" Y "ACT_INT_LOWP". Por ejemplo, si la aplicacin requiere que al energizar el microcontrolador (aplicar +5VDC o presionar el pulsador de Reset Master Clear del pin 1) el puerto C configurado previamente como salida tenga el dato binario B11110000 se programara el bloque 6 de la siguiente forma:

Observe que adems de garantizar un estado en en puerto C (PTC) inicialmente, tambin se resetea la variable VAR1, se enva el mensaje BIENVENIDOS A LPM al LCD y se reproduce el mensaje 1 en modo interrumpido (MI) del ISD 25XXX; todo esto slo suceder una vez, es decir, al energizar o resetear el microcontrolador. En el recuadro azul de la ilustracin anterior se observan 5 renglones (lnea 5757 a 5762) en los cuales se configuran las condiciones iniciales de 5 funciones muy importantes del PIC, a saber: WATCH DOG (control del perro guardian) PULL UP (control de la resistencia pull up de 3kohm aproximadamente a +vcc en los pines de entrada del puerto B) PRIORITY INTERRUPTION (activacion/desactivacion de la prioridad de interrupciones) INT HIGH PRIORITY (control de interrupciones de alta prioridad high priority) INT LOW PRIORITY (control de interrupciones de baja prioridad low priority)

45 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCIO N 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PROGRAMACIN EN EL BLOQUE 7 DE LPM


DESARROLLO DEL PROGRAMA PRINCIPAL (MAIN PROGRAM) Aqu se desarrolla el programa principal del usuario despus de la etiqueta MAIN_PROG. Por ejemplo, si se requiere aplicar el mtodo polling (sensado cclico de una entrada o sensor) es en este bloque donde se realiza. En este bloque es donde permanecer el puntero de programa (Pointer program) del PIC todo el tiempo que no est ejecutando una subrutina de interrupcin. Si se desea que el PIC entre en modo STAND BY (bajo consumo de energa alrededor de 200nA) se debe digitar la instruccin SLEEP justo antes de la instruccin BRA MAIN PROG y despus de la etiqueta MAIN PROG.

46 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PROGRAMACIN EN EL BLOQUE 8 DE LPM


CONTROL AUTOMATICO DE INTERRUPCIONES DE ALTA Y BAJA PRIORIDAD Es quiz el bloque ms importante considerando que aqu se lleva a cabo la seleccin y asignacin de funciones dependiendo del evento de interrupcin. Al desencadenarse una interrupcin interna o externa, de alta o baja prioridad (dependiendo de la configuracin en el bloque 1), el puntero de programa (pointer program) llegar automticamente a la etiqueta de la interrupcin respectiva. Diversas fuentes de interrupcin externa e internas son detectadas automticamente en el bloque 8. A continuacin se muestra una aplicacin en la cual se conmuta el estado de un led en PTA0 (LED_STATE) por 7 fuentes distintas de interrupcin: 1. ORG12_INT_TMR0: Cuando se desborda el temporizador TIMER0 configurado en el bloque 1 y 2 2. ORG13_INT_TMR1: Cuando se desborda el temporizador TIMER1 configurado en el bloque 1 y 2 3. ORG14_INT_RXUART: Cuando se recibe la letra A por interrupcin UART RS232 4. ORG15_INT_1_IR: Cuando el PIC recibe la tecla grabada en la posicin 17 desde un sensor infrarrojo. 5. ORG20_INT_1_TECPS2: Cuando el PIC recibe la tecla F1 desde el teclado PS2 configurado en el bloque 1 y 2. 6. ORG25_INT_TEC_4X4: Cuando el PIC recibe la tecla 6 de un teclado matricial 4x4 4x3 configurado en el bloque 1 y 2. 7. ORG26_INT_DECOD_DTMF1: Cuando el PIC recibe el tono DTMF 8 procedente de un celular o lnea Telefnica.

Note el uso de la macro OUT_IF para terminar un ciclo de comparacin con la macro IF y el uso de la macro OUT_INT la cual es imprescindible para salir de cada fuente de interrupcin. El gestor automtico de interrupciones de LPM controla los bit de habilitacin y banderas de cada interrupcin.

47 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PROGRAMACIN EN EL BLOQUE 9 DE LPM


DESARROLLO DE SUBRUTINAS Y TABLAS DEL PROGRAMA DE USUARIO Aqu se desarrollan las subrutinas varias del programa y tablas en memoria de programa. Hasta este bloque compilar MPASM cdigo de assembler que ser cargado en la memoria de programa del PIC. Recuerde que las tablas no tienen limitacin alguna en su extensin (hasta completar la memoria de programa disponible).

En la figura anterior se ilustra la creacin de 2 subrutinas (SUBRUTINA1 Y SUBRUTINA2), note que deben terminar con la instruccin RETURN de assembler. TABLA1 y TABLA2 son dos tablas en memoria de programa realizadas con la directiva DATA. La directiva DATA es ms ptima que la directiva DT (Data Table).

48 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PROGRAMACIN EN EL BLOQUE 10 DE LPM


ESCRITURA EN LA MEMORIA EEPROM DE DATO EN TIEMPO DE DISEO En este bloque se escriben los datos predefinidos en la memoria EEPROM de dato del PIC en el momento de cargar el cdigo mediante el hardware cargador. Recuerde que slo hay disponible 256 direcciones de 8 bit de datos. En el ejemplo de la siguiente figura se guardan datos en el siguiente orden: Direccin Direccin Direccin Direccin Direccin 0: Cdigo ASCII de la letra A 1: Cdigo ASCII de la letra B 2: Cdigo ASCII de la letra C 3: Nmero 1 en decimal 4: Nmero 200 en decimal

El bloque 10 es el ltimo bloque del modelo de programacin modular, est seguido de la directiva END que indica el fin total del programa.

49 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

COMPILACIN EXITOSA DE UN PROYECTO LPM


Presionando la tecla F5 se compila (generacin del archivo .HEX hexadecima) mediante el aplicativo MPASM de microchip. La siguiente pantalla debe aparecer con cero errores, cero warnings (advertencias) y 2 mensajes.

50 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

INSTALACION DEL APLICATIVO SOFTWARE LIBRE CARGADOR DE CODIGO EN MICROCONTROLADORES WINPIC 800

51 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

CONFIGURACIN DE WINPIC 800 A HARDWARE JDM


D clic en el icono sealado por el crculo rojo

52 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

DETECCIN AUTOMTICA DE MICROCONTROLADOR


D clic en el icono sealado por el crculo rojo

53 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

IMPORTACION DE ARCHIVO .HEX A CARGAR EN EL PIC


D clic en el icono sealado por el crculo rojo

CARGAR (DOWNLOAD lase daunloud) CODIGO HEXADECIMAL EN PIC


D clic en el icono sealado por el crculo rojo

54 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

VERIFICACION DE CODIGO EN MEMORIA DE PROGRAMA DEL PIC


D clic en el icono sealado por el crculo rojo

LECTURA (UPLOAD lase aploud) DE CODIGO HEXADECIMA DEL PIC


D clic en el icono sealado por el crculo rojo

55 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

BORRADO (ERASER) DE MEMORIA DE PROGRAMA DEL PIC


D clic en el icono sealado por el crculo rojo

MEMORIA DE DATO EEPROM DEL PIC


D clic en el icono sealado por el crculo rojo

56 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

BIT`S DE CONFIGURACIN DEL PIC


D clic en el icono sealado por el crculo rojo

57 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

INFORMACION GENERAL DE LPM


1. Esta versin de LPM solo es compatible con el microcontrolador 18F 242/252/442/452, no obstante, debe tener en cuenta la limitacin en nmero de pines, memoria RAM y memoria de programa que implica la serie 18F 242/252/442. Esta serie de microcontroladores trabaja con tensiones de 2 a 5.5 voltios y corrientes de 20nA (stand by) hasta 20mA (PLL activado). Se recomienda trabajar con la serie 18F452 para disponer el mximo de prestaciones de LPM. LPM slo soporta cristales de 4MHz,8MHz,10MHz,16MHz,20MHz 40MHz. Para trabajar con 40MHz LPM activa automaticamente el modo PLL (multiplica por 4 la frecuencia del cristal fsico) y el usuario debe insertar un xtal de 10MHz en el circuito. 2. Programar siempre con mayuscula fija, los comentarios estn en verde y empiezan con punto y coma (;). El nombre de la carpeta contenedora del proyecto no debe incluir caracteres especiales como punto, comas, punto y comas, asteriscos, guiones altos, no debe iniciar con un caracter numrico ni debe exceder 45 caracteres alfanumricos. Si un comentario, macro o instruccin se torna de color negro es indicacion que en dicha lnea o rengln se digit un caracter invlido, elimine toda la lnea y vuelva a digitarla pues algunos caracteres invlidos no tiene representacin grfica de manera que el usuario no puede percibir su presencia pero el programa ensamblador "MPASM" genera error o warning. 3. Configuracin del editor MPLAB 7.10: (Se recomienda trabajar con esta versin) a. Menu edit -> properties -> editor -> activar: line numbers print line numbers enable color printing enable variable mouse over values show addrres in mouse over b. Menu edit -> properties -> text-> selec font -> courier new - negrita - 12 c. Menu edit -> properties -> size-> tab size:16, default...: 76, gutter size : 7 d. Menu debugger -> select tool -> none e. Menu configure -> select device -> device : 18f452 f. Menu configure -> settings -> workspace -> yes, activar reload last work space recent file:10, recent workspace:4 g. Menu configure -> settings -> command -> mplab quickbuild -> hot key combinat:f5 h. En el escritorio d click derecho -> propiedades -> configuracin -> resolucion de pantalla : 1024 x 768 i. Activacion del simulador de mplab ide: menu debugger -> selec tool: mplab sim 4. Al simular en proteus no olvide configurar como "no" la opcion enable watch dog timer? En la ventana de configuracin del pic 18fxx2, de lo contrario la simulacion se reseteara automaticamente por watchdog timer. 5. No se permite la activacin de las dos prioridades simultneamente para una misma fuente de interrupcin en el bloque 1. 6: La interrupcin ptb0, ptb1 y ptb2 no admite la activacion de dos flancos simultneamente. 7: La interrupcin ptb4, ptb5, ptb6 y ptb7 si admite la activacin de dos flancos simultneamente 8. El puerto ptb0 slo tiene disponible interrupcin en alta prioridad.

58 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


9. En LPM y assembler se programa con base en columnas y estn separadas por tabulacin TAB 10. Primera columna: van las etiquetas (label) y nombre de subrutinas. Cuando una etiqueta no se encuentra en la primera columna se genera el warning : warning[207]: found label after column 1. (nombre de etiqueta) 11. Segunda columna: van las macros e instrucciones (mnemnicos o comandos de assembler) 12. Tercera columna: van los argumentos(parametros u operandos) de los comandos de assembler o de las macros de LPM. Los argumentos de los comandos van separados por comas (,). 13. Cuarta columna: van los comentarios de cada lnea, inician con punto y coma () 14. Las etiquetas, macros y argumentos son de color rojo carmesi. Se sugiere llamar las funcion y el bloque en que se encuentren. etiquetas segn la

15. Las instrucciones de assembler y directivas del editor son de color azul 16. Mediante "CONTROL F" del teclado se busca los bloques del 0 al 10: por ejemplo,para saltar al bloque 0 se escribe BK0 y enter. Para buscar las macros de un modulo se escribe la letra m seguida del nombre del modulo, por ejemplo, para buscar un mdulo llamado Teclado se escribe mteclado y enter. Para buscar las instrucciones de assembler se escribe "iass" y enter. 17. Mediante "CONTROL G" del teclado se busca una lnea. Por ejemplo,para saltar a la linea 2000 escriba este nmero en la caja de texto emergente y presione enter. 18. Para ensamblar el codigo fuente, es decir, crear el archivo .hex que se cargara en el microcontrolador se presiona (F5), si no se presentan errores entonces el compilador MPASM de MPLAB IDE mostrar el mensaje: "BUILD SUCCEEDED", (lase biold saccirid) de lo contrario mostrar el mensaje "FAILLED BUILD" (lase fild biold) y el usuario debe corregir los errores mediante edicion del FORMATO GENERAL.ASM 19. Si activa el modulo UART,RECEPTOR IR,TMR0/1,PWM,POWER AC, MOTOR PASO PASO O TEC_PC se debe deshabilitar el modo SLEEP en bloque 7. 20. No usar la instruccion GOTO BRA con la directiva ($ + contante) para saltar a un rengln anterior o posterior despus de una macro, pues el usuario no tiene conocimiento de cuntas instrucciones de assembler componen la macro. 21. Al ensamblar se genera una pantalla de salida (output) en la cual se generan mensajes, warning y/o errores. Solo los errores impiden la generacin del archivo .HEX (codigo de mquina hexadecimal que se cargara en la memoria de programa del microcontrolador y se denomina firmware). Los mensajes son informes generales, los warning son advertencias que si bien no son errores, si deben corregirse pues el ensamblador podra interpretar los argumentos de un comando o macro de una forma inesperada para el usuario. 22. La configuracin automatica que realizan los modulos de LPM sobre los registros especiales SFR del pic tiene prioridad sobre la configuracin manual que realice el usuario en el bloque 5. 23. Tener precaucin al invocar un mismo mdulo o perifrico en baja y alta prioridad simultneamente, por ejemplo, si el puntero de programa est en la subrutina de escritura en lcd en main programa o baja prioridad y se desencadena un llamado de interrupcion de alta prioridad entonces el usuario no debera escribir en la lcd desde la alta prioridad pues interrumpira el proceso de escritura iniciado en baja prioridad y como consecuencia se presenta un conflicto o perdida de datos en el proceso. Lo mismo es aplicable al teclado PS2, BUS I2C, RECEPTOR INFRAROJO,SIPO 4015B, PISO 4021B, UART, CAD, ISD 25XXX. 24. Para saber el nmero de memoria de programa consumido en un programa primero debe compilar exitosamente para obtener el archivo ".hex" con la tecla F5. A continuacin dirjase a: menu view -> program memory, desplcese por la primera columna (line) de la ventana emergente y en la columna disassembly observe cuando inicia la serie repetitiva de instrucciones "nop" lo cual implica el inicio de las direcciones desocupadas en la memoria de programa del pic.

59 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


25. La memoria de programa disponible del pic 18F452 es de 16384 words, es decir, que el usuario puede digitar hasta 16384 lneas o renglones si programa exclusivamene en lenguaje ensamblador. Sin embargo, considerando que cada comando o macro de LPM puede incluir una o ms instrucciones de assembler entonces si el usuario emplea macros de LPM el nmero total de lneas del programa debe ser menor a 16384 dependiendo de la macro empleada. 26. La memoria de dato RAM disponible del pic 18f452 es de 1536 byte, es decir, que el usuario dispone de 1536 variables tipo byte si programa exclusivamene en lenguaje ensamblador. Sin embargo, considerando que los modulos automticos de LPM pueden requerir una o ms variables entonces si el usuario emplea macros o mdulos de LPM el nmero total de variables disponibles para el programador se reducen segn la clasificacion expuesta en la cabecera del bloque 3. 27. Se recomienda emplear el programador "JDM SERIAL" o un PROGRAMADOR USB GENRICO para cargar el codigo de mquina en la memoria de programa del microcontrolador. Como software interfaz se recomienda "WINPIC800" o en su defecto "IC-PROG". 28. El nombre de una etiqueta (label) relacionada con un proceso debera declararse con la siguiente estructura: (LBL + NOMBRE + INDICE), por ejemplo una etiqueta en interupcion por timer0 del bloque 8 debe llamarse: LBL_TMR0_1, LBL_TMR02,... etc. 29. El nombre de una variable como contador (counter) relacionada con un proceso de temporizacin debera declararse con la siguiente estructura: (CNT + PROCESO + INDICE) por ejemplo: CNT_PROCESO_1, CNT_PROCESO_2,... etc. 30. El nombre de una bandera (flag) relacionada con un proceso debera declararse con la siguiente estructura: (F + PROCESO + INDICE) por ejemplo: F_PROCESO_1, F_PROCESO_2,... etc 31. El nombre de una subrutina relacionada con un proceso debera declararse con la siguiente estructura: (SUB + PROCESO + INDICE) por ejemplo: SUB_PROCESO_1, SUB_PROCESO_2,... etc 32. El llamado de una subrutina se puede realizar con la instruccin de assembler llamada "CALL". Sin embargo existe otra instruccin llamada "RCALL" (relative call) la cual consume menos memoria de programa (slo 1 word) que "call". El usuario deberia usar "rcall" siempre que la subrutina invocada est a menos de 1024 renglones por encima o por debajo de la invocacin. Si el usuario empleara "rcall" en un salto mayor a 1024 renglones el compilador mpasm genera el error [126] "argument out of range" indicando que debe cambiarse por "call" la respectiva invocacin de subrutina. 33. El salto a una etiqueta se puede realizar con la instruccin de assembler llamada "GOTO". Sin embargo, existe otra instruccin llamada "BRA" (BRANCH) la cual consume menos memoria de programa (slo 1 word) que "GOTO". El usuario deberia usar "bra" siempre que la etiqueta destino est a menos de 1024 renglones por encima o por debajo de la orden de salto. Si el usuario empleara "bra" en un salto mayor a 1024 renglones el compilador mpasm genera el error: error [126] "argument out of range" indicando que debe cambiarse por "goto" el respectivo salto. 34. Verifique que no se repitan los pines asignados en el bloque 2 para cada uno de los mdulos, excepto los mdulos que pueden compartir pines de control como los 4 datos de LCD y las 4 salidas del teclado MATRICIAL 4X4. 35. Verifique que los pines asignados en el bloque 2 no se repitan con los pines extras asignados en el bloque 5. En ciertas aplicaciones el usuario requerir renombrar o utilizar un pin asignado a algn mdulo en el bloque 2, en tal caso tenga la debida precaucin en el programa. 36. Si el programa ensamblador "MPASM" detecta un error en una macro o instruccin de assembler y despues de una verificacion exhaustiva de la sintaxis, el comando y los argumentos el usuario llega a la conclusion que no hay error pero "MPASM" sigue generando error o warning entonces ubique la macro o lnea del error en cuestion, elimnela y vuelva a escribirla. Muchas veces el usuario inserta el caracter (alt 255) con el teclado numrico, ste es un caracter prohibido e invisible para el editor MPLAB IDE, de manera que el usuario no percibe la presencia del caracter extra pero el ensamblador "MPASM" s genera error o advertencia tales como error[113] symbol not previously defined ( ) error[112] missing operador.

60 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


37. Si el usuario digita alguna variable o registro destino de los modulos por interrupcion tales como REG_TECIR, REG_RXUART, REG_RXDTMF1,REG_TECMAT, REG_TECPS2 y el ensamblador "mpasm" genera el error[113] symbol not previously defined (REG_TECIR) indica que no se ha activado el modulo respectivo en el bloque 1. 38. Si en una macro que espera una variable por argumento el usuario digita un nmero o constante, entonces el ensamblador "mpasm" no genera error e interpreta el comando como si el nmero o constante representara la direccin de la variable. Por ejemplo, si en el bloque 3 el usuario declar la variable VAR1 en la direccin 4 entonces MOVLF 5,4 ;significa mueva la constante 5 a VAR1, es decir, VAR1=5 39. Si en una macro que espera una constante por argumento el usuario digita una variable declarada en el bloque 3, entonces el ensamblador "mpasm" no genera error e interpreta el comando como si la direccin de la variable representara el valor de la constante: por ejemplo, si en el bloque 3 el usuario declar var1 en la direccin 4 entonces MOVLF VAR1,VAR2 ;significa mueva la direccin de VAR1 (el # 4) a VAR2, es decir: VAR2 = 4 sin importar el valor del dato guardado en VAR1. 40. Una subrutina en el bloque 9 se invoca con la instruccin CALL RCALL de assembler y se retorna con la instruccin RETURN de assembler. 41. Una interrupcin en el bloque 8 se invoca con un evento externo o interno (PTB0, PTB1, PTB2,PTB4 A PTB7, TMR0, TMR1, RX UART, etc) y se retorna con la macro OUT_INT O OUT_IF de LPM. Recuerde que OUT_IF slo se puede emplear como argumento en una macro de comparacin IF en el bloque 8. Constituye un error de desbordamiento de pila (overflow stack) el emplear OUT_IF como argumento en una comparacin que no est en el bloque 8. 42. Mediante las macros CLR_ALL_RAM_GPR y CLR_PORTS en el bloque5 se garantiza que todas las variables de memoria RAM del PIC y los puertos configurados como salida inician en cero. 43. Los errores y advertencias (warning) que se presenten al compilar el archivo formato gral.asm se deben corregir en el mismo orden en que aparecen, corrija uno por uno y vuelva a compilar despues de cada correccin pues es posible que los errores o warnings subsiguientes se solucionen con la correccin del error o warning anterior. d doble clik sobre el error o warning y el editor mplab ide indicar el rengln relacionado con el error. tenga precaucin al tratar de corregir el error pues muchas veces el editor abrir el archivo MACROS.INC, SUBRUTINAS.INC PIC18F452.INC, estos 3 archivos no se deben modificar. el procedimiento correcto es anotar la macro o subrutina implicada en el error y cerrar estos 3 archivos. a continuacin se debe buscar la macro o subrutina implicada en el formato gral.asm y corregir el error o advertencia. 44. Corrija primero los errores o warning que empiecen con la palabra "LPM",por ejemplo: ERROR[101] (LPM: LA MACRO SETUP_M_PASO1 REQUIERE LA ACTIVACIN DE: ... 45. Los mensajes (message) despues de una compilacion no implican error o advertencia, son principalmente informativos o sugerencias.

61 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PUNTUACION Y REQUISITOS PARA EL INFORME DE PROYECTOS


Todo proyecto LPM se presenta en la respectiva carpeta contenedora en la cual debe encontrarse el archivo "FORMATO GRAL.ASM", "MACROS.INC", "SUBRUTINAS.INC", "PIC18F452.INC". Tambien debe estar la carpeta "INFORMACION DEL PROYECTO" en la cual se encuentra el archivo FORMATO IEEE.DOC y las carpetas SIMULACION PROTEUS Y PLANO EAGLE/ORCAD. El nombre de la carpeta contenedora no debe exceder 45 caracteres y debe seguir el siguiente for formato: ORDEN DEL PROYECTO + NOMBRE DEL PROYECTO + NOMBRE DEL GRUPO + NOMBRE EMPRESA. Por ejemplo: si va a presentar el primer proyecto del semestre llamado "semaforo inteligente" por la empresa "DIGISOFT ELECTRONIC" del grupo digitales 3A, entonces la carpeta debe llamarse "P1 SEMAFORO INTEL DIG3A DIGISOFT ELECTRONIC". El no nombrar la carpeta segn el formato establecido anteriormente da lugar a una infraccin. Los incisos del siguiente listado se deben presentar en un CD-ROM en el formato establecido por LPM, es decir, dentro de una carpeta contenedora con el nombre del proyecto. La calificacion es cuantitativa de 0 a 5 puntos. Los planos esquemticos y board se pueden disear en orcad u otro programa de diseo asistido por computador. La nota obtenida es grupal, no obstante, la nota de la sustentacin es individual. 1. Simulacion del circuito en proteus (traer plano impreso) 2. PLANOtico en eagle u orcad con descripcion y valor de componentes 3. Diseo de board en eagle u orcad con descripcion y valor de componentes 4. Presentacion del hardware funcionando al 100% 5. Sustentacion de software y hardware (vr 0.5 p) (vr (vr (vr (vr 0.25 p) 0.25 p) 1.0 p) 3.0 p)

METODOLOGA DE SUSTENTACION DEL PROYECTO


1. Todo proyecto consta de funciones u opciones explcitas que previamente el docente debe proporcionar a cada uno de los grupos de estudiantes. El tiempo de entrega sera estipulado por el docente dependiendo de la dificultad del proyecto. 2. El docente har 3 preguntas a cada integrante del grupo individualmente. Cada pregunta tiene el valor de 1 punto. Si un integrante no sabe la respuesta o contesta incorrectamente el docente puede (si lo considera apropiado) redirigir la pregunta a otro integrante del grupo. La respuesta del estudiante debe ser concisa, clara y entendible, de lo contrario, el docente subjetivamente otorgar una calificacion proporcional al grado de satisfaccin de la respuesta. 3. El puntaje mximo en la sustentacin es de 3 puntos. 4. El docente preguntar cualquier aspecto del software o hardware realizado por los diseadores. Las preguntas se tomaran de la temtica desarrollada en clases en el transcurso del semestre, del documento DIGIBOOK, de la ayuda proporcionada en el formato general o de investigacion que el docente previamente halla asignado a los estudiantes. 5. El tiempo mximo de sustentacin por grupo es de 20 minutos a menos que el docente indique lo contrario. 6. Cuando en diferentes proyectos se cometa la misma infraccin, la sancin es el doble por cada nuevo proyecto.

62 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

INFRACCIONES EN PRESENTACION DE UN PROYECTO


Cada infraccion vale 1 dcima (0.1 punto) a menos que se indique lo contrario 1. El retraso en la entrega del proyecto tiene una sancion del 10% de la nota, es decir, 0.5 puntos por da calendario. 2. Los planos, conexiones y referencia de los dispositivos deben ser exactos, de tal forma que una persona ajena a los realizadores del proyecto sea capaz de implementar el hardware a cabalidad. Cada imprecisin en los planos, error en los PLANOs o ausencia de referencia comercial de los elementos o dispositivos da lugar a una infraccin. 3. El no presentar el cd-rom con los archivos del proyecto da lugar a una infraccion. 4. La presentacin del proyecto en un formato u organizacion diferente a la estipulada da lugar a una infraccin. 5. La ausencia de comentario en el codigo fuente digitado por el diseador da lugar a una infraccin por cada lnea 7. La ausencia del (led_power) led indicador de power (alimentacin de +5vdc del circuito) da lugar a una infraccin. 8. La ausencia del (led_state) led indicador de estado del pic da lugar a una infraccin. 9. Cada conductor descubierto con posibilidad de shock elctrico al usuario o corto en el circuito da lugar a una infraccin 10. Cada led sin resistencia limitadora (220 a 2k) da lugar a una infraccin. 11. Cada rele sin su debida etapa de potencia, diodo protector contra corrientes inversas o sin led piloto indicador de estado genera una infraccin. 12. Las conductores de tierra (gnd) deben ser todos del mismo color (negro, blanco, gris) cada conductor con color errneo genera una infraccin. 13. Las conductores de +vcc, +vdd = 5v deben ser todos del mismo color (rojo, naranja) cada conductor con color errneo genera una infraccin. 14. Las conductores de +vcc = 12v deben ser todos del mismo color (amarillo) cada conductor con color errneo genera una infraccin. 15. Las conductores de conexion entre perifericos del circuito pueden tener distintos colores dependiendo del perifrico (verde, azul,blanco/azul, blanco/verde, etc) cada conductor con color errneo genera una infraccin. 16. Cristal, condensador de estabilizacin o bypass lejanos (ms de 1 cm) al circuito Cada caso genera una infraccin. integrado que lo requiere.

17. Todo circuito requiere un filtro para la fuente de alta capacitancia (mayor de 1000 uf), la ausencia de dicho filtro da lugar a una infraccion. 18. Integrados en diferente disposicin u orientacin con respecto a un observador. infracccin. cada caso genera una

19. Fuente sin regulador de voltaje a 5 voltios da lugar a una infraccion. 20. Fuente sin tabulacin de voltaje y corriente de cada una de sus terminales. Cada caso genera una infracccin. 21. El no usar las lneas verticales del protoboard para los terminales de alimentacin +vcc, gnd genera una infraccin 22. Cada puente o conexin en el protoboard con conductores cruzados formando ngulos diferentes a 0 90 grados, demasiado largo o demasiado corto da lugar a una infraccin.

63 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


23. Una presentacin general de hardware sin esttica o desordenada da lugar a una infraccion. 24. Cada mensaje de un isd con bajo volumen o audio tan distorsionado que no se pueda mensaje da lugar a una infraccion. percibir o discernir su la sustentacin del

25. El no llevar un hardware cargador de codigo en microcontroladores (jdm por ejemplo) a proyecto da lugar a una infraccin. 26. La ausencia de fuente de alimentacin, extensin elctrica multitoma, elemento o propio del proyecto en el momento de la sustentacin da lugar a una infraccin.

dispositivo de hardware

27. La no implementacin cabal u operacin incorrecta de alguna funcin del proyecto estipulada por el docente, da lugar a una sancin equivalente a 5 puntos entre el nmero total de funciones asignadas inicialmente por el docente . Por ejemplo si el docente asigno 10 funciones para un proyecto entonces la sancin es de 5/10 = 0.5 puntos por cada funcion no implementada o con mal funcionamiento. 28. Enchufes, tomacorrientes o conductores en mal estado dan lugar a una infraccin 29. Dispositivos o elemetos electronicos con terminales exageradamente largos pueden causar efecto antena (mayor susceptibilidad al ruido electromagntico),por ejemplo una resistencia o condensador con terminales extra largos cercanos a una etapa de alta frecuencia como el xristal oscilador del microcontrolador. Cada caso genera una infracccin. 30. Cada uno de los conductores, alambres o puentes de protoboard por encima o debajo de circuitos integrados genera una infraccin. 31. Fuente sin switch general de encendido o con terminales al aire con la posibilidad de corto circuito genera una infraccin. 32. Cada error ortogrfico en el texto digitado en el formato general por parte de los diseadores genera una sancion de 0.2 dcimas, es decir, cada 5 errores ortogrficos da lugar a una infraccin. 33. Grupo de trabajo sin razn social, nombre de empresa, estructura jerrquica (presidente, gerente financiero, gerente tcnico) da lugar a una infraccion. 34. Da lugar a infraccin todo nombre de subrutina, etiqueta, bandera o contador sin la estructura correcta. Por ejemplo, toda subrutina debe empezar por "sub", las etiquetas por "LBL", los contadores por "cnt", las banderas por "f_". 36. Da lugar a una infraccion los protoboard's endebles por no estar unidos con una plataforma resistente. 37. el mensaje de bienvenida en lcd y/o isd debe expresar el nombre de la empresa, nombre del proyecto, nombre de integrantes con estructura jerarquica (presidente, gerente tcnico, gerente comercial, gerente financiero). 38 LCD sin back light activado con resitencia limitadora. 39 Proyecto sin ayuda interactiva por LCD o ISD. 40 El no traer caja de herramientas con multimetro, cautin, pinzas, puentes, etc a la sustentacin.

64 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

FORMAS DE SUBIR LA NOTA


Si los diseadores implementan una opcion o funcion extra al hardware o software de talForma que mejore las prestaciones del proyecto entonces subir en dos dcimas la notaFinal del grupo por cada aspecto mejorado. Entindase funcion extra como adiciones que realizan de manera voluntaria los diseadores a las exigencias o funciones que inicialmente estipul el docente. En todo caso el grado de mejoramiento de un proyecto es una consideracin subjetiva y comparativa que realizar el docente con base en el grado de novedad, ingenio, indepencencia y recursividad de cada grupo. Los aspectos que se pueden mejorar son: 1. 2. 3. 4. 5. Reduccin de precio del hardware en mas del 20% Reduccin del consumo de potencia del hardware en mas del 20% Reduccion de memoria de programa del microcontrolador en mas del 20% Reduccion de memoria de dato del microcontrolador en mas del 20% Reduccion de elemetos y/o dispositivos de hardware en mas del 20%

6. Reduccion de espacio de hardware en mas del 30% 7. Aumento del tiempo de garanta del hardware mediante la seleccin o diseo meticuloso de los elememtos que lo integran en mas del 50%. 8. Aumento de posibilidades comerciales mediante la implementacin de opciones especificas a una aplicacin o cliente en particular. 9. Mejoramiento significativo de la interfaz hombre maquina amigable mediante texto, audio o video. 10. Consultar al docente que tipo(s) de mejora considera podra implementarse.

65 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

SOLUCIN

DE PROBLEMAS DE HARDWARE

FUENTE DE ALIMENTACION EN MAL ESTADO: verifique con un voltimetro en el protoboard o circuito impreso que la tensin entre los pines de alimentacion del pic (vdd = 11,32 y gnd=12,31) es aproximadamente +5vdc debe encender el led_power conectado entre +vcc y gnd con una resistencia de 470 a 1k. REALIZAR PRUEBA DE FILTROS DE FUENTE: al medir continuidad entre tierra y +vcc el multimetro debe sonar beep por un segundo aproxiamdamente, luego al invertir los pines de multimetro debe sonar nuevamente y as suesivamente, esto demuestra el buen estado de los filtros o condensadores de alta capacitancia VERIFIQUE CONDENSADOR DE FILTRO CON POLARIDAD INVERTIDA ENTRE VCC Y GND MICROCONTROLADOR EN MAL ESTADO: inserte el pic en el programador o cargador de codigo JDM SERIAL O USB y verifique que el software WIN PIC O IC-PROG lo reconoce. Tambin puede cargar nuevamente el codigo de maquina para garantizar que el pic esta en buen estado y que est grabado el codigo fuente (firmware) en la memoria de programa. PINES DEL PIC EN MAL ESTADO, probar con led o con pulsador MCLR,_PTB6,_PTB7, VCC, GND PINES DE PIC DOBLADOS O PARTIDOS IMPRESO EN MAL ESTADO PROTOBOARD O PISTA DE CIRCUITO IMPRESO EN MAL ESTADO FUENTE CON POCA CORRIENTE el voltaje se cae. ERRONEA O FALSA CONEXION DE PUENTES ENTRE PIC Y PERIFERICOS

SIGNIFICADO DE LOS ERRORES DEL COMPILADOR MPASM


Los errores impiden la generacin de cdigo mquina y por lo tanto es imprescindible corregirlos para poder continuar. los errores ms habituales son: - 101: (ERROR)--> ERROR DEFINIDO POR LPM. se genera por las siguientes causas: 1: al activar un mismo modulo en dos prioridades simultneamente 2: por no activar un mdulo necesario en el bloque 1 3: por activar dos mdulos que empleen los mismos puertos del pic - 102: (OUT OF MEMORY)--> Excedi el nmero de instrucciones en memoria de programa, es decir, debe eliminar algunos renglones del programa. - 105: (CANNOT OPEN FILE)--> NO SE PUEE ABRIR EL ARCHIVO, ESTA PROTEGIDO CONTRA ESCRITURA, NO EXISTE O CAMBIARON EL NOMBRE DEL ARCHIVO. - 107: ILLEGAL DIGIT --> NMERO INVLIDO, LOS NMEROS VLIDOS SON 0-1 PARA BINARIOS, 0-7 PARA OCTAL, 0-9 PARA DECIMAL, 0-9, A-F PARA HEXADECIMAL. - 108: ILLEGAL CHARACTER --> CARACTER INVLIDO EN UNA ETIQUETA O UNA VARIABLE. LAS ETIQUETAS O VARIABLES SE DEBEN DEFINIR CON LETRAS DE LA A - Z Y NMEROS 0-9, PUEDE EMPLEAR UNDERLINE (_). DEBEN EMPEZAR POR UNA LETRA. - 109: UNMATCHED ( --> ABRIO PARENTESIS Y NO CERR PARNTESIS. - 110: UNMATCHED ) --> CERR PARNTESIS SIN ABRIRLO. - 113: SYMBOL NOT PREVIOUSLY DEFINED --> USO UNA VARIABLE O CONSTANTE SIN DEFINIRLA

66 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


PREVIAMENTE. - 115: DUPLICATE LABEL --> ETIQUETA DUPLICADA EN EL PROGRAMA. - 116: ADDRESS LABEL DUPLICATED OR DIFFERENT IN SECOND PASS --> ETIQUETA DUPLICADA EN EL PROGRAMA. - 121: ILLEGAL LABEL --> HA EMPLEADO COMO ETIQUETA UNA PALABRA RESERVADA COMO HIGH, LOW, PAGE, AND BANK ARE NOT ALLOWED AS LABELS. - 122: ILLEGAL OPCODE --> MACRO O INSTRUCCIN DE ASSEMBLER MAL ESCRITA. - 126: ARGUMENT OUT OF RANGE --> USO UNA MACRO O INSTRUCCON CON UN ARGUMENTO FUERA DE RANGO. POR EJEMPLO USAR "BRA" EN LUGAR DE GOTO, O "RCALL" EN LUGAR DE CALL. - 127: TOO MANY ARGUMENTS --> MACRO O INSTRUCCIN CON MS ARGUMENTOS DE LOS REQUERIDOS. - 128: MISSING ARGUMENT(S) --> MACRO O INSTRUCCIN CON MENSO ARGUMENTOS DE LOS REQUERIDOS. - 173: SOURCE FILE PATH EXCEEDS 62 CHARACTERS --> LA RUTA DEL ARCHIVO FORMATO GRAL.ASM ES DEMASIADO EXTENSA, MXIMO 62 CARACTERES.

SIGNIFICADO DE WARNINGS DEL COMPILADOR MPASM


Advertencias (warning). estos mensajes no impiden la obtencin del archivo hexadecimal, pero advierten de algo que al ensamblador le parece extrao. Es conveniente comprobarlos todos. - 201: SYMBOL NOT PREVIOUSLY DEFINED --> USO UNA VARIABLE O CONSTANTE SIN DEFINIRLA PREVIAMENTE. - 202: ARGUMENT OUT OF RANGE --> SE GENERA AL EXCEDER EL VALOR DE UN ARGUMENTO, POR EJEMPLO INTRODUCIR UN NMERO DE 16 BIT EN LUGAR DE 8 BIT - 203, 206: FOUND OPCODE IN COLUMN 1 --> ESCRIBI UNA MACRO O INSTRUCCIN EN LA COLUMNA 1 (COLUMNA DE ETIQUETAS) - 207: FOUND LABEL AFTER COLUMN 1 --> escribi etiqueta en la columna 2 (columna de instrucciones o macros), tambien puede ser que digit incorrectamente el nombre de la instruccin o macro. - 208: LABEL TRUNCATED AT 32 CHARACTERS --> ETIQUETA O VARIABLE DEMASIADO EXTENSA (MAX 32 CARACTERES) - 209: MISSING QUOTE --> LE FALTA EL APSTROFO O COMILLA A UNA CONSTANTE BINARIA O ASCCI. - 210: EXTRA "," --> DIGIT UNA COMA DE MAS. - 211: EXTRANEOUS ARGUMENTS ON THE LINE --> ARGUMENTOS EXTRAOS - 214: UNMATCHED ( --> SE ESPERABA USO DE PARNTESIS - 219, 220, 228: INVALID RAM LOCATION SPECIFIED --> DECLAR UNA VARIABLE EN UNA DIRECCION INVLIDA

SIGNIFICADO DE LOS MENSAJES DEL COMPILADOR MPASM


MENSAJES (MESSAGE- meseich): no impiden la obtencin de cdigo de mquina .hex y aaden informacin adicional. - 301: MESSAGE --> mensaje de LPM2 - 302: REGISTER IN OPERAND NOT IN BANK 0 --> en assembler us variable que no esta en banco 0

67 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


- 305: USING DEFAULT DESTINATION OF 1 (FILE) --> Algunas instrucciones de assembler que operan con registros que necesitan como dato el destino, es decir, dnde se quiere almacenar el resultado de la operacin que realiza la instruccin. El destino es un solo bit y por tanto slo tiene dos opciones: si es "0" el resultado se almacena en w, y si es "1" es resultado se almacena en el registro con el que haya operado la instruccin (f). si no se especifica ese destino, por defecto, el editor lo toma como un "1" y almacena ese resultado en el mismo registro con el que haba trabajado.

TIPOS DE DATOS SEGN LA LONGITUD


BIT : 1 BIT : 1/0 NIBBLE : 4 BIT : 0 A 15 EN DECIMAL BASE 10 ASCII : 8 BIT : 0 A 255 EN DECIMAL BASE 10 BYTE : 8 BIT : 2 NIBBLE : 0 A 255 EN DECIMAL BASE 10 WORD : 16 BIT : 4 NIBBLE : 2 BYTE : 0 A 65535 EN DECIMAL BASE 19 DOUBLE WORD : 32 BIT : 8 NIBBLE : 2 BYTE: 2 WORD : 0 A 4.294967.296 EN DECIMAL

FORMATO DE DATOS ADMITIDOS EN ASSEMBLER Y LPM


DECIMAL : 65 = .65 = D'65' HEXADECIMAL : H'41' = 0x41 OCTAL : O'101' BINARIO : B'10000001' ASCII : "A" Nota: por defecto el editor esta configurado en modo decimal, es decir, cualquier nmero o constante es interpretado en base 10, por ej: si el usuario escribe MOVLF 32,VAR1 se interpretar como el nmero 32 en base 10 y no h'20' en hexadecimal.

CONVENCION DE SIMBOLOS PARA INSTRUCCIONES O COMANDOS DE ASSEMBLER


SIMBOLO : F8 D SIGNIFICADO :REGISTRO O VARIABLE DE 8 BIT :DESTINO DE UNA OPERACION: SI D= F VACIO ENTONCES GUARDA OPERACION EN F8 SI D= W ENTONCES GUARDA OPERACION EN REGISTRO W L8 :CONSTANTE DE 8 BIT (0 A 255) L4 :CONSTANTE DE 4 BIT (0 A 15) L12 :CONSTANTE DE 12 BIT (0 A 4095) B :BIT DE UN REGISTRO (0 A 7) S :RETORNO DE SUBRUTINA (S= 0: NO ACTUALIZA REG AL SALIR DE SUB, S = 1: SI ACTUALIZA REG AL SALIR DE SUB MODO FAST) A :BANCO DEL REGISTRO, (SI A=1 O AUSENTE-->BANCO 0) :A=0 -->REGISTRO EN BANCO DESIGNADO POR BSR (BANK SELEC REGISTER) LABEL :ETIQUETA

68 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

INSTRUCCIONES MNEMONICOS O COMANDOS DE ASSEMBLER PARA REGISTROS ORIENTADOS A BYTES


Las instrucciones, mnemnicos o comandos de assembler se indicarn en MAYSCULA Y AZUL NEGRILLA. Los argumentos o parmetros y las etiquetas o label se indicarn en MAYSCULA Y ROJO SIN NEGRILLA. Los comentarios se indicarn con minscula y verde sin negrilla. SI D=LETRA F --> guarda resultado de la operacion en el mismo registro f8 origen SI D=VACIO --> guarda resultado de la operacion en el mismo registro f8 origen SI D=LETRA W --> guarda resultado de la operacion en registro de trabajo w SI A=LETRA 1 --> para variables en banco 0 y registros especiales SI A=VACIO --> para variables en banco 0 y registros especiales SI A=LETRA 0 --> para variables en banco 1 a 5 seleccionados por registro bsr ADDWF ADDWFC ANDWF CLRF COMF CPFSEQ CPFSGT CPFSLT DECF DECFSZ DCFSNZ INCF INCFSZ INFSNZ IORWF MOVF MOVFF MOVWF MULWF NEGF RLCF RLNCF RRCF RRNCF F8,D,A F8,D,A F8,D,A F8,A F8,D,A F8,A F8,A F8,A F8,D,A F8,D,A F8,D,A F8,D,A F8,D,A F8,D,A F8,D,A F8,A F8,F8 F8,A F8,A F8,A F8,D,A F8,D,A F8,D,A F8,D,A ;suma variable con w, guarda en f/w SUMA VARIABLE CON W Y CARRY Y GUARDA EN F/W REALIZA OPERACION AND ENTRE F8 Y W, GUARDA EN F/W F8=0 COMPLEMENTA O INVIERTE LOS 8 BIT DE F8, GUARDA EN F/W SALTA UN RENGLN SI F8 = W SALTA UN RENGLN SI F8 > W SALTA UN RENGLN SI F8 < W DECREMENTA EN 1 VALOR DE F8, GUARDA CAMBIO EN F/W DECREMENTA EN 1 VALOR DE F8 Y SALTA 1 RENGLON SI F8 = 0 DECREMENTA EN 1 VALOR DE F8 Y SALTA 1 RENGLON SI F8 > 0 INCREMENTA EN 1 VALOR DE F8, GUARDA CAMBIO EN F/W INCREMENTA EN 1 VALOR DE F8 Y SALTA 1 RENGLON SI F8 = 0 INCREMENTA EN 1 VALOR DE F8 Y SALTA 1 RENGLON SI F8 > 0 REALIZA OPERACION OR INCLUSIVA ENTRE F8 Y W, GUARDA EN F/W COPIA VALOR DE F8 EN W COPIA VALOR DE VAR1 EN VAR2 MUEVE EL VALOR DE W A F8 MULTIPLICA F8 x W Y GUARDA EN PRODH:PRODL NIEGA F8 CON COMPLEMENTO A 2 Y GUARDA EN F8 ROTA F8 A LA IZQUIERDA A TRAVS DE CARRY ROTA F8 A LA IZQUIERDA A TRAVS DE SI MISMA SIN CARRY ROTA F8 A LA DERECHA A TRAVS DE CARRY ROTA F8 A LA DERECHA A TRAVS DE SI MISMA SIN CARRY

69 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


SETF SUBFWB SUBWF SWAPF TSTFSZ XORWF F8,A F8,D,A F8,D,A F8,D,A F8,A F8,D,A MOVLW ADDWF SUBLWF TSTFSZ LABEL1 LABEL2 F8 = 255 = B'11111111' RESTA F8-W CON ACARREO DE BIT CARRY DE STATUS RESTA F8-W, GUARDA EN F/W INVIERTE EL NIBBLE ALTO POR EL BAJO DE F8 SALTA UN RENGLN SI F8 = 0 REALIZA OPERACION OR EXCLUSIVA ENTRE F8 Y W, GUARDA EN F/W EJEMPLO 5 VAR1,F ;suma var1 con 5 y guarda en var1 VAR1,W ;resta var1 con 5 y guarda en w VAR1 ;si var1 = 0 salta a label2, sino a label1

INSTRUCCIONES O COMANDOS DE ASSEMBLER PARA REGISTROS ORIENTADOS A BIT (IASS)


BCF BSF BTFSC BTFSS BTG F,B,A F,B,A F,B,A F,B,A F,B,A ;establece bit b de registro f en cero ESTABLECE BIT B DE REGISTRO F EN CERO SALTA SI BIT B DE REGISTRO F ESTA EN CERO SALTA SI BIT B DE REGISTRO F ESTA EN UNO INVIERTE ESTADO DEL BIT B DEL REGISTRO F EJEMPLO ASSEEMBLER PORTA,3 PTA3 = 1 PORTC,6 INVIERTE PTC6 PORTB,3 :SI PTB3 = 1 SALTA A LABEL2, SI NO EN LABEL1

BSF BTG BTFSS LABEL1 LABEL2

INSTRUCCIONES O COMANDOS DE ASSEMBLER PARA CONTROL DE OPERACIONES


BC BNC BN BNN LABEL LABEL LABEL LABEL :salta a label si carry de status = 1, max salta +-128 renglones :SALTA A LABEL SI CARRY DE STATUS = 0, MAX SALTA +-128 RENGLONES :SALTA A LABEL SI NEG DE STATUS = 1, MAX SALTA +-128 RENGLONES :SALTA A LABEL SI NEG DE STATUS = 0, MAX SALTA +-128 RENGLONES :SALTA A LABEL SI OV DE STATUS = 1, MAX SALTA +-128 RENGLONES :SALTA A LABEL SI OV DE STATUS = 0, MAX SALTA +-128 RENGLONES :SALTA A LABEL SI Z DE STATUS = 1, MAX SALTA +-128 RENGLONES :SALTA A LABEL SI Z DE STATUS = 0, MAX SALTA +-128 RENGLONES :SALTA A LABEL: MXIMO 1024 RENGLONES ARRIBA O ABAJO) :LLAMADO DE SUBRUTINA EN CUALQUIER PARTE DEL PROGRAMA :RESETEA EL TEMPORIZADOR DEL WDT PARA EVITAR EL DESBORDAMIENTO :REALIZA LA OPERACION AJUSTE DECIMAL AL REGISTRO W :SALTA A LABEL EN CUALQUIER PARTE DEL PROGRAMA :NO OPERE, CONSUME UN CICLO DE MAQUINA :SACAR DATO SUPERIOR DE PILA

BOV LABEL BNOV LABEL BZ BNZ LABEL LABEL

BRA LABEL CALL LABEL CLRWDT DAW GOTO LABEL NOP POP

70 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


PUSH :GUARDAR POINTER PROGRAM EN PILA RCALL LABEL :LLAMADO DE SUBRUTINA MXIMO 1024 RENGLONES ARRIBA O ABAJO RESET :REALIZA EL EFECTO DE RESET POR MASTER CLEAR DEL HARDWARE (PIN 1) RETFIE S :RETORNO DE INTERRUCION: (IF S=1 ACTUALIZA REGISTROS ESPECIALES) RETURN S :RETORNO DE SUBRUTINA (IF S=1 ACTUALIZA REGISTROS ESPECIALES) SLEEP :ACTIVACION DE MODO SLEEP STAND BY O POWER SAVING, DETIENE EL OSCILADOR

INSTRUCCIONES O COMANDOS DE ASSEMBLER PARA OPERACIONES CON CONSTANTES


ADDLW ANDLW IORLW LFSR INDF0 POSTINC0 POSTDEC0 MOVLB MOVLW MULLW RETLW SUBLW XORLW L8 L8 L8 FSRX,L12 SUMA L8 CON W Y GUARDA EN W REALIZA OPERACION AND ENTRE L8 CON W Y GUARDA EN W REALIZA OPERACION AND ENTRE L8 CON W Y GUARDA EN W X=0,1,2 CARGA DATO MEDIANTE DIRECCIONAMIENTO INDIRECTO

L4 L8 L8 L8 L8 L8

MUEVE L4 A REGISTRO DE SELECCION DE BANCO BSR MUEVE CONSTANTE L8 A W MULTIPLICA L8 x W Y GUARDA EN PRODH:PRODL RETORNO DE LLAMADO DE SUBRUTINA POR CALL O RCALL CON W=L8 RESTA L8 - W Y GUARDA EN W REALIZA OPERACION OR EXCLUSIVA ENTRE L8 Y W, GUARDA EN W

COMANDOS DE ASSEMBLER PARA LECTURA DE TABLAS EN MEMORIA DE PROGRAMA


Remitirse al data sheet del PIC 18FXXX para mayor informacin del manejo de TABLAS TBLRD* TBLRD*+ TBLRD* TBLRD+* TBLWT* TBLWT*+ TBLWT*TBLWT+*

71 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

CONVENCION DE SIMBOLOS EN MACROS Y ARGUMENTOS DE LPM2 (SLPM2)


Las macros de lpm2 se indicarn en MAYSCULA Y AZUL NEGRILLA. Los argumentos y etiquetas de lpm2 se indicarn en MAYSCULA Y ROJO SIN NEGRILLA. Los comentarios se indicaran con minscula y verde sin negrilla. SIMBOLO : SIGNIFICADO ACT : activar BCD : constante entera (0 9) DES : desactivar F : FILE, REGISTRO O VARIABLE F8 : VARIABLE DE 8 BIT TIPO BYTE (0 - 255) F16 : VARIABLE DE 16 BIT TIPO WORD (0 - 65535) F8/16 : VARIABLE DE 8 O 16 BIT TIPO BYTE O WORD (0 - 255 0 A 65535) FH : (FLANCO HIGH) FLANCO DE SUBIDA FL : (FLANCO LOW) FLANCO DE BAJADA FSR : DIRECCIONAMIENTO INDIRECTO INC : INCREMENTAR INT : INTERRUPCION BIT : BIT DE UN REGISTRO DE 8 BIT (0 - 7) L : CONSTANTE O LITERAL L2 : CONSTANTE O LITERAL ENTERA DE 2 BIT (0 - 3) L4 : CONSTANTE O LITERAL ENTERA DE 4 BIT (0 -15) L8 : CONSTANTE O LITERAL ENTERA DE 8 BIT (0 - 255) L16 : CONSTANTE O LITERAL ENTERA DE 16 BIT (0 - 65535) L16 : CONSTANTE DE 8 O 16 BIT (0 - 255 0 A 65535) LP : LOW PRIORITY OF INTERRUPTION HP : HIGH PRIORITY OF INTERRUPTION MOV : MOVER DATOS ENTRE REGISTROS O VARIABLES RX : RECEPTOR SUB : SUBRUTINA TX : TRANSMISION UNIDAD : US (MICROSEGUNDO), MS(MILISEGUNDO), DS(DCIMA DE SEGUNDO), SEG(SEGUNDO) W : REGISTRO DE TRABAJO WORK DE ASSEMBLER PIN : ES UN PUERTO DEL PIC, POR EJEMPLO: PTA0, PTB5, ETCETERA. VARNN: ES UNA VARIABLE CUYO VALOR ES CERO PTN ES UN PUERTO VIRTUAL QUE NO EXISTE FISICAMENTE EN EL PIC PTNN ES UN PIN DEL PUERTO VIRTUAL QUE NO EXISTE FISICAMENTE EN EL PIC

72 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DE CONFIGURACIN DE BIT DE REGISTRO ESPECIALES


ACT_PRIO_INT DES_PRIO_INT ACT_PULL_UP DES_PULL_UP ACT_INT_GLOB DES_INT_GLOB ACT_INT_HIGHP DES_INT_HIGHP ACT_INT_LOWP DES_INT_LOWP ACT_PAEDIG DES_PAEDIG ACT_WDT DES_WDT OUT_INT :ACTIVAR PRIORIDAD DE INTERRUPCIONES :DESACTIVAR PRIORIDAD DE INTERRUPCIONES :ACTIVAR PULL UP :DESACTIVAR PULL UP :ACTIVAR INTERRUPCIONES GLOBALES :DESACTIVAR INTERRUPCIONES GLOBALES :ACTIVAR INTERRUPCIONES HIGH PRIORITY :DESACTIVAR INTERRUPCIONES HIGH PRIORITY :ACTIVAR INTERRUPCIONES LOWH PRIORITY :DESACTIVAR INTERRUPCIONES LOW PRIORITY :PUERTOS A Y E COMO I/O DIGITALES :PUERTOS A Y E COMO I/O ANALOGAS :ACTIVAR WATCH DOG TIMER :DESACTIVAR WATCH DOG TIMER :salida de int en control automatico de interrupciones (slo en

bloque 8)

OUT_IF :salida de interrupcin en comando de comparacion IF (slo en bloque 8). Esta macro no puede emplearse si la interrupcin se desencaden por finalizacin de un ciclo pwm o fin de movimiento o reposo de un motor paso paso. MODULO_INTERRUPCION_MANUAL SI/NO :activacion/desactivacion en bloque 1, si se activa entonces todas las interrupciones se dirigen al vector org_vector_low_priority_18h o org_vector_high_priority_18h en bloque 8. El usuario deber seleccionar manualmente la interrupcion segn la bandera activada. BANCO L4 :selecciona banco de operacion (0 a 5)

MACROS DE CONFIGURACIN DE REGISTROS ESPECIALES FSR


AL CONFIGURAR LOS PUERTOS 1--> ENTRADA, 0--> SALIDA CONFIG_TRISA L8 CONFIG_TRISB L8 CONFIG_TRISC L8 CONFIG_TRISD L8 CONFIG_TRISE L8 CONFIG_WDTCON L8 CONFIG_RCON L8 CONFIG_INTCON L8 CONFIG_INTCON2 L8 CONFIG_INTCON3 L8 CONFIG_IPR1 L8 CONFIG_IPR2 L8 CONFIG_IPR1 L8 CONFIG_T0CON L8 CONFIG_T1CON L8 CONFIG_PIE1 L8

73 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


CONFIG_PIR1 L8 CONFIG_PIE2 L8 CONFIG_PIR2 L8 CONFIG_ADCON0 L8 CONFIG_ADCON1 L8

MACROS DE ACTIVACION / DESACTIVACION DE INTERRUPCIONES


ACT_INT_B0 DES_INT_B0 ACT_INT_B1 DES_INT_B1 ACT_INT_B2 DES_INT_B2 ACT_INT_B47 DES_INT_B47 ACT_INT_TMR0 DES_INT_TMR0 ACT_INT_TMR1 DES_INT_TMR1 ACT_INT_1_IR DES_INT_1_IR ACT_INT_4_IR DES_INT_4_IR ACT_INT_1_TECPS2 DES_INT_1_TECPS2 ACT_INT_4_TECPS2 DES_INT_4_TECPS2 ACT_INT_UART DES_INT_UART ACT_INT_TEC4X4 DES_INT_TEC4X4 ACT_INT_DTMF1 DES_INT_DTMF1 ACT_INT_DTMF2 DES_INT_DTMF2 :ACTIVAR INTERRUPCION DEL PUERTO PTB0 COMO ENTRADA :DESACTIVAR INTERRUPCION DEL PUERTO PTB0 :ACTIVAR INTERRUPCION DEL PUERTO PTB1 COMO ENTRADA :DESACTIVAR INTERRUPCION DEL PUERTO PTB1 :ACTIVAR INTERRUPCION DEL PUERTO PTB2 :DESACTIVAR INTERRUPCION DEL PUERTO PTB2 :ACTIVAR INTERRUPCION DEL PUERTO PTB4 A B7 :DESACTIVAR INTERRUPCION DEL PUERTO PTB4 A B7 :ACTIVAR INTERRUPCION DEL TIMER0 :DESACTIVAR INTERRUPCION DEL TIMER0 :ACTIVAR INTERRUPCION DEL TIMER1 :DESACTIVAR INTERRUPCION DEL TIMER1 :ACTIVAR INTERRUPCION DEL RECEPTOR DE 1 RX INFRA ROJO POR PTB1 :DESACTIVAR INTERRUPCION DEL RECEPTOR DE 1 RX INFRA ROJO POR PTB1 :ACTIVAR INTERRUPCION DEL RECEPTOR DE 4 RX INFRA ROJO POR PTB4 A 7 :DESACTIVAR INTERRUPCION DEL RECEPTOR DE 4 RX INFRA ROJO POR PTB4 A 7 :ACTIVAR INTERRUPCION DEL RECEPTOR DE 1 TECLADO PS2 POR PTB2 :DESACTIVAR INTERRUPCION DEL RECEPTOR DE 1 TECLADO PS2 POR PTB2 :ACTIVAR INTERRUPCION DEL RECEPTOR DE 4 TECLADO PS2 POR PTB47 :DESACTIVAR INTERRUPCION DEL RECEPTOR DE 4 TECLADO PS2 POR PTB47 :ACTIVAR INTERRUPCION DEL RECEPTOR UART POR PTD7 :DESACTIVAR INTERRUPCION DEL RECEPTOR UART POR PTD7 :ACTIVAR INTERRUPCION DEL DECODIFICADOR TEC 4X4 POR PUERTO B4 A B7 :desactivar interrupcion del decodificador tec 4x4 por puerto b4 a b7 :ACTIVAR INTERRUPCION DEL DECODIFICADOR DTMF POR PTB0 :DESACTIVAR INTERRUPCION DEL DECODIFICADOR DTMF POR PTB0 :ACTIVAR INTERRUPCION DEL DECODIFICADOR DTMF POR PTB1 :DESACTIVAR INTERRUPCION DEL DECODIFICADOR DTMF POR PTB1

74 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DE CONTROL DE BANDERAS DE INTERRUPCION


CFIB0 CFIB1 CFIB2 CFIB47 CFITMR0 CFITMR1 CFIRXUART CFIADC SFIB0 SFIB1 SFIB2 SFIB47 SFITMR0 SFITMR1 SFIRXUART SFIADC :ACOSTAR BANDERA DE INTERRUPCION PTB0 :ACOSTAR BANDERA DE INTERRUPCION PTB1 :ACOSTAR BANDERA DE INTERRUPCION PTB2 :ACOSTAR BANDERA DE INTERRUPCION PTB47 :ACOSTAR BANDERA DE INTERRUPCION TMR0 :ACOSTAR BANDERA DE INTERRUPCION TMR1 :ACOSTAR BANDERA DE INTERRUPCION RX UART :ACOSTAR BANDERA DE INTERRUPCION FIN DE CONVERSION A/D :LEVANTAR BANDERA DE INTERRUPCION PTB0 :LEVANTAR BANDERA DE INTERRUPCION PTB1 :LEVANTAR BANDERA DE INTERRUPCION PTB2 :LEVANTAR BANDERA DE INTERRUPCION PTB47 :LEVANTAR BANDERA DE INTERRUPCION TMR0 :LEVANTAR BANDERA DE INTERRUPCION TMR1 :LEVANTAR BANDERA DE INTERRUPCION RX UART :LEVANTAR BANDERA DE INTERRUPCION FIN DE CONVERSION A/D

MACROS DE CONTROL DE FLANCOS DE SUBIDA Y BAJADA DE INTERRUPCIONES


FHIB0 FLIB0 FHIB1 FLIB1 FHIB2 FLIB2 NOTA: :ACTIVAR FLANCO DE SUBIDA EN INT PTB0 :ACTIVAR FLANCO DE BAJADA EN INT PTB0 :ACTIVAR FLANCO DE SUBIDA EN INT PTB1 :ACTIVAR FLANCO DE BAJADA EN INT PTB1 :ACTIVAR FLANCO DE SUBIDA EN INT PTB2 :ACTIVAR FLANCO DE BAJADA EN INT PTB2 :los pines PTB4 a PTB7 no tienen la opcion de configuracin de flanco con int

MACROS DE CONTROL DE PRIORIDAD DE INTERRUPCIONES


LPIB1 ;low priority en interrupcin de ptb1 HPIB1 ;high priority en interrupcin de ptb1 LPIB2 HPIB2 LPIB47 HPIB47 LPITMR0 HPITMR0 LPITMR1 HPITMR1 LPIRXUART

75 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


HPIRXUART

MACROS DE REGISTRO STATUS


MACROS SET_N CLR_N IF_N1 IF_N0 SET_OV CLR_OV IF_OV1 LABEL IF_OV0 LABEL SET_DC CLR_DC IF_DC1 LABEL IF_DC0 LABEL SET_C CLR_C IF_C1 LABEL IF_C0 LABEL SET_Z CLR_Z IF_Z1 LABEL IF_Z0 LABEL ARGUMENTOS establece el bit n (neg de status) en 1 establece el bit n (neg de status) en 0 LABEL si el bit n de status = 1 entonces salta el sig renglon sino salta a la etiqueta label LABEL si el bit n de status = 0 entonces salta el sig renglon

76 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DE MOVIMIENTO DE DATOS ENTRE REGISTROS


SIMBOLOGIA PT B15 A B0 F8/16 F8 F16 L16 L8 L16 MACROS MOVLF MOVFFF MOVFF MOVFW MOVWF SIGNIFICADO : PORTA, PORTB, PORTC, PORTD O PORTE : BIT 15 A BIT 0 DE UN REGISTRO O PUERTO : VARIABLE DE 8 O 16 BIT TIPO BYTE O WORD (0 - 255 0 A 65535) : VARIABLE DE 8 BIT TIPO BYTE (0 - 255) : VARIABLE DE 16 BIT TIPO WORD (0 - 65535) : CONSTANTE DE 8 O 16 BIT (0 - 255 0 A 65535) : CONSTANTE O LITERAL ENTERA DE 8 BIT (0 - 255) : CONSTANTE O LITERAL ENTERA DE 16 BIT (0 - 65535) ARGUMENTOS EJEMPLO L16,F8/16 EJ: MOVLF 25,VAR1 : mueve la constante 25 a var1 F8/16,F8/16 EJ: MOVFFF VAR1,VAR2 : copia el dato de var1 en var2 F8,F8 EJ: MOVFF VAR1,VAR2 : copia el dato de var1 en var2 F8 EJ: MOVFW VAR1 : copia el dato de var1 en w F8 EJ: MOVWF VAR1 : copia el dato de w en var1(si var1 esta en banco 0)

MACROS DE CONTROL DE BIT DE PUERTOS


MACROS OUT_PORT_BYTE OUT_PORT_WORD ARGUMENTOS F8,PT,B7,PT,B6,PT,B5,PT,B4,PT,B3,PT,B2,PT,B1,PT,B0 F16,PT,B15,PT,B14,PT,B13,PT,B12,PT,B11,PT,B10,PT,B9,PT,B8,PT,B7,PT,B6,PT,B5, PT,B4,PT,B3,PT,B2,PT,B1,PT,B0 INP_PORT_BYTE F8,PT,B7,PT,B6,PT,B5,PT,B4,PT,B3,PT,B2,PT,B1,PT,B0 INP_PORT_WORD F16,PT,B15,PT,B14,PT,B13,PT,B12,PT,B11,PT,B10,PT,B9,PT,B8,PT,B7,PT,B6,PT,B5, PT,B4,PT,B3,PT,B2,PT,B1,PT,B0 EJEMPLO 1 Declare var1 tipo byte en bloque 3, en bloque 5 configure bit 0 a bit3 de portb como salida y configure bit0 a bit 3 de porta como salida. En este ejemplo el valor de var1 se envia a los puertos a y b asi: Los bit 7 a 4 de var1 se asignaron a los bit 3 a 0 de portb respectivamente. Los bit 3 a 0 de var1 se asignaron a los bit 3 a 0 de porta respectivamente. MOVLF OUT_PORT_BYTE B'11110001',VAR1 VAR1,PTB3,PTB2,PTB1,PTB0,PTA3,PTA2,PTA1,PTA0 EJEMPLO 2

Declare var 1 tipo byte en bloque 3, en bloque 5 configure bit 0 a bit3 de porta como entrada y bit3 a bit 0 de porta como entrada. En este ejemplo se carga var1 con el estado de las entradas porta y portb asi: A los bit 7 a 4 de var1 se asign el valor de los bit 3 a 0 de portb respectivamente. A los bit 3 a 0 de var1 se asign el valor de los bit 3 a 0 de porta respectivamente. INP_PORT_BYTE VAR1,PTB3,PTB2,PTB1,PTB0,PTA3,PTA2,PTA1,PTA0

77 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DE OPERACIONES CON REGISTROS


MACROS ARGUMENTOS EJEMPLO SIGNIFICADO DECRE1 F8/16 DECRE1 VAR1 ;var1 = var1 - 1 DECREF F8/16,F8/16 DECREF VAR1,VAR2 : VAR1 = VAR1 - VAR2 DECRE F8/16,L16 DECRE VAR1,5 : VAR1 = VAR1 - 5 INCRE1 F8/16 NCRE1 VAR1 : VAR1 = VAR1 + 1 INCREF F8/16,F8/16 INCREF VAR1,VAR2 : VAR1 = VAR1 + VAR2 INCRE F8/16,L16 INCRE VAR1,1230 : VAR1 = VAR1 + 1230 CLEAR F8/16 CLEAR VAR1 : VAR1 = 0 CLEARW :W =0 SETEAR F8/16 SETEAR VAR1 : VAR1 = 255 DESPRCF F8 EJ: DESPRF VAR1 desplaza los bit de var1 a la derecha a travs de carry y guarda cambio en VAR1. DESPLCF F8 EJ: DESPLF carry y guarda cambio en VAR1. ROTRF F8 cambio en var1. ROTLF F8 guarda cambio en var1 SWAPFF var1 ANDFL ANDFF IORFL IORFF XORFL XORFF INV_BIT tipo byte INV o un puerto F8/16 F8/16,L16 F8/16,F8/16 F8/16,L16 F8/16,F8/16 F8/16,L16 F8/16,F8/16 F8,BIT F8/F16 EJ: ROTRF VAR1 desplaza los bit de var1 a la izquierda a travs de

VAR1

rota en si mismo los bit de var1 a la derecha y guarda

EJ: ROTLF

VAR1

rota en si mismo los bit de Var1 a la izquierda y

EJ: SWAPFF EJ: ANDFL EJ: ANDFF EJ: IORFL EJ: IORFF EJ: XORFL EJ: XORFF EJ: INV_BIT EJ: INV EJ: ON EJ: OFF

VAR1

intercambia los nibbles de var1 y guarda cambio en VAR1 = VAR1 AND 15 VAR1 = VAR1 AND VAR2 VAR1 = VAR1 IOR 512 VAR1 = VAR1 IOR VAR2 VAR1 = VAR1 XOR 1024 VAR1 = VAR1 XOR VAR2 : invierte el bit 4 de var1, var1 es un puerto o variable : invierte los 8 16 bit de VAR1, var1 es una variable : establece en 1 el bit 3 de var1, var1 es una : establece en 0 el bit 3 de var1, var1 es una

VAR1,15 VAR1,VAR2 VAR1,512 VAR1,VAR2 VAR1,1024 VAR1,VAR2 VAR1,4 VAR1 VAR1,3 VAR1,3

ON F8,BIT variable byte o un puerto OFF F8,BIT variable byte o un puerto SET_INP SET_OUT PUERTO,BIT PUERTO,BIT

EJ: SET_INP PTC3 EJ: SET_OUT PTC4

: configura ptc3 como entrada : configura ptc4 como salida e inicializa en cero

78 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


ENTRADA SALIDA BANDERA NOMBRE_ENTRADA,PIN_PUERTO NOMBRE_SALIDA,PIN_PUERTO NOMBRE_BANDERA,BIT_VARIABLE EJ: ENTRADA EJ: SALIDA SENSOR1,PTC0 el pin inicia en cero FLAG1,0 99

RELE1,PTC5

EJ: BANDERA EJ: CONSTANTE

F_SIRENA MAX_TEMP

CONSTANTE NOMBRE_CONSTANTE,VALOR PAUSE CLR_PORTS CLR_ALL_RAM_GPR

;inicia un bucle indefinido solo interrumpido por un reset o interrupcin ;resetea (pone en cero) todos los puertos configurados como salida ;resetea (pone en cero) todos los registros de la ram de dir 0 a 1535 de 18f452

CLEAR_RAM

DIRECCION1,DIRECCCION2 L12 ,L12

;resetea todas las var de dir1 a dir2 incluyendo dir 1 y dir2

FILL_RAM

DIRECCION1,DIRECCION2,CONSTANTE L12 ,L12 ,L8 ;llena las variables de dir1 a dir2 con la constante L8 DIRECCION1,DIRECCION2,VALOR L12 ,L12 ,F8 ;llena las var de dir1 a dir2 con el dato de F8

FILL_RAMF

79 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DE MODULO INCREMENTAR Y DECREMENTAR VARIABLES


Las MACROS INCVAR y DECVAR incrementan y decrementan una variable entre un mnimo y un mximo programado, en pasos o cambios programados MACROS DECVAR DECVARF INCVAR INCVARF IF_MAX_INC IF_MIN_DEC ARGUMENTOS VARIABLE, VALOR_MINIMO, VALOR_MAXIMO, RESOLUCION_DE_CAMBIO F8/16 , L16 , L16 , L16 F8/16 , F8/16 , F8/16 , F8/16 F8/16 F8/16 LABEL LABEL SI/NO ;en bloque 1 , L16 , F8/16 , L16 , F8/16 , L16 , F8/16

HABILITAR_PUSH_POP_INC_DECVAR

EJEMPLO Active la interrupcin de PTB0 y PTB1 en bloque1 ORG1_INT_PTB0 INCVAR IF_MAX_INC VAR1,100,2000,50 LBL1 ;incrementa de 100 a 2000 en pasos de 50

LBL1

------ var1 llego al maximo valor = 2000 --------------- var1 esta entre 100 y 1999 ---------OUT_INT DECVAR IF_MIN_DEC VAR1,100,2000,50 LBL2 ;decrementa de 100 a 2000 en pasos de 50

ORG2_INT_PTB1

------ var1 llego al minimo valor = 100 ---------LBL2 ------ var1 esta entre 100 y 1999 ---------OUT_INT

80 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DE OPERACIONES MATEMATICAS

(MMATH)

Nota1: la operacion de SUMA, RESTA Y MULTIPLICACION se guarda en la variable llamada "RESULTADO" tipo word. Nota2: la operacion de divisin se guarda en la variable "COCIENTE" Y "RESIDUO" tipo word. Si el usuario emplea la macro: C_BCDF RESULTADO ;entonces convierte el registro resultado en bcd

BCD5 = DECENA DE MIL BCD4 = UNIDAD DE MIL BCD3 = CENTENA BCD2 = DECENA BCD1 = UNIDAD MACROS SUMFL SUMFF RESTFL RESTLF RESTFF MULTFL MULTFF DIVFL DIVLF DIVFF ARGUMENTOS F8/16,L16 EJ: SUMFL F8/16,F8/16 EJ: SUMFF F8/16,L16 EJ: RESTFL L16,F8/16 EJ: RESTLF F8/16,F8/16 EJ: RESTFF F8/16,L16 EJ: MULTFL F8/16,F8/16 EJ: MULTFF F8/16,L16 EJ: DIVFL L16,F8/16 EJ: DIVLF F8/16,F8/16 EJ: DIVFF

VAR1,500 VAR1,VAR2 VAR1,5 495,VAR1 VAR1,VAR2 VAR1,2500 VAR1,VAR2 VAR1,5 412,VAR1 VAR1,VAR2

: RESULTADO(16BIT) = VAR1 + 500 : RESULTADO(16BIT) = VAR1 + VAR2 : RESULTADO(16BIT) = VAR1 - 5 : RESULTADO(16BIT) = 495 - VAR1 : RESULTADO(16BIT) = VAR1 - VAR2 : RESULTADO(32BIT) = VAR1 x 2500 : RESULTADO(32BIT) = VAR1 x VAR2 : COCIENTE(16BIT) = VAR1 / 5 : COCIENTE(16BIT) = 412 / VAR1 : COCIENTE(16BIT) = VAR1 / VAR2 : RESIDUO(16BIT)

MACROS FOR DE SUBRUTINAS


MACROS FOR_SUB FOR_SUBF ARGUMENTOS EXPLICACION NMERO_REPETICIONES,NOMBRE_SUBRUTINA L8 ,LABEL ;llama un nmero de veces una subrutina F8 ,LABEL ;llama un nmero de veces una subrutina

EJEMPLO 1 debe crear una subrutina llamada SUB_RESET en bloque 9 FOR_SUB 5,SUB_RESET :LLAMA 5 VECES LA SUB SUB_RESET EJEMPLO 2 debe crear una subrutina llamada sub_reset en bloque 9, declare var1 tipo byte en bloque 3 MOVLF FOR_SUBF 200,VAR1 VAR1,SUB_RESET ;VAR1 = 200 :llama 200 veces la sub sub_reset

81 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DE COMPARACION DE BIT Y REGISTROS


SIMBOLOGIA EN COMPARACION IF

(MIF)

= IGUAL <> DIFERENTE > MAYOR QUE < MENOR QUE todas las macros de comparacion "if" saltan al siguiente rengln si se cumple la condicin, de lo contrario salta a la etiqueta label. la etiqueta label puede estar en cualquiera de los 16384 renglones de la memoria de programa MACROS ARGUMENTOS EXPLICACION IF1 IF0 IFF255 IFF0 IFPAR IFIMPAR IFFIL IFFDL IFFMAL IFFMEL IFFIF IFFDF IFFMAF IFFMEF F8,BIT,LABEL F8,BIT,LABEL F8,LABEL F8,LABEL F8/16,LABEL F8/16,LABEL F8/16,L16,LABEL F8/16,L16,LABEL F8/16,L16,LABEL F8/16,L16,LABEL F8/16,F8/16,LABEL F8/16,F8/16,LABEL F8/16,F8/16,LABEL F8/16,F8/16,LABEL EJEMPLO 1 IF1 VAR1,3,LABEL1 CLR_LCD LABEL1 EJEMPLO 2 IFPAR VAR1,LABEL2 :SI VAR1 ES PAR ENTONCES LIMPIA LCD CLR_LCD :SINO SALTA A LABEL2 LABEL2 EJEMPLO 3 IFFMAL VAR1,200,LABEL2 :SI VAR1 > 200 ENTONCES LIMPIA LCD CLR_LCD :SINO SALTA A LABEL3 LABEL3 :SI... F8,BIT ES UNO ENTONCES...

:SI... F8,BIT ES CERO ENTONCES... :SI... F8=255 ENTONCES... :SI... F8=0 ENTONCES... :SI... F8/16 ES PAR ENTONCES... :SI... F8/16 ES IMPAR ENTONCES... :SI... VAR1 = CONSTANTE ENTONCES... :SI... VAR1 <> CONSTANTE ENTONCES... DIFERENTE :SI... VAR1 > CONSTANTE ENTONCES... :SI... VAR1 < CONSTANTE ENTONCES... :SI... VAR1 = VAR2 ENTONCES... :SI... VAR1 <> VAR2 ENTONCES... 'DIFERENTE :SI... VAR1 > VAR2 ENTONCES... :SI... VAR1 < VAR2 ENTONCES... :SI EL BIT 3 DE VAR1 EST EN 1 LIMPIA :LA LCD SI NO SALTA A LABEL1

82 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


EJEMPLO 4 VAR1,1,LABEL4

IFFIL CLR_LCD LABEL4 IFFIL TX_UART TX_UART TX_UART TX_UART LABEL5 IFFIL CHAR_LCD CHAR_LCD CHAR_LCD CHAR_LCD LABEL6 LABEL7

:SI VAR1 = 1 ENTONCES LIMPIA LCD

:SINO SALTA A LABEL4 VAR1,5,LABEL5 :SI VAR1 = 5 ENTONCES ENVIA "HOLA" AL PC "H" :SINO SALTA A LABEL5 "O" "L" "A" VAR2,"B",LABEL6 :SI VAR1 = "B" ENTONCES ENVIA "LPM" A LCD "L" :SINO SALTA A LABEL6 "P" "M" "2" VAR5,5467,LABEL7 ;si var1 = 5467 entonces envia reproduce 4,MI ;mensaje 4 del isd1, sino salta a label7

IFFIL PLAY_ISD1

MACROS DEL MODULO CLAVE (MCLAVE)


Nota1: las macros de comparacion "IF" saltan al siguiente rengln si se cumple la condicion, de lo contrario saltan a la etiqueta label. La etiqueta label puede estar en cualquier de los 16384 renglones de la memoria de programa. Nota2: recuerde que los registros REG_TECMAT, REG_DTMF1, REG_DTMF2 y reg_tecir no contienen datos tipo ascii sino numricos, por lo tanto no deben escribirse entre comillas los argumentos de las macro ifclave. REGISTROS DESTINOS DEL MODULO CLAVE F_CLAVE_MAXIMA FLAG_KEY,0 ;despues de introducir una tecla indica que se introdujeron ms digitos de los programados en la macro capturar_clave F_CLAVE_CORRECTAFLAG_KEY,1 ;despues de la tecla aceptar indica que la clave introducida es correcta F_CLAVE_INCORRECTA FLAG_KEY,2 ;despues de la tecla aceptar indica que la clave introducida es incorrecta F_CLAVE_BORRAR FLAG_KEY,3 ;indica que se presiono la tecla borrar ultimo digito introducido F_CLAVE_CANCELAR FLAG_KEY,4 ;indica que se presiono la tecla cancelar clave F_CLAVE_ACEPTAR FLAG_KEY,5 ;indica que se presiono la tecla aceptar clave F_CLAVE_SIGUIENTE FLAG_KEY,6 ;indica que se presion una tecla diferente a aceptar, cancelar y borrar ultimo digito REG_CLAVE1,REG_CLAVE2,REG_CLAVE3,REG_CLAVE4,REG_CLAVE5,REG_CLAVE6,REG_CLAVE7 registros de la clave introducida temporalmente POINTER_CLAVE ;devuelve y establece el nmero de digitos que se han ingresado de la clave

SIMBOLOGIA MAX_DIGITOS

: EQUIVALENCIA = MAX_DIG_1 A MAX_DIG_7

83 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


TECLA_ACEPTAR = CUALQUIER CONSTANTE, CARACTER O NMERO DIFERENTE DE 254 TECLA_CANCELAR = CUALQUIER CONSTANTE, CARACTER O NMERO DIFERENTE DE 254 TEC_BORRAR = CUALQUIER CONSTANTE, CARACTER O NMERO DIFERENTE DE 254 LABEL = CUALQUIER ETIQUETA DEL PROGRAMA CLAVE1 A CLAVE7 = cualquier constante, caracter o nmero diferente de 254 si la clave deseada es inferior a 7 digitos, rellene los argumentos con la constante "nada = 254" si emplea la macro ifclave. Rellene con la variable "var_nada" si emplea la macro IFCLAVEF. DIR_CLAVE1 A DIR_CLAVE7 = cualquier direccion de la memoria eeprom de dato de dir 0 a 254. Si la clave deseada es inferior a 7 digitos rellene los argumentos con la direccion "dir_nada = 255". La direccion 255 de la eeprom de dato no se debe ocupar pues es utilizada internamente por la macro. tenga precaucion al activar el modulo recepcion infrarojo pues tambien emplea la memoria eeprom de dato para guardar los codigos de controles remoto. cada nuevo cdigo infra rojo consume 5 bytes a partir de la direccion cero. MACROS ARGUMENTOS TECLA_ACEPTAR, TECLA_CANCELAR, TEC_BORRAR CONFIG_CLAVE L8 , L8 , L8 EN BLOQUE 2 REGISTRO, MAX_DIGITOS CAPTURAR_CLAVE F8 , MAX_DIG_1 A MAX_DIG_7 NOTA: LA MACRO CAPTURAR_CLAVE solo se emplea una vez en el programa CLAVE1,CLAVE2,CLAVE3,CLAVE4,CLAVE5,CLAVE6,CLAVE7,LABEL L8 ,L8 ,L8 ,L8 ,L8 ,L8 ,L8 ,ETIQUETA ;compara con constantes F8 ,F8 ,F8 ,F8 ,F8 ,F8 ,F8 ,ETIQUETA ;compara con registros de la RAM LINEA,COL ;muestra el nmero de digitos introducidos en forma de astericos en la linea LABEL LABEL LABEL LABEL LABEL

IFCLAVE IFCLAVEF

SHOW_AST_CLAVE y columna estipulada IF_TECLA_ACEPTAR IF_TECLA_CANCELAR IF_TECLA_BORRAR IF_TECLA_SIGUIENTE IF_TECLA_MAX RESET_CLAVE

DIR_CLAVE1, DIR_CLAVE2, DIR_CLAVE3, DIR_CLAVE4, DIR_CLAVE5, DIR_CLAVE6, DIR_CLAVE7, LABEL IFCLAVE_EEPROM L8 , L8 , L8 , L8 , L8 , L8 , L8 , ETIQUETA IF_PRIMER_ON_MED LABEL ;si es la primera vez que se reinicia el pic despus de cargarle el firmware lee la dir 255 de la eeprom y si el dato es diferente de 254 indica que es la primera vez que se reinicia el pic

84 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


EJEMPLO 1 El ejemplo a continuacion permite modificar la clave en memoria eeprom de dato de 2 usuarios cada vez que se introduce la clave maestra de 7 digitos (puk) "abcdefg". la primera vez que se reinicia el microcontrolador se asigna la clave "1111" al usuario 1 y la clave "22222" al usuario 2. La clave se puede ingresar por teclado PS2 o por recepcin de dato uart. Para cargar la clave inicial de los usuarios entonces debe llamar en el bloque 6 mediante la instruccion CALL la subrutina SUB_CLAVE_INICIAL que se encuentra en el bloque9 de subrutinas. _________________________________________________________________________________________ ACTIVE EN BLOQUE 1: DISPLAY_CRISTAL_LIQUIDO_LCD INTERRUPCION_HP_RXUART_PTC7 INTERRUP_LP_1_TECPS2_CK_PTB2 SI SI SI

_________________________________________________________________________________________ CONFIGURE EN BLOQUE 2: LA FUNCION ACEPTAR CON LA TECLA ENTER DEL TECLADO LA FUNCION CANCELAR CON LA TECLA ESCAPE DEL TECLADO LA FUNCION BORRAR CON LA TECLA RETROCESO DEL TECLADO CONFIG_CLAVE TEC_ENTER,TEC_ESCAPE,TEC_BACK _________________________________________________________________________________________ DECLARE EN BLOQUE 3: CNT_ERROR,FLAG_CAMBIO_CLAVE _________________________________________________________________________________________ DEFINA BANDERAS EN BLOQUE 4: (NOTA: PARA AGREGAR USUARIOS DEBE CREAR MS BANDERAS F_WAIT_CLAVE_US) BANDERA F_PUK_OK FLAG_CAMBIO_CLAVE,0 ; declara un flag en flag_cambio_clave BANDERA F_WAIT_ENTER_CLAVE FLAG_CAMBIO_CLAVE,1 ; declara un flag flag_cambio_clave BANDERA F_WAIT_CLAVE_US1 FLAG_CAMBIO_CLAVE,2 ; declara un flag en flag_cambio_clave BANDERA F_WAIT_CLAVE_US2 FLAG_CAMBIO_CLAVE,3 ; declara un flag en flag_cambio_clave el bit 0 de la var en el bit 1 de la var el bit 2 de la var el bit 3 de la var

;_________________________________________________________________________________________ ;PROGRAME EN BLOQUE 8: ESTRATEGIA PARA QUE FUNCIONE CON TECLADO PS2 TAMBIEN ORG20_INT_1_TECPS2: MOVFFF REG_TECPS2,REG_RXUART GOTO ORG14_INT_RXUART ORG14_INT_RXUART: en caulquier clave CAPTURAR_CLAVE REG_RXUART,MAX_DIG_7 ;max 7 digitos

IFCLAVE "A","B","C","D","E","F","G",LBL_UART1 CLEAR FLAG_CAMBIO_CLAVE ON F_PUK_OK

85 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


MENS_LCD MENS_LCD BLINK_LCD OUT_INT LBL_UART1 "PUK CORRECTO ",L1,C1,0 "SELECCION US 1-2" ,L2,C1,0 2

IF1 F_PUK_OK,LBL_UART2 IF_TECLA_ACEPTAR LBL_UART5 IF1 F_WAIT_CLAVE_US1,LBL_UART6 IFFIL POINTER_CLAVE,4,LBL_UART7 CLEAR FLAG_CAMBIO_CLAVE CLEAR POINTER_CLAVE WRITE_EEDLF 0,REG_CLAVE1 WRITE_EEDLF 1,REG_CLAVE2 WRITE_EEDLF 2,REG_CLAVE3 WRITE_EEDLF 3,REG_CLAVE4 MENS_LCD "CAMBIO EXITOSO",L1,C1,0 MENS_LCD "USUARIO 1 ",L2,C1,0 BLINK_LCD 2 OUT_INT MENS_LCD "INSERTE 4 DIGITO",L1,C1,0 MENS_LCD "EN CAMBIO DE US1",L2,C1,0 BLINK_LCD 2 CLEAR POINTER_CLAVE MENS_LCD "CAMBIO CLAVE US1",L1,C1,0 MENS_LCD "ENTER 4 DIGITOS",L2,C1,0 BLINK_LCD 2 OUT_INT IF1 F_WAIT_CLAVE_US2,LBL_UART8 IFFIL POINTER_CLAVE,5,LBL_UART9 CLEAR FLAG_CAMBIO_CLAVE CLEAR POINTER_CLAVE WRITE_EEDLF 4,REG_CLAVE1 WRITE_EEDLF 5,REG_CLAVE2 WRITE_EEDLF 6,REG_CLAVE3 WRITE_EEDLF 7,REG_CLAVE4 WRITE_EEDLF 8,REG_CLAVE5 MENS_LCD "CAMBIO EXITOSO",L1,C1,0 MENS_LCD "USUARIO 2 ",L2,C1,0 BLINK_LCD 2 OUT_INT MENS_LCD "INSERTE 5 DIGITO",L1,C1,0 MENS_LCD "EN CAMBIO DE US2",L2,C1,0 BLINK_LCD 2 CLEAR POINTER_CLAVE MENS_LCD "CAMBIO CLAVE US2",L1,C1,0 MENS_LCD "ENTER 5 DIGITOS",L2,C1,0 BLINK_LCD 2 OUT_INT MENS_LCD "ANTES DE ACEPTAR",L1,C1,0 MENS_LCD "SELECCION US 1-2",L2,C1,0 BLINK_LCD 2

LBL_UART7

LBL_UART6

LBL_UART9

LBL_UART8

86 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


OUT_INT

LBL_UART5

IF_TECLA_CANCELAR LBL_UART3 CLEAR FLAG_CAMBIO_CLAVE MENS_LCD "CAMBIO DE CLAVE",L1,C1,0 MENS_LCD "CANCELADO POR US",L2,C1,0 BLINK_LCD 2 OUT_INT IF0 F_WAIT_ENTER_CLAVE,LBL_UART4 IFFIL REG_RXUART,"1",LBL_UART4 ON F_WAIT_CLAVE_US1 OFF F_WAIT_CLAVE_US2 ON F_WAIT_ENTER_CLAVE RESET_CLAVE MENS_LCD "CAMBIO CLAVE US1",L1,C1,0 MENS_LCD "ENTER 4 DIGITOS",L2,C1,0 BLINK_LCD 2 OUT_INT IF0 F_WAIT_ENTER_CLAVE,LBL_UART16 IFFIL REG_RXUART,"2",LBL_UART16 ON F_WAIT_CLAVE_US2 OFF F_WAIT_CLAVE_US1 ON F_WAIT_ENTER_CLAVE RESET_CLAVE MENS_LCD "CAMBIO CLAVE US2",L1,C1,0 MENS_LCD "ENTER 5 DIGITOS",L2,C1,0 BLINK_LCD 2 OUT_INT IF_TECLA_SIGUIENTE LBL_UART17 TLCD "DIGITANDO CLAVE" SHOW_AST_CLAVE L2,C5 OUT_INT IF_TECLA_BORRAR OUT_IF TLCD "DIGITANDO CLAVE" SHOW_AST_CLAVE L2,C5 OUT_INT

LBL_UART3

LBL_UART4

LBL_UART16

LBL_UART17

LBL_UART2

IFCLAVE_EEPROM 0,1,2,3,DIR_NADA,DIR_NADA,DIR_NADA,LBL_UART10 MENS_LCD "CLAVE CORRECTA" ,L1,C1,0 MENS_LCD "USUARIO 1 ",L2,C1,0 BLINK_LCD 2 CLEAR CNT_ERROR OUT_INT IFCLAVE_EEPROM 4,5,6,7,8,DIR_NADA,DIR_NADA,LBL_UART11 MENS_LCD "CLAVE CORRECTA" ,L1,C1,0 MENS_LCD "USUARIO 2 ",L2,C1,0 BLINK_LCD 2 CLEAR CNT_ERROR

LBL_UART10

87 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


OUT_INT

LBL_UART11

IF_TECLA_CANCELAR LBL_UART12 MENS_LCD "SISTEM SEGURIDAD",L1,C1,0 MENS_LCD "INTRODUZCA CLAVE",L2,C1,0 OUT_INT IF_TECLA_SIGUIENTELBL_UART13 TLCD "DIGITANDO CLAVE" SHOW_AST_CLAVE L2,C5 OUT_INT IF_TECLA_BORRAR TLCD "DIGITANDO CLAVE" SHOW_AST_CLAVE L2,C5 OUT_INT IF_TECLA_MAX TLCD "EXCEDIO NUM DIG" OUT_INT LBL_UART14

LBL_UART12

LBL_UART13

LBL_UART14

LBL_UART15

LBL_UART15

IF_TECLA_ACEPTAR OUT_IF RESET_CLAVE MENS_LCD "CLAVE INCORRECTA",L1,C1,0 MENS_LCD "VUELVA INTENTAR",L2,C1,0 BLINK_LCD 3 MENS_LCD "SISTEM SEGURIDAD",L1,C1,0 MENS_LCD "INTRODUZCA CLAVE",L2,C1,0 INCRE1 CNT_ERROR IFFMAL CNT_ERROR,2,OUT_IF ;MAS DE 2 ERRORES MENS_LCD "EXCEDIO INTENTOS",L1,C1,0 MENS_LCD "SISTEMA BLOQUEADO",L2,C1,0 BLINK_LCD 3 MENS_LCD "SISTEM SEGURIDAD",L1,C1,0 MENS_LCD "INTRODUZCA CLAVE",L2,C1,0 CLEAR CNT_ERROR OUT_INT

EJEMPLO 2 El ejemplo a continuacin permite identificar el acceso de 2 usuarios con clave predefinida en memoria de programa, se puede ingresar por teclado PS2 o por recepcin de dato UART. ORG20_INT_1_TECPS2: ORG14_INT_RXUART MOVFFF GOTO CAPTURAR_CLAVE IFCLAVE TLCD MENS_LCD CLEAR OUT_INT REG_TECPS2,REG_RXUART ORG14_INT_RXUART REG_RXUART,MAX_DIG_7 "O","S","C","A","R",NADA,NADA,LBL_UART_1 "CLAVE CORRECTA" "USUARIO 1",L2,C4,0 CNT_ERROR

88 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


LBL_UART_1 IFCLAVE TLCD MENS_LCD CLEAR OUT_INT "U","P","C","2","0","0","7",LBL_UART_2 "CLAVE CORRECTA" "USUARIO 2",L2,C4,0 CNT_ERROR

LBL_UART_2

IF_TECLA_CANCELAR LBL_UART_3 TLCD "VUELVA A INTENTAR" OUT_INT

LBL_UART_3 IF_TECLA_SIGUIENTE LBL_UART_4 TLCD "INTRODUCIENDO CLAVE" SHOW_AST_CLAVE L2,C5 OUT_INT LBL_UART_4 IF_TECLA_BORRAR LBL_UART_5 TLCD "BORRANDO DIGITO" SHOW_AST_CLAVE L2,C5 OUT_INT LBL_UART_5 IF_TECLA_MAX LBL_UART_6 TLCD "MAXIMO 7 DIGITOS" OUT_INT LBL_UART_6 IF_TECLA_ACEPTAR OUT_IF ;clave errnea RESET_CLAVE TLCD "CLAVE INCORRECTA" MENS_LCD "VUELVA A INTENTARLO",L1,C4,0 INCRE1 CNT_ERROR IFFMAL CNT_ERROR,2,OUT_IF TLCD "SUPERO 3 INTENTOS" CLEAR CNT_ERROR OUT_INT

MACROS DE CONVERSION DE TIPO DE DATOS


Rellenar con VARNN los registros vacios en C_BIN C_BCD C_BCDF C_BIN :convierte l8/l16--> bcd5,bc4,bcd3,bcd2,bcd1 :convierte f8/f16--> bcd5,bc4,bcd3,bcd2,bcd1 :convierte bcd5,bc4,bcd3,bcd2,bcd1 -->binhl EJEMPLO CAD CH0 ;convierte por canal 0 del cad (pin pta0) C_BCDF CONVERCAD ;convierte reg convercad a bcd 5 digitos CHAR_LCDAF BCD5 ;envia decenas de mil (bcd5) a lcd CHAR_LCDAF BCD4 ;envia unidad de mil (bcd4) a lcd CHAR_LCDAF BCD3 ;envia centenas (bcd3) a lcd CHAR_LCDAF BCD2 ;envia decenas (bcd2) a lcd CHAR_LCDAF BCD1 ;envia unidades (bcd1) a lcd L16 F8/16 F8,F8,F8,F8,F8

89 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DE MODULO DELAY (lase dili) (MDELAY)


MACRO : SINTAXIS : ARGUMENTO1: ARGUMENTO2: EJEMPLO1 : EJEMPLO2 : MACRO : SINTAXIS : ARGUMENTO1: ARGUMENTO2: EJEMPLO1 : EJEMPLO2 : DELAY DELAY TIEMPO UNIDAD DELAY DELAY L16,UNIDAD TIEMPO,UNIDAD ;constante de 1 a 65535 US,MS,DS,SEG ;(base de tiempo) 5,SEG ; pausa de 5 segundos 34654,US ; pausa de 34654 microsegundos

DELAYF F8/16,UNIDAD DELAYF TIEMPO,UNIDAD TIEMPO ;variable tipo byte/word UNIDAD US,MS,DS,SEG ;base de tiempo DELAYF F8,SEG ; pausa del valor guardado en F8 segundos DELAYF F16,US ; pausa del valor guardado en F16 microsegundos

MACROS DEL MODULO PULSO_LOW Y PULSO_HIGH


MACROS PUL_LOW PUL_LOWF PUL_HIGH PUL_HIFHF ARGUMENTOS PIN, TIEMPO, UNIDAD PIN, L16 ,US/MS/DS/SEG PIN, F8/16 ,US/MS/DS/SEG PIN, L16 ,US/MS/DS/SEG PIN, F8/16 ,US/MS/DS/SEG PIN TIEMPO UNIDAD ;pulso en bajo por un tiempo programado ;pulso en bajo por un tiempo programado ;pulso en alto por un tiempo programado ;pulso en alto por un tiempo programado

(MPULSO)

ARGUMENTO1: ARGUMENTO2: ARGUMENTO3:

PUL_HIGH PTE0,5,SEG

:cualquier pin del pic :constante/variable con dato entre 1 a 65535 ;US/MS/DS/SEG base de tiempo EJEMPLO 1 :genera un pulso con flanco de subida en pte0 por 5 segundos EJEMPLO 2

MOVLF 2500,VAR1 PUL_HIGHF PTA3,VAR1,US

;genera un pulso con flanco de subida en pta3 por 2500 microsegundos

MACROS DEL MODULO BLINK


Funcin: Aplicacion: Sintaxis: MACROS

(MBLINK)

genera un nmero de pulsos con periodo high y periodo low programable control de servomotor, pwm para motor dc, generador de frecuencia programable,oscilacion de led BLINK PIN,NUM_PULSOS,TIEMPO1,UNIDAD1,TIEMPO2,UNIDAD2 ARGUMENTOS

90 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


BLINK PIN, NUM_PULSO, TIEMPO_HIGH,UNIDAD ,TIEMPO_LOW, UNIDAD BLINK PIN, L16 , L16 ,US/MS/DS/SEG , L16 ,US/MS/DS/SEG BLINKF PIN, F8/16 , F8/16 ,US/MS/DS/SEG , F8/16 ,US/MS/DS/SEG PIN: PIN DEL PIC (PTA0,PTA1,PTC3,ETC) ;recuerde que pta4 no envia 1 lgico por tener salida de drenador abierto NUM_PULSO: constante o variable tipo byte o word l8/f8 para nmero de pulsos que se generar por el pin seleccionado TIEMPO1: UNIDAD1: TIEMPO2: UNIDAD2: constante o variable tipo byte o word para nmero de veces que se invocar la unidad1 US/MS/DS/SEG constante o variable tipo byte o word para nmero de veces que se invocar la unidad2 US/MS/DS/SEG EJEMPLO

En el siguiente ejemplo se genera por el pin PTD0 37 pulsos con perodo en 1 lgico igual a 100us y perodo en cero lgico igual a 1ms, es decir, genera una frecuencia de 1/(100us+1ms) --> f = 1/1100us : f = 909hz. Si fuese una seal pwm entonces el voltaje promedio que genera esta seal si el PIC est alimentado a 5VDC es: Vprom = 5v * 100us(1/1100us) = 0.45v BLINK PTD0,37,100,US,1,MS

PLANO DEL BUZZER PIEZOELCTRICO


(PLANO BUZZER)

91 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

El buzzer emitir un sonido correspondiente a la frecuencia estipulada por el microcontrolador. R2 es una resistencia de acoplamiento requerida por e buzzer. D1 sirve de proteccin al transistor y al PIC contra picos de voltaje generados por el buzzer.

MACROS DEL MODULO RANDOM (MRANDOM)


Genera nmeros enteros aleatorios entre un rango determinado tipo byte y devuelve el dato aleatorio en el registro REG_RANDOM. Si se desea un mayor efecto randmico se debe tener activada en bloque 1 la interrupcin timer0 timer1 con cualquier perodo en bloque 2, sin embargo, el usuario puede emplear la interrupcin de timer en bloque 8 para cualquier otra aplicacin. MACROS ARGUMENTOS INICIO, FIN : INICIO <= REG_RANDOM <= FIN RANDOM L8 ,L8 RANDOMF F8 ,F8 EJEMPLO 1 RANDOM 5,20 ;genera nmeros enteros aleatorios entre 5 y 20 incluidos el 5 y 20, el nmero se encuentra en la variable tipo byte: reg_random EJEMPLO 2 ;genera nmeros enteros aleatorios entre el ;valor de var1 y var2 y lo muestra en LCD

RANDOMF SBCD_LCDF

VAR1,VAR2 REG_RANDOM

MACROS DE DISPLAY CRISTAL LIQUIDO LCD 2X16, 2X20, 2X24, 2X40 (MLCD)
SIMBOLOGIA: SIMBOLOGIA: SIMBOLOGIA: SIMBOLOGIA: LINEA : L1,L2 :LINEA O FILA DE LA LCD COL : C1 A C40 :COLUMNA DE LA LCD FACTOR: X1, X10, X100 :FACTOR DE MULTIPLICACION DE VOLTAJE AL CONVERTIR DELAY_MENSAJE: 0 A 255 :PAUSA ENTRE CARACTERES EN DCIMAS DE SEGUNDO D4_P11_PTC0 = dato4 pin 11 de lcd se conecta al bit 0 de portc D5_P12_PTC1 = dato5 pin 12 de lcd se conecta al bit 1 de portc D6_P13_PTC2 = dato6 pin 13 de lcd se conecta al bit 1 de portc D7_P14_PTC3 = dato7 pin 14 de lcd se conecta al bit 1 de portc RS_P4_PTC4 = RS pin 4 de lcd se conecta al bit 1 de portc ENA1_P6_PTC5= ENABLE pin 6 de lcd1 se conecta al bit 1 de portc ENA2_P6_PTNN= ENABLE pin 6 de lcd2 se conecta al bit 1 de portc ENA3_P6_PTNN= ENABLE pin 6 de lcd3 se conecta al bit 1 de portc

SIMBOLOGIA EN MACRO CONFIG_LCD4B: SIMBOLOGIA EN MACRO CONFIG_LCD4B: SIMBOLOGIA EN MACRO CONFIG_LCD4B: SIMBOLOGIA EN MACRO CONFIG_LCD4B: SIMBOLOGIA EN MACRO CONFIG_LCD4B: SIMBOLOGIA EN MACRO CONFIG_LCD4B: SIMBOLOGIA EN MACRO CONFIG_LCD4B: SIMBOLOGIA EN MACRO CONFIG_LCD4B:

92 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


SIMBOLOGIA EN MACRO CONFIG_LCD4B: ENA4_P6_PTNN= ENABLE pin 6 de lcd4 se conecta al bit 1 de portc

Nota1: LPM puede controlar hasta 4 LCD simultneamente (lcd1 a lcd4), en la conexin por hardware las 4 LCD comparten los 4 pines de datos y el pin RS, nicamente se independiza el pin ENABLE. Si slo se requiere una LCD, se rellenan con PTNN (pin virtual) los enables de LCD2 A LCD4.

Nota2: al iniciar en programa en el bloque 6 siempre todas las lcd reciben automticamente es decir, est todo en blanco y posicionadas en linea1 columna 1. MACROS ARGUMENTOS

el comando CLR_LCD,

CONFIG_LCD4B D4_P11_PTC0,D5_P12_PTC1,D6_P13_PTC2,D7_P14_PTC3,RS_P4_PTC4,ENA1_P6_PTC5,ENA2_P6_PT NN,ENA3_P6_PTNN,ENA4_P6_PTNN ;asignacion de pines de control en bloque 2 SELEC_LCD (L4) :selecciona la lcd a controlar segn el peso binario. Si no emplea esta macro por defecto selecciona LCD1. Para seleccionar todas las LCD utilice la constante nmero 15. TEXTO_LCD MENSAJE :muestra un mensaje de max 40 caracteres en la posicion actual TLCD MENSAJE :limpia pantalla y muestra un mensaje de max 40 caracteres en linea1, col1 MENS_LCD MENSAJE,LINEA,COL,DELAY_MENSAJE :muestra un mensaje de max 40 caracteres en la linea, columna y con la pausa entre caracteres estipulada en dcimas de segundo DELAY_LCD L8 :estipula la pausa en (ds) entre cada caracter de la lcd DELAY_LCDF F8 :estipula la pausa en (ds) entre cada caracter de la lcd LINE_COL_LCD LINE_COL_LCDF PRINT_LCD PRINT_LCDF LINEA,COL LINEA,F8 :asigna la linea y columna del siguiente caracter :asigna la linea y columna del siguiente caracter

CHAR,LINEA,COL :muestra un caracter en la linea y columna asignada F8,LINEA,COL :muestra un caracter en la linea y columna asignada

PRINT_LCDAF F8,LINEA,COL :muestra el valor numrico de una variable de 0 a 9 en la linea y col asignada PRINTBCD_LCD L8,LINEA,COL :muestra el bcd de un caracter en la linea y col asignada PRINTBCD_LCDF F8,LINEA,COL CHAR_LCD L8 muestra un caracter en lcd CHAR_LCDF F8 CHAR_LCDAF F8 BLINK_LCD BLINK_LCDF RR_LCD RR_LCDF RL_LCD RL_LCDF CMD_LCD CMD_LCDF SBIT_LCD SBIT_LCDF SBCD_LCD SBCD_LCDF SED_LCD L8 F8 L8 F8 L8 F8 L8 F8 L8 F8 L16 F8/16 L8 muestra un caracter en lcd muestra el valor numrico de una variable de 0 a 9 prende y apaga la lcd el nmero de veces programada prende y apaga la lcd el nmero de veces programada rota a la derecha todo el mensaje el nmero de veces prog rota a la derecha todo el mensaje el nmero de veces prog rota a la izquierda todo el mensaje el nmero de veces prog rota a la izquierda todo el mensaje el nmero de veces prog envia un comando a lcd envia un comando a lcd muestra el nmero binario (0,1) de una constante en lcd muestra el nmero binario (0,1) de una variable en lcd muestra el bcd de 5 digitos de una constante max 16bit MUESTRA EL BCD DE 5 DIGITOS DE UNA VARIABLE DE 16BIT MUESTRA EL DATO DE LA DIRECCION DE EEPROM DE DATO

93 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


SED_LCDF F8 SAED_LCD L8 SAED_LCDF F8 SBCDED_LCD L8 SBCDED_LCDF F8 SRELOJ_LCD SC9DIG_LCD MUESTRA EL DATO DE LA DIRECCION DE EEPROM DE DATO MUESTRA EL ASCII DEL DATO DE LA DIRECCION DE EEPROM DE DATO MUESTRA EL ASCII DEL DATO DE LA DIRECCION DE EEPROM DE DATO muestra el bcd de la direccion de eeprom de dato muestra el bcd de la direccion de eeprom de dato :muestra la hora en lcd: hh:mm:ss :muestra 9 digitos del contador 987654321

SLM35_LCD :muestra temp en c de lm35 despues de una conversion cad SVOLT_LCD FACTOR :muestra voltaje en (volt) multiplicado por un factor en lcd despues de una conversion SMVOLT_LCD FACTOR :muestra voltaje en (mvolt)multiplicado por un factor en lcd despues de una conversion CLR_LCD :limpia las 2 lineas de la lcd CLR_LCDL1 CLR_LCDL2 OFF_BLINK_CURSOR ON_BLINK_CURSOR OFF_CURSOR_LCD ON_CURSOR_LCD CURSOR_HOME_LCD CURSOR_R_LCD CURSOR_L_LCD SCREEN_R_LCD :Limpia Linea 1 De Lcd Y Se Posiciona En Linea 1 Columna 1 :limpia linea 2 de lcd y se posiciona en linea 2 columna 1 :desactiva parpadeo de cursor y caracter :ACTIVA PARPADEO DE CURSOR Y CARACTER OCULTA EL CURSOR DE LCD MUESTRA EL CURSOR DE LCD ENVIA EL CURSOR A LINEA1 COLUMNA1 ROTA EL CURSOR UNA COLUMNA A LA DERECHA ROTA EL CURSOR UNA COLUMNA A LA IZQUIERDA ROTA LA PANTALLA UNA COLUMNA A LA DERECHA

SCREEN_L_LCD ROTA LA PANTALLA UNA COLUMNA A LA IZQUIERDA DIR1 , DIR2 ,PAUSA SV0_LCD 0-1535,0-1535,L16 ;muestra elementos del vector0 a lcd desde dir1 de la ram hasta dir2 de la ram con pausa en dcima de segundos cada caracter

DIR1 , DIR2 ,PAUSA SRAM_LCD 0-1535,0-1535,L16 ;muestra elementos de la ram a lcd desde dir1 de la ram hasta dir2 de la ram con pausa en dcima de segundos cada caracter EJEMPLO 1 1 ;selecciona la lcd nmero 1 de 4 ;limpia pantalla de lcd "MENSAJE1",L1,C1,2 ;linea 1, columna1, 2 dcimas de segundo entre caracteres "MENSAJE2",L2,C3,0 ;linea 2, columna 3, sin pausa entre caracteres 5 ;parpadea 5 veces la pantalla 17 ;rota 17 col a la derecha 2,SEG ;pausa de 2 segundos 3 ;parpadea 3 veces la pantalla 17 ;rota 17 col a la izquierda "MENSAJE1",L1,C1,2 ;mensaje en lnea 1, columna1, pausa de 2 ds entre caracter "MENSAJE2",L2,C1,1 ;mensaje en lnea 2, columna1, pausa de 2 ds entre caracter

SELEC_LCD CLR_LCD MENS_LCD MENS_LCD BLINK_LCD RR_LCD DELAY BLINK_LCD RL_LCD MENS_LCD MENS_LCD

94 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

;parpadea 2 veces la pantalla ;convierte por canal 0 (pta0) ;muestra temperatura de lm35 en lcd ;convierte por canal 1 (pta1) ;muestra voltaje en (volt)en lcd multiplicado x 10 EJEMPLO 2 SELEC_LCD 7 ;selecciona la lcd 1, 2 y 3 MOVLF 35,VAR1 ;guarda 35 decimal en var1 SAED_LCDF VAR1 ;muestra en lcd el ascci del dato de la memoria eeprom de dato en la dir 35 SELEC_LCD 15 ;selecciona las 4 lcd's SBCDED_LCD 200 ;muestra en las 4 lcd el bcd (nmero entero) de la memoria eeprom de dato en la dir 200

BLINK_LCD 2 CAD CH0 SLM35_LCD CAD CH1 SVOLT_LCD X10

95 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

TEORIA DISPLAY DE CRISTAL LIQUIDO LCD ALFANUMERICA


CONFIGURACIN DEL MODULO LCD A 4 BIT LPM2 permite controlar simultneamente hasta 4 LCD 2x16, 2x20 2 x 40. Las 4 LCD comparten los pines DATO4, DATO5, DATO6, DATO7 Y RS. La seleccin de cada LCD se realiza mediante la lnea ENABLE la cual debe enviarse a un pin distinto del PIC para cada LCD. En la siguiente configuracin se habilitarn 2 LCD por el puerto C. Por ejemplo, la configuracin CONFIG_LCD4B D4_P11_PTC0,D5_P12_PTC1,D6_P13_PTC2,D7_P14_PTC3,RS_P4_PTC4, ENA1_P6_PTC5, ENA2_P6_PTC6, ENA3_P6_PTNN, ENA4_P6_PTNN significa D4_P11_PTC0: Selecciona el Pin PTC0 para el control del pin 11 de la LCD que corresponde a DATO4 de las 4 LCDs. ENA1_P6_PTC5: Selecciona el pin PTC5 para el control del pin 6 de la LCD que corresponde a ENABLE de la LCD1 ENA3_P6_PTNN: Selecciona el pin virtual PTNN para el control del pin 6 de la LCD que corresponde a ENABLE de la LCD2 EL PIN PTNN significa el pin Ninguno (None) del Puerto Ninguno, en efecto es una forma simblica de NO asignar pines reales del puerto en la configuracin de un mdulo respectivo

PLANO DE CONEXIN DE LCD 2X16 ALFANUMERICA (PLANO LCD)

96 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

Nota: Remitirse a la SECCION 6 - PERIFERICOS DEL MICROCONTROLADOR.DOC para profundizar en la programacin y protocolo de comunicacin de una LCD.

MACROS DEL REPRODUCTOR DE VOZ ISD 25XXX_1 (MISD)


SIMBOLOGIA: MODO P/R : PLAY,REC SIMBOLOGIA: MODO M0 : NORMAL,SALTAR SIMBOLOGIA: MODO PLAY : MC (MENSAJE COMPLETO), MI(MENSAJE INTERRUMPIDO) MI: el pic da la orden de reproduccion y el puntero pasa al siguiente renglon de programa MC: el pic hace un polling (ciclo infinito) hasta que eom = 0 (fin de mensaje), debe emplearse siempre que se reproduzcan 2 mensajes consecutivos. Nota1: Si la aplicacin no requiere grabar mensajes puede enviarse el pin PLAY_REC (pin 27) del ISD a +5vdc y se libera un pin del pic, en la macro CONFIG_ISD1 se configura PR_P27_PTNN. Nota2: Si todos los mensajes se reproducirn en modo interrumpido (mi) entonces puede dejarse al aire la salida eom (pin 25) del isd y se libera un pin del pic, en la macro config_isd1 se configura eom_p25_ptnn. MACROS ARGUMENTOS CONFIG_ISD1 START_P23_PTD0,RESET_P24_PTD1,EOM_P25_PTD2,PR_P27_PTD3,M0_P1_PTD4 asignacin de pines de control en bloque 2 PLAY_ISD1 PLAY_ISD1F NUM_MENSAJE, MODE L8 , MC/MI F8 , MC/MI ;reproduce el mensaje seleccionado ;la posicion del mensaje es: 1 a 255

REC_ISD1 REC_ISD1F STOP_ISD1

POSICION,TIEMPO_REC(SEG) graba un mensaje en una posicion L8 ,L8 programada por un tiempo prog F8 ,F8 posicion del mensaje:1 a 255 genera un pulso en stop de isd

97 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


START_ISD1 P_R_ISD1 M0_ISD1 genera un pulso en start de isd REC/PLAY NORMAL/SALTAR establece modo de isd, play o rec establece modo de pin m0 (saltar)

PLAY_ISD1 PLAY_ISD2 REC_ISD1 PLAY_ISD1 PLAY_ISD1

1,MC 6,MI 2,5 1,MC 6,MI

EJEMPLO ;reproduce el primer mensaje de isd1 en mc ;reproduce el sexto mensaje de isd2 en mi ;graba un mensaje de 5 seg en posicion 2 ;play mensaje1 y no pasa al sig rengln hasta terminar de reproducirlo ;reproduce el sexto mensaje de isd1 y continua al siguiente rengln sin esperar ; que termine mensaje 6

MACROS DEL REPRODUCTOR DE VOZ ISD 25XXX_2 (MISD)


SIMBOLOGIA: MODO P/R : PLAY,REC SIMBOLOGIA: MODO M0 : NORMAL,SALTAR SIMBOLOGIA: MODO PLAY : MC (MENSAJE COMPLETO), MI(MENSAJE INTERRUMPIDO) MI: el pic da la orden de reproduccion y el puntero pasa al siguiente renglon de programa MC: el pic hace un polling (ciclo infinito) hasta que eom = 0 (fin de mensaje), debe emplearse siempre que se reproduzcan 2 mensajes consecutivos: Nota1: si la aplicacin no requiere grabar mensajes puede enviarse el pin PLAY_REC (pin 27) del isd a +5vdc y se libera un pin del pic, en la macro config_isd1 se configura PR_P27_PTNN. Nota2: si todos los mensajes se reproducirn en modo interrumpido (mi) entonces puede dejarse al aire la salida EOM (pin 25) del isd y se libera un pin del pic, en la macro config_isd1 se configura EOM_P25_PTNN. MACROS ARGUMENTOS CONFIG_ISD2 START_P23_PTD0,RESET_P24_PTD1,EOM_P25_PTD2,PR_P27_PTD3,M0_P1_PTD4 asignacion de pines de control en bloque 2 NUM_MENSAJE, MODE REPRODUCE EL MENSAJE SELECCIONADO L8 , MC/MI LA POSICION DEL MENSAJE ES: 1 a 255 F8 , MC/MI POSICION,TIEMPO_REC(SEG) GRABA UN MENSAJE EN UNA POSICION L8 ,L8 PROGRAMADA POR UN TIEMPO PROG F8 ,F8 POSICION DEL MENSAJE:1 A 255 genera un pulso en stop de isd genera un pulso en start de isd

PLAY_ISD2 PLAY_ISD2F

REC_ISD2 REC_ISD2F STOP_ISD2 START_ISD2

98 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

P_R_ISD2 M0_ISD2

REC/PLAY NORMAL/SALTAR

;establece modo de isd, play o rec ;establece modo de pin m0 (saltar)

PLAY_ISD2 PLAY_ISD2 REC_ISD2 PLAY_ISD2 PLAY_ISD2

1,MC 6,MI 2,5 1,MC

EJEMPLO ;reproduce el primer mensaje de isd2 en mc ;reproduce el sexto mensaje de isd2 en mi ;graba un mensaje de 5 seg en posicion 2 ;play mensaje1 y no pasa al sig rengln hasta terminar de reproducirlo

6,MI ;reproduce el sexto mensaje de isd2 y continua al siguiente rengln sin esperar que termine mensaje 6

99 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

TEORA DEL REPRODUCTOR / GRABADOR DE VOZ DE ESTADO SLIDO ISD 25XXX


CONFIGURACIN DEL MODULO ISD 25XXX (2560-2590-25120 60 A 120 SEGUNDOS) Por ejemplo, la configuracin CONFIG_ISD significa que START_P23_PTE0 : Selecciona el Pin PTE0 para el control del pin 23 del ISD que corresponde a START. Por ejemplo, la configuracin CONFIG_ISD significa que START_P23_PTE0 : Selecciona el Pin PTE0 para el control del pin 23 del ISDque corresponde a START. EOM_P25_PTNN : Selecciona el Pin PTNN para el control del pin 25 del ISD que corresponde a EOM. P_R_P27_PTNN : Selecciona el Pin PTNN para el control del pin 27 del ISD que corresponde a PLAY REC. EL PIN PTNN significa el pin Ninguno (None) del Puerto Ninguno, en efecto es una forma simblica de NO asignar pines reales del puerto en la configuracin de un mdulo respectivo. Este artificio slo es posible en algunos mdulos, es decir, se puede optar por el control del ISD con 5 pines o slo con 3. Lo anterior depende de la aplicacin en particular, no obstante, es importante que el usuario conozca la funcin de cada pin del ISD en particular. START: Pin de entrada del ISD. Es el encargado de iniciar o pausar un grabacin o reproduccin. Siempre se requerir enviarlo al PIC, es decir, no se puede configurar como PTNN. RESET: Pin de entrada del ISD. Es el encargado de posicionar en el origen la memoria del ISD en modo grabacin o reproduccin. Siempre se requerir enviarlo al PIC, es decir, no se puede configurar como PTNN. M0 : Pin de entrada del ISD. Es el encargado de seleccionar el modo salto (Skip) para reproducir mensajes no consecutivos. Debe enviarse al PIC siempre que se requiera la reproduccin de cualquier mensaje del ISD en cualquier orden no consecutivo. Cuando slo existe un mensaje en el ISD se puede enviar este pin a tierra y configurarlo como PTNN. EOM : Pin de salida del ISD. Usualmente se conecta un Led en modo source (enciende con 1) con una R de 1k. Indica que el ISD se encuentra reproduciendo o grabando un mensaje. Si se enva al PIC entonces se habilita la opcin de MC o MI, es decir, modo completo y modo incompleto; explico: mediante este pin el PIC puede detectar cuando un mensaje termina de reproducirse, de manera que el puntero de programa (Pointer program) se queda en un bucle (loop) indefinido hasta que el pin EOM retorne a 0 lgico, de esta manera la reproduccin del mensaje nunca se interrumpir (MC modo completo). Lo anterior implica que si el usuario no requiere de esta opcin en particular (MC modo completo de reproduccin) puede optar por no enviar el pin EOM al PIC, es decir configurarlo como PTNN. P_R : Pin de entrada del ISD. Usualmente se enva a +VCC. Cuando est en 1 lgico (+VCC) el ISD est en modo reproduccin de mensajes, en 0 lgico el ISD est en modo grabacin. Cuando slo se requiera reproducir los mensajes previamente grabados entonces se puede optar por enviar este pin directamente a +VCC y configurarlo como PTNN. Por el contrario, si su aplicacin requiere modificar los mensajes grabados en tiempo de ejecucin del programa, entonces es imprescindible enviar este pin al PIC. START_P23_PTE0 RESET_P24_PTE1 M0_P1_PTE2 START_P23_PTE0 RESET_P24_PTE1 M0_P1_PTE2

, EOM_P25_PTA4, P_R_P27_PTA5

, EOM_P25_PTNN, P_R_P27_PTNN

100 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO DE CONEXIN GENERAL DE CONTROL DEL ISD 25XXX MEDIANTE MICROCONTROLADOR O MANUALMENTE (PLANO ISD)

101 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO DE CONEXIN SIMPLIFICADO PARA GRABACION DE SEAL DE AUDIO PROVENIENTE DE UN PC O MICROFONO CON PREAMPLIFICADOR (PLANO ISD)

Para simular el ISD 25XXX se emplea el control COUNTER TIMER de PROTEUS configurado como COUNTER y slo se requieren las salidas START, RESET. Para mejorar la calidad de grabacin del audio directo del PC se puede conectar la salida de audio del PC

102 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


directamente a la entrada ANA IN (20), emplear un programa sintetizador de voz como Loquendo o TALK IT. Otra sugerencia para eliminar el ruido de fondo en la grabacin es alimentar el circuito temporalmente con 3 bateras de 1.5V (4.5V), recuerde que la ISD mximo soporta 5VDC y consume 30mA en grabacin o reproduccin y 1uA en stand BY. Si definitivamente no se puede alimentar con bateras entonces inserte condensadores de alta capacitancia (22000 a 4700uF) de filtro entre Vcc y tierra lo ms cerca del ISD. Un error muy comn es que los mensajes se corran, lo cual se manifiesta en que aparentemente el PIC funciona mal en el modo salto M0 de bsqueda de mensajes y reproduce el mensaja incorrecto. Usualmente esto se debe a que envan sin darse cuenta un flanco de bajada (nivel lgico 0) al pin 27 (Play/Rec). Otra razn quie explica el problema antes mencionado es el error de configurar un pin (A0,A1,A2,A3,A5,E0,E1,E2) como entrada analgica y emplearlo para controlar el ISD. Si definitivamente el ISD no funciona correctamente cambie los pines del microcontrolador asignados al ISD, es posible que uno o varios pines estn averiados. Pero siempre recuerde: si reproduce siempre el primer mensaje entonces dude del pin 1 M0, si se saltan los mensajes, se borran o se insertan mensajes en blanco entonces dude del pin 27 P/R, es posible que el pin del pic est configurado como entrada analgica, est averiado o que est siendo usado por otro mdulo /perifrico como LCD, Display, etc. Sea precabido al manipular el ISD despus de grabar los mensajes y nunca retire la resistencia de 10K del pin 27 a +VCC. Si la grabacin se efecta con alimentacin por adaptador para reducir ruido no olvide conectar un condensador de 470uF/10V del PIN 28 (+VCC digital) a tierra y otro condensador del pin 16 (+VCC Analgico) a tierra lo ms cercano al ISD.

El esquema anterior es un econmico amplificador de audio de 8 Watt de potencia RMS suficiente para escuchar un mensaje de la ISD en una habitacin o casa.

103 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

GRABACIN DE MENSAJES MANUALMENTE EN EL ISD 25XXX


Para grabar mensajes consecutivos en el chip grabador reproductor digital de estado slido isd 25xxx seguir los siguientes pasos: 1. Retirar el microcontrolador 2. Montar el circuito de la figura superior 3. Enviar el pin 1 del ISD (M0) a tierra 4. Cerrar el SW GRABAR (modo grabacin = 0 en el pin 27 PLAY/REC) 5. Presionar el pulsador Reset para posicionarse en el origen de la memoria de grabacin del ISD 6. Presionar el pulsador START para iniciar la grabacin del mensaje 1, y volver a presionarlo para finalizar el mensaje 1. Cada vez que se inicia el proceso de grabacin se encender el LED D1 INDICADOR PLAY/REC conectado al pin 25 EOM del ISD, cuando finalice la grabacin se apagar. Se debe hablar fuerte y cerca del micrfono para obtener buen volumen de reproduccin. 7. Repetir el paso 6 para la grabacin de todos los mensajes consecutivos: mensaje 2, mensaje 3, etc hasta que se llene la memoria del ISD. El usuario detectar el llenado total de la memoria porque al pretender iniciar la grabacin de un nuevo mensaje el LED INDICADOR PLAY REC no se encender, en estas circunstancias debe presionar el botn reset para volver a grabar los mensajes o sencillamente abrir el SW GRABAR para salir del modo grabacin y entrar en modo reproduccin (modo reproduccin = 1 en el pin 27 PLAY/REC). Nota: El negativo del micrfono electret es el que tiene continuidad con la carcasa del micrfono.

104 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

REPRODUCCION DE MENSAJES CONSECUTIVOS MANUALMENTE EN EL ISD 25XXX


Una vez grabados los mensajes en el ISD se pueden reproducir consecutivamente los mensajes de la siguiente forma: 1. Retirar el microcontrolador 2. Montar el circuito de la figura superior 3. Enviar el pin 1 del ISD (M0) a tierra 4. Abrir el sw GRABAR (modo reproduccin = 1 en el pin 27 PLAY/REC) 5. Presionar el pulsador RESET para posicionarse en el origen de la memoria de reproduccin del ISD 6. Presionar el pulsador START para iniciar la reproduccin del mensaje 1. Si vuelve a presionar antes de terminar la reproduccin del mensaje 1 entonces se comportar como una pausa del mensaje 1, si lo presionara despus de finalizar la reproduccin del mensaje 1 entonces iniciar la reproduccin del mensaje 2. Por lo tanto, el pulsador START tiene doble funcin: iniciar una reproduccin o pausarla. Si se desea obtener un mayor volumen de reproduccin se debe implementar un amplificador de audio con un LM386, TDA 2003 u otro amplificador de audio convencional, una forma de amplificacin que recomiendo es mediante el speaker o altavoces de las computadoras, el inconveniente es que estos amplificadores requieren alimentacin de 120VAC. Claro est, usted puede abrirlos y eliminar la etapa del transformador de 120VAC y alimentarlos directamente con su fuente de +5/12VDC.

REPRODUCCIN DE MENSAJES NO CONSECUTIVOS MANUALMENTE EN EL ISD 25XXX


1. Retirar el microcontrolador 2. Montar el circuito de la figura superior 3. Enviar el pin 1 del ISD (M0) a tierra 4. Abrir el SW GRABAR (modo reproduccin = 1 en el pin 27 PLAY/REC) 5. Presionar el pulsador RESET para posicionarse en el origen de la memoria de reproduccin del ISD 6. Si desea reproducir el primer mensaje se presiona el pulsador START para iniciar la reproduccin del mensaje 1. 7. Si se desea reproducir un mensaje diferente al mensaje 1 se debe enviar el pin 1 del ISD (M0) a +VCC (activacin del modo salto de mensajes - SKIP Message) 8. Presionar el pulsador RESET para posicionarse en el origen de la memoria de reproduccin del ISD 9. presionar el pulsador START (N veces -1) donde N es la posicin del mensaje que se desea reproducir, por ejemplo, si se desea reproducir el mensaje 5 del ISD, entonces se presiona START cuatro veces, a continuacin se enviar el pin 1 del ISD (M0) a tierra para salir del modo salto y se presiona el pulsador START para iniciar la reproduccin del mensaje 5. Como pudo observar la clave de la reproduccin no consecutiva de mensajes radica en el pin M0, se coloca en +VCC para saltar hasta el mensaje deseado y luego se coloca en 0 lgico y se presiona el pulsador START para iniciar la reproduccin en el mensaje deseado. Una vez ms, si se vuelve a presionar el pulsador START antes de haber terminado la respectiva reproduccin entonces se pausa el mensaje.

105 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL MODULO DIRECCIONAMIENTO INDIRECTO FSR0,FSR1,FSR2 (MFSR)


Nota: Todas la macros relacionadas con FSR0 tambin estn disponibles para FSR1 Y FSR2 SIMBOLOGIA: S=SET W=WRITE R=READ SIMBOLOGIA: MODO: INDF0,POSTINC0,POSTDEC0,PREDEC0,PLUSW0 SIMBOLOGIA: DIRL: DIRECCION COMO CONSTANTE DEL REGISTRO POR DIRECCIONAMIENTO INDIRECTO SIMBOLOGIA: DIRF: DIRECCION COMO DATO DE UNA VARIABLE DE UN REGISTRO POR DIR INDIRECTO SIMBOLOGIA: L12: CONTANTE DE 12 BIT ( 0 TO 4096) MACRO ARGUMENTOS EXPLICACION SFSR0 DIRL ESTABLECE UNA DIRECCION DE MEMORIA SFSR0 L12 SFSR0F DIRF ESTABLECE UNA DIRECCION DE MEMORIA SFSR0F F8/16 RFSR0L DIRL,MODO LEE VARIABLE DE LA DIRECCIN ESPECIFICADA Y GUARDA EN W RFSR0L L8/12,MODO RFSR0 MODO LEE VARIABLE DE LA ULTIMA DIRECCION Y GUARDA EN W RFSR0F DIRF,MODO LEE VARIABLE DE LA DIRECCIN ESPECIFICADA Y GUARDA EN W RFSR0F F8/16,MODO WFSR0 DIRL,MODO GUARDA CONSTANTE L8 EN LA ULTIMA DIRECCION ESPECIFICADA WFSR0 L8,MODO WFSR0L DIRL,DATO,MODO GUARDA CONST L8 EN LA DIR ESPECIFICADA POR LA CONST DIR WFSR0L L12,L8,MODO WFSR0F DATO,MODO GUARDA DATO DE F8 EN LA ULTIMA DIRECCION ACCEDIDA WFSR0F F8,MODO WFSR0FF DIRF,DATO,MODO GUARDA DATO F8 EN LA DIRECCION ESPECIFICADA POR LA VAR DIR WFSR0FF F8/16,F8,MODO

106 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL VECTOR0_TIPO_BYTE, VECTOR0_TIPO_WORD MACROS DEL VECTOR1_TIPO_BYTE, VECTOR1_TIPO_WORD MACROS DEL VECTOR2_TIPO_BYTE, VECTOR2_TIPO_WORD
(MVECTOR)

REGISTROS DESTINO DEL MODULO VECTORES MODULO VECTOR0 :REG_V0,REG_V0:2 MODULO VECTOR1 :REG_V1,REG_V1:2 MODULO VECTOR2 :REG_V2,REG_V2:2 Nota1: Todas las macros relacionadas con el mdulo VECTOR0 tambin existen para VECTOR1 y VECTOR2 Nota2: El mdulo decodificador infrarrojo, transceiver TRF 2.4 y las macros: CLEAR_RAM, CLR_ALL_RAM_GPR, FILL_RAM, FILL_RAMF,SRAM_LCD y TXRAM_UART alteran en puntero del VECTOR 2. Nota3: para manipular un elemento de un vector se escribe la direccion + offset y se trata como una variable normal. Por ejemplo para limpiar el quinto elemento; del vector 0 se escribe: clear (org_v0 + 5). para comparar si el dcimo elemento del vector 1 es igual a el caracter "m" se escribe: IFFIL (ORG_V1 + 10),"M",LABEL. Nota4: el registro seleccionado del vector se comportar en la macro dependiendo de la direccin en que se encuentre, por ejemplo, si el elemento seleccionado queda en la direccin 5 absoluta de la memoria ram, entonces est entre la dir 0 y 99, por lo tanto lpm2 lo tratar como tipo byte. MACROS ARGUMENTOS

VECTOR0_TIPO_BYTE SI/NO ;activacin/desactivacin en bloque 1 VECTOR0_TIPO_WORD SI/NO ;activacin/desactivacin en bloque 1 VECTOR1_TIPO_BYTE SI/NO ;activacin/desactivacin en bloque 1 VECTOR1_TIPO_WORD SI/NO ;activacin/desactivacin en bloque 1 VECTOR2_TIPO_BYTE SI/NO ;activacin/desactivacin en bloque 1 VECTOR2_TIPO_WORD SI/NO ;activacin/desactivacin en bloque 1 SI/NO ;activacin/desactivacin en bloque 1 CONFIG_ORG_VECTOR0 DIR ;dir 0 a 1535 en bloque 2 SET_V0 DIR ;establece posicion del vector con constante SET_V0F REGISTRO ;establece posicion del vector con variable FILL_V0 CONSTANTE,DIR_INICIO,DIR_FIN ;llenar vector0 con limites constantes y dato en constante FILL_V0F REGISTRO,DIR_INICIO,DIR_FIN ;llenar vector0 con limites constantes y dato en variable R_V0 leer RI_V0 ;leer e incrementar RD_V0 ;leer y decrementar W_V0 CONSTANTE ;escribir constante W_V0F REGISTRO ;escribir var WI_V0 CONSTANTE ;escribir constante e incrementar WI_V0F REGISTRO ;escribir var e incrementar WD_V0 CONSTANTE ;escribir constante y decrementar WD_V0F REGISTRO ;escribir var y decrementar IFCIV0 CADENA,DIR_INICIO,LABEL ;compara si la cadena de caracteres coincide con los elementos del vector tipo byte a partir del elemento dir_inicio, sino coincide salta a label

107 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


DIR1 , DIR2 ,PAUSA SV0_LCD 0-1535,0-1535,L16 ;envia elementos del vector0 a lcd DESDE DIRECCIN1 HASTA DIRECCIN2 DEL VECTOR con pausa en dcima de segundos cada caracter DIR1 ,DIR2 ,PAUSA TXV0_UART 0-1535,0-1535,L16 ;envia elementos del vector0 por uart DESDE DIRECCIN1 HASTA DIRECCIN2 DEL VECTOR con pausa en milisegundos entre cada caracter EJEMPLO 1 ;llena las posiciones de var1 a var2 con var4

FILL_V0FF LBL1

MOVFFF SET_V0F WI_V0F INCRE1 IFFMAF

VAR1,VAR3 VAR1 VAR4 VAR3 VAR3,VAR2,LBL1

PROM_V0F LBL2

MOVFFF CLEAR W1 SET_V0F RI_V0 INCREF INCRE1 IFFMAF RESTFF INCRE1 DIVFF MOVFFF

VAR1,VAR3 VAR1

;saca el promedio de las pos var1 a var2 la respuesta esta en w1

W1,REG_V0 VAR3 VAR3,VAR2,LBL2 VAR2,VAR1 RESULTADO W1,RESULTADO COCIENTE,W1

SUM_V0F

LBL3

MOVFFF VAR1,VAR3 ;hace la sumatoria de var1 a var2,la respuesta;esta en w1 CLEAR W1 SET_V0F VAR1 RI_V0 INCREFW1,REG_V0 INCRE1 VAR3 IFFMAF VAR3,VAR2,LBL3

FIND_V0F

LBL7

LBL9 LBL_NOFIND LBL_BINGO

MOVLF MOVFFF SET_V0F RI_V0 IFFIF BRA INCRE1 IFFMAF

11,VAR4 VAR1,VAR3 VAR1

;si encuentra var4 en el vector salta a LBL_BINGO ; y en var3 esta la posicion sino llega a LBL_NOFIND

REG_V0,VAR4,LBL9 LBL_BINGO VAR3 VAR3,VAR2,LBL7

108 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


MAX_V0F MOVFFF SET_V0F RI_V0 MOVFFF MOVFFF RI_V0 INCRE1 IFFMAF MOVFFF MOVFFF IFFMAF MOVFFF SET_V0F RI_V0 MOVFFF MOVFFF RI_V0 INCRE1 IFFMEF MOVFFF MOVFFF IFFMAF VAR1,VAR3 BUSCAR EL MAX ENTRE VAR1 Y VAR2 ,EL VALOR MAX VAR1 QUEDA EN VAR4 Y LA POSICION QUEDA EN VAR5 REG_V0,VAR4 VAR1,VAR5 VAR3 REG_V0,VAR4,LBL6A REG_V0,VAR4 VAR3,VAR5 VAR3,VAR2,LBL7A VAR1,VAR3 VAR1 REG_V0,VAR4 VAR1,VAR5 VAR3 REG_V0,VAR4,LBL6D REG_V0,VAR4 VAR3,VAR5 VAR3,VAR2,LBL7D ;buscar el min entre var1 y var2 ,el valor max ;queda en var4 y la posicion queda en var5

LBL7A

LBL6A MIN_V0F

LBL7D

LBL6D

EJEMPLO2 ;en bloque 1: VECTOR0_TIPO_BYTE SI ;en bloque 2: CONFIG_ORG_VECTOR0 768 SET_V0 WI_V0 WI_V0 WI_V0 WI_V0 WI_V0 SV0_LCD TXV0_UART IFCIV0 50 "A" "B" "C" "D" "E" 50,54,2 52,54,100 "CDE",52,LBL1 ;activa vector 0 tipo byte (no funciona con vector tipo word) ;establece direccion inicial en ram del vector 0

;establezco direccin inicial en vector0 ;guardo "a" en posicion 50 de vector0 ;guardo "b" en posicion 51 de vector0 ;guardo "c" en posicion 52 de vector0 ;guardo "d" en posicion 53 de vector0 ;guardo "e" en posicion 54 de vector0 ;envia "ABCDE" a lcd con pausa de 2 dec de seg entre cada letra ;envia "CDE" por uart con pausa de 100 ms entre cada caracter ;compara el elemento 52 con "C", compara el elemento 53 con "D" ;compara el elemento 54 con "E", si coincide toda la cadena salta al ;siguiente rengln, sino salta a LBL1

109 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL MEMORIA EEPROM DE DATO DEL PIC (MMED)


El registro destino de lectura de eeprom de dato es "reg_eedato" tipo byte MACROS ARGUMENTOS DIR READ_EED L8 ;lee un dato de la eeprom y lo guarda en reg_eedato READ_EEDF WRITE_EED DIR F8 ;lee un dato de la eeprom y lo guarda en reg_eedato

DIR,DATO L8 ,L8 ;escribe un dato en la direccion estipulada

DIR,DATO WRITE_EEDF F8 ,F8 ;escribe un dato en la direccion estipulada WRITE_EEDLF SED_LCD SED_LCDF SAED_LCD SAED_LCDF SBCDED_LCD SBCDED_LCDF TXED_UART TXED_UARTF TXAED_UART TXAED_UARTF TXBCDED_UART TXBCDED_UARTF DIR,DATO L8 ,F8 ; escribe un dato en la direccion estipulada L8 F8 L8 F8 L8 F8 L8 F8 L8 F8 L8 F8 ;muestra el dato de la direccion de eeprom de dato ;muestra el dato de la direccion de eeprom de dato ;muestra el ascii del dato de la direccion de eeprom de dato ;muestra el ascii del dato de la direccion de eeprom de dato ;muestra el bcd de la direccion de eeprom de dato ;muestra el bcd de la direccion de eeprom de dato ;transmite por UART el dato de la direccin en L8 ;transmite por UART el dato de la direccin en F8 ;transmite por UART el dato ASCII 0-9 de la direccin en L8 ;transmite por UART el dato ASCII 0-9 de la direccin en F8 ;transmite por UART el dato BCD de la direccin en L8 ;transmite por UART el dato BCD de la direccin en F8 EJEMPLO 1

READ_EED 45 lee el dato de la dir 45 de la eeprom y lo muestra en la lcd l1 col 5 PRINT_LCDAF REG_EEDATO,L1,C5 WRITE_EED 45,"A" escribe el ascci de la letra a en la direccion 45 de la eeprom de dato EJEMPLO 2 Declaracin de tabla en memoria eeprom de dato maximo 256 datos tipo byte en bloque 10 DE "LPM" DIR 0 = "L", DIR1 = "P", DIR2 = "M", DIR3 = "2"

110 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL MODULO RELOJ CON TIMER (MRELOJ)


;REGISTROS DESTINO: HORA:MINUTO:SEGUNDO ;_________________________________________________________________________________________ ; MACROS ARGUMENTOS ;_________________________________________________________________________________________ ;CLR_RELOJ :RESETEA EL RELOJ : 00:00:00 ;INC_RELOJ :INCREMENTA 1 SEGUNDO DEL RELOJ ;DEC_RELOJ :DEREMENTA 1 SEGUNDO DEL RELOJ ; HORAS,MINUTOS,SEGUNDOS ;LOAD_RELOJL L8 ,L8 ,L8 ;CARGA UNA HORA EN EL RELOJ ;LOAD_RELOJF F8 ,F8 ,F8 ;CARGA UNA HORA EN EL RELOJ ;SRELOJ_LCD ;MUESTRA HORA DEL PIC EN LCD HH:MM:SS ;_________________________________________________________________________________________ ; EJEMPLO ; CONFIGURAR INTERRUPCION DE TMR0 CADA 1 SEG EN HIGH PRIORITY ;_________________________________________________________________________________________ ;ORG12_INT_TMR0: INC_RELOJ ;INCREMENTA RELOJ ; LINE_COL_LCD L1,C1 ;POSICIONA LCD ; SRELOJ_LCD ;MUESTRA HORA, MINUTO, SEG ; IFFIL HORA,17,LBL1 ; IFFIL MINUTO,30,LBL1 ; IFFIL SEGUNDO,25,LBL1 ; ... CODIGO A REALIZAR A LAS 5:30:25 PM ... ;LBL1 .... TODAVIA NO HA LLEGADO LA HORA PROGRAMADA ....

; OUT_INT ;SALIR DE INTERRUPCION ;

111 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS INTERFAZ PERIFERICO SERIAL SPI DE 8 BIT (MSPI)


Enva u obtiene un bit con cada flanco de subida de la seal de reloj, si el pin configurado en el bloque 2 para dato del modulo spi no pertenece al puerto B entonces se debe insertar una resistencia de pull up externa de 4.7kohm. MACROS CONFIG_SPI LOAD_SPI LOAD_SPIF GET_SPI ARGUMENTOS PIN_DATO,PIN_CLOCK asignacion de pines en bloque 2 L8 carga constante tipo byte en modulo spi F8 carga variable tipo byte en modulo spi obtiene un dato tipo byte y lo muestra en la variable "REG_SPI" EJEMPLO DATO_SPI_PTE0,CK_SPI_PTE1 ;asignacion de pines en bloque 2 1 VAR1 REG_SPI ;carga la constante b'00000001' en modulo spi ;carga el valor de var1 tipo byte en modulo spi ;obtiene un byte de un modulo spi ;muestra en lcd el byte leido por spi

CONFIG_SPI LOAD_SPI LOAD_SPI GET_SPI SBCD_LCDF

MACROS DEL BUS_I2C (MI2C)


REG_I2C : DEVUELVE EL DATO LEIDO POR EL BUS I2C Nota: si los pines configurados en el bloque 2 para dato y ck del bus i2c no pertenece al puerto b entonces se debe insertar una resistencia de pull up externa de 4.7k. MACROS CONFIG_BUS_I2C WRITE_I2C WRITE_I2CF READ_I2C READ_END_I2C START_I2C STOP_I2C ARGUMENTOS PIN_DATO,PIN_CLOCK L8 F8 EXPLICACION ASIGNACION DE PINES EN BLOQUE 2

112 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL TIME KEEPER DS1307 I2C (MTK)


REGISTROS DESTINO DEL MODULO TIME_KEEPER_DS1307 SEGUNDO_TK : (0 A 59' MINUTO_TK : (0 A 59) HORA_TK : (0 A 23) DIA_SEMANA_TK : (1 A 7) (DOMINGO A LUNES) DIA_MES_TK : (1 A 31) MES_TK : (1 A 12) (ENERO A DICIEMBRE) AO_TK : (0 A 99) (2000 A 2099) Nota: por el pin 7 del ds1307 (sqw/out) se obtiene una seal cuadrada a 1 hz, 4 khz, 8 khz 32 khz la cual se puede enviar al pic por entrada de interrupcin y actualizar la hora cada segundo. el cristal oscilador debe ser de 32768 hz y la bateria opcional es de 3volt entre los pines 3 y 4. la batt de litio de 48 ma/hr dura 10 aos aproximadamente a 25c. PINES DE CONEXION DEL TIMEKEEPER DS1307 DE 8 PINES X1 = PIN 1 (INPUT XTAL) XTAL DE CUARZO DE 32768 Hz, NO REQUIERE CONDENSADOR DE ESTABILIZACION X2 = PIN 2 (OUT XTAL) VBAT = PIN 3 (2.0 A 3.5V, SE SUGIERE 3 VOLTIOS) GND = PIN 4 DATO = PIN 5 INPUT/OUTPUT REQUIERE RESISTENCIA INTERNA O EXTERNA DE PULL UP (4.7KOHM) CK = PIN 6 REQUIERE RESISTENCIA INTERNA O EXTERNA DE PULL UP (4.7KOHM) SQW = PIN 7 (SALIDA DE DRENADOR ABIERTO A 1 Hz, 4 kHz, 8 kHz 32 kHz) VCC = PIN 8 (+ 5VDC) MACROS ARGUMENTOS EXPLICACION TIME_KEEPER_DS1307_I2C SI/NO activacion/desactivacion en bloque 1 LOAD_TIMEK carga en el ds1307 el valor configurado en los registros del time keeper WRITE_TIMEK HH,MM,SEG,DIA_SEMANA,DIA_MES,MES,AO establece hora y fecha en constantes WRITE_TIMEKF HH,MM,SEG,DIA_SEMANA,DIA_MES,MES,AO establece hora y fecha en variables READ_TIMEK lee hora y fecha del time keeper y los guarda en los registros destino SHTK_LCD MUESTRA HORA DE TIME KEEPER DS1307 EN LCD "HH:MM:SS" SFTK_LCD MUESTRA FECHA DE TIME KEEPER DS1307 EN LCD "LUN 14/AGO/2007"

113 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


EJEMPLO ESCRITURA EN TIME KEEPER DS1307 12,30,00,LUNES,30,ABRIL,7 ;carga: 12:30:00 lunes 30 de abril de 2007 LECTURA EN TIME KEEPER DS1307 ;posiciona puntero de lcd ;muestra hora, minuto, seg del timek en lcd L2,C1 ;posiciona puntero de lcd ;muestra fecha del timekeeper en lcd L1,C1

WRITE_TIMEK

LINE_COL_LCD SHTK_LCD LINE_COL_LCD SFTK_LCD

COMPARACION DE HORA Y FECHA EN TIME KEEPER DS1307 inserte el siguiente codigo el la interrupcion de timer0 en low priority configurado con periodo de 1 seg nota:la comparacion debe realizarse con constantes decimales ORG12_INT_TMR0: READ_TIMEK ;lee la fecha y hora del ds1307 IFFIL AO_TK,8,LBL1 IFFIL MES_TK,1,LBL1 IFFIL DIA_MES_TK,5,LBL1 IFFIL HORA_TK,17,LBL1 IFFIL MINUTO_TK,30,LBL1 IFFIL SEGUNDO_TK,25,LBL1

... inserte aqu el cdigo a ejecutar a las 5:30:25 pm del da 5 de enero de 2008 ... LBL1 .... todava no ha llegado la fecha y hora programada .... OUT_INT

TEORIA DEL TIMEKEEPER GENERADOR DE FECHA Y HORA


CONFIGURACIN DEL MODULO TIMEKEEPER DS1307 Por ejemplo, la configuracin CONFIG_BUS_I2C Significa que Las seales de Dato y Clock del Time Keeper DS1307 se controlarn con los pines PTA2 y PTA3 respectivamente. Recuerde que debe usar resistencias de pull up de 4.7K a la lnea de dato y clock del time keeper. Si emplea el puerto B puede ahorrarse las resistencias de pull up. DATO_I2C_PTA2,CK_I2C_PTA3

114 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO DE CONEXIN DE UN TIMEKEEPER DS1307 DS1302 (PLANO


TK)

Nota: Remitirse a la carpeta data sheet del CD DIGIBOOK para profundizar en el protocolo I2C del Time Keeper DS1307. Hasta la fecha solo hay Macros de LPM2 para el DS1307, no para el DS1302.

115 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DE MEMORIA SERIAL 24LC256 I2C (256KBITS = 32KBYTES) (MES24256)


REGISTROS DESTINO DEL MODULO MEMORIA_24256_I2C REG_M24XXX : devuelve el dato leido de la memoria eeprom serial DIR_LOW_M24XXX : parte baja de la direccion establecida en la memoria DIR_HIGH_M24XXX : parte alta de la direccion establecida en la memoria DIR_M24XXX:2 = DIR_LOW_M24XXX:DIR_HIGH_M24XXX : direccion establecida en la memoria Nota: una vez establecida la direccin mximo se pueden leer 64 bytes consecutivamente para la memoria 24lc256. Se pueden controlar hasta 8 memorias 24xxx cambiando las direcciones por hardware (a2-a1-a0). considerar la mxima velocidad de escritura y lectura permitida. PINES DE LA MEMORIA 24LC256 A0 = PIN 1 ENVIAR A TIERRA SI SOLO SE CONECTARA 1 MEMORIA EN EL CIRCUITO A1 = PIN 2 ENVIAR A TIERRA SI SOLO SE CONECTARA 1 MEMORIA EN EL CIRCUITO A2 = PIN 3 ENVIAR A TIERRA SI SOLO SE CONECTARA 1 MEMORIA EN EL CIRCUITO DATO = PIN 5 INPUT/OUTPUT REQUIERE RESISTENCIA INTERNA O EXTERNA DE PULL UP (4.7KOHM) CK = PIN 6 REQUIERE RESISTENCIA INTERNA O EXTERNA DE PULL UP (4.7KOHM) WP = PIN 7 PROTECT WRITE, 0:MEMORIA NO PROTEGIDA, 1= MEMORIA PROTEGIDA _________________________________________________________________________________________ MACROS ARGUMENTOS EXPLICACION MEMORIA_SERIAL_24LC256_I2C SI/NO activacion/desactivacion en bloque 1 SET_DIR_M24256F SET_DIR_M24256 WRITE_M24256F WRITE_M24256 STOP_WRITE_M24256 SETUP_R_M24256F SETUP_R_M24256 READ_M24256 READ_END_M24256 EJEMPLO ESCRITURA EN MEMORIA EEPROM SERIAL 24LC256 SET_DIR_M24256 WRITE_M24256 WRITE_M24256 WRITE_M24256 STOP_WRITE_M24256 0 "A" "B" "C" ;configura inicio de escritura en dir = 0 ;guarda letra a en dir 0 ;guarda letra b en dir 1 ;guarda letra c en dir 2 ;fin de escritura F8/16 L16 F8 L8 F8/16 L16 dato entre 0 y 32767 para memoria 24lc256 dato entre 0 y 32767 para memoria 24lc256

116 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


LECTURA EN MEMORIA EEPROM SERIAL 24LC256 SETUP_R_M24256 0 READ_M24256 CHAR_LCDF REG_M24XXX READ_M24256 CHAR_LCDF REG_M24XXX READ_M24256 CHAR_LCDF REG_M24XXX READ_END_M24256 ;configura inicio de lectura en dir = 0 ;lee dato de dir 0 y lo guarda en reg_m24xxx ;muestra en lcd caracter "a" ;lee dato de dir 1 y lo guarda en reg_m24xxx ;muestra en lcd caracter "b" ;lee dato de dir 0 y lo guarda en reg_m24xxx ;muestra en lcd caracter "c" ;fin de lectura

MACROS DEL MODULO COUNTER 9 DIGITOS


MACROS CLR_C9DIG INC_C9DIG DEC_C9DIG SC9DIG_LCD ARGUMENTOS :RESETEA EL CONTADOR DE 9 DIGITOS : 0 0 0 0 0 0 0 0 0 :INCREMENTA EN 1 EL CONTADOR DE 9 DIGITOS :DECREMENTA EN 1 EL CONTADOR DE 9 DIGITOS MUESTRA EL CONTADOR EN LCD

(MC9DIG)

BCD9,BCD8,BCD7,BCD6,BCD5,BCD4,BCD3,BCD2,BCD1 LOAD_C9DIG L8 ,L8 ,L8 ,L8 ,L8 ,L8 ,L8 ,L8 ,L8 LOAD_C9DIGF F8 ,F8 ,F8 ,F8 ,F8 ,F8 ,F8 ,F8 ,F8 ;nota: el usuario puede acceder a cada digito de las 9 cifras del contador ; mediante los registros destino. por ejemplo, si el usuario desea visualizar ; el numero 729 al iniciar el programa puede cargar en el bloque 6 los registros ; c9dig3:c9dig2:c9dig1 asi: ; ; ; MOVLF MOVLF MOVLF 7,C9DIG3 2,C9DIG2 9,C9DIG1

;_________________________________________________________________________________________ ; EJEMPLO ;incrementa el contador desde 0 a 999'999.999 cada segundo y lo muestra en la lcd configurar interrupcion de tmr0 cada 1 seg en high or low priority ;_________________________________________________________________________________________ ; inserte el siguiente codigo en bloque 8: ;INCREMENTA COUNTER EN 1 L1,C1 ;POSICIONA LCD ;MUESTRA CONTADOR 9 DIGITOS ;SALIR DE INTERRUPCION

;ORG12_INT_TMR0: INC_C9DIG ; LINE_COL_LCD ; SC9DIG_LCD ; OUT_INT ;

117 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL CONTROL DE DISPLAY 7 SEGMENTOS (MD7SEG)


MACROS ARGUMENTOS CONFIG_DISP_7SEG MODO,PUERTO_SEGMENTO,COMUN_DIG9,COMUN_DIG8,COMUN_DIG7,COMUN_DIG6,COMUN_DIG5,COMUN _DIG4,COMUN_DIG3,COMUN_DIG2,COMUN_DIG1 ;asignacion de pines de control en bloque 2 BARRIDO_7SEG :muestra en display de 7 seg matricial el valor del contador de 9 digitos (C9DIG1 A C9DIG9)

;REGISTROS DESTINO: C9DIG9:C9DIG8:C9DIG7:C9DIG6:C9DIG5:C9DIG4:C9DIG3:C9DIG2:C9DIG1 ;NOTA: EL USUARIO PUEDE ACCEDER A CADA DIGITO DE LAS 9 CIFRAS DEL DISPLAY 7 SEGMENTOS ; MEDIANTE LOS REGISTROS DESTINO. POR EJEMPLO, SI EL USUARIO DESEA VISUALIZAR ; EL NUMERO 729 AL INICIAR EL PROGRAMA PUEDE CARGAR EN EL BLOQUE 6 LOS REGISTROS ; C9DIG3:C9DIG2:C9DIG1 ASI: ; ; ; MOVLF MOVLF MOVLF 7,C9DIG3 2,C9DIG2 9,C9DIG1

EJEMPLO ;contador de 0 a 999'999.999 que se incrementa cada 1 segundo y lo muestra en display 7 seg ;digite la macro barrido_7seg en bloque 7 en forma de bucle indefinido y configure la ;interrupcion de tmr0 cada 1 seg en bloque 2 ; inserte el siguiente codigo en bloque 7: BARRIDO_7SEG ;BARRIDO CCLICO DE DISPLAYS 7 SEGMENTOS BRA MAIN_PROG

;MAIN_PROG: ;

inserte el siguiente codigo en bloque 8: INC_C9DIG OUT_INT ;INCREMENTA COUNTER EN 1 CADA SEGUNDO ;SALIR DE INTERRUPCION

;ORG12_INT_TMR0: ;

DISPLAY DE 7 SEGMENTOS MATRICIAL CON MANEJO DINAMICO


CONFIGURACIN DEL MODULO DISPLAY 7 SEGMENTOS DE 9 DIGITOS

Por ejemplo, la configuracin en bloque 2 CONFIG_DISP_7SEG MODO_CC,PORT_SEG_PTD, COM9_PTC7, COM8_PTC6,COM7_PTC5,COM6_PTC4, COM5_PTC3, COM4_PTC2, COM3_PTC1,COM2_PTC0,COM1_PTE0 Significa que los 9 displays de 7 segmentos (9 display es el mximo 1 es el mnimo) son de ctodo comn (CC) , que

118 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


el puerto D (PTD0 = a, PTD1 = b, PTD2=c, PTD3 = d, PTD4 = e, PTD5 = f, PTD6 = g, PTD7 = punto) controlar los segmentos de todos los displays. Los ctodos comunes de los display estarn en: PTC7 A PTC0 Y PTE0. Otro ejemplo CONFIG_DISP_7SEG MODO_AC,PORT_SEG_PTD, COM9_PTNN, COM8_PTNN,COM7_PTNN,COM6_PTNN, COM5_PTNN, COM4_PTNN, COM3_PTE2,COM2_PTE1,COM1_PTE0 Significa que el mdulo Display de 7 segmentos slo controlar 3 displays de nodo comn (AC) , que el puerto D (PTD0 = a, PTD1 = b, PTD2=c, PTD3 = d, PTD4 = e, PTD5 = f, PTD6 = g, PTD7 = punto) controlar los segmentos de todos los displays. Los nodos comunes de los display estarn en PTE2, PTE1 y PTE0. ;REGISTROS DESTINO: C9DIG9:C9DIG8:C9DIG7:C9DIG6:C9DIG5:C9DIG4:C9DIG3:C9DIG2:C9DIG1 nota: el usuario puede acceder a cada digito de las 9 cifras del display 7 segmentos mediante los registros destino. Por ejemplo, si el usuario desea visualizar el numero 729 al iniciar el programa puede cargar en el bloque 6 los registros c9dig3:c9dig2:c9dig1 asi: ; ; ; MOVLF MOVLF MOVLF 7,C9DIG3 2,C9DIG2 9,C9DIG1

; EJEMPLO ;contador de 0 a 999'999.999 que se incrementa cada 1 segundo y lo muestra en display 7 seg digite la macro barrido_7seg en bloque 7 en forma de bucle indefinido y configure la interrupcion de tmr0 cada 1 seg en bloque 2 ;Inserte el siguiente codigo en bloque 7: ;MAIN_PROG: BARRIDO_7SEG ; BRA MAIN_PROG ; ;BARRIDO CCLICO DE DISPLAYS 7 SEGMENTOS

inserte el siguiente codigo en bloque 8:

;ORG12_INT_TMR0: INC_C9DIG ;INCREMENTA COUNTER EN 1 CADA SEGUNDO ; OUT_INT ;SALIR DE INTERRUPCION

La macro CLR_PUNTO desactiva la visualizacin de todos lo puntos de los display 7 segmentos Mediante las banderas F_PUNTO1 a F_PUNTO9 se controlan los puntos de cada uno de los display 7 segmentos, para activar la visualizacin del punto se levanta la bandera, por ejemplo si se desea visualizar el numero 3.1415 se activa F_PUNTO5 as: ; ON F_PUNTO5

119 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO DE CONEXIN DE UN DISPLAY DE 7 SEGMENTOS MATRICIAL DE 4 DIGITOS SIN AMPLIFICADOR DE CORRIENTE


(PLANO D7SEG)

(Este circuito es vlido si no se requiere gran luminosidad en los displays, recuerde que los PIC mximo pueden proporcionar 25mA en modo sink/source)

120 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

Para incrementar la luminosidad en los displays se pueden agregar etapas amplificadoras de corriente mediante transistores en colector comn como lo ilustra la siguiente figura.

121 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL EXPANSOR DE SALIDAS SIPO 4015B DE 32 BIT (MSIPO)


REGISTROS DESTINO DEL MODULO SIPO REG__SIPO1,REG__SIPO2,REG__SIPO3,REG__SIPO4 NOTA1:rellenar con VARNN los registros vacios, LA SALIDAS SE LLAMAN OUT_SIPO1 A OUT_SIPO32 NOTA2:se puede usar dato del sipo simultaneamente con un dato(4-7) de la lcd NOTA3: la salidas sipo son tipo on/off, no se pueden asignar a otros modulos de LPM como blink, lcd, pwm, motor paso paso, pac, etc. MACROS ARGUMENTOS CONFIG_SIPO_4015B DATO_P15_PTE1,CK_P1_9_PTE2 asignacion de pines en bloque 2 SIPO1,SIPO2,SIPO3,SIPO4 LOAD_SIPO L8 ,L8 ,L8 ,L8 establece un valor para los 4 sipos LOAD_SIPOF F8 ,F8 ,F8 ,F8 CLR_SIPO LOAD_SIPO1 LOAD_SIPO1F LOAD_SIPO2 LOAD_SIPO2F LOAD_SIPO3 LOAD_SIPO3F LOAD_SIPO4 LOAD_SIPO4F RUN_SIPO pone en cero los 4 sipos carga configuracin en sipo1 carga configuracin en sipo2 carga configuracin en sipo3 carga configuracin en sipo4 establece la configuracin programada en los 4 sipos EJEMPLO 15,15,B'00001111',B'00001111' ;carga sipo1 a 4 con 15 OUT_SIPO30 ;invierte el bit 5 del registro sipo4 ;establece la configuracin programada

L8 F8 L8 F8 L8 F8 L8 F8

LOAD_SIPO INV_BIT RUN_SIPO

122 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO DE EXPANSION DE PUERTOS DE SALIDA CON REGISTRO DE DESPLAZAMIENTO SIPO (4015B 74LS164)
(PLANO SIPO)

Nota1: LPM controla hasta 4 registros SIPO en cascada (expansin a 32 salidas con 4 SIPO de 8 bit en cascada). La conexin en cascada de 2 ms SIPO consiste en mandar todas las entradas RESET (R) a tierra, unir todas las entradas CK, conectar la salida Q7 de cada SIPO con la entrada DATO del siguiente. Sobra decir que slo se requieren 2 pines del PIC (CK, DATO) para controlar las 32 salidas. Los pines de control (CK, DATO) son seleccionados por el programador en el bloque 2 con la siguiente macro: CONFIG_SIPO_4015B DATO_P15_PTC1,CK_P1_9_PTC0 2 Nota2: Aunque LPM controla indistintamente el 4015B 74LS164, se recomienda trabajar con tecnologa CMOS (40XXB) por efecto de Fan In, impedancia de entrada y baja disipacin de potencia. Nota3: LPM2 permite multiplexar el pin DATO_P15 del registro SIPO con cualquiera de los pines de salida del teclado matricial o de la LCD (D4,D5,D6,D7,RS) excepto ENABLE.

123 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL EXPANSOR DE ENTRADAS PISO 4021B DE 32 BIT


(MPISO)

REGISTROS DESTINO DEL MODULO PISO: REG_PISO1,REG_PISO2,REG_PISO3,REG_PISO4 MACROS ARGUMENTOS CONFIG_PISO_4021B GET_PISO DATO_P3_PTE1,CK_P10_PTA5,LOAD_P9_PTA4 asignacion de pines en bloque 2

:obtiene el estado de los 4 reg piso y lo muetra en las variables REG_PISO1, REG_PISO2, REG_PISO3, REG_PISO4 EJEMPLO ; obtiene estado de entradas piso ; pregunta si el bit 5 del piso4 =1 ; muestra letra a en lcd si inp_piso30 =1

GET_PISO IF1 INP_PISO30,LBLPISO CHAR_LCD "A" LBLPISO

124 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO DE EXPANSION DE PUERTOS DE ENTRADA CON REGISTRO DE DESPLAZAMIENTO PISO (4021B 74LS165)
(PLANO PISO)

Nota1: LPM controla hasta 4 registros PISO en cascada (expansin a 32 entradas con 4 PISO de 8 bit en cascada). La conexin en cascada de 2 ms PISO consiste en unir todas las entradas CK y LOAD de los registros PISO como se aprecia en la siguiente figura en la cual se realiza una expansin a 16 entradas con 2 registros PISO 4021B de bajo costo. La salida serial de datos del ltimo PISO (pin 3 del 4015B PISO 2) es la que se conecta con el pin entrada de datos del microcontrolador (PTC7. Sobra decir que slo se requieren 3 pines del PIC (CK, DATO, LOAD) para leer las 32 entradas (si conecta 4 PISO de 8 bit). Los pines de control (CK, DATO, LOAD) son seleccionados por el programador en el bloque 2 con la siguiente macro: CONFIG_PISO_4021B DATO_P3_PTD0,CK_P10_PTE1,LOAD_P9_PTE2 Nota 2: Aunque LPM2 controla indistintamente el 4021B 74LS165, se recomienda trabajar con tecnologa CMOS (40XXB) por efecto de Fan In, impedancia de entrada y baja disipacin de potencia. Nota 3: LPM2 permite multiplexar el pin DATO_P3 del registro PISO con cualquiera de los pines de salida del teclado matricial 4x4 o de la LCD (D4, D5, D6, D7, RS) excepto ENABLE.

125 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL MODULO TABLA EN MEMORIA DE PROGRAMA FLASH EN EL BLOQUE 9 (MTABLA)


Se puede declarar hasta 32768 datos tipo byte 16384 datos tipo word en la memoria de programa de un 18f452. cada 2 datos tipo byte consumen un word (16 bit). MACROS READ_TABLA READ_TABLAW ARGUMENTOS NAME_TABLA,POSICION ETIQUETA ,F16 EXPLICACION

;Lee datos tipo byte de una tabla y devuelve el resultado en "REG_TABLA"

ETIQUETA ,F16 ;lee datos tipo word de una tabla y devuelve el resultado en "REG_TABLAW ;lee el siguiente dato de la tabla y devuelve el resultado en "REG_TABLA" ;lee el siguiente dato de la tabla y devuelve el resultado en "REG_TABLAW"

READ_TABLA_SIG READ_TABLAW_SIG

EJEMPLO 1 LECTURA DE TABLA TIPO BYTE Nota:declare una variable llamada var1 tipo word en bloque 3 y la tabla1 en bloque 9 MOVLF 1,VAR1 READ_TABLA TABLA1,VAR1 reg_tabla ;muestra el dato de la tabla en la lcd ;dato en formato ascii EJEMPLO 2 LECTURA DE TABLA TIPO WORD Nota:declare una variable llamada var1 tipo word en bloque 3 y la tabla2 en bloque 9 MOVLF 2,VAR1 ;mueve la constante 2 a var1 TABLA1 READ_TABLAW SBCD_LCDF TABLA2 DATA DATA DATA DATA TABLA2,VAR1 ;extrae el tercer dato (letra c) de la tabla2 y lo guarda en la ;variable reg_tabla ;muestra el dato de la tabla en la lcd ;primer dato tipo word en decimal ;segundo dato tipo word en hexadecimal ;tercer dato tipo word en ascii ;cuarto dato tipo word en binario SBCD_LCDF REG_TABLA DATA "LPM2" ; mueve la constante 1 a var1 ;extrae el segundo dato "p" de la tabla1 y lo guarda en la variable

REG_TABLAW 5500 H'FF03' "AB" B'0000111100001111'

126 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL MODULO TIMER0


;REGISTRO DESTINO:TMR0H

(MTMR0)

;es un registro especial de 8 bit que controla la parte alta ;del periodo de timer0 ;es un registro especial de 8 bit que controla la parte baja ;del periodo de timer0 EXPLICACION ;act/des interrupcion tmr0 en baja prioridad en bloque 1 ;act/des interrupcion tmr0 en alta prioridad en bloque 1 ;asignacion de periodo de tiempo en bloque 2

;REGISTRO DESTINO:TMR0L

MACROS

ARGUMENTOS

INTERRUPCION_LP_TMR0 SI/NO INTERRUPCION_HP_TMR0 SI/NO CONFIG_INT_TMR0 BASE_TIEMPO PREESCALA,VALOR L3,L16 LOAD_TMR0 BASE_TIEMPO F3,F8/16 LOAD_TMR0F PREESCALA,VALOR RESET_TMR0 ACT_INT_TMR0 DES_INT_TMR0 CFITMR0 HPITMR0 LPITMR0 LOAD_TMR0

;carga un nuevo periodo de tiempo en timer0 e inicia conteo ;carga un nuevo periodo de tiempo en timer0 e inicia conteo

;reinicializa el timer0 y lo habilita para iniciar conteo ;habilita la interrupcion por timer0 ;deshabilita la interrupcion por timer0 ;acostar bandera de interrupcion tmr0 ;activar modo alta prioridad de interrupcion tmr0 ;activar modo baja prioridad de interrupcion tmr0 EJEMPLO 1 TMR0_500US ;carga nueva base de tiempo en timer0 segn tabla de constates TMR0

EJEMPLO 2 ;CONFIGURAR EL TIMER A UN PERIODO PERSONALIZADO QUE NO SE ENCUENTRA EN LA TABLA DE CONSTANTES

127 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


;POR EJEMPLO SI SE DESEA GENERAR UN periodo de 13uS con cristal de 20MHz EN TIMER0 ;XTAL = 20Mhz ;CM=4/XTAL = 200nS TIEMPO DESEADO = 13uS ;PREESCALA VALIDA de TIMER0 A 16 BIT (0 A 7) ; 7 = 1:256 prescale value ; 6 = 1:128 prescale value ; 5 = 1:64 prescale value ; 4 = 1:32 prescale value ; 3 = 1:16 prescale value ; 2 = 1:8 prescale value ; 1 = 1:4 prescale value ; 0 = 1:2 prescale value ;SI TOMAMOS PREESCALA = 0 ENTONCES... ;VALOR DEL TIMER0 = {65536 - [TIEMPO DESEADO/(CM * 2^(PREESCALA + 1)]} ;VALOR DEL TIMER0 = {65536 - [13uS/(200nS * 2^1)]} ;VALOR DEL TIMER0 = {65536 - [13uS/400nS]} ;VALOR DEL TIMER0 = 65503.5 se aproxima a 65503 con lo cual se obtiene un periodo ligeramente ;mayor. Si el usuario requiere cargar este perodo puede usar la macro LOAD_TMR0 de la siguiente forma: LOAD_TMR0 0,65503 ;donde 0 es la preescala y 65503 el valor de carga del timer0

;_________________________________________________________________________________________ EJEMPLO 3 ;CONFIGURAR EL TIMER A UN PERIODO PERSONALIZADO QUE NO SE ENCUENTRA EN LA TABLA DE CONSTANTES ;_________________________________________________________________________________________ ;POR EJEMPLO SI SE DESEA GENERAR UN PERIODO DE TIMER1 IGUAL A 10uS con cristal de 20MHz ;XTAL = 20Mhz ;CM=4/XTAL = 200nS ;TIEMPO DESEADO=10uS ;PREESCALA VALIDA de TIMER1 (0 A 3) ;SI TOMAMOS PREESCALA = 0 ENTONCES... ;VALOR DEL TIMER1 = {65536 - [TIEMPO DESEADO/(CM * 2^PREESCALA)]} ;VALOR DEL TIMER1 = {65536 - [10uS/(200nS * 2^0)]} ;VALOR DEL TIMER1 = {65536 - [10uS/(200nS * 2^0)]} ;VALOR DEL TIMER1 = 65486 Si el usuario requiere cargar este perodo puede usar la macro LOAD_TMR1 de la siguiente forma: LOAD_TMR1 0, 65486 ;donde 0 es la preescala y 65486 el valor de carga del timer1

128 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

TEORIA DE TEMPORIZADORES DEL PIC (TIMER0 Y TIMER1)


CONFIGURACIN DEL MODULO TEMPORIZADOR TIMER0 / TIMER1 Por ejemplo, la configuracin CONFIG_INT_TMR0 CONFIG_INT_TMR1 TMR0_1SEG TMR1_100US

Significa que la interrupcin de Timer0 ocurrir cada 1 segundo y la interrupcin de Timer 1 cada 100 micro segundos. En las siguientes tablas se muestran los tiempos permitidos para cada uno de los timer (Timer 0, Timer 1). Observe que no todos los tiempos estn disponibles para todas las frecuencias de oscilacin del cristal. Por ejemplo no es correcto seleccionar un perodo de interrupcin de 2 segundos para el timer 0 con una frecuencia de oscilacin de 40 MHz (10MHz x 4 PLL).

129 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL MODULO TIMER 1


;REGISTRO DESTINO:TMR1H

(MTMR1)

;es un registro especial de 8 bit que controla la parte alta ;del periodo de timer1 ;es un registro especial de 8 bit que controla la parte baja ;del periodo de timer1 EXPLICACION SI/NO SI/NO ;act/des de interrupcion por tmr1 en baja prioridad en bloque 1 ;act/des de interrupcion por tmr1 en alta prioridad en bloque 1 ;asignacion de periodo de tiempo en bloque 2

;REGISTRO DESTINO:TMR1L

MACROS

ARGUMENTOS

INTERRUPCION_LP_TMR1 INTERRUPCION_HP_TMR1

CONFIG_INT_TMR1 BASE_TIEMPO

PREESCALA,VALOR L2 , L16 LOAD_TMR1 BASE_TIEMPO ;carga un nuevo periodo de tiempo en timer1 e inicia conteo F2 ,F8/16 LOAD_TMR1F PREESCALA,VALOR ;carga un nuevo periodo de tiempo en timer1 e inicia conteo RESET_TMR1 ACT_INT_TMR1 DES_INT_TMR1 CFITMR1 HPITMR1 LPITMR1 LOAD_TMR1 ;reinicializa el timer1 y lo habilita ;habilita la interrupcion por timer1 ;deshabilita la interrupcion por timer1 ;acostar bandera de interrupcion tmr1 ;activar modo alta prioridad de interrupcion tmr1 ;activar modo baja prioridad de interrupcion tmr1 EJEMPLO TMR1_500US ;carga nueva base de tiempo en timer1 segn tabla de constantes TMR1

130 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

131 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL MODULO PUSH POP (MPUSHPOP)


La habilitacin de los mdulos PUSH POP es requerida si el mdulo en cuestin se emplear en main program, interrupcin de baja prioridad y /o interrupcin de alta prioridad, es decir, deben habilitarse siempre que exista la posibilidad en el programa de utilizarlo en 2 o ms tareas simultneamente. Por ejemplo si en la interrupcin de timer1 en baja prioridad es visualizando la hora cada segundo en una LCD y en la interrupcin del teclado PS2 en alta prioridad tambin enviar mensajes a la LCD, entonces es necesario habilitar el modulo PUSH POP DELAY Y LCD. HABILITAR_PUSH_POP_DELAY HABILITAR_PUSH_POP_BLINK HABILITAR_PUSH_POP_RANDOM HABILITAR_PUSH_POP_MATH_C SI/NO SI/NO SI/NO SI/NO ;act/des de opcion push - pop en bloque1 ;act/des de opcion push - pop en bloque1 ;act/des de opcion push - pop en bloque1 ;act/des de opcion push - pop en bloque1 ;act/des de opcion push - pop en bloque1 ;act/des de opcion push - pop en bloque1 ;act/des de opcion push - pop en bloque1 ;act/des de opcion push - pop en bloque1 ;act/des de opcion push - pop en bloque1

HABILITAR_PUSH_POP_TABLA SI/NO HABILITAR_PUSH_POP_INC_DECVAR SI/NO HABILITAR_PUSH_POP_LCD HABILITAR_PUSH_POP_ISD1 HABILITAR_PUSH_POP_ISD2 SI/NO SI/NO SI/NO

132 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DE PWM 1 A PWM8 CON BASE DE TIEMPO EN TIMER1


(MPWM)

CONTROL DE VELOCIDAD DE 8 MOTORES DC U 8 SERVOMOTES POR TIMER1 EN BAJA PRIORIDAD Nota1: el modulo PWM1 A PWM8 toma los tiempos de la int de TIMER1 en alta o baja prioridad aunque se recomienda baja prioridad para no cancelar el resto de int del pic debido a los periodos de tiempo tan pequeos que suele configurarse en timer1 al operar para el modulo modulo_servo_motor_dc_pwm_tmr1. Nota2: el parametro periodo_total se multiplica por la base de tiempo establecida en timer1 y este tiempo constituye el periodo de la seal pwm. Nota3: el parametro duty_cicle se multiplica por la base de tiempo establecida en timer1 y este tiempo constituye el ciclo util (tiempo en alto) de la seal pwm. Nota4: si el parametro num_pulsos en la macro setup_pwm es 65535 entonces se generarn pulsos indefinidamente. Nota5: si el parametro num_pulsos en la macro setup_pwm es 0 entonces se supender la generacin de pulsos. Nota6: cuando un ciclo pwm finaliza se desencadena una interrupcin en bloque 8. por ejemplo: si configura el canal pwm1 para generar 1000 pulsos con un periodo de 1ms, entonces despus de 1 seg el puntero de programa del microcontrolador se dirige a la etiqueta org_fin_pwm1 en el bloque 8, lo cual indica que puede cargar una nueva configuracin al canal pwm1. es importante que el usuario salga de esta interrupcin con la macro out_int_pwm1 y no con la macro out_int. tampoco puede emplear la macro OUT_IF para salir de esta interrupcin con una macro de comparacin IF. REGISTROS DESTINO DEL MODULO PWM, SERVOMOTOR Y MOTOR DC POR TIMER1 PWM1_PTD0 PWM2_PTD1 PWM3_PTD2 PWM4_PTD3 PWM5_PTD4 PWM6_PTD5 PWM7_PTD6 PWM8_PTD7 MACROS OUT_PWM1_PTD0 OUT_PWM2_PTD1 OUT_PWM3_PTD2 OUT_PWM4_PTD3 OUT_PWM5_PTD4 OUT_PWM6_PTD5 OUT_PWM7_PTD6 OUT_PWM8_PTD7 SETUP_PWM1 SETUP_PWM2 SETUP_PWM3 SETUP_PWM4 SETUP_PWM5 :PER_PWM1:2, CU_PWM1:2, PUL_PWM1:2 :PER_PWM2:2, CU_PWM2:2, PUL_PWM2:2 :PER_PWM3:2, CU_PWM3:2, PUL_PWM3:2 :PER_PWM4:2, CU_PWM4:2, PUL_PWM4:2 :PER_PWM5:2, CU_PWM5:2, PUL_PWM5:2 :PER_PWM6:2, CU_PWM6:2, PUL_PWM6:2 :PER_PWM7:2, CU_PWM7:2, PUL_PWM7:2 :PER_PWM8:2, CU_PWM8:2, PUL_PWM8:2 ARGUMENTOS EXPLICACION SI/NO activacion/desactivacion en bloque 1 SI/NO activacion/desactivacion en bloque 1 SI/NO activacion/desactivacion en bloque 1 SI/NO activacion/desactivacion en bloque 1 SI/NO activacion/desactivacion en bloque 1 SI/NO activacion/desactivacion en bloque 1 SI/NO activacion/desactivacion en bloque 1 SI/NO activacion/desactivacion en bloque 1 L16,L16,L16 L16,L16,L16 L16,L16,L16 L16,L16,L16 L16,L16,L16 ;num_pulsos, periodo_total, duty_cicle ;num_pulsos, periodo_total, duty_cicle ;num_pulsos, periodo_total, duty_cicle ;num_pulsos, periodo_total, duty_cicle ;num_pulsos, periodo_total, duty_cicle

133 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


SETUP_PWM6 SETUP_PWM7 SETUP_PWM8 SETUP_PWM1F SETUP_PWM2F SETUP_PWM3F SETUP_PWM4F SETUP_PWM5F SETUP_PWM6F SETUP_PWM7F SETUP_PWM8F OUT_INT_PWM1 OUT_INT_PWM2 OUT_INT_PWM3 OUT_INT_PWM4 OUT_INT_PWM5 OUT_INT_PWM6 OUT_INT_PWM7 OUT_INT_PWM8 ORG_FIN_PWM1 ORG_FIN_PWM2 ORG_FIN_PWM3 ORG_FIN_PWM4 ORG_FIN_PWM5 ORG_FIN_PWM6 ORG_FIN_PWM7 ORG_FIN_PWM8 L16,L16,L16 L16,L16,L16 L16,L16,L16 ;num_pulsos, periodo_total, duty_cicle ;num_pulsos, periodo_total, duty_cicle ;num_pulsos, periodo_total, duty_cicle ;num_pulsos, periodo_total, duty_cicle ;num_pulsos, periodo_total, duty_cicle ;num_pulsos, periodo_total, duty_cicle ;num_pulsos, periodo_total, duty_cicle ;num_pulsos, periodo_total, duty_cicle ;num_pulsos, periodo_total, duty_cicle ;num_pulsos, periodo_total, duty_cicle ;num_pulsos, periodo_total, duty_cicle

F8/16,F8/16,F8/16 F8/16,F8/16,F8/16 F8/16,F8/16,F8/16 F8/16,F8/16,F8/16 F8/16,F8/16,F8/16 F8/16,F8/16,F8/16 F8/16,F8/16,F8/16 F8/16,F8/16,F8/16

;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM1 ;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM2 ;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM3 ;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM4 ;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM5 ;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM6 ;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM7 ;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM8 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM1 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM2 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM3 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM4 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM5 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM6 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM7 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM8

134 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


EJEMPLO Declare la variable cnt_robot tipo byte o word, active tmr1 en low priority con un periodo de 100us con xristal de 20 a 40mhz preferiblemente. En el bloque 6 de condiciones iniciales invoque la subrutina sub_robot_servo mediante la Instruccin CALL de assembler. SUB_ROBOT_SERVO ;posicion 0 del robot ;genera 100 pulsos con periodo de ;(500x100us = 50ms) y ciclo util ; de (10x100us=1ms) IFFIL CNT_ROBOT,1,LBL2 ;posicion 1 del robot SETUP_PWM1 5,10000,0 ;genera pausa de 5 seg (5x10000x100us=5seg) ;con la salida pwm en cero (ciclo util = 0) IFFIL CNT_ROBOT,2,LBL3 ;posicion 2 del robot SETUP_PWM1 60000,500,20 ; genera 60000 pulsos con periodo de ;(500x100us = 50ms) y ciclo util ;de (20x100us=2ms) IFFIL CNT_ROBOT,3,LBL4 ;posicion 3 del robot SETUP_PWM1 60,10000,65535 ;genera pausa de 60 seg (60x10000x100us ;=5seg) con la salida pwm en uno ;(ciclo util maximo) CLEAR CNT_ROBOT ;retorna a posicion 0 del robot RETURN INCRE1 CNT_ROBOT ;incrementa puntero de posicion del robot RETURN CALL SUB_ROBOT_SERVO OUT_INT_PWM1 ;llamar sub ;salida de interrupcion IFFIL CNT_ROBOT,0,LBL1 SETUP_PWM1 100,500,10

LBL1

LBL2

LBL3

LBL4 ORG28_FIN_PWM1:

TEORA DEL CONTROL PWM POR TIMER1


CONTROL DE POTENCIA POR PWM EN CORRIENTE DIRECTA El mdulo PWM (Pulse Wide Modulation Modulacin por ancho de pulso) genera oscilacin con ciclo til y frecuencia programable por los pines RD0 a RD7, en total son 8 salidas PWM configurable para control de directa (DC). Cada una de las cuales puede tener un perodo diferente mltiplo entero de la base de tiempo programada a Timer 1 en un rango de 1 a 65535 (16 bit). Las 8 salidas del mdulo PWM son compartidas con el mdulo POWER AC - PAC, es decir, que si el usuario activa OUT_PWM1_PTD0 en el bloque 1 entonces no podr activar OUT_PAC1_PTD0 pues ambas comparten el PIN de salida PTD0. Por ejemplo, si en el bloque 2 se configura el periodo de timer1 en 20 us y se digita la siguiente macro en bloque 6 SETUP_PWM1 Entonces Se genera una seal PWM DC con 100 REPETICIONES O NMERO DE PULSOS PERIODO TOTAL = 4 x 20uS = 80uS CICLO TIL O TIEMPO EN ALTO = 1 x 20uS = 20uS Es decir, genera una seal peridica por el pin PTD0 con una frecuencia constante de 1/80uS = 12.5KHz con un ciclo til del 25%. %CU = (TIEMPO EN ALTO X 100) / PERIODO TOTAL % 100,4,1 ;num_pulsos,periodo,cicloutil

135 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


%CU = 20uS x 100/ 80uS % %CU = 25%

para efectos prcticos puede afirmarse que la tensin que percibira un voltmetro en directa conectado entre el pin PTD0 y tierra de un PIC alimentado con VCC = 5V sera :

Vpwm(DC) = VCC x CU/100 Vpwm(DC) = 5V x 25/100 Vpwm(DC) = 1.25V


De hecho, si se conecta un motor de DC o una carga resistiva (con su respectivo acople de potencia) se puede realizar un control digital muy preciso. Es obvio que el tercer argumento (tiempo en alto de la seal) de la macro SETUP_PWM1 debe ser menor o igual al segundo argumento (periodo total de la seal). La tcnica conocida como modulacin por ancho de pulso (Pulse Width Modulation o PWM) se basa en que el valor promedio de una seal peridica es igual a la integral entre cero y el periodo de la funcin de la seal respecto al tiempo, dividido todo ello por el valor del periodo. En el caso de una seal lgica y considerando el periodo constante, podemos considerar que la funcin no es continua sino definida a trozos. Entonces obtenemos que el valor medio de la seal durante el periodo fijado es igual al valor de la seal en estado "alto" multiplicado por el tiempo en estado "alto" mas el valor de la seal en estado "bajo" multiplicado por el tiempo en estado "bajo", y dividido todo ello por el tiempo total (periodo). Segn este planteamiento, si generamos las seales de control a un puente de transistores a una frecuencia fija y variamos proporcionalmente cuantas veces mandamos la seal de activacin en un sentido y cuantas veces mandamos la seal de detencin, podremos variar la tensin media de alimentacin del motor y por tanto su velocidad. Para ello podemos utilizar un proceso generado peridicamente que utilizando unas variables de control enve las seales de actuacin al controlador. La tcnica PWM (Pulse Wide Modulation) lase (Puls Uid Modulishon) consiste en generar una seal peridica repetitiva la cual genera un voltaje promedio de DC en uno o ms pines del C dependiendo del ciclo til (duty cycle) lase (dry sicol). El ciclo til alude al porcentaje del tiempo que un periodo permanece en 1 lgico. CICLO UTIL (DUTY CYCLE) (Lase Dari sicol). Se expresa como un porcentaje (%) y se define como la relacin entre el ancho del pulso en alto y el perodo T. Se evala con la siguiente frmula:

% CU = D = (Ancho del pulso (seg) / Periodo (T)) x 100 D = T High/T x 100 %

A menor ancho del pulso en alto, menor es el ciclo til y viceversa


El xito de la tcnica PWM radica en no modificar el perodo de la seal cclica generada, es decir, la sumatoria del ciclo til y el ciclo muerto (dead cicle) siempre debe ser constante. Para modificar la tensin de salida PWM slo deben alterarse las proporciones de ambos ciclos de la siguiente manera: si se desea incrementar la tensin de salida PWM entonces aumente el ciclo til y disminuya el ciclo muerto. Si se desea decrementar la salida PWM entonces disminuya el ciclo til y aumente el ciclo muerto.

136 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


Por ejemplo, en la siguiente figura el perodo de la seal PWM generada por un C es 500 uS, el ciclo til (tiempo en 1 lgico) es 100 uS, el ciclo muerto (dead cicle) (tiempo en 0 lgico) es 400 uS, por lo tanto la tensin promedio DC (tensin que percibira un multmetro en DC, un carga resistiva, un motor de DC o un led) que se obtendra en dicho pin de salida ser igual a 1 VDC si el PIC est alimentado con VCC = 5V.

Cu = Ciclo til = 100 uS Cm = Ciclo muerto = 400 uS T = Periodo = Cu + Cm = 500uS F= Frecuencia = 1/T = 2KHz VCC = Voltaje Positivo del PWM = 5V GND = Tierra = 0V

V PWM = VCC x Cu / T
Despejando

Cu = V PWM x T/ VCC
El perodo T es un tiempo que depende de la carga a controlar con el PWM, est en funcin de la inercia (mecnica de los motores u ptica de los dispositivos emisores de iluminacin como bombillas incandescentes o led), valores generalmente aceptados son: 100 uS para controlar motores de directa, 1mS para controlar led o bombillas incandescentes, 10mS para servomotores FUTABA FP-S148, FUTABA S3003, Hitec HS-300 y HOBBICO COMMAND CS-51.

V PWM = VCC x Cu / T Cu = V PWM x T/ VCC


Con las dos frmulas anteriores se puede generar cualquier tensin analgica entre 0 y VCC. Recuerde que un C 18F mximo se puede alimentar con +5.5VDC, por lo tanto si se requieren salidas PWM mayores a 5.5VDC se debe implementar una etapa amplificadora con transistores en el pin de salida PWM del PIC. Se recomienda que las tierras del C y de la fuente que controlar la carga estn separadas. El PIC controlar el ciclo PWM por medio de un optoacoplador, todo esto para evitar que perturbaciones electromagnticas ocasionadas por las cargas inductivas de los motores (bobinas) alteren el funcionamiento del PIC. En la figura siguiente se aprecia el control optoacoplado de un motor de DC de 0 a 12 V (puede ser ampliado hasta >24VDC/10Amp) con control de sentido de giro mediante rel de doble contacto.

137 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO DEL CONTROL DE VELOCIDAD POR PWM DE DIRECTA DC OPTOACOPLADO Y DIRECCION MEDIANTE RELE DE DOBLE CONTACTO CONTROL DE MOTOR DC OPTOACOPLADOS (PLANO PWM)

La funcin de D1, D3 y D2 es proteger al transistor mosfet de posibles picos de tensin inversa generados por el rel y el motor. Se puede emplear cualquier MOSFET canal N o transistor bipolar NPN que tolere la potencia del motor. Se pueden conectar 2 mosfet en paralelo para duplicar la capacidad de corriente soportada. Importante: Se debe separar la tierra de alimentacin del PIC de la tierra de la etapa de potencia que alimenta al rele y el motor.

138 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


MOSFET Z44 35 A MOSFET IRF 640 30 A MOSFET IRF 250 30 A PC 817 OPTOTRANSISTOR 4 PINES ECONOMICO MCT2=4N25=4N26=4N27=4N28 OPTOTRANSISTOR 6 PINES Nota: Para mayor informacin de MOTORES SERVOS, DC, AC y PASO PASO referirse MOTORES.DOC

SECCION 19 -

139 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

TEORIA DE CONTROL DE SERVOMOTORES CON PWM DC

140 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

CIRCUITO SENCILLO PROBADOR DE SERVOS


Los servos para modelismo son pequeos mecanismos dotados de un motor DC, una reduccin por engranajes y electrnica todo integrado dentro de un diminuto gabinete plstico. Estos servos son empleados para comandar las funciones de modelos en miniatura de barcos, trenes, aviones y autos de carrera por medio de sistemas radiocontrolados. La principal ventaja de los servos es que pueden ser controlados por trenes de pulsos digitales. Pero esto se vuelve en contra cuando deseamos probar el funcionamiento es estos motores.

Este circuito emplea un clsico de la electrnica conectado de tal forma de generar un tren de pulsos ajustable por medio del potencimetro del 10K. El transistor conectado a la salida amplia la capacidad de manejo de corriente. A medida que se gira el cursor del potencimetro el tren de pulsos es modificado con lo que se logra alterar el estado del servo el cual desplaza su eje en funcin del potencimetro. Es recomendable emplear un potencimetro lineal, para que el efecto sea igual en cualquier parte del recorrido del mismo. El circuito debe ser alimentado con 6v de corriente continua.

141 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO DE CONEXIN DE UN SERVOMOTOR A UN PIC


(PLANO SERVOMOTOR)

Nota: Para mayor informacin de MOTORES SERVOS, DC, AC y PASO PASO referirse a SECCION 19 de la carpeta SECCIONES DIGIBOOK

142 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DE MOTOR PASO A PASO 1 A 8 CON BASE DE TIEMPO EN TIMER1


CONTROL DE VELOCIDAD DE 8 MOTORES PASO A PASO UNIPOLARES O BIPOLARES CON BASE DE TIEMPO EN TIMER 1 CONFIGURADO EN BAJA PRIORIDAD EN BLOQUE 1
(MMPASO)

Nota1: el modulo_motor_paso_paso_tmr1 toma los tiempos de la int de timer1 en alta o baja prioridad, aunque funciona en los dos modos se recomienda operar en baja prioridad para no cancelar el resto de int del pic debido a los periodos de tiempo tan pequeos que suele configurarse en timer1 al operar para el modulo MOTOR_PASO_PASO. Nota2: el minimo tiempo entre pasos depende del motor paso a paso, pruebe inicialmente con 4ms Nota3: el modo burst activado (ametrallamiento de bobinas activada) implica que el eje del motor permanecer esttico y frenado, el motor comsumir energa. Nota4: el modo burst (lase berst) desactivado (ametrallamiento de bobinas desactivada) implica que el eje delmotor permanecer libre y no consumir energa el motor. Nota5: en condiciones iniciales las 4 bobinas estan en off y el modo burst est desactivado Nota6: cuando un ciclo de movimiento o reposo finaliza se desencadena una interrupcin en bloque 8. por ejemplo: si configura el motor paso paso1 para dar 200 pasos a la derecha con un tiempo entre pasos de 1 segundo, entonces despus de 200 segundos el puntero de programa del microcontrolador se dirige a la etiqueta ORG_FIN_M_PASO1 en el bloque 8, lo cual indica que puede cargar un nuevo movimiento o reposo al motor paso paso1. es importante que el usuario salga de esta interrupcin con la macro OUT_INT_M_PASO1 y no con la macro OUT_INT. tampoco puede emplear la macro OUT_IF para salir de esta interrupcin con una macro de comparacin if.

REGISTROS DESTINO DEL MODULO MOTOR PASO PASO POR TIMER1 FLAG_SENTIDO_MOTOR_PASO :sentido de giro de los 8 motores (0->izquierda, 1->derecha) FLAG_MODE_STOP_MOTOR_paso :estado stop de los 8 motores (0->girando, 1->parado) FLAG_BURST_MOTOR_PASO :modo burst de los 8 motores (0->burst desacativado, 1->burst activado) MOTOR_PASO1 :POINTER_M_PASO1,STEP_M_PASO1:2,DELAY_M_PASO1:2,FLAG_DIR_M_PASO1,FLAG_BURST_M_PASO1,FL AG_STOP_M_PASO1 MOTOR_PASO2 :POINTER_M_PASO2,STEP_M_PASO2:2,DELAY_M_PASO2:2,FLAG_DIR_M_PASO2,FLAG_BURST_M_PASO2,FL AG_STOP_M_PASO2 MOTOR_PASO3 :POINTER_M_PASO3,STEP_M_PASO3:2,DELAY_M_PASO3:2,FLAG_DIR_M_PASO3,FLAG_BURST_M_PASO3,FL AG_STOP_M_PASO3 MOTOR_PASO4 :POINTER_M_PASO4,STEP_M_PASO4:2,DELAY_M_PASO4:2,FLAG_DIR_M_PASO4,FLAG_BURST_M_PASO4,FL AG_STOP_M_PASO4 MOTOR_PASO5 :POINTER_M_PASO5,STEP_M_PASO5:2,DELAY_M_PASO5:2,FLAG_DIR_M_PASO5,FLAG_BURST_M_PASO5,FL AG_STOP_M_PASO5 MOTOR_PASO6 :POINTER_M_PASO6,STEP_M_PASO6:2,DELAY_M_PASO6:2,FLAG_DIR_M_PASO6,FLAG_BURST_M_PASO6,FL AG_STOP_M_PASO6 MOTOR_PASO7 :POINTER_M_PASO7,STEP_M_PASO7:2,DELAY_M_PASO7:2,FLAG_DIR_M_PASO7,FLAG_BURST_M_PASO7,FL AG_STOP_M_PASO7 MOTOR_PASO8

143 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


:POINTER_M_PASO8,STEP_M_PASO8:2,DELAY_M_PASO8:2,FLAG_DIR_M_PASO8,FLAG_BURST_M_PASO8,FL AG_STOP_M_PASO8 SIMBOLOGIA Y CONVENCIONES SENTIDO : DERECHA / IZQUIERDA se controla con la bandera flag_dir_m_paso1 a flag_dir_m_paso8 SI FLAG_DIR_M_PASO1 = 1 --> MOTOR 1 A LA DERECHA SI FLAG_DIR_M_PASO1 = 0 --> MOTOR 1 A LA IZQUIERDA

MODO_BURST : ACT_BURST / DES_BURST :se controla con la bandera flag_burst_m_paso1 a flag_burst_m_paso8 SI FLAG_BURST_M_PASO1 = 1 --> burst activado de motor1 SI FLAG_BURST_M_PASO1 = 0 --> burst desactivado de motor1 NMERO DE PASOS : este parametro es una constante en la macro setup_m_paso1 y es una variable en la macro setup_m_paso1f, determina el nmero de pasos del motor seleccionado. si este parametro es cero entonces el motor se detendr, si es 65535 el motor girar indefinidamente. TIEMPO ENTRE PASOS: este parametro es una constante en la macro setup_m_paso1 y es una variable en la macro setup_m_paso1f, determina el tiempo entre cada paso del motor seleccionado. el tiempo real obedece a la multiplicacin de este parametro por el periodo de tiempo de timer1. TIPO_MOTOR : motor_unipolar / motor_bipolar :se configura en config_motor_paso de bloque 2 TIEMPO_PAUSA : este parametro es una constante en la macro pausa_m_paso1 y es una variable en la macro pausa_m_paso1f, determina el tiempo que durara el motor seleccionado en estado de reposo. el tiempo real obedede a la multiplicacion de este parametro por el parametro base_tiempo por el periodo de tiempo en timer1 BASE_TIEMPO este parametro es una constante en la macro pausa_m_paso1 y es una variable en la macro pausa_m_paso1f, determina el tiempo que durara el motor seleccionado en estado de reposo. el tiempo real obedede a la multiplicacion de este parametro por el parametro tiempo_pausa por el periodo de tiempo de timer1.

MACROS EN BLOQUE 1 MOTOR_PASO1 MOTOR _PASO2 MOTOR_PASO3 MOTOR_PASO4 MOTOR_PASO5 MOTOR_PASO6 MOTOR_PASO7 MOTOR_PASO8 MACROS EN BLOQUE 2: CONFIG_MOTOR_PASO1 CONFIG_MOTOR_PASO2 CONFIG_MOTOR_PASO3 CONFIG_MOTOR_PASO4 CONFIG_MOTOR_PASO5 CONFIG_MOTOR_PASO6 CONFIG_MOTOR_PASO7 CONFIG_MOTOR_PASO8

ARGUMENTOS SI/NO SI/NO SI/NO SI/NO SI/NO SI/NO SI/NO

EXPLICACION

:ACTIVACION /DESACTIVACION EN BLOQUE 1 :ACTIVACION /DESACTIVACION EN BLOQUE 1 :ACTIVACION /DESACTIVACION EN BLOQUE 1 :ACTIVACION /DESACTIVACION EN BLOQUE 1 :ACTIVACION /DESACTIVACION EN BLOQUE 1 :ACTIVACION /DESACTIVACION EN BLOQUE 1 :ACTIVACION /DESACTIVACION EN BLOQUE 1

SI/NO :ACTIVACION /DESACTIVACION EN BLOQUE 1 ARGUMENTOS OUT_A_PTA5,OUT_B_PTE0,OUT_C_PTE1,OUT_D_PTE2,TIPO_MOTOR OUT_A_PTD0,OUT_B_PTD1,OUT_C_PTD2,OUT_D_PTD3,TIPO_MOTOR OUT_A_PTD0,OUT_B_PTD1,OUT_C_PTD2,OUT_D_PTD3,TIPO_MOTOR OUT_A_PTD0,OUT_B_PTD1,OUT_C_PTD2,OUT_D_PTD3,TIPO_MOTOR OUT_A_PTD0,OUT_B_PTD1,OUT_C_PTD2,OUT_D_PTD3,TIPO_MOTOR OUT_A_PTD0,OUT_B_PTD1,OUT_C_PTD2,OUT_D_PTD3,TIPO_MOTOR OUT_A_PTD0,OUT_B_PTD1,OUT_C_PTD2,OUT_D_PTD3,TIPO_MOTOR OUT_A_PTD0,OUT_B_PTD1,OUT_C_PTD2,OUT_D_PTD3,TIPO_MOTOR

144 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


MACROS ARGUMENTOS EXPLICACION SETUP_M_PASO1 L16,L16,SENTIDO,MODO_BURST ;nmero de pasos,tiempo entre pasos,sentido,modo de ametrallamiento SETUP_M_PASO2 L16,L16,SENTIDO,MODO_BURST ;nmero de pasos,tiempo entre pasos,sentido,modo de ametrallamiento SETUP_M_PASO3 L16,L16,SENTIDO,MODO_BURST ;nmero de pasos,tiempo entre pasos,sentido,modo de ametrallamiento SETUP_M_PASO4 L16,L16,SENTIDO,MODO_BURST ;NMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO5 L16,L16,SENTIDO,MODO_BURST ;NMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO6 L16,L16,SENTIDO,MODO_BURST ;NMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO7 L16,L16,SENTIDO,MODO_BURST ;NMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO8 L16,L16,SENTIDO,MODO_BURST ;NMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO1F F8/16,F8/16,SENTIDO,MODO_BURST PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO2F F8/16,F8/16,SENTIDO,MODO_BURST PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO3F F8/16,F8/16,SENTIDO,MODO_BURST PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO4F F8/16,F8/16,SENTIDO,MODO_BURST PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO5F F8/16,F8/16,SENTIDO,MODO_BURST PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO6F F8/16,F8/16,SENTIDO,MODO_BURST PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO7F F8/16,F8/16,SENTIDO,MODO_BURST PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO8F F8/16,F8/16,SENTIDO,MODO_BURST PASOS,SENTIDO,MODO DE AMETRALLAMIENTO PAUSA_M_PASO1 PAUSA_M_PASO2 PAUSA_M_PASO3 PAUSA_M_PASO4 PAUSA_M_PASO5 PAUSA_M_PASO6 PAUSA_M_PASO7 PAUSA_M_PASO8 L16,L16,MODO_BURST L16,L16,MODO_BURST L16,L16,MODO_BURST L16,L16,MODO_BURST L16,L16,MODO_BURST L16,L16,MODO_BURST L16,L16,MODO_BURST L16,L16,MODO_BURST NMERO DE PASOS,TIEMPO ENTRE NMERO DE PASOS,TIEMPO ENTRE NMERO DE PASOS,TIEMPO ENTRE NMERO DE PASOS,TIEMPO ENTRE NMERO DE PASOS,TIEMPO ENTRE NMERO DE PASOS,TIEMPO ENTRE NMERO DE PASOS,TIEMPO ENTRE NMERO DE PASOS,TIEMPO ENTRE

TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST

PAUSA_M_PASO1F F8/16,F8/16,MODO_BURST PAUSA_M_PASO2F F8/16,F8/16,MODO_BURST PAUSA_M_PASO3F F8/16,F8/16,MODO_BURST

145 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


PAUSA_M_PASO4F PAUSA_M_PASO5F PAUSA_M_PASO6F PAUSA_M_PASO7F PAUSA_M_PASO8F STOP_M_PASO_DB STOP_M_PASO_AB F8/16,F8/16,MODO_BURST F8/16,F8/16,MODO_BURST F8/16,F8/16,MODO_BURST F8/16,F8/16,MODO_BURST F8/16,F8/16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST

DETIENE TODOS LOS MOTORES CON BURST DESACTIVADO DETIENE TODOS LOS MOTORES CON BURST ACTIVADO

STOP_M_PASO1 MODO_BURST DETIENE EL MOVIMIENTO DEL MOTOR CON UN MODO DE AMETRALLAMIENTO SE CONTROLA CON LA BANDERA FLAG_STOP_M_PASO1 : 1=MOTOR STOP STOP_M_PASO2 MODO_BURST DETIENE EL MOVIMIENTO DEL MOTOR CON UN MODO DE AMETRALLAMIENTO SE CONTROLA CON LA BANDERA FLAG_STOP_M_PASO2 : 1=MOTOR STOP STOP_M_PASO3 MODO_BURST DETIENE EL MOVIMIENTO DEL MOTOR CON UN MODO DE AMETRALLAMIENTO SE CONTROLA CON LA BANDERA FLAG_STOP_M_PASO3 : 1=MOTOR STOP STOP_M_PASO4 MODO_BURST DETIENE EL MOVIMIENTO DEL MOTOR CON UN MODO DE AMETRALLAMIENTO SE CONTROLA CON LA BANDERA FLAG_STOP_M_PASO4 : 1=MOTOR STOP STOP_M_PASO5 MODO_BURST DETIENE EL MOVIMIENTO DEL MOTOR CON UN MODO DE AMETRALLAMIENTO SE CONTROLA CON LA BANDERA FLAG_STOP_M_PASO5 : 1=MOTOR STOP STOP_M_PASO6 MODO_BURST DETIENE EL MOVIMIENTO DEL MOTOR CON UN MODO DE AMETRALLAMIENTO SE CONTROLA CON LA BANDERA FLAG_STOP_M_PASO6 : 1=MOTOR STOP STOP_M_PASO7 MODO_BURST DETIENE EL MOVIMIENTO DEL MOTOR CON UN MODO DE AMETRALLAMIENTO SE CONTROLA CON LA BANDERA FLAG_STOP_M_PASO7 : 1=MOTOR STOP STOP_M_PASO8 MODO_BURST DETIENE EL MOVIMIENTO DEL MOTOR CON UN MODO DE AMETRALLAMIENTO SE CONTROLA CON LA BANDERA FLAG_STOP_M_PASO8 : 1=MOTOR STOP CLEAR_ALL_M_PASO MOTORES CLEAR_M_PASO1 CLEAR_M_PASO2 CLEAR_M_PASO3 CLEAR_M_PASO4 CLEAR_M_PASO5 CLEAR_M_PASO6 CLEAR_M_PASO7 CLEAR_M_PASO8 ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS DE TODOS LOS 8

ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS ESTADO ESTADO ESTADO ESTADO DE DE DE DE LAS LAS LAS LAS BOBINAS BOBINAS BOBINAS BOBINAS EN EN EN EN REGISTRO REGISTRO REGISTRO REGISTRO

SET_STEP_M_PASO1 L2 ESTABLECE EL POINTER_M_PASO1 EL VALOR VLIDO ES DE 0 A 3 SET_STEP_M_PASO2 L2 ESTABLECE EL POINTER_M_PASO2 EL VALOR VLIDO ES DE 0 A 3 SET_STEP_M_PASO3 L2 ESTABLECE EL POINTER_M_PASO3 EL VALOR VLIDO ES DE 0 A 3 SET_STEP_M_PASO4 L2 ESTABLECE EL

146 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


POINTER_M_PASO4 EL VALOR VLIDO ES DE 0 A 3 SET_STEP_M_PASO5 L2 ESTABLECE EL POINTER_M_PASO5 EL VALOR VLIDO ES DE 0 A 3 SET_STEP_M_PASO6 L2 ESTABLECE EL POINTER_M_PASO6 EL VALOR VLIDO ES DE 0 A 3 SET_STEP_M_PASO7 L2 ESTABLECE EL POINTER_M_PASO7 EL VALOR VLIDO ES DE 0 A 3 SET_STEP_M_PASO8 L2 ESTABLECE EL POINTER_M_PASO8 EL VALOR VLIDO ES DE 0 A 3 SET_STEP_M_PASO1F F8 ESTABLECE EL POINTER_M_PASO1 EL VALOR VLIDO ES DE 0 A 3 SET_STEP_M_PASO2F F8 ESTABLECE EL POINTER_M_PASO2 EL VALOR VLIDO ES DE 0 A 3 SET_STEP_M_PASO3F F8 ESTABLECE EL POINTER_M_PASO3 EL VALOR VLIDO ES DE 0 A 3 SET_STEP_M_PASO4F F8 ESTABLECE EL POINTER_M_PASO4 EL VALOR VLIDO ES DE 0 A 3 SET_STEP_M_PASO5F F8 ESTABLECE EL POINTER_M_PASO5 EL VALOR VLIDO ES DE 0 A 3 SET_STEP_M_PASO6F F8 ESTABLECE EL POINTER_M_PASO6 EL VALOR VLIDO ES DE 0 A 3 SET_STEP_M_PASO7F F8 ESTABLECE EL POINTER_M_PASO7 EL VALOR VLIDO ES DE 0 A 3 SET_STEP_M_PASO8F F8 ESTABLECE EL POINTER_M_PASO8 EL VALOR VLIDO ES DE 0 A 3

ESTADO ESTADO ESTADO ESTADO

DE DE DE DE

LAS LAS LAS LAS

BOBINAS BOBINAS BOBINAS BOBINAS

EN EN EN EN

REGISTRO REGISTRO REGISTRO REGISTRO

ESTADO ESTADO ESTADO ESTADO ESTADO ESTADO ESTADO ESTADO

DE DE DE DE DE DE DE DE

LAS LAS LAS LAS LAS LAS LAS LAS

BOBINAS BOBINAS BOBINAS BOBINAS BOBINAS BOBINAS BOBINAS BOBINAS

EN EN EN EN EN EN EN EN

REGISTRO REGISTRO REGISTRO REGISTRO REGISTRO REGISTRO REGISTRO REGISTRO

OUT_INT_M_PASO1 OUT_INT_M_PASO2 OUT_INT_M_PASO3 OUT_INT_M_PASO4 OUT_INT_M_PASO5 OUT_INT_M_PASO6 OUT_INT_M_PASO7 OUT_INT_M_PASO8 ORG_FIN_M_PASO1 ORG_FIN_M_PASO2 ORG_FIN_M_PASO3 ORG_FIN_M_PASO4 ORG_FIN_M_PASO5 ORG_FIN_M_PASO6 ORG_FIN_M_PASO7 ORG_FIN_M_PASO8

SALIDA DE INT POR FIN DE CICLO EN CANAL PWM1 SALIDA DE INT POR FIN DE CICLO EN CANAL M_PASO2 SALIDA DE INT POR FIN DE CICLO EN CANAL M_PASO3 SALIDA DE INT POR FIN DE CICLO EN CANAL M_PASO4 SALIDA DE INT POR FIN DE CICLO EN CANAL M_PASO5 SALIDA DE INT POR FIN DE CICLO EN CANAL M_PASO6 SALIDA DE INT POR FIN DE CICLO EN CANAL M_PASO7 SALIDA DE INT POR FIN DE CICLO EN CANAL M_PASO8 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO1 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO2 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO3 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO4 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO5 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO6 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO7 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO8

147 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


EJEMPLO declare la variable cnt_robot tipo byte o word, active tmr1 en low priority con un periodode tiempo = 1mseg con un xristal de 20 40mhz preferiblemente. en el bloque 6 de condiciones iniciales invoque la subrutina sub_robot_mpaso mediante la instruccin call de assembler. en el procedimiento org_fin_m_paso1 del bloque 8 llame la subrutina sub_robot_mpaso, mediante la instruccin call de assembler. SUB_ROBOT_MPASO IFFIL CNT_ROBOT,0,LBL1 POSICION 0 DEL ROBOT SETUP_M_PASO1 10,1000,DERECHA,DES_BURST 10 PASOS A LA DERECHA CON DELAY DE (1000*1mS = 1Seg) ENTRE PASOS Y AL FINALIZAR LIBERE EL EJE DEL MOTOR LBL1 IFFIL CNT_ROBOT,1,LBL2 POSICION 1 DEL ROBOT PAUSA_M_PASO1 3,1000,ACT_BURST GENERA PAUSA DE 3 SEG (3x1000x1mS=3Seg) CON BOBINAS AMETRALLADAS LBL2 IFFIL CNT_ROBOT,2,LBL3 POSICION 2 DEL ROBOT SETUP_M_PASO1 500,4,IZQUIERDA,DES_BURST 500 PASOS A LA IZQUIERDA CON DELAY DE (4*1mS = 4mS) ENTRE PASOS LBL3 IFFIL CNT_ROBOT,3,LBL4 POSICION 3 DEL ROBOT PAUSA_M_PASO1 60,1000,DES_BURST GENERA PAUSA DE 60 SEGUNDOS (60x1000x1mS=60Seg) CON BOBINAS APAGADAS CLEAR CNT_ROBOT RETORNA A POSICION 0 DEL ROBOT RETURN LBL4 INCRE1 CNT_ROBOT INCREMENTA PUNTERO DE POSICION DEL ROBOT RETURN

148 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

TEORIA DE MOTORES PASO A PASO BIPOLAR


(BIPOLAR STEPPER MOTORS)

(PLANO MPPB)

Nota: En los puntos OUT PIC A, B, C, D se conectan las salidas del PIC que controlarn al motor, se recomienda que +V del motor sea independiente de +5VDC del PIC. SECUENCIA MOTOR BIPOLAR Estos motores necesitan la inversin de la corriente que circula en sus bobinas en una secuencia determinada. Cada inversin de la polaridad provoca el movimiento del eje en un paso, cuyo sentido de giro est determinado por la secuencia. Para revertir el sentido de giro simplemente se deben ejecutar las secuencias en modo inverso. PASO 1 2 3 A 1 1 0 TERMINALES B C 0 1 0 0 1 0

D 0 1 1

149 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


4 0 1 1 0

TEORIA DE MOTOR PASO A PASO UNIPOLAR


(UNIPOLAR STEPPER MOTORS)

CONEXION DE MOTOR PASO PASO UNIPOLAR CON PIC


(PLANO MPPU)

Nota: En los puntos OUT PIC A, B, C, D del driver ULN 2803 se conectan las salidas del PIC que controlarn al motor, este driver puede controlar hasta 2 motores paso a paso unipolares. Otra opcin es emplear el driver ULN 2003 que solamente tiene 7 compuertas internamente, es decir, slo maneja un motor paso a paso unipolar.

150 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


Nota: Si en lugar del CI ULN 2008 emplea el ULN 2003 entonces el pin 9 es +VCC del motor unipolar y el pin 8 es la tierra general del circuito, las salidas son de colector abierto, por lo tanto nunca sale + vcc, el comn de los motores unipolares deben enviarse a + vcc del motor preferiblemente independiente de los +5VDC del PIC.

151 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


SECUENCIAS PARA MANEJAR MOTORES PASO A PASO UNIPOLARES Existen tres secuencias posibles para este tipo de motores, las cuales se detallan a continuacin. Todas las secuencias comienzan nuevamente por el paso 1 una vez alcanzado el paso final (4 u 8). Para revertir el sentido de giro, simplemente se deben ejecutar las secuencias en modo inverso. SECUENCIA (ALTO TORQUE) MOTOR UNIPOLAR Esta es la secuencia ms usada y la que generalmente recomienda el fabricante. Con esta secuencia el motor avanza un paso por vez y debido a que siempre hay al menos dos bobinas activadas, se obtiene un alto torque de paso y de retencin. PASO 1 2 3 4 Bobina A 1 0 0 1 Bobina B 0 1 1 0 Bobina C 1 1 0 0 Bobina D 0 0 1 1

SECUENCIA WAVE DRIVE (BAJO TORQUE) MOTOR UNIPOLAR En esta secuencia se activa solo una bobina a la vez. En algunos motores esto brinda un funcionamiento ms suave. La contrapartida es que al estar solo una bobina activada, el torque de paso y retencin es menor. PASO 1 2 3 4 Bobina A 1 0 0 0 Bobina B 0 1 0 0 Bobina C 0 0 1 0 Bobina D 0 0 0 1

152 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


SECUENCIA MOTOR UNIPOLAR DEL TIPO MEDIO PASO (HALF STEP) En esta secuencia se activan las bobinas de tal forma de brindar un movimiento igual a la mitad del paso real. Para ello se activan primero 2 bobinas y luego solo 1 y as sucesivamente. Como vemos en la tabla la secuencia completa consta de 8 movimientos en lugar de 4. PASO 1 2 3 4 5 6 7 8 Bobina A 1 1 0 0 0 0 0 1 Bobina B 0 0 0 1 1 1 0 0 Bobina C 0 1 1 1 0 0 0 0 Bobina D 0 0 0 0 0 1 1 1

COMO SELECCIONAR UN MOTOR PARA UNA APLICACION? Un MOTOR es un transductor de electricidad a movimiento, En el momento de seleccionar un motor para una aplicacin especfica se deben considerar aspectos tales como: 1. PAR (TORQUE) kg/cm oz/in: El torque o fuerza de un motor es la capacidad de arrastrar mayor o menor peso a una determinada velocidad. 2. VELOCIDAD (RPM): Alude al nmero de vueltas en una unidad de tiempo, suele expresarse en rpm (revoluciones o vueltas por minuto) o rps (revoluciones por segundo). 3. ARRANQUE: Est relacionado con la forma de control y corriente inicial que demanda el motor en el arranque o encendido inicial. 3. FRENADO: Alude a la forma, tiempo o caractersticas de frenado del motor. 4. INERCIA: La inercia mecnica de un motor tiene que ver con el tiempo para arrancar si se encuentra en reposo o el tiempo en detenerse totalmente si se encuentra en movimiento. 5. MODO DE CONTROL: Alude al nmero de terminales de control y al proceso como tal para variar parmetros tales como velocidad, sentido de giro, arranque y frenado. 6. VIDA UTIL: Es el tiempo promedio de vida del motor. 7. COSTO Y MANTENIMIENTO: Relacionado con el valor comercial, disponibilidad comercial del motor y modos de mantenimiento preventivo y/o correctivo que requiera. 8. CONSUMO DE ENERGIA (Watt): Relacionado con la potencia (corriente y voltaje) que consume en una unidad de tiempo. 9. TAMAO: Son las dimensiones del motor, usualmente en robtica microcontrolada se prefieren pequeos, mas eso depende de la aplicacin. 10. RUIDO ACUSTICO Y ELECTROMAGNTICO: Al emplear bobinas, todo motor genera un ruido electromagntico que puede afectar el comportamiento del dispositivo de control (uC). 11. PRECISION: Alude a la capacidad de precisar el nmero de vueltas o grados desde su posicin inicial a la final. MOTORES EN ROBOTICA 1. MOTORES DE DC LOW POWER: Son motores de corriente directa con dos terminales (positivo y negativo) que suelen trabajar mximo a 12VDC y hasta 1 amperio de corriente dependiendo del Par (torque o fuerza). Suelen ser econmicos, tienen alta velocidad y bajo torque. Se encuentran en los juguetes, grabadoras, etc.

153 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


Ventajas: alta velocidad, bajo costo, tamao pequeo, con 2 pines del uC se puede controlar totalmente, baja potencia, baja inercia. Desventaja: bajo torque, poca precisin (aunque se puede mejorar con un encoder ptico). 2. MOTORES DE DC HIGH POWER CON REDUCTOR: Son motores de corriente directa con dos terminales (positivo y negativo) que suelen trabajar hasta 24VDC y 20 amperios de corriente dependiendo del Par (torque o fuerza) proporcionado por el mecanismo reductor (basado en engranajes). Suelen ser costosos (60.000 pesos colombianos) y pueden conseguirse en juguetes como MECANO y LEGO. Ventajas: alto torque, relativa alta velocidad, con 2 pines del uC se puede controlar totalmente Desventaja: alto costo, poca precisin (aunque se puede mejorar con un encoder ptico). 3. MOTORES STEP STEP UNIPOLAR: Motores de DC con 5 6 hilos, se caracterizan por la capacidad de girar por pasos predefinidos desde 1 grado ms. Ventajas: alta precisin, relativo bajo costo (15000 pesos colombianos), tamao pequeo, baja potencia, baja inercia, facilidad de control. Desventaja: baja velocidad, bajo torque, requiere 4 pines de control del uC, requiere etapa de potencia con 4 driver. 4. MOTORES STEP STEP BIPOLAR: Motores de DC con 4 hilos, se caracterizan por la capacidad de girar por pasos predefinidos desde 1 grado ms. Suelen ser ms grandes y tener ms torque que los unipolares. Ventajas: alta precisin, relativo bajo costo (15000 pesos colombianos, baja potencia, facilidad de control. Desventaja: baja velocidad, bajo torque, requiere 4 pines de control del uC, requiere de un circuito de potencia ms complejo (driver) aunque puede controlarse con un puente H L293. 5. SERVOMOTORES: Son motores relativamente costosos (40.000 pesos colombianos) empleando en modalismo, radiocontrol, animatrnica, etc. Se caracterizan por tener 3 hilos (negro, rojo y blanco o amarillo). Mediante un solo hilo (blanco o amarillo) se realiza su control directamente desde el uC sin necesidad de etapa de potencia. Los servos traen una caja reductora lo cual le insufla buen torque o par, no obstante, suelen ser de baja velocidad. Ventajas: alta precisin, alto torque, baja potencia, facilidad de control desde un uC, no requiere etapa de potencia externa. Desventaja: baja velocidad, alto costo (40000 pesos colombianos). Nota: Para mayor informacin de MOTORES SERVOS, DC, PASO PASO referirse a SECCION 19

154 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DE CONTROL DE POTENCIA DE ALTERNA MONOFASICA PAC1 A PAC8 CON BASE DE TIEMPO EN TIMER1
CONVERSOR AC AC CONTROLADO POR ANGULO DE DISPARO DE TRIAC PARA TENSIONES MONOFSICAS DE 120VAC Y 220VAC A 50/60 Hz
(MPAC)

Nota1: Los mdulos PAC1 a PAC8 toma los tiempos de la int de timer1 en alta o baja prioridad, aunque funciona en los dos modos se recomienda operar en baja prioridad para no cancelar el resto de int del pic debido a los periodos de tiempo tan pequeos que suele configurarse en timer1 al operar para el modulo pac1 a pac8. Nota2: El tiempo muerto TOFF se controla a travs de los registros o variables tipo byte TOFF_PAC1 a TOFF_PAC8. El dato de esta variable se multiplica por la base de tiempo establecida en timer1 y esto constituye el tiempo muerto del semiciclo en el gate del triac de cada una de las 8 salidas PAC. Nota3: Si el valor de la variable TOFF_PAC es 255 entonces el triac permanecer en estado off indefinidamente pues es el tiempo off mximo. Nota4: si el valor de la variable TOFF_PAC es 0 entonces el triac permanecer en estado ON (mxima tensin de salida) durante todo el semiciclo. Nota5: Mientras se asigne el timer1 al control PAC no estar disponible la interrupcin ORG13_INT_TMR1 ni la interrupcin ORG2_INT_PTB1 en bloque 8. Nota6: Dado que la seal de cross over es inyectada al PIC por el pin PTB1 el mdulo PAC configura automticamente esta interrupcin. Nota7: El usuario debe desactivar manualmente el pull up del puerto B debido a la seal de cross over que se inyecta al pin PTB1. Esto se logra mediante la macro DES_PULL_UP en el bloque 6. MACROS ASOCIADAS AL MODULO PAC MACROS : OUT_PAC1_PTD0 OUT_PAC2_PTD1 OUT_PAC3_PTD2 OUT_PAC4_PTD3 OUT_PAC5_PTD4 OUT_PAC6_PTD5 OUT_PAC7_PTD6 OUT_PAC8_PTD7 INTERRUPCION_LP_TMR1 CONFIG_INT_TMR1 DES_PULL_UP ARGUMENTOS : EXPLICACION SI/NO :activacion /desactivacion en bloque 1 SI/NO :activacion /desactivacion en bloque 1 SI/NO :activacion /desactivacion en bloque 1 SI/NO :activacion /desactivacion en bloque 1 SI/NO :activacion /desactivacion en bloque 1 SI/NO :activacion /desactivacion en bloque 1 SI/NO :activacion /desactivacion en bloque 1 SI/NO :activacion /desactivacion en bloque 1 SI/NO :activacion /desactivacion en bloque 1 PERIODO_TIMER :periodo del timer en bloque2 :desactivacion pull up en bloque 6 EJEMPLO Active timer1 en low priority con una base de tiempo = 1mS con xristal de 20 a 40 MHz preferiblemente (tambin funciona con otros cristales inferiores para lo cual se recomienda operar el tiempo de timer1 a mnimo 500uS). En el bloque 6 de condiciones iniciales desactive pull up de portb. Con una base de tiempo en timer1 = 1mS se obtiene mximo 8 pasos de voltaje de salida (8.33mS/1mS). Para modificar mediante pulsadores externos en tiempo de ejecucin el ngulo de disparo o tiempo muerto TOFF, activamos la interrupcin de PTB4 y PTB5 con flanco de bajada y alta prioridad y programamos en bloque 8 de la siguiente forma:

155 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

;_________________________________________________________________________________________ ORG4_INT_PTB4_FL: INCVAR TOFF_PAC1,0,9,1 ;incrementa tiempo muerto, es decir, ;disminuye el promedio de voltaje ;de salida OUT_INT ;_________________________________________________________________________________________ ORG6_INT_PTB5_FL: DECVAR TOFF_PAC1,0,9,1 ;decrementa tiempo muerto, es decir, ;aumenta el promedio de voltaje de ;salida OUT_INT

TEORA DE CONTROL DE POTENCIA ALTERNA MONOFASICA


CONVERSOR AC AC CONTROLADO POR ANGULO DE DISPARO DE TRIAC PARA TENSIONES MONOFSICAS DE 120VAC Y 220VAC A 50/60 Hz

(POWER AC - PAC)
(MPAC)

Con el mdulo Power AC (PAC) de LPM2 se puede controlar y regular la tensin de hasta 8 cargas monofsicas de 120VAC 220VAC de alterna como motores, ventiladores, taladros, licuadoras, cargas resistivas como planchas, bombillas incandescentes (no se puede controlar la luminosidad de lmparas fluorescente pues operan con otro principio de funcionamiento). La tensiones que se pueden controlar son monofsicas bifilar, es decir, una fase y el neutro a 120VAC 2 fases pero una de las dos se toma como el neutro. El mdulo PAC (POWER AC) CONTROL DE POTENCIA DE ALTERNA POR PWM genera un pulso (TOFF Tiempo de apagado del TRIAC) programable de 0 a 8.33mS (semiciclo de la seal de la red de 60Hz) por los pines PTD0 a PTD7, en total son 8 salidas PAC configurable para control de ngulo de conduccin de un TRIAC optoacoplado para seales de 120VAC 220VAC. Cada una de las 8 salidas puede tener un tiempo de apagado del TRIAC diferente mltiplo entero de la base de tiempo programada en Timer 1 en un rango de 0 a 255 (8 bit tipo byte). Las 8 salidas del mdulo POWER AC son compartidas con el mdulo PWM DC, es decir, si el usuario activa OUT_PWM1_PTD0 en el bloque 1 entonces no podr activar OUT_PAC1_PTD0 pues ambas comparten el PIN de salida PTD0.

156 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

Por ejemplo, si configura INTERRUPCION_LP_TMR1 SI OUT_PAC1_PTD0 SI CONFIG_INT_TMR1 TMR1_1MS DES_PULL_UP MOVLF 4,TOFF_PAC1

;activacin Timer 1 en bloque1 ;activacin pac en bloque1 ;base de tiempo, en bloque 2 ;desactivacin pull up portb en bloque 6 ;programacin de tiempo muerto de la ;seal en cualquier banco del 6 al 9 PTD0 genera un pulso con flanco de bajada (TOFF) cada vez que el circuito cross over (detector de cruce por cero de la seal senoidal de 120VAC 220VAC por interrupcin de PTB1 en baja prioridad) presenta un cambio de flanco. La seal del cross over entra al microcontrolador por el pin PTB1 configurado automticamente como interrupcin. El Pulso generado por PTD0 controla el gate de un TRIAC. El ancho o tiempo del pulso de apagado TOFF para este ejemplo se calcula as: TIEMPO DEL PULSO TOFF POR PTD0: TOFF = 4 x 1mS = 4mS

157 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


Cada vez que el PIC detecte un cambio de flanco (cruce por cero) PTD0 enviar un cero al gate del TRIAC (no conduce) durante 2.08 mS que es el tiempo programado como TOFF. Una vez caduque TOFF entonces PTD0 generar un pulso con flanco de subida por 2 uS aproximadamente (Trigger o disparo al gate del TRIAC) el cual dar inicio a TON (tiempo de conduccin del TRIAC) hasta el siguiente cruce por cero, es decir, por 4.33 mS: Ton = Tiempo de conduccin del TRIAC = 4.33ms = (8.33mS 4mS). Para este ejemplo TOFF equivale aproximadamente a la mitad parte del perodo total de un semiciclo (8.33 mS) en una seal alterna de 60Hz. La seal del pin PTD0 se acopla pticamente (optotriac MOC 3011 para 110VAC, MOC 3020 para 220AC monofsico) al gate de un TRIAC (BT136). Para efectos prcticos podra afirmarse que la tensin por efecto PWM que percibira una carga resistiva o inductiva en alterna conectada al TRIAC optoacoplado es proporcional a la siguiente relacin: VOLTAJE DE LA RED PUBLICA AC = 120VRMS = 169.7 VPICO FRECUENCIA RED PUBLICA AC = 60Hz PERIODO UN CICLO RED PUBLICA AC= 1/60Hz = 16.66 mS PERIODO SEMICICLO RED PUBLICA AC= 16.66 Ms/2 = 8.33mS T ON = PERODO SEMICICLO - T OFF T ON = 8.33mS 4mS T ON = 4.33 mS

Vpwm(AC) = Vrms x TON / PERIODO SEMICICLO Vpwm(AC) = 120Vrms x 4.33 mS / 8.33mS Vpwm(AC) = 62.3 VAC
Si TOFF es programado con un tiempo superior a 8.33 mS el TRIAC estar siempre apagado (corte) y se obtendr la mnima tensin de salida. Si TOFF es programado con un tiempo = 0 el TRIAC estar siempre encendido y se obtendr la mxima tensin de salida.

158 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

CROSS OVER OPTOACOPLADO

(PLANO CROSS OVER

CROSS ZERO)

159 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

(PLANO PAC) (PLANO TRIAC)

SELECCIN DE TRIAC Y OPTOTRIAC PARA EL CONTROL DE POTENCIA DE ALTERNA


MOC 3009= MOC 3010= MOC 3011= MOC 3012 :OPTOTRIAC 120VAC MOC 3020= MOC 3021MOC 3022= MOC 3023 : OPTOTRIAC 220VAC MOC 3040=MOC 3041 OPTOTRIAC 400VAC TRIAC BT136-500 ECG 5645 Z-41 MT1 MT2 GATE TO 220 TRIAC BT138 Z-41 MT1 MT2 GATE TO 220 TRIAC BTA-08 Z-41 MT1 MT2 GATE TO 220

La tensin umbral de los led comerciales de 3 5mm es de 2 voltios aproximadamente, la tensin umbral de los led internos de los optotriac MOC 30XX es de 1.2 a1.5 Voltios. La corriente que se recomienda a travs del led interno del optrotriac es de 10mA aproximadamente. En los optotriac serie 30XX la primera X indica el voltaje mximo soportada en la salida, por ejemplo 3040 significa que soporta hasta 400V, la segunda X indica la corriente que puede circular por la salida, por ejemplo 3040 soporta 30mA, 3041 soporta 15mA, 3042 soporta 10mA y 3043 soporta 5mA. Como norma general compre MOC 30X0 si todos valen lo mismo. La red snubber se utiliza para proteger los elementos activos de conmutacin (MOSFET, IGBT, TRIAC etc.) de las

160 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


sobre tensiones producidas por una carga inductiva. Al ser una red de proteccin esta se coloca en paralelo con el elemento de conmutacin. Nota: Para mayor informacin de MOTORES AC Y RELES referirse a SECCION 19 Y SECCION 22

VENTAJAS DEL CONTROL POR RELE


1. El rele controla cargas de alterna o directa indistintamente. 2. El rel cierra un swich fsico (dos lminas metlicas que se unen por atraccin magntica del electroimn creado al energizar la bobina) por lo tanto no hay caida de tensin entre sus terminales y toda la potencia de la fuente se aplica a la carga, adems al no presentar una resistencia en el swich no hay prdidas por efecto joule (calor). 3. El rel asla (magnticamente) la etapa de alta potencia de la de control (PIC).

DESVENTAJAS DEL CONTROL POR RELE


1. La activacin de la bobina del rel genera interferencia electromagntica y picos indeseados de tensin que podran averiar al transistor de conmutacin y alterar el funcionamiento del PIC. 2. El nmero de ciclos de conmutacin on/off del rel es muy limitado (10000 aproximadamente, depende del rele), desgaste mecnico, sulfatacin de las lminas metlicas de contacto. 3. El control de los rels es ON/OFF, no permite variar o regular la potencia en la carga. 4. La excitacin de la bobina requiere relativa alta corriente (30mA aproximadamente, depende del voltaje y potencia que controla el rele)

VENTAJAS DEL CONTROL POR TRIAC


1. El TRIAC es un tiristor y dispositivo electrnico de estado slido el cual controla cargas de alterna con relativa facilidad. 2. Al ser de estado slido no experimenta desgaste mecnico y tiene indefinido ciclos de encendido apagado. 3. Permite la regulacin de voltaje y potencia mediante el control de tiempo de disparo del gate. 4. Mediante un opto triac (MOC 30XX por ejemplo) puede aislarse ptimamente la etapa de potencia de la etapa de control (PIC) lo cual es mucho ms seguro que el acople magntico del rel.

161 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

DESVENTAJAS DEL CONTROL POR TRIAC


1. El control de cargas inductivas (motores por ejemplo) con el TRIAC puede generar armnicos o interferencia electromagntica a la red, lo cual podra afectar el funcionamiento del microcontrolador. 2. Se requiere un filtro snubber para proteger al TRIAC de picos de voltaje generados por cargas inductivas al ser controlados con el TRIAC. 3. Por ser un dispositivo de estado slido hay una pequea resistencia y cada de tensin en la unin MT1 y MT2, lo cual disminuye la transferencia total de potencia de la fuente a la carga y experimenta calentamiento por efecto joule.

CONTROL DE POTENCIA ON/OFF AC/DC CON RELE ELECTROMAGNETICO


(PLANO RELE)

162 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

163 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL MODULO CONVERSOR ANALOGO DIGITAL (MCAD)


El PIC 18F452 posee un conversor anlogo digital de aproximaciones sucesivas (SAR) de 8 canales de entrada multiplexadas, es decir, no puede convertir por las 8 entradas o canales simultneamente, por el contrario, es menester seleccionar un canal a la vez por software, no obstante, considerando la alta velocidad de conversin (mayor de 30KHz) puede afirmarse que para la mayora de variables fsicas (variables de dinmica lenta como temperatura, presin, humedad, etc) el PIC se comporta como 8 conversores paralelo operando simultneamente. El modulo conversor anlogo/digital convierte un mximo de 8 seales analgica a digital por el puerto a y e del pic. el valor binario de la conversin lo expresa en la variable CONVERCAD en formato de 8 bit o 10 bit dependiendo de la configuracin en bloque 1. Las macros IFLM35XXX, IFMVOLTXXX y C_GCENT deben ir precedidas por la macro CAD, es decir, la comparacin de voltajes y temperaturas se realiza con base en el ltimo canal convertido. Resolucin de Voltaje: Rv = (VRef+ - VRef-)/[(2^n) - 1] Si VRef+ = +5VDC, VRef- = GND, n=10 bit entonces... Rv = 4.89mV Si VRef+ = +5VDC, VRef- = GND, n=8 bit entonces... Rv = 19.6mV SIMBOLOGIA EN COMPARACION IF = IGUAL <> DIFERENTE > MAYOR QUE < MENOR QUE FACTOR: X1, X10, X100 :factor de multiplicacion de voltaje al convertir por cad MACRO ARGUMENTOS EXPLICACION ;activacion de cad a 8 bit en bloque 1 ;activacion de cad a 10 bit en bloque 1 ;selecciona canales a/d, frecuencia de muestreo en bloque 2 ;convierte por el canal 0 a 7 :convierte por el canal indicado en F8 :convierte por el ultimo canal seleccionado :muestra en lcd la temp en c de lm35 despues de una ;Conversion :muestra en lcd voltaje en (volt) despues de una ;conversion multiplicado por un factor (x1, x10 x100) :muestra en lcd voltaje en (mvolt) lcd despues de una ;conversion multiplicado por un factor (x1, x10 x100)

CONV_ANALOGO_DIGITAL_8BIT SI/NO CONV_ANALOGO_DIGITAL_10BIT SI/NO CONFIG_CAD A1_D7,FM_4 CAD CH0-CH7 CADF F8 CAD_FAST SLM35_LCD SVOLT_LCD SMVOLT_LCD CFIADC IFLM35IL IFLM35DL IFLM35MAL IFLM35MEL IFLM35IF IFLM35DF FACTOR FACTOR

L8,LABEL L8,LABEL L8,LABEL L8,LABEL F8,LABEL F8,LABEL

;acuesta bandera de conversin a/d :L8 (0 A 100C) SI TEMP = L8->SIGUIENTE RENGLON :L8 (0 A 100C) SI TEMP <> L8->SIGUIENTE RENGLON :L8 (0 A 100C) SI TEMP > L8->SIGUIENTE RENGLON :L8 (0 A 100C) SI TEMP < L8->SIGUIENTE RENGLON :F8 (0 A 100C) SI TEMP = F8->SIGUIENTE RENGLON :F8 (0 A 100C) SI TEMP <> F8->SIGUIENTE RENGLON

164 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


IFLM35MAF IFLM35MEF IFMVOLTIL IFMVOLTDL IFMVOLTMAL IFMVOLTMEL IFMVOLTIF RENGLON IFMVOLTDF RENGLON F8,LABEL F8,LABEL CONSTANTE,LABEL CONSTANTE,LABEL CONSTANTE,LABEL CONSTANTE,LABEL REGISTRO,LABEL REGISTRO,LABEL :F8 (0 A 100C) SI TEMP > F8->SIGUIENTE RENGLON :F8 (0 A 100C) SI TEMP < F8->SIGUIENTE RENGLON :L16 (0 A 5000 mV) SI VOLT(mV) = L16->SIGUIENTE RENGLON :L16 (0 A 5000 mV) SI VOLT(mV) <> L16->SIGUIENTE RENGLON :L16 (0 A 5000 mV) SI VOLT(mV) > L16->SIGUIENTE RENGLON :L16 (0 A 5000 mV) SI VOLT(mV) < L16->SIGUIENTE RENGLON :F8/16 (0 A 5000 mV) SI VOLT(mV) = F8/16->SIGUIENTE :F8/16 (0 A 5000 mV) SI VOLT(mV) <> F8/16->SIGUIENTE :F8/16 (0 A 5000 mV) SI VOLT(mV) > F8/16->SIGUIENTE :F8/16 (0 A 5000 mV) SI VOLT(mV) < F8/16->SIGUIENTE

IFMVOLTMAF REGISTRO,LABEL RENGLON IFMVOLTMEF REGISTRO,LABEL RENGLON C_GCENT

:convierte convercad en temperatura en grados centigrados y lo devuelve en la variable REG_GCENT DE 0 A 500 grados centigrados con un sensor LM35

EJEMPLO Conversor A/D como voltmetro y termmetro con sensor LM 35, configurar interrupcin por Timer0 cada segundo en baja prioridad, conversor CAD: A3_D5,FM_4 en bloque 2. ORG12_INT_TMR0 LINE_COL_LCD L2,C1 CAD CH0 SLM35_LCD CHAR_LCD "g" CHAR_LCD "-" IFLM35MAL 33,LBL_TMR0_1 CLR_LCD T_LCD ALARMA TEMP BLINK_LCD 3 LBL_TMR0_1 CAD CH1 SVOLT_LCD X1 CHAR_LCD "-" IFMVOLTMAL 4500,LBL_TMR0_2 TLCD ALARMA VOLT BLINK_LCD 3 LBL_TMR0_2 CAD CH3 SBCD_LCDF OUT_INT

;convierte por ch0 ;muestra temperatura en grados

;compara si temp > 33 grados ; si es mayor de 33 llega aqui

;convierte por ch1 ;muestra voltaje real X1 (mutiplicado por 1) ;compara si volt real > 4500mv ;si es mayor de 4500 mV llega aqui

CONVERCAD

;convierte por ch3 ;muestra conversion en lcd

165 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

166 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

167 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

TEORIA DE CONVERSORES ANALOGO/DIGITAL (CAD)


CONFIGURACIN DEL CONVERSOR ANALOGO / DIGITAL (CAD) Por ejemplo, la configuracin CONFIG_CAD A4_D2_RPN,FM_1 en bloque 2 significa

A4_D2_RPN: Seleccin de 4 canales analgicos, es decir, se puede conectar hasta 4 sensores o seales analgicos. D2 implica que 2 pines sern I/O digitales, RPN implica que PTA2 ser el voltaje de referencia negativo y PTA3 ser el voltaje de referencia positivo. La mxima diferencia de potencial entre Vref- y Vref+ ser +VCC (5.5V) FM_1: Seleccin de velocidad de conversin: es la velocidad ms alta. La seleccin de resolucin de conversin (10 bit) u (8 bit) se realiza directamente en el bloque 1. Cuando selecciona B10 en bloque 1 la resolucin es 10 bit y el resultado de la conversin es guardado en el registro de 16bit tipo Word llamado CONVERCAD y en dos registros tipo byte llamados CADH Y CADL. CONVERCAD = CADH:CADL (en CADH los 2 bit mas significativos MSB, en CADL los 8 bit menos significativos LSB). Cuando selecciona B8 en bloque 1 la resolucin es 8 bit y el resultado de la conversin es guardado en el registro CONVERCAD que esta vez se comporta como un registro tipo byte. CONVERCAD = CADL Cuando no se selecciona Voltaje de referencia entonces por defecto VrefNeg = GND y Vref Pos = +VCC

La resolucin de voltaje Rv de un conversor obedece a la siguiente ecuacin:

Rv =(Vref Pos - Vref Neg) / (2n 1)

Donde n es el nmero de bit de resolucin del conversor (8 10), por ejemplo: Si Vref Neg = 0, Vref Pos= 5V y n= 10bit Rv = 5/1023 = 4.88mV Si Vref Neg = 0, Vref Pos= 5V y n= 8bit Rv = 5/255 = 19.6mV El objetivo del mdulo conversor anlogo-digital es generar un nmero decimal equivalente a la seal analgica aplicada en la entrada. Por ejemplo, si en una entrada analgica (AN0 = CH0 = PTA0) se introduce una tensin de 2.5 Voltios entonces el conversor configurado a 10 bits y el PIC alimentado a 5 Voltios proporciona un nmero decimal = 512: #Decimal = 2.5V / Rv #Decimal = 2.5V/4.88mV #Decimal = 512.29 (se toma la parte entera) #Decimal = 512

168 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PARMETROS DE UN CONVERSOR A/D


1. Nmero de bit de salidas (n): alude al nmero de bit en la salida digital binaria, usualmente son de 8 bit (ADC 0804) aunque existen conversores seriales de 12 bit, los PIC 18FXXXX traen ADC de 8 10 bit. Es imperativo que entre ms nmero bit de salida ms precisin y mejor resolucin de voltaje se obtendr. 2. Nmero de canales (channel) de conversin (Nc): Un mismo circuito conversor ADC puede tener mltiples entradas, por ejemplo la familia 18FXXXX slo tiene un circuito ADC tipo SAR pero ofrece hasta 13 entradas anlogas multiplexadas (la familia 18F4x2 slo dispone de 8 canales anlogos). 3. Rango de Voltaje de entrada: Expresa la diferencia de potencial entre la mnima y mxima amplitud de seal de entrada del conversor. El microcontrolador 18FXXXX tiene un rango de voltaje de 2 a 5.5V pero puede trabajar con tensiones negativas y positivas mediante los pines RA2 y RA3. Por ejemplo si en el pin RA2 (V referencia negativa) se conectan -2 voltios y en el pin RA3 (V referencia positiva) se conectan +1 Voltio entonces el rango de voltaje de entrada sera 3Voltios pero con un offset negativo en -2Voltios. Este proceso es muy importante para un hipottico sensor que vare -1 a 1 voltio en pasos de 1 mV. Si este fuese el caso, lo correcto sera configurar: Vref- = -1V, Vref+=+1V. Recuerde que lo importante es que la diferencia de potencia entre Vref- y Vref+ no exceda la tensin de alimentacin del microcontrolador VDD. 4. Resolucin de voltaje (Rv): alude al cambio mnimo de voltaje anlogo de entrada que el ADC es capaz de detectar, es decir, el valor de un bit LSB. Entre ms pequeo sea esta tensin mejor ser la exactitud de la conversin.

Vr LSB = Rvol = (|Vref Neg| + Vref Pos) / (2n 1) Rvol= 5/255 = 19,6mV a 8 bit y VCC =5V Rvol= 5/1023 = 4.88mV a 10 bit y VCC =5V

Donde n es el nmero de bit de salida del conversor (8, 10, 12, 16)
Vref+ y Vref- son tensiones impuestas por el diseador, recuerde que la diferencia de potencial entre ellas no puede exceder la alimentacin positiva del uC. Ntese que la resolucin de voltaje puede mejorarse (disminuir su valor) decrementando la diferencia de potencial entre los voltajes de referencia positivo y negativo, esto puede ser til para algunos sensores cuya salida vara en el orden de 1 a 10 mV tales como electrodos en aplicaciones de biomedicina o sensores de deformacin de materiales (strain gauges). Si el diseador no desea modificar el rango predefinido de voltaje de entrada de un uC (0 a 5V) puede optar por acondicionar la seal de los sensores antes de introducirlas al conversor del PIC. Esto puede hacerse mediante etapas con amplificador operacional o por medio de WheaStone Bridge (lase puente wiston) que convierten leves cambios de resistencia en voltaje. 5. Tiempo de Conversin (Tc): Tiempo en uS mS que tarda un ADC en un ciclo de conversin. Inicia con la orden Star Convertion y finaliza con el evento End of Convertion. Lo ideal es que este tiempo tienda a cero, pues aplicaciones tales como procesamiento de audio y video requieren altas frecuencias de muestreo. Por ejemplo, en el PIC 18FXXXX este tiempo es configurable y depende de la frecuencia del cristal, temperatura ambiente, tiempo de propagacin de los dispositivos internos del conversor, etc. El tiempo de conversin depende de: 1. Amplifier Settling Time (TAMP) (Tiempo de establecimiento del amplificador del sample and holder del SAR) 2. Holding Capacitor Charging Time (TC) (Tiempo de carga del condensador del sample and holder) 3. Temperature Coefficient (TCOFF) (Coeficiente de Temperatura) TIEMPO MINIMO DE CARGA DEL CONDENSADOR DEL SAMPLE AND HOLDER CHOLD = 120 pF

169 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


Rs = 2.5 k Conversion Error .1/2 LSb VDD = 5V Rss = 7 K Temperature = 50C (system max.) VHOLD = 0V time = 0 CALCULO DEL MINIMO TIEMPO DE ADQUISICIN REQUERIDO (TACQ) TACQ = TAMP + TC + TCOFF VHOLD = (VREF (VREF/2048)) (1 e (-Tc/CHOLD(RIC + RSS + RS)) ) or TC = -(120 pF)(1 k + RSS + RS) ln(1/2048) TACQ =TAMP + TC + TCOFF El Coeficiente de temperatura solo se requiere para temperaturas > 25C. TACQ =2 s + TC + [(Temp 25C)(0.05 s/C)] TC =-CHOLD (RIC + RSS + RS) ln(1/2048) =120 pF (1 k + 7 k + 2.5 k) ln(0.0004883) =120 pF (10.5 k) ln(0.0004883) =1.26 s (-7.6246) TC=9.61 s TACQ =2 s + 9.61 s + [(50C 25C)(0.05 s/C)] TACQ = 11.61 s + 1.25 s TACQ= 12.86 s CLCULO DEL TIEMPO MNIMO DE CONVERSION DE UN PIC 18F452 (Tc) n = 10 bit de resolucin Fx = Frecuencia del cristal = 10MHz Fo = Frecuencia de oscilacin = 40MHz (10MHz x 4 del PLL) Tosc=Perodo de oscilacin =1/Frec de oscilacin = 25nS ADCS (Seleccin de divisin del cristal: 2, 4, 8, 16, 32, 64) = 2, es decir: (Fx/2) TACQ = 12.86 uS a 25C TAD: Tiempo de conversion por Bit, el TAD mnimo es 1.6uS, es decir: Si Fosc= 4MHz, Tosc = 250nS, ADCS mnimo = 1.6uS/250nS = 6.4, se aproxima al mayor siguiente = 8 Si Fosc= 4MHz, Tosc = 250nS, ADCS mnimo = 1.6uS/250nS = 6.4, se aproxima al mayor siguiente = 8 12: est relacionado con el SAR que requiere 12 TAD para convertir 10Bit. Tc = TACQ + [ (12) (ADCS) (Tosc)] Tc= 12.86uS + [12 x 64 x 25nS) Tc = 12.86uS + 19.2 uS

Tc =32.06 uS
la Frecuencia de muestreo o conversin mxima es Fm= 1/Tc Fm = 1/32,06 uS

Fm = 31.191 KHz
6. Frecuencia mxima de muestreo (Fm): Est determinada por el tiempo de conversin Fmax=1/Tc. Lo ideal es que tienda a infinito, esto determinar la capacidad del ADC de procesar y convertir seales anlogas de alta velocidad, tales como audio, vdeo, voz en tiempo real, radiofrecuencia, microondas, etc. Para el PIC 18F452 esta frecuencia es configurable y depende del tiempo de conversin, bit de resolucin y la frecuencia del cristal. La frecuencia mxima es Fm = 31 KHz 7. Error de Exactitud (E): Es un error que indica la variacin positiva o negativa expresada en LSB. Este valor alude al rango mximo de error que el fabricante garantiza que puede existir en una conversin. Por ejemplo el PIC 18FXXXX tiene un error de exactitud de +- LSB. Esto implica que el valor digital de salida podra desviarse mximo +- LSB por debajo o por encima del valor binario ideal. Es decir, si el valor anlogo en la entrada (Vin) es 1 voltio, el nmero binario de salida (Nb) debera ser

Rv = 1LSB = 0.0196 V 170 de 246


DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2 Nb = Vin/ Rv Nb ideal = 1V / 0.0196V = 51,02 = 51 (se toma la parte entera) Para este caso, la salida binaria real podra oscilar entre 50 y 52
8. Impedancia de entrada (Zin): Alude a una resistencia virtual conectada a tierra que percibira la seal o tensin aplicada al pin de entrada del conversor A/D. Los uC se caracterizan por tener una alta impedancia de entrada (Tecnologa CMOS en el orden de los M) lo cual garantiza que no representar una carga (load) para la seal que se aplique, es decir, toda la tensin de la seal se transferir al conversor A/D. Por otro lado, una alta impedancia de entrada incrementa la sensibilidad al ruido elctrico ambiental lo cual puede distorsionar la medicin de la seal, esto se puede evitar mediante el blindaje de conductores desde el sensor hasta el PIC. 9. Capacitancia de Entrada (Cin): Alude a un condensador virtual conectado a tierra que percibira la seal o tensin aplicada al pin de entrada del conversor A/D. Para los uC 18FXXXX es de 5pF. Entre ms pequeo sea el condensador mayor ser la frecuencia de corte de la seal de entrada, es decir, mayor frecuencia de entrada admitida al conversor. 10. Corriente de Fuga (I Leakage): Alude a una corriente muy pequea por lo general (+-100nA para el PIC 18F) que circula desde la entrada del conversor A/D hacia tierra debido a que la impedancia de entrada no es infinita. Nota: Para una mayor informacin acerca de teora de conversores A/D y D/A referirse a la SECCIN 5 de la carpeta SECCIONES DIGIBOOK. Un listado comercial de dispositivos sensricos de bajo costo se encuentra en la SECCIN 1. Para obtener mayor informacin acerca de la teora y funcionamiento de sensores remitirse a la SECCION 11.

A continuacin se ilustra la conexin de dos sensores de temperatura (LM35 / LM335), un sensor de luminosidad LDR (fotorresistencia) y un sensor de presin Motorola a un PIC 18F452. Note los condensadores y resistencias que funcionan como filtros pasabajos de la seal proporcionada por los sensores. La alimentacin de todos estos sensores es de +5V pero el rango de tensin de salida vara desde 0 Volts a 2 Volts para los sensores de temperatura y desde 0.2V 4.8 Volts para el sensor de presin, por lo cual no es necesario activar los voltajes de referencia del PIC (pin PTA2 y PTA3). Los data sheet pdfs de cada uno de estos sensores se encuentra en la carpeta DATA SHEET contenida en el CD DIGITAL BOOK.

171 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

172 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO DE CONEXIN GENERAL DE SENSORES PARA CONVERSOR A/D (PLANO CAD)

173 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

174 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

TEORA DEL DECODIFICADOR DE CONTROL REMOTO INFRARROJO

LPM2 decodifica hasta 5 receptores infrarrojos integrados. Considerando que el pin para el pulsador y led indicador de grabacin no requiere entrada por interrupcin del PIC entonces puede ser asignado manualmente por el programador mediante la macro CONFIG_INFRAROJO en el bloque 2: CONFIG_INFRAROJO MAX_TECLAS_5,PUL_LED_IR_PTA4, CONTROL_TV_EMERSON

Significa MAX_TECLAS_5: Se pueden grabar hasta 5 cdigos IR en la memoria EEPROM de dato, el mximo de cdigos o teclas que se pueden grabar es 51. PUL_LED_IR_PTA4: Se asigna el pin PTA4 para la conexin simultnea del led indicador de grabacin y pulsador de grabacin. Se sugiere seleccionar PTA4 debido a la limitacin que presenta por la salida de drenador abierto pues el led indicador se conecta en modo sink (enciende con ceros). CONTROL_TV_EMERSON: Alude a la marca comercial del control remoto, la versin agosto/2007 slo decodifica la marca emerson. PRINCIPIO DE FUNCIONAMIENTO: Al presionar cualquier tecla del control remoto IR el gestor automtico de interrupciones (handler interruptions) dirigir el puntero de programa (pointer program) hacia la etiqueta (ORG15_INT_1_IR, ORG16_INT_4_IR_1, ORG17_INT_4_IR_2, ORG18_INT_4_IR_3 u ORG19_INT_4_IR_4) del bloque 8 y en la variable REG_TECIR encontrar el valor (1 a 51) de la tecla presionada dependiendo del orden de grabacin en la EEProm de dato. Considerando que no es posible independizar la activacin/desactivacin de la interrupcin por los pines RB4 RB7 (el PIC controla estas 4 interrupciones con una sola orden o bit de habilitacin RBIE/RBIF del registro especial INTCON) el usuario debe saber que si se activa en el bloque1 INTERRUPCION_HP_4_IR_PTB4_7 INTERRUPCION_LP_4_IR_PTB4_7 entonces los pines PTB4 A PTB7 quedarn configurados como entradas por interrupcin esperando que se conecte el dato de los 4 receptores infrarrojos. Si la aplicacin slo requiere 1 receptor IR entonces no active INTERRUPCION_4_IR_PTB4_7 si no INTERRUPCION_1_IR_PTB1 y utilice la entrada PTB1 como entrada de DATO. Si la aplicacin requiere 4 receptores IR entonces no active INTERRUPCION_1_IR_PTB1 si no INTERRUPCION_4_IR_PTB4_7 y utilice las entradas PTB4 a PTB7 como entrada de dato. Si la aplicacin requiere de 5 receptores IR entonces active INTERRUPCION_1_IR_PTB1 y INTERRUPCION_4_IR_PTB4_7 y utilice las entradas PTB2 y PTB4 a PTB7 como entrada de dato

175 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


respectivamente. Si la aplicacin requiere 2 receptores IR entonces no active INTERRUPCION_1_IR_PTB1 si no INTERRUPCION_4_IR_PTB4_7 y utilice las entradas PTB4 y PTB5 como entrada de dato respectivamente. Las entradas PTB6 y PTB7 quedaran inutilizadas para cualquier hardware, djelas al aire pues tienen pull up interno activado. Si la aplicacin requiere 3 receptores IR entonces no active INTERRUPCION_1_IR_PTB1 si no INTERRUPCION_4_IR_PTB4_7 y utilice las entradas PTB4, PTB5 y PTB6 como entrada de dato respectivamente. La entrada PTB7 quedara inutilizada para cualquier hardware, djela al aire pues tiene pull up interno activado. El mdulo receptor IR requiere de uno a cinco sensores integrados IR (se recomienda Sharp metlico) de tres pines (+VCC=5Volt, GND y Dato de salida), suelen venir en dos encapsulados: plstico y metlico. En la siguiente figura se muestra cules son los 3 pines respectivos dependiendo del encapsulado aunque esto puede variar de un fabricante a otro. Debe respetarse siempre la conexin del dato del sensor IR en el puerto B con interrupcin. Note que el Led indicador de grabacin y recepcin de radiacin infrarroja comparte el pin del PIC con el pulsador, esto se denomina programacin simultnea de pines y es muy til para ahorrar pines I/O del microcontrolador. El mdulo RX infrarrojo tiene asignada toda la memoria EEPROM de dato (256 direcciones de 8 bit) para guardar los cdigos de cada tecla programada, es decir, cuando active el mdulo IR tenga presente que cada tecla que programe del control remoto consumir 5 bytes de la memoria EEPROM de DATO del PIC a partir de la direccin cero. En conclusin, mximo se pueden programar 51 teclas del control para 51 funciones diferentes ( 51 x 5 = 255 bytes de memoria EEPROM de dato ocupadas). Es de inters para el lector saber que si slo programa 10 teclas del control entonces slo ocupar 50 bytes de la memoria EEPROM de dato (10 teclas x 5 Bytes = 50 Bytes), quedando disponibles 206 bytes (direccin 50 a 255) para alguna aplicacin particular del usuario.

176 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO RECEPTOR DE CONTROL REMOTO INFRARROJO IR CON INTERRUPCIN (PLANO RXIR)

El sensor IR Sharp metlico tiene los pines ilustrados en la figura anterior mirndolo de frente, es decir, mirando al fotodiodo o fototransistor interno de la cpsula. Lo mismo es aplicable al sensor con encapsulado plstico. Algunos sensores con encapsuado plstico tienen una estructura metlica exterior, en este caso, los pines del mismo corresponden al orden del encapsulado totalmente metlico. Se debe conectar a tierra la estructura metlica que cubre los sensores infrarrojos para evitar interferencia electromagntica.

177 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

CMO PROGRAMAR LAS TECLAS DEL CONTROL REMOTO IR


Se pueden programar hasta 51 teclas del control remoto para asignarles funciones especficas en nuestra aplicacin. El procedimiento es el siguiente: 1. Monte el Hardware de la figura inmediatamente anterior y alimente el circuito. 2. Presione el pulsador RESET del microcontrolador: Esto posiciona el puntero de grabacin de teclas en la posicin 0, es decir, prepara al microcontrolador para grabar en la primera posicin de la EEPROM de programa (direccin 0). 3. Procure realizar esta operacin en un lugar con bajo nivel de luminosidad, no permita que lmparas fluorescentes incidan directamente sobre el receptor IR. 4. Presione y mantenga presionado el pulsador GRABADOR DE CODIGO mientras emite una radiacin infrarroja cualquiera hacia el sensor IR. Libere el pulsador GRABADOR DE CODIGO y espere hasta que el led indicador se apague automticamente (2 seg aproximadamente). A continuacin se debe presionar a una distancia de 30cm aproximadamente la tecla del control remoto que se desea grabar en la primera posicin de memoria. Si el proceso es correcto el LED indicador de grabacin debe oscilar 3 veces y luego apagarse. 5. Automticamente el puntero de grabacin se incrementa y queda posicionado en el segundo lugar para grabar la siguiente tecla. Se debe repetir el paso 4 para grabar hasta la tecla 51 si se desea. 6. Al terminar de programar las teclas requeridas en su aplicacin puede probar si quedaron bien programadas presionado la tecla respectiva del control remoto y verificando que ocurre la interrupcin de recepcin de cdigo IR (esto lo veremos ms adelante). Nota 1: Para evitar la interferencia electromagntica (EMI) en el sensor IR utilice cable blindado para conectar el sensor hasta el circuito y debe conectarse el apantallamiento o blindaje a tierra. Otra sugerencia es colocar un bypass (104) en paralelo con los pines de alimentacin del sensor. Si la interferencia persiste conecte un filtro de mayor capacitancia (100 a 2200 uF). Nota 2: Una manera de saber si se conect en la forma debida el receptor integrado IR, es apuntndole directamente con un control remoto IR cualquiera, el led indicador de rayos IR debe encenderse. Si no enciende es que el sensor est averiado o lo ms factible, que los pines seleccionados no sean los correctos, en tal caso cambie la distribucin de los pines y vuelva a intentar.

SENSOR DE PROXIMIDAD INFRARROJO


Otra aplicacin de los sensores infrarrojos es un sensor de proximidad por reflexin que podra detectar la presencia de un cuerpo que refleje la luz (colores oscuros absorben la luz) hasta con 3 metros de distancia. El led infrarrojo transmisor debe oscilar a una frecuencia de ametrallamiento (burst) entre 36 y 40KHz de onda cuadrada (ciclo til del 50%) y se controla con el PIC (o con un CI 555 como astable) a travs de una etapa amplificadora en corte saturacin tal como un transistor NPN en emisor comn con una resistencia de 10 a 47 (resistencias pequeas garantizan un gran alcance en el detecor de proximidad reflectivo) en serie con el led o los leds infrarrojos. Aunque en teora una resistencia de 10 ohm implicara una corriente elevada circulando por el led y el emisor del transistor la realidad es que como la seal de control es una onda cuadrada entonces se presenta el efecto de PWM de DC. La distancia de reflexin depende: 4. La sensibilidad del receptor infrarrojo (se recomienda sharp metlico de 3 pines). 5. El ciclo til de la seal DC pulsante de control (a mayor ciclo til mayor distancia sin superar un ciclo til del 90%). 6. El color del cuerpo. (cuerpos u objetos oscuros absorben la luz, no la reflejan). 7. El nmero de led infrarrojos en serie: Para una mayor distancia se pueden conectar varios led infrarrojos en serie como indica la siguiente figura. 8. La corriente a travs de los led emisor infrarrojos. Garantice una corriente de aproximadamente 150mA DC pulsantes, para lograr esto debe calcular la RC para uno ms led infrarrojos en serie como se observa en la siguiente figura. Utilice una RC = 27 para 1 led, 1 para 2 led.

178 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


La deteccin de la seal reflejada se puede programar en el microcontrolador por el mtodo polling o por interrupcin (sugerido) de un pin del puerto B.

PLANO DE SENSOR DE PROXIMIDAD INFRARROJO


(PLANO SENSOR PROXIMIDAD)

179 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL DECODIFICADOR DE CONTROL REMOTO INFRA ROJO (MRXIR)


MAX_TECLAS = MAX_TECLAS_1 A MAX_TECLAS_51: cada tecla ocupa 5 bytes de memoria eeprom de dato iniciando en la dir 0 MACRO ARGUMENTOS : EXPLICACION INTERRUPCION_HP_1_IR_PTB1 SI/NO :act de 1 rx ir en ptb1 en alta prioridad INTERRUPCION_LP_1_IR_PTB1 SI/NO :act de 1 rx ir en ptb1 en baja prioridad INTERRUPCION_HP_4_IR_PTB4_7 SI/NO :act de 4 rx ir en ptb4 a ptb7 en alta prioridad INTERRUPCION_LP_4_IR_PTB4_7 SI/NO :act de 4 rx ir en ptb4 a ptb7 en baja prioridad CONFIG_INFRAROJO MAX_TECLAS_10,PUL_LED_IR_PTA4,CONTROL_TV_EMERSON CONSTANTES DEL RECEPTOR INFRA ROJO CONTROL_TV_EMERSON ;marca de control remoto decodificado

;LPM2 decodifica hasta 5 receptores infrarrojos integrados de seales provenientes de ;cualquier control remoto infrarrojo de uso domstico como TV, equipo de sonido,etc. ;El dato decimal (1 a 51) de la tecla recibida est en la variable REG_TECIR. ;Nota: El dato en la variable REG_TECIR es decimal (No ASCII), por lo tanto no va entre ; comillas. ;Nota: la constante MAX_TECLAS es de MAX_TECLAS_1 a MAX_TECLAS_51 ; cada tecla ocupa 5 bytes de memoria eeprom de dato iniciando en la dir 0

;_________________________________________________________________________________________ ; EJEMPLO 1 ;El siguiente ejemplo decodifica e identifica la tecla presionada desde un control remoto ;infrarrojo de TV cualquier electrodomstico y lo muestra en LCD ;Active INTERRUPCION_HP_1_IR_PTB1 en bloque 1. ;Active Pull Up de PORTb en bloque 6 (si no puede activar pull up de portb entonces debe ;emplear resistencia de pull up externas de 4.7K en la entrada dato del receptor IR) ; cdigo en bloque 8 de interrupciones

;ORG18_INT_1_IR IFFIL REG_TECIR,1,LBL1 ;SI Tecla 1 del control ; TLCD " TECLA 1 " ;LBL1 IFFIL REG_TECIR,2,LBL2 ;SI Tecla 2 del control ; TLCD " TECLA 2 " ;LBL2 IFFIL REG_TECIR,10,LBL3 ;SI Tecla 10 del control ; TLCD " TECLA 10 " ;LBL3 OUT_INT

;_________________________________________________________________________________________ ; EJEMPLO 2 ; SIMULACION EN PROTEUS DEL CONTROL INFRA ROJO

180 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


;El siguiente ejemplo permite detectar datos provenientes de un control Infrarojo y conexin ;UART RS232 para simulacin de teclado PS2 desde Proteus. Con el control "virtual terminal" ;de Proteus el PIC recibir datos desde el teclado conectado al PC y simularn los datos ;recibidos de un control remoto Infra Rojo conectado al PIC. ;Active INTERRUPCION_HP_1_IR_PTB1 e INTERRUPCION_HP_RXUART_PTC7 en bloque 1. ;Active Pull Up de PORTb en bloque 6 (si no puede activar pull up de portb entonces debe ;emplear resistencia de pull up externas de 4.7K en la entrada dato del receptor IR) ;Configure la velocidad de transmisin de datos del mdulo UART de LPM2 y el ;"virtual terminal" de proteus a la misma tasa de baudios. ;Este ejemplo slo simula las teclas 0 a 9 desde proteus, le resta 48 al nmero ascii ;recibido para convertirlo en decimal. Es decir, el ascci del nmero "0" es 48, el del ;nmero 1 es 49 y as sucesivamente, para convertirlo a decimal se le resta 48 al dato ;ascci recibido. ; ; -------------------------------------------------cdigo en bloque 8 de interrupciones DECRE REG_RXUART,48 ;convierto ascii a decimal REG_RXUART,REG_TECIR ;cargar dato uart en reg_IR ORG18_INT_1_IR ;salto a interrupcion infrarrojo

;ORG14_INT_RXUART: ; MOVFFF ; GOTO ;

--------------------------------------------------

;ORG18_INT_1_IR IFFIL REG_TECIR,1,LBL1 ;SI Tecla 1 del control ; TLCD " TECLA 1 " ;LBL1 IFFIL REG_TECIR,2,LBL2 ;SI Tecla 2 del control ; TLCD " TECLA 2 " ;LBL2 IFFIL REG_TECIR,10,LBL3 ;SI Tecla 10 del control ; TLCD " TECLA 10 " ;LBL3 OUT_INT

181 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

TEORA DE TECLADO PS2 AT DE LA PC (TEORIA TPS2)

LPM2 decodifica hasta 5 teclados PS2 sincrnico (NO teclado USB) de computadora. Decodifica todas las teclas del 0 al 9, de la A mayscula hasta la Z mayscula, F1 A F12, ESCAPE, SPACE, BACK, TAB. Considerando que la lnea DATO de cada uno de estos teclados no requiere entrada por interrupcin del PIC entonces puede ser asignada manualmente por el programador mediante la macro CONFIG_TECPS2 en el bloque 2: CONFIG_TECPS2 DATO_TEC1_PTB3,DATO_TEC2_PTNN,DATO_TEC3_PTNN,DATO_TEC4_PTNN, DATO_TEC5_PTNN Significa DATO_TEC1_PTB3: la lnea de dato del teclado PS2 nmero 1 se conecta al pin PTB3 (no tiene interrupcin) del pic. Recuerde que si selecciona un pin que no pertenezca al puerto B entonces deber conectar una resistencia de Pull Up externa de 4.7K. DATO_TEC2_PTNN: la lnea de dato del teclado PS2 nmero 2 a PS2 nmero 5 se conecta al pin PTNN, es decir, no se asigna al PIC pues slo se conectar un teclado PS2 al PIC (el teclado nmero 1). La lnea CK de cada teclado PS2 est predeterminada (NO SE PUEDE MODIFICAR) de la siguiente manera: CK DEL PRIMER TECLADO: PTB2 CK DEL SEGUNDO TECLADO: PTB4 CK DEL TERCER TECLADO: PTB5 CK DEL CUARTO TECLADO: PTB6 CK DEL QUINTO TECLADO: PTB7 Nota: Todas las entradas del Teclado PS2 (dato y ck) rquieren resistencias de pull up, por ello debe activar Pull Up de PORTB en bloque 6 mediante la macro ACT_PULL_UP. Si no puede activar pull up de portb (por ejemplo si activ el mdulo Potencia de AC PAC) entonces debe emplear resistencia de pull up externas de 4.7K en la entrada dato y ck de cada teclado) Al presionar cualquier tecla el gestor automtico de interrupciones (handler interruptions) dirigir el puntero de programa (pointer program) hacia la etiqueta (ORG20_INT_1_TECPS2, ORG21_INT_4_TECPS2_1, ORG22_INT_4_TECPS2_2, ORG23_INT_4_TECPS2_3 u ORG24_INT_4_TECPS2_4) del bloque 8 y en la variable REG_TECPS2 encontrar el valor (en ascii) de la tecla presionada. Considerando que no es posible independizar la activacin/desactivacin de la interrupcin por los pines RB4 RB7 (el PIC controla estas 4 interrupciones con una sola orden o bit de habilitacin RBIE/RBIF del registro especial INTCON) el usuario debe saber que si se activa en el bloque1 INTERRUP_HP_4_TECPS2_CK_PTB4_7 INTERRUP_LP_4_TECPS2_CK_PTB4_7 entonces los pines PTB4 A PTB7 quedarn configurados como entradas por interrupcin esperando que se conecte el CK de 4 teclados PS2. Si la aplicacin slo requiere 1 teclado PS2 entonces no active INTERRUP_4_TECPS2_CK_PTB4_7 si no INTERRUP_HP_1_TECPS2_CK_PTB2 y utilice la entrada PTB2 como entrada de reloj y se sugiere PTB3 como entrada de la lnea de dato (debido al pull up interno). Si la aplicacin requiere de 4 teclados PS2 entonces no active INTERRUP_HP_1_TECPS2_CK_PTB2 si no active INTERRUP_4_TECPS2_CK_PTB4_7 y utilice las entradas PTB4 a PTB7 como entrada de reloj respectivamente. Si la aplicacin requiere de 5 teclados PS2 entonces active INTERRUP_HP_1_TECPS2_CK_PTB2 y

182 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


active INTERRUP_4_TECPS2_CK_PTB4_7 y utilice las entradas PTB2 y PTB4 a PTB7 como entrada de reloj respectivamente. Si la aplicacin requiere 2 teclados PS2 entonces no active INTERRUP_HP_1_TECPS2_CK_PTB2 si no active INTERRUP_4_TECPS2_CK_PTB4_7 y utilice las entradas PTB4 y PTB5 como entrada de reloj respectivamente. Las entradas PTB6 y PTB7 quedara inutilizada para cualquier hardware, djelas al aire pues tienen pull up interno activado. Si la aplicacin requiere 3 teclados PS2 entonces no active INTERRUP_HP_1_TECPS2_CK_PTB2 si no active INTERRUP_4_TECPS2_CK_PTB4_7 y utilice las entradas PTB4, PTB5 y PTB6 como entrada de reloj respectivamente. La entrada PTB7 quedara inutilizada para cualquier hardware, djela al aire pues tiene pull up interno activado. Si otro mdulo (control de potencia de AC PAC por ejemplo) requiere desactivar el pull up de puerto B entonces se debe conectar una resitencia de pull up externo de 4.7K a cada una de la entradas del puerto B u otro puerto utilizadas por el mdulo teclado PS2. Se pueden conectar varios teclados PS2 en paralelo siempre y cuando no presione teclas simultneamente, es decir, si una aplicacin lo requiere se puede conectar en paralelo los CK de todos los teclados y enviarlos al pin PTB2 por ejemplo. Los datos de cada teclado se deben conectar al PIN asignado en bloque 2 (PTB3 por ejemplo) a travs de un diodo 1N4148 como lo muestra la siguiente figura:

183 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

184 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO DE CONEXIN DE TECLADOS PS2 DE COMPUTADORA


(PLANO TPS2)

DIAGRAMA DE CONEXIN DEL PLUG (MACHO-MOLE) DEL TECLADO PS2


1. Clock 2. Data 3. N/C 4. GND 5. +5V (VCC) 1. Clock 2. GND 3. Data 4. N/C 5. +5V (VCC) 6. N/C

5 Pin DIN

PS/2

NOTA: Este diagrama de pines corresponde al plug (macho) del teclado de PC, NO equivale a los pines del Jack conector hembra. Invertir los pines VCC con GND daa irremediablemente el microcontrolador interno del teclado.

185 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PROTOCOLO DE COMUNICACIN DE TECLADO A PIC

PROTOCOLO DE COMUNICACIN DE PIC A TECLADO

186 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

CODIGOS ENVIADOS POR EL CODIFICADOR DEL TECLADO PS2


El uC de los teclados PS2 no envan caracteres en formato assci si no que utiliza los llamados "scan codes" que es un codigo que el ucontrolador interno del teclado asigna a la posicion de cada tecla del teclado. Por ejemplo, al presionar la tecla A, el microcontrolador en el interior del teclado no enviar el cdigo ASCII 65 sino un cdigo particular (1C) en hexadecimal, es decir el nmero 28 en decimal.

Nota: Si requiere mayor informacin del Teclado PS2 remitirse a la SECCION 6 del DIGIBOOK.

187 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL DECODIFICADOR TECLADO PS2 DE COMPUTADORA (MTPS2)


MACRO : ARGUMENTOS : EXPLICACION INTERRUP_HP_1_TECPS2_CK_PTB2 SI/NO :act de 1 teclado ps2 de pc en ptb2 en alta prioridad INTERRUP_LP_1_TECPS2_CK_PTB2 SI/NO :act de 1 teclado ps2 de pc en ptb2 en baja prioridad INTERRUP_HP_4_TECPS2_CK_PTB4_7 SI/NO :act de 4 teclado ps2 de pc en ptb4 a ptb7 en alta prioridad INTERRUP_LP_4_TECPS2_CK_PTB4_7 SI/NO :act de 4 teclado ps2 de pc en ptb4 a ptb7 en baja prioridad CONFIG_TECPS2 DATO_TEC1_PTB3,DATO_TEC2_PTNN,DATO_TEC3_PTNN,DATO_TEC4_PTNN,DATO_TEC5_PTNN CONSTANTES DEL TECLADO PS2 CONECTADO AL PIC ;Nota: Las letras A a la Z y los nmeros 0 a 9 son detectados con su respectivo cdigo ; Ascii, por lo tanto no requieren representarse mediante constantes especiales TEC_ESCAPE TEC_BACK TEC_ENTER TEC_TAB TEC_F1 TEC_F2 TEC_F3 TEC_F4 TEC_F5 TEC_F6 TEC_F7 TEC_F8 TEC_F9 TEC_F10 TEC_F11 TEC_F12 TEC_SPACE 27 8 13 9 112 113 114 115 116 117 118 119 120 121 122 123 32 TECLA ESCAPE TECLA RETROCESO TECLA ENTER TECLA TAB TECLA F1 TECLA F2 TECLA F3 TECLA F4 TECLA F5 TECLA F6 TECLA F7 TECLA F8 TECLA F9 TECLA F10 TECLA F11 TECLA F12 TECLA ESPACIO

;_________________________________________________________________________________________ ; EJEMPLO 1 ;El siguiente ejemplo decodifica e identifica la tecla presionada desde un teclado PS2 ;de computadora y lo muestra en LCD. ;Active INTERRUP_HP_1_TECPS2_CK_PTB2 en bloque 1. ;Active Pull Up de PORTb en bloque 6 ( si no puede activar pull up de portb entonces debe ;emplear resistencia de pull up externas de 4.7K en la entrada dato y ck del teclado) ; ; -------------------------------------------------cdigo en bloque 8 de interrupciones

;ORG23_INT_1_TECPS2 LINE_COL_LCD L1,C1 ;POSICIONA LCD CHAR_LCDF REG_TECPS ;MUESTRA TECLA PRESIONADA ; IFFIL REG_TECPS2,"A",LBL1 ;SI RECIBE LETRA A ; TLCD " LETRA A " ;LBL1 IFFIL REG_TECPS2,"1",LBL2 ;SI RECIBE NUMERO 1 ; TLCD " NUMERO 1" ;LBL2 IFFIL REG_TECPS2,TEC_ESCAPE,LBL3 ;SI TECLA ESCAPE

188 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


; TLCD ;LBL3 "TECLA ESCAPE" OUT_INT

;_________________________________________________________________________________________ ; EJEMPLO 2 ; SIMULACION EN PROTEUS DEL TECLADO PS2 DE COMPUTADORA ;El siguiente ejemplo permite detectar datos provenientes de un teclado PS2 y conexin UART ;RS232 para simulacin de teclado PS2 desde Proteus. Con el control "virtual terminal" de ;Proteus el PIC recibir datos UART desde el teclado conectado al PC y simularn los datos ;recibidos de un teclado PS2 conectado al PIC. ;Active INTERRUP_HP_1_TECPS2_CK_PTB2 e INTERRUPCION_HP_RXUART_PTC7 en bloque 1. ;Active Pull Up de PORTb en bloque 6 (si no puede activar pull up de portb entonces debe ;emplear resistencia de pull up externas de 4.7K en la entrada dato y ck del teclado) ;Configure la velocidad de transmisin de datos del mdulo UART de LPM2 y el ;"virtual terminal" de proteus a la misma tasa de baudios. ; ; ;ORG14_INT_RXUART: MOVFFF ; GOTO ; -------------------------------------------------cdigo en bloque 8 de interrupciones REG_RXUART,REG_TECPS2 ;cargar dato uart en reg_tps2 ORG23_INT_1_TECPS2 ;salto a interrupcion ps2 --------------------------------------------------

;ORG23_INT_1_TECPS2 IFFIL REG_TECPS2,"A",LBL1 ;SI RECIBE LETRA A ; TLCD " LETRA A " ;LBL1 IFFIL REG_TECPS2,"1",LBL2 ;SI RECIBE NUMERO 1 ; TLCD " NUMERO 1 " ;LBL2 IFFIL REG_TECPS2,TEC_F2,LBL3 ;SI TECLA F2 ; TLCD " TECLA F2 " ;LBL3 OUT_INT ;Nota: La tecla F1 no puede ser simulada en proteus pues abre las ayudas del mismo ;

189 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DEL MODULO TEC MATRICIAL 4X4 / 4X3 (MTMAT)


Nota: el valor de la tecla presionada (1 a 16 para teclado 4X4 1 a 12 para teclado 4X3) se encuentra en el registro "REG_TECMAT" tipo byte. MACRO ARGUMENTOS EXPLICACION INTERRUPCION_HP_TEC_4X4_PTB4_7 SI/NO :activacion en bloque 1 INTERRUPCION_LP_TEC_4X4_PTB4_7 SI/NO :activacion en bloque 1 INTERRUPCION_HP_TEC_4X3_PTB4_6 SI/NO :activacion en bloque 1 INTERRUPCION_LP_TEC_4X3_PTB4_6 SI/NO :activacion en bloque 1 CONFIG_TEC_4X4 OUT1_PTC0,OUT2_PTC1,OUT3_PTC2,OUT4_PTC3 ;en bloque 2 ;LPM2 decodifica 2 tipos de teclado matricial (4x3 y 4x4), el dato decimal (1 a 12 1 a 16) ;de la tecla presionada est en la variable REG_TECMAT. ;El dato en la variable REG_TECMAT es decimal (No ASCII), por lo tanto no va entre ;comillas. ;Si el teclado matricial es 4x3 entonces queda libre la entrada ptb7. ;Active Pull Up de PORTb en bloque 6 (si no puede activar pull up de portb entonces debe ;emplear resistencia de pull up externas de 4.7K en la entrada de PTB4 A PTB7). ;_________________________________________________________________________________________ ; EJEMPLO 1 ;El siguiente ejemplo decodifica e identifica la tecla presionada de un teclado matricial ;4X3 4X4 y lo muestra en LCD ;Active INTERRUPCION_HP_TEC_4X4_PTB4_7 en bloque 1. ; cdigo en bloque 8 de interrupciones

;ORG28_INT_TEC_MAT IFFIL REG_TECMAT,1,LBL1 ;SI Tecla 1 del TECLADO ; TLCD " TECLA 1 " ;LBL1 IFFIL REG_TECMAT,2,LBL2 ;SI Tecla 2 del TECLADO ; TLCD " TECLA 2 " ;LBL2 IFFIL REG_TECMAT,10,LBL3 ;SI Tecla 10 del TECLADO ; TLCD " TECLA 10 " ;LBL3 OUT_INT

;Proteus simula directamente un teclado matricial 4X3 4x4. ;

190 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO DEL TECLADO MATRICIAL 4X4, 4X3


CONFIGURACIN DEL TECLADO MATRICIAL 4X3 4X4 POR INTERRUPCION DE CAMBIO EN RB4 A RB7 (PLANO TMAT) Por ejemplo, la configuracin CONFIG_TEC_MAT Significa que Los 4 primeros pines del puerto C sern las 4 salidas de la matriz del teclado, note que la macro slo espera como argumentos 4 pines del PIC. Las 3 4 entradas del PIC para la matriz SIEMPRE sern los pines RB4 a RB6 (para el teclado 4 x 3) o los pines RB4 a RB7 (para el teclado 4 x4). OUT1_PTC0,OUT2_PTC1,OUT3_PTC2,OUT4_PTC3 ;en bloque 2

LPM2 soporta la programacin de pines I/O con funciones simultneas. Por ejemplo si en un proyecto se requiere conectar un teclado matricial con una o ms LCD se recomienda compartir los 4 pines de datos de la LCD con los 4 pines de salida del teclado matricial como se aprecia en la siguiente figura. Al presionar cualquier tecla el algoritmo gestor automtico de interrupciones (handler interruptions) dirigir el puntero de programa (pointer program) hacia la etiqueta ORG_28_INT_TEC_MAT del bloque 8 y en la variable REG_TECMAT encontrar el valor (1 a 16 1 a 12) de la tecla presionada, luego se ejecuta una pausa de 300mS (para eliminar el efecto antirrebote del teclado).

191 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO DE CONEXIN DE LCD Y TECLADO MATRICIAL COMPARTIENDO CIERTOS PINES DE CONTROL (PLANO TMAT)

192 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS TRANSCEIVER TRF2p4 HP DR1 PTB1 EN MODO SHOCK BURST TRF 2.4 GHZ (MTRF)
El transceiver TRF de 2.4GHz emplea modulacin GFSK (modulacion por desplazamiento de frecuencia gaussiana), protocolo: IEEE 802.15.4 alcance maximo: 280m en exteriores y 50m en interiores a 250kbps, tasa de transferencia:1mbps/250kpbs, se seleccion 250kbps por mayor alcance. El codigo recibido y transmitido (payload) de 25 byte se encuentra en los registros REG_TRF1 a REG_TRF25 tipo byte. Se debe desactivar pull up de portb en bloque 6 pues la interrupcion por el pin DR1 del transceiver se activa con flanco de subida, es decir, el estado idle (reposo) de la entrada dr1 del pic debe estar en cero lgico. La limitacin radica en la baja corriente en alto y bajo de la salida DR1 del transceiver (Io = 0.5ma), la cual no vence el nivel de voltaje impuesto por el pull up interno del pic mediante una resistencia de aproximadamente 3kohm. CONFIGURACIN TRF 2.4 (PARA CAMBIAR ESTA CONFIGURACIN VER EL ARCHIVO MACROS DE LPM) en la configuracin actual se activa un canal de rx, 40 bit de direccion, 200 bit de payload, velocidad 250kbps, maxima potencia de salida (0db), xristal = 16mhz,direccion destino de receptor1 = 5,4,3,2,1, direccion destino de receptor 2 = 10,8,6,4,2. crc activo a 16 bit, modo shock burst activado, canal 10 de transmision a 2410 mhz (2.41ghz). #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE BYTE_18_TEST3 BYTE_17_TEST2 BYTE_16_TEST1 BYTE_15_DATA2_W BYTE_14_DATA1_W BYTE_13_ADD2_5 BYTE_12_ADD2_4 BYTE_11_ADD2_3 BYTE_10_ADD2_2 BYTE_9_ADD2_1 BYTE_8_ADD1_5 BYTE_7_ADD1_4 BYTE_6_ADD1_3 BYTE_5_ADD1_2 BYTE_4_ADD1_1 BYTE_3_ADDR_CRC 142 H'8E' B'10001110' VALOR DEFAULT 8 B'00001000' VALOR DEFAULT 28 B'00011100' VALOR DEFAULT 200 B'11001000' # BITS DE DATOS PAYLOAD RX2 200 B'11001000' # BITS DE DATOS PAYLOAD RX1 10 8 6 4 2 5 4 3 2 1 163 ;B'101000-11' BIT 7-2 = # BITS ADDR1 Y ADDR2=40 ;BIT1= CRC 16B(1) / CRC 8BIT (0) ;BIT0= ENABLE CRC(1) / DISABLE(0) ;DIRECCION DE RX 2

;DIRECCION DE RX 1

#DEFINE

BYTE_2_VARIOS B'01001111' BIT7=2CH RX(1)/1CH RX(0) BIT6=MODE SHOCK BUTRST(1)/DIRECT MODE(0), BIT5=1MBPS(1)/250KBPS(0) BIT 4-2 SELEC FRECUENCY XTAL BIT 1-0=POWER TX BYTE_1_CHANNEL B'00010100' BIT 7-1= SELEC CHANNEL TX 1 A 128 BIT1 = RX(1)/TX(0)

#DEFINE

193 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


MACRO : ARGUMENTOS : EXPLICACION TRANSCEIVER_TRF2p4_HP_DR1_PTB1 SI/NO :ACT/DES EN BLOQUE 1 TRANSCEIVER_TRF2p4_LP_DR1_PTB1 SI/NO :ACT/DES EN BLOQUE 1 CONFIG_TRF_2p4GHz CE_P2_PTB7,CS_P4_PTB6,CK1_P5_PTB5,DATO_P6_PTB4

: EN BLOQUE 2

INIT_TRF inicializa modulo trf MODE_RX_TRF establece modo recepcion de un canal START_TX_TRF configura inicio de tx en modo shock burst STAND_BY_TRF establece modo stand by del trf TX_TRF L8 transmite constante de 8 bit TX_TRFF F8 transmite variable tipo byte DIR5,DIR4,DIR3,DIR2,DIR1 SET_DIR_TRF L8 ,L8 ,L8 ,L8 ,L8 ;establece la direccion del transceiver destino DIR5,DIR4,DIR3,DIR2,DIR1 SET_DIR_RX_TRFF F8 ,F8 ,F8 ,F8 ,F8 TX_PAYLOAD_TRF ;establece la direccion del transceiver destino

;transmite la direccion destino y la trama payload establecida en los 25 bytes reg_trf1 a ;reg_trf25 al transceiver con la direccion destino establecida previamente en la macro ;set_dir_trf set_dir_trff

194 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


EJEMPLO 1 Transmision de una trama payload de 25 byte con el alfabeto "A" a "Y", pegue la subrutina TX_TRAMA en la seccin subrutinas del bloque 9 MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF MOVLF "A",REG_TRF25 "B",REG_TRF24 "C",REG_TRF23 "D",REG_TRF22 "E",REG_TRF21 "F",REG_TRF20 "G",REG_TRF19 "H",REG_TRF18 "I",REG_TRF17 "J",REG_TRF16 "K",REG_TRF15 "L",REG_TRF14 "M",REG_TRF13 "N",REG_TRF12 "O",REG_TRF11 "P",REG_TRF10 "Q",REG_TRF9 "R",REG_TRF8 "S",REG_TRF7 "T",REG_TRF6 "U",REG_TRF5 "V",REG_TRF4 "W",REG_TRF3 "X",REG_TRF2 "Y",REG_TRF1 ;carga datos en REG_TRF25 a REG_TRF1

CALL TX_TRAMA MODE_RX_TRF DESARROLLO TX_TRAMA SET_DIR_RX_TRF TX_PAYLOAD_TRF RETURN

;invoca sub de tx de payload ;establece modo recepcin DE S U B R U T I N A S EN BLOQUE 9 ;establece la direccion del transceiver destino ;transmite direccion destino y payload establecido ;en REG_TRF1 a REG_TRF25

5,4,3,2,1

195 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


EJEMPLO 2 Recepcin de 25 bytes de PAYLOAD y retransmisin al pc por UART RS232 ORG28_INT_RX_TRF2p4: TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF TX_UARTF OUT_INT

REG_TRF25 REG_TRF24 REG_TRF23 REG_TRF22 REG_TRF21 REG_TRF20 REG_TRF19 REG_TRF18 REG_TRF17 REG_TRF16 REG_TRF15 REG_TRF14 REG_TRF13 REG_TRF12 REG_TRF11 REG_TRF10 REG_TRF9 REG_TRF8 REG_TRF7 REG_TRF6 REG_TRF5 REG_TRF4 REG_TRF3 REG_TRF2 REG_TRF1

196 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO DE CONEXIN ENTRE PIC Y TRANSCEIVER TRF 2.4 GHZ (PLANO TRF)

Nota: PTB1 no puede ser cambiado, es la entrada de interrupcin.

197 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DTMF DECODIFICADOR DE TONOS DUAL MULTIFRECUENCIA CON CIRCUITO INTEGRADO MT 8870 (MDTMF)
MACRO : ARGUMENTOS : EXPLICACION

INTERRUPCION_DTMF1_HP_STD_PTB0 SI/NO :act de decodificador dtmf 1 por ptb0 en alta prioridad INTERRUPCION_DTMF2_HP_STD_PTB1 SI/NO :act de decodificador dtmf 2 por ptb1 en alta prioridad INTERRUPCION_DTMF2_LP_STD_PTB1 SI/NO :act de decodificador dtmf 2 por ptb1 en baja prioridad CONFIG_DECOD_DTMF1 Q1_P11_PTA2,Q2_P12_PTA3,Q3_P13_PTA4,Q4_P14_PTA5 CONFIG_DECOD_DTMF2 Q1_P11_PTA2,Q2_P12_PTA3,Q3_P13_PTA4,Q4_P14_PTA5 CONSTANTES DEL DECODIFICADOR DTMF MT8870 CODIGO DTMF_1 DTMF_2 DTMF_3 DTMF_4 DTMF_5 DTMF_6 DTMF_7 DTMF_8 DTMF_9 DTMF_0 DTMF_A DTMF_N VALOR EQUIVALENTE 1 2 3 4 5 6 7 8 9 10 11 12

| | | | | | | | | | | |

;LPM2 decodifica datos DTMF de un MT8870, el dato DTMF (1 a 12) recibido se encuentra ;en la variable REG_RXDTMF1 REG_RXDTMF2. ;El dato en la variable REG_RXDTMF1 es decimal (No ASCII), por lo tanto no va entre ;comillas. ;Active Pull Up de PORTb en bloque 6 (si no puede activar pull up de portb entonces debe ;emplear resistencia de pull up externas de 4.7K en la entrada de PTB0 PTB1). ;_________________________________________________________________________________________ ; EJEMPLO 1 ;El siguiente ejemplo identifica el dato DTMF recibido desde un decodificador MT8870 ;y lo muestra en LCD.

198 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

;Active INTERRUPCION_DTMF1_HP_STD_PTB0 en bloque 1. ; cdigo en bloque 8 de interrupciones

;ORG29_INT_DECOD_DTMF1 IFFIL REG_RXDTMF1,DTMF_AST,LBL1 ;SI DTMF ASTERISCO ; TLCD " ASTERISCO " ;LBL1 IFFIL REG_RXDTMF1,DTMF_8,LBL2 ;SI DTMF 8 ; TLCD " DTMF 8 " ;LBL2 IFFIL REG_RXDTMF1,DTMF_NUM,LBL3 ;SI DTMF NUMERAL ; TLCD " NUMERAL " ;LBL3 OUT_INT ;Proteus simula directamente un decodificador MT8870 implementado con swich y pulsador.

199 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

TEORIA DEL DECODIFICADOR DTMF MT8870


CONFIGURACIN DEL MODULO DECODIFICADOR DE TONOS TELEFNICOS CON INTERRUPCIN El circuito integrado DTMF 8870 es un decodificador de tonos DTMF (Multifrecuencia de doble tono) que enva un pulso de 100mS con flanco de subida por el pin 15 (STD) cuando recibe un tono vlido del 0al 9, # *. LPM2 admite la conexin de dos circuitos integrados decodificadores de tono telefnico DTMF MT88L70. Mediante este mdulo se puede emplear una lnea telefnica fija o celular como control remoto. Por ejemplo, la configuracin CONFIG_DECOD_DTMF1 Significa Q1_P11_PTA5 : El pin PTA5 recibir la seal del pin 11 equivalente a Q1 del chip decodificador de tonos DTMF (Dual Tone Multifrecuencia). Nota1: El pin STD (Pin 15) del decodificador DTMF 88L70 debe conectarse al pin PTB0 PTB1 (dependiendo del mdulo activado) como entrada de interrupcin por flanco de subida. No es necesario desactivar el pull up del puerto B. Nota2: La alimentacin del DTMF no debe exceder 5.0 voltios, de lo contrario decodificar ciertos tonos y otros no. En verdad segn el data sheet este integrado debe alimentarse a 3.6 Voltios, no obstante con tensiones entre 3.6 y 5 voltios funciona bien. Otra opcin es alimentar el PIC tambin a 3.6 Voltios. Nota3: La resistencia R1 slo es necesaria si la conexin ser a travs de telfono fijo almbrico. Q1_P11_PTA5,Q2_P12_PTE0,Q3_P13_PTE1,Q4_P14_PTE2

PLANO DE CONEXIN DEL DECODIFICADOR DTMF MT 8870


(PLANO DTMF)

Al presionar cualquier tecla del telfono fijo o celular el gestor automtico de interrupciones (handler interruptions de

200 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


LPM2) dirigir el puntero de programa (pointer program) hacia la etiqueta ORG26_INT_DECOD_DTMF1 ORG27_INT_DECOD_DTMF2 del bloque 8 y en la variable REG_RXDTMF1 REG_RXDTMF2 encontrar el valor (1 a 12) de la tecla presionada. DIAGRAMA DE BLOQUES DEL DECODIFICADOR DE TONOS DTMF MT8870

TECLA PRESIONADA 0 1 2 3 4 5 6 7 8 9 * #

CDIGO GENERADO 1010 0001 0010 0011 0100 0101 0110 0111 1000 1001 1011 1100

201 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

SWICH ANALOGO 4016B 4066B

202 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

203 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

POTENCIOMETROS DIGITALES X9C102/103/104/503

204 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

GENERADOR DE TONOS DTMF

205 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

MACROS DE COMUNICACION UART, UART0, UART1, UART2 RS232 (MUART) (MRS232)


LPM2 posee 4 mdulos independientes de comunicacin UART RS232 half duplex entre pic pc, nmero de bit de datos:8, paridad:ninguna y bit stop:1. El nmero de bytes por segundo se calcula dividiendo entre 10 la velocidad en baudios, por ejemplo: si selecciona 19200 baudios entonces el pc y el pic podrn transmitir en modo half duplex (uno a la vez, no simultneamente) hasta (19200/10)= 1920 caracteres ASCII o bytes en un segundo, se recomienda trabajar a 19200 baudios. Todas las macros terminadas en UART, tambin existen para UART0, UART1 y UART2. SIMBOLOGIA: FACTOR: X1, X10, X100 :factor de multiplicacion de voltaje al convertir MACRO : ARGUMENTOS : EXPLICACION INTERRUPCION_HP_RXUART_PTC7 SI/NO ;activacion/desactivacion en bloque 1 de RX UART en alta prioridad INTERRUPCION_LP_RXUART_PTC7 SI/NO :activacion/desactivacion en bloque 1 de rx uart en baja prioridad TRANSMISION_UART_PTC6 SI/NO ;activacion/desactivacion en bloque 1 de tx uart CONFIG_UART VELOCIDAD_BAUDIOS ;establece velocidad inicial de uart segn tabla LOAD_SPEED_UART VELOCIDA_BAUDIOS ;establece velocidad de uart en baudios segun tabla en tiempo de ejecucin TX_UARTF F8/16 ;envia el dato de la variable por uart TX_UART TXA_UARTF TXBCD_UARTF TXABCD_UARTF TXC9DIG_UART TXAC9DIG_UART TXED_UART L8 L16 F8/16 F8/16 F8 /16 ;envia la constante por uart ;envia convertido a ascii el dato decimal 0 a 9 de una variable ;enva el bcd de la variable por uart ;envia convertido a ascii el dato BCD decimal 0 a 9 de una variable ;envia los 9 registros del contador de 9 digitos bcd9 a bcd1 ;envia convertido a ascii el dato BCD decimal 0 a 9 del contador de 9 digitos bcd9 a bcd1 ;envia el dato de la dir establecida por l8 por uart

TXED_UARTF F8 ;envia el dato de la dir establecida por f8 por uart TXAED_UART L8 ;envia el ascii 0-9 de la dir establecida por l8 por uart TXAED_UARTF F8 ;envia el ascii 0-9 de la dir establecida por f8 por uart TXBCDED_UART L8 ;envia el bcd de la dir establecida por l8 por uart TXBCDED_UARTF F8 ;envia el bcd de la dir establecida por f8 por uart ; CADENA ,PAUSA ;MENS_UART MENSAJE,L16 ;envia cadena de caracteres por uart con pausa en milisegundos entre cada caracter ; ;TEXTO_UART ; ;TUART ;ENTER_UART CADENA MENSAJE CADENA MENSAJE ;envia cadena de caracteres por uart sin pausa entre CARACTERES

;envia cadena de caracteres por uart sin pausa entre ;caracteres y envia enter al final para cambio de linea ;enviar el ascii 13 equivalente al enter por uart

206 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


CADENA ,PAUSA MENSAJE,F16 ;envia cadena de caracteres por uart con pausa en milisegundos entre cada carcter, la variable de pausa deber tipo word ;transmite por uart temp en c de lm35 despues de una conversion cad FACTOR ;transmite por uart voltaje en (volt) multiplicado por un factor despus de una

MENS_UARTF SLM35_UART SVOLT_UART conversion

DIR1 ,DIR2 ,PAUSA TXRAM_UART 0-1535,0-1535,L16 ;envia elementos de la memoria ram por uart desde dir1 de la ram hasta dir2 de la ram con pausa en milisegundos entre cada caracter SMVOLT_UART FACTOR ;transmite por uart voltaje en (mvolt)multiplicado por un factor despues de una conversion SMVOLT_UART FACTOR ;transmite por uart voltaje en (mvolt)multiplicado por un factor despues de una conversion DIR1 ,DIR2 ,PAUSA TXV0_UART 0-1535,0-1535,L16 ;envia elementos del vector0 por uart desde dir1 de la ram hasta dir2 de la ram con pausa en milisegundos entre cada carcter. ;ACT_INT_UART ;activar interrupcion del receptor uart por ptd7 ;DES_INT_UART ;desactivar interrupcion del receptor uart por ptd7 ;CFIRXUART ;acuesta bandera interrupcion uart ;SFIRXUART ;levanta bandera interrupcion uart ;HPIRXUART ;establece int uart en alta prioridad ;LPIRXUART ;establece int uart en baja prioridad

; EJEMPLO 1 ; SIMULACION EN PROTEUS DE RECEPCIN DE DATOS UART RS232 ;El siguiente ejemplo decodifica e identifica el dato proveniente de una conexin UART a ;un PC u otro perifrico con este protocolo como un enlace ZigBee, GPS, GPRS, etc. ;Active INTERRUPCION_HP_RXUART_PTC7 en bloque 1. ;Configure la velocidad de transmisin de datos del mdulo UART de LPM2 y el ;"virtual terminal" de proteus a la misma tasa de baudios. ; ; -------------------------------------------------cdigo en bloque 8 de interrupciones

;ORG14_INT_RXUART IFFIL REG_RXUART,"A",LBL1 ;SI RECIBE LETRA A ; TLCD " LETRA A " ;LBL1 IFFIL REG_RXUART,"1",LBL2 ;SI RECIBE NUMERO 1 ; TLCD " NUMERO 1 " ;LBL2 IFFIL REG_RXUART,TEC_F2,LBL3 ;SI TECLA ESCAPE ; TLCD "TECLA F2" ;LBL3 OUT_INT ;Nota: Otra forma opcional de detectar la letra "A" es mediante su cdigo ASCII 65, es decir, ;en el ejemplo anterior : IFFIL REG_RXUART,65,LBL1

207 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

TEORIA DEL PUERTO SERIAL RS232 UART ENTRE PC Y PIC (TUART)

CONFIGURACIN DEL MODULO UART RS 232 PARA COMUNICACIN HALF DUPLEX PC-PIC Por ejemplo, la configuracin CONFIG_UART BAUDIOS_19200 ;en bloque 2 significa que Selecciona 19200 baudios de velocidad de transmisin, es decir, transmite hasta 1920 bytes o caracteres en un segundo: Nmero de Bit de cada trama = 10: BIT START en formato 8N1.

CONFIGURACION PERSONALIZADA DE TASA DE BAUDIOS PARA MODULO UART INTERNO DEL PIC POR PTC6 Y PTC7
Si una aplicacin especfica requiere una tasa de transmisin en baudios que no est disponible en las tabla anterior entonces se puede calcular la configuracin de la macro CONFIG_UART en el bloque 2 de la siguiente manera: CONFIG_UART BRGH,X

Donde BRGH puede ser BRGH0 BRGH1 dependiendo de si la solucin a X es la ecuacin 1 2 en la siguiente figura.

208 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

En el ejemplo anterior X en modo BRGH = 0 (Ecuacin 1 ) = 25 X en modo BRGH = 1 (Ecuacin 2 ) = 103 Los valores vlidos de X estn comprendidos entre los enteros de 0 a 255 y se toma el que tenga menor parte decimal pues sta constituye el error de transmisin UART. Por ejemplo, si se aproxima 25.042 se toma la parte entera 25 y la parte decimal es .042 y este valor es menor que la parte decimal de 103.166. Por lo tanto lo correcto es X = 25 y modo BRGH0. Los argumentos de la macro en bloque 2 quedan as: CONFIG_UART BRGH0,25

En el ejemplo anterior ambas ecuaciones podran ser tiles pues al reemplazar el 103 de la ecuacin en modo BRGH1 tambin se obtendra una tasa de baudios de 9615 lo cual implica un error del 0.16%, es decir, que otra forma alternativa de configuracin es: CONFIG_UART BRGH1,103

209 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

FUNCIONAMIENTO DE LA INTERRUPCION UART: Al enviar cualquier dato desde el PC hacia el PIC el gestor automtico de interrupciones (handler of interruptions) ( lase hndoel of interruptions) dirigir el puntero de programa (pointer program) hacia la etiqueta ORG14_INT_RXUART del bloque 8 y en la variable REG_RXUART encontrar el valor ASCII del dato recibido. En la carpeta Proyectos Visual Basic 6.0 del CD DIGITAL BOOK se encuentra la carpeta UART Visual PIC, en la cual est el cdigo fuente y archivo ejecutable .exe de un programa en Visual Basic 6.0 que se comunica con un microcontrolador por el puerto serial. En la comunicacin entre un microcontrolador y un PC por el puerto serial con el protocolo RS232 y con el conector DB9 slo se emplean 3 pines: GND (PIN5 DEL CONECTOR DB9 PUERTO SERIAL) CON (GND PIN 12,31 DEL PIC) TX (PIN 3 DEL CONECTOR DB9 PUERTO SERIAL) CON (RX PIN 26 DEL PIC MEDIANTE UN MAX 232) RX (PIN 2 DEL CONECTOR DB9 PUERTO SERIAL) CON (TX PIN 25 DEL PIC MEDIANTE UN MAX 232)

CONFIGURACIN DE LA TRAMA RS232 PARA COMUNICACIN HALF DUPLEX PC - PIC


BIT START: (0 LGICO) Es un Bit con el cual inicia una transmisin RS 232. BIT DE DATOS (4,5,6,7,8): Corresponden a la informacin til (Configurar como 8 para comunicacin con PIC) BIT PARIDAD (PAR, IMPAR, NINGUNA) (Configurar como NINGUNA para comunicacin con PIC) BIT STOP: (1 1.5 2) (1 LGICO) Configurar como 1 BIT STOP para comunicacin con PIC) CONTROL DE FLUJO: (XON/XOFF, HARDWARE, NINGUNO) Configurar como NINGUNO para comunicacin con PIC) VELOCIDAD (BAUDIOS O BIT POR SEGUNDO): (300, 1200, 2400,9600, 19200, 76800, 96000, 300000) Configurar como 19200 para comunicacin con PIC) La trama configurada entre comunicacin PIC PC half duplex UART es de 10 bit : (1 bit start + 8 bit de datos + 1 bit stop)

210 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


Si la velocidad es 19200 baudios entonces el PIC o el PC pueden transmitir en modo half duplex hasta : 1920 BYTES caracteres ASCII en un segundo conforme a la siguiente frmula:

19200 bps/10 bit de trama = 1920 bytes


En resumen: para establecer una comunicacin entre un C y el PC por el puerto serial y Visual Basic una configuracin correcta es: BAUDIOS, PARIDAD, #BIT, BIT STOP

19200,N,8,1

211 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

SIGNIFICADO DE LOS PINES DE CONECTOR DB9 DEL PUERTO SERIAL PIN 4: DTR: (Data Terminal Ready) El DTE indica que est preparado. PIN 6: DSR: (Data Set Ready) El DCE indica que est preparado. PIN 7: RTS: (Request to Send) Solicita permiso para transmitir. PIN 9: RI: (Ring Indicator) Deteccin de llamada. PIN 8: CTS: (Clear to Send) El DCE autoriza la transmisin solicitada. PIN 3: TXD: (Transmit Data) Lnea de transmisin de datos serie.

212 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


PIN 2: RXD: (Received Data) Lnea de recepcin de datos serie. PIN 5: GND: (Ground) Lnea de masa de referencia. 0V. PIN 1: DCD: (Data Carrier Detect) Deteccin de portadora. Las velocidades de transmisin que puede soportar este estndar van desde los 75bps hasta los 300Kbps. Con respecto a las distancias mximas se propone que no sean superiores a 15 metros. Aunque un diseo cuidadoso puede permitir distancias muy superiores, hay que suponer que esta limitacin terica se puede manifestar en la prctica en dispositivos que cumplan la norma. Por otro lado, el Puerto Serie permite que los cables que se emplean para la comunicacin sean ms largos. El Puerto Serie toma como 1 cualquier voltaje que se encuentre entre 3 y 25 V y como 0, entre +3 y +25 V, a diferencia del Puerto Paralelo y USB, cuyo rango de voltajes esta entre 0 y 5 V. Por ello la perdida introducida por la resistencia intrnseca de los conductores no va a ser un problema para los cables empleados en este tipo de comunicacin. Otra ventaja respecto a una comunicacin por el puerto paralelo es que no se necesitan tantos conductores lo que abarata mucho los sistemas. La comunicacin efectuada por un Puerto RS232 es asincrnica. Esto significa que no hay seal de reloj asociada a la seal de datos. Cada palabra es sincronizada empleando un bit de comienzo (start bit) y un reloj interno en cada lado que mantiene la temporizacin. Siempre que se emplea el formato 8N1, es decir, 8 bits de datos, sin paridad y un bit de parada ( stop bit) la lnea de datos, cuando no esta transmitiendo datos validos, se pone a 1 (-9Volt aproximadamente). Es de imaginar entonces que una transmisin siempre comienza con un 0 lgico. Entonces cada bit es enviado por la lnea una cada vez. El LSB bit menos significativo es enviado primero. Al final de la seal aparece el bit de parada, que es un nivel lgico 1., que seala el fin de la transmisin. El bit siguiente al bit de parada es un 0 lgico. Esto debe significar que hay otra palabra a continuacin. Si no fuera as, la lnea de recepcin se mantendra entonces en un 1 lgico, que es su estado de no transmisin de datos validos. Si esto ocurre por un tiempo en que se pudiera haber enviado otra palabra, el receptor lo interpretara como una seal de ruptura. Lo anteriormente descrito solo es valido para la seal UART. Recordemos el RS232 emplea niveles de voltajes entre 3 y 25 y +3 y +25. Las lneas de transmisin y recepcin del RS232, que son las que esencialmente portan datos, de ah el nombre de Puerto Serie. Existen en este adems otras lneas que son, en esencia, de comunicacin paralela. Estas son (RTS, CTS, DCD, DSR, DTR, RTS Y RI) pero mantienen los niveles lgicos del RS232.

Nota: Para mayor informacin del puerto serial y protocolo RS232 referirse INTERFACES DEL COMPUTADOR.DOC en la carpeta SECCIONES DIGIBOOK.

a SECCION 7 - PUERTOS E

213 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO DE CONEXIN HALF DUPLEX RS232 ENTRE PIC Y PC MEDIANTE UART MAX232 (PLANO UART)

214 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PLANO ECONOMICO OPCIONAL DE CONEXIN HALF DUPLEX RS232 ENTRE PIC Y PC MEDIANTE TRANSISTORES SIN USAR MAX 232
(PLANO UART)

CONSTANTES DEL TECLADO DEL PC POR RECEPCIN UART RS232


NOMBRE TEC_ESCAPE CODIGO SIGNIFICADO 27 TECLA ESCAPE

215 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


TEC_BACK TEC_ENTER TEC_TAB TEC_F1 TEC_F2 TEC_F3 TEC_F4 TEC_F5 TEC_F6 TEC_F7 TEC_F8 TEC_F9 TEC_F10 TEC_F11 TEC_F12 TEC_UP TEC_DOWN TEC_RIGHT TEC_LEFT TEC_SHIFT TEC_MAYUS TEC_PAUSE TEC_INICIO TEC_FIN TEC_INSERT TEC_SUPRIMIR TEC_REPAG TEC_AVPAG TEC_SPACE TEC_CONTROL TEC_WINDOW TEC_ALT TEC_MAYORQUE TEC_PUNTOYCOMA TEC_PUNTO TEC_GUIONBAJO 8 13 9 112 113 114 115 116 117 118 119 120 121 122 123 38 40 39 37 16 20 19 36 35 45 46 33 34 32 17 91 18 226 188 190 189 TECLA RETROCESO TECLA ENTER TECLA TAB TECLA F1 TECLA F2 TECLA F3 TECLA F4 TECLA F5 TECLA F6 TECLA F7 TECLA F8 TECLA F9 TECLA F10 TECLA F11 TECLA F12 TECLA TECLA TECLA TECLA TECLA TECLA TECLA TECLA TECLA TECLA TECLA TECLA TECLA TECLA TECLA TECLA TECLA TECLA TECLA TECLA TECLA

216 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

CONEXIN USB SERIAL UART ENTRE PIC Y PC MEDIANTE CONVERTIDOR DE CABLE DE CELULAR (PLANO USB UART)

EL CABLE CA42 de nokia tiene incorporado un integrado (FT232 por ejemplo) convertidor de USB a Serial UART pero no trabaja con los niveles RS232 convencionales (+15V a -15V). El puerto usb del PC poporciona 5VDC a 100mA mximo con lo cual se alimenta el microcontrolador interno del cable. La salida serial UART del integrado internos es de 0 a 3.3VDC la cual se puede acoplar directamente al PIC sin necesidad de MAX232. Para ciertas aplicaciones de bajo consumo de potencia es posible alimentar el PIC y sus perifricos con la misma tensin de puerto USB del PC, siempre y cuando consuma menos de 100mA. Tenga precaucin de no hacer un cortocircuito pues podra averiar el puerto USB del PC o en su defecto la misma board. No olvide pedir el CD del driver para windows del cable CA42 de nokia, esto es necesario para crear un puerto COM virtual en el administrador de dispositivos de windows. El nmero del COM virtual puede cambiar dependiendo de en cual puerto USB se inserte. Una vez creado el COM virtual cualquier lenguaje como visual Basic, C++ puede enviar y recibir datos como lo hara con un COM fsico del PC. La conexin de cable del celular USB se puede hacer con cualquier salida UART de las 4 que LPM2 dispone en el PIC 18F452: UART, UART0,UART1,UART2

217 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

NOTA: TAMBIN PUEDE USARSE EL CABLE DKU5 COMO REEMPLAZO DEL CA-42

218 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

INTERFAZ UART ZIG BEE XBEE


1

XBP - PIC

VDD 2 RX 3 TX 4 5 6 7 8 9 10

VDD DOUT DIN/CONFIG DO8 RESET PWM0/RSSI PWM1 RESERVED DTR/SLEEP_RQ/DI8 GND XBee - Pro

AD0/DIO0 AD1/DIO1 AD2/DIO3 AD3/DIO3 RTS/AD6/DIO6 ASSOC/AD5/DIO5 VREF ON/SLEEP CTS/DIO7 AD4/DIO4

20 19 18 17 16 15 14 13 12 11 220

TX/PWR

219 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

COMANDOS AT (Control de Celulares NOKIA 6070,6020,6200,3220)


(TEORIA AT)

Los comandos AT son instrucciones codificadas que conforman un lenguaje de comunicacin entre el hombre y un terminal modem. Se denominan as por la abreviatura de attention. La finalidad principal de los comandos AT es la comunicacin con mdems, aunque la telefona mvil GSM tambin ha optado este lenguaje como estndar con el fin de comunicarse con sus terminales. Este juego de instrucciones permite realizar acciones tales como realizar llamadas de datos o de voz, leer y escribir en la agenda de contactos, mandar y recibir mensajes SMS, y otras configuraciones del terminal.

COMUNICACION CON CELULARES NOKIA POP-PORT 6200, 3220, SIEMENS A56,SAGEN

baudios=4800 Paridad=Ninguna Num Bit datos= 8 Bit Stop = 1 ------------------- Configuracin del control MSCOMM de visual basic 6.0 ----------------------------------Mscomm1.setting = 115200,N,8,1 PARA PROTOCOLO FBUS Mscomm1.setting = 9600,N,8,1 PARA PROTOCOLO MBUS MSComm1.InputLen = 1 MSComm1.RThreshold = 1 MSComm1.CommPort = Numero del Puerto virtual creado en administrador de dispositivos al conectar el CELULAR al puerto USB puerto serial mediante el conector pop-port de nokia CA-42 DKU5

Nota1: Todo COMANDO AT finaliza con el dato hexadecimal 0D 0A, es decir, CR LF (retorno de carro y feed line cambio de lnea) lo cual equivale al enter. Nota2: Para enviar un mensade de texto con el nokia debe terminar en Ctrol+Z que es el dato decimal 26

Trama_Inicio_Nokia = "55-55-55-55-55-55-55-55-1E-00-10-D7-00-08-00-01-00-12-04-00-01-43-0B-8F" EN HEXADECIMAL ------------------- COMANDOS AT BASICOS ---------------------------- RESPUESTA DEL CELULAR ---------AT Comando ms bsico ATI FABRICANTE ATA Respuesta de llamada. ATH Colgado de llamada de voz AT+CHUP Colgado de llamada de dato y voz para nokia AT+CBC Nivel de carga de la batera. 95% de carga. 1,95 cargador conectado, 95% de carga AT+CPAS Estado del telfono MARCANDO, LLAMADA ACTIVA AT+CGMI Identificacin del fabricante OK NOKIA OK OK OK 0,95 cargador desconectado,

COLGADO/DESCOLGADO,

FABRICANTE

220 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


AT+CGMM AT+CGMR AT+CGSN AT+CSQ ATD3107374112; ATDL ATD1 ATE0 ATE1 ATV0 ATV1 ATF0 ATF1 Identificacin del modelo Identificacin de la revisin Identificacin del serial del equipo Calidad de seal marcacion de voz REDIAL ENVIAR tono DTMF DE TECLA 1 CANCELAR MODO ECO ACTIVAR MODO ECO RESPUESTA MODO NUMERICA RESPUESTA MODO TEXTO Activar eco en lnea DESActivar eco en lnea OK OK OK OK Nokia 3220 ID DE REVISION ID DEL EQUIPO CALIDAD DE SEAL

el celular envia "" cuando se cuelga la llamada. el celular envia "RING" cuando llega una llamada.

NO CARRIER RING

ENVIAR MENSAJES DE TEXTO A UN NUMERO AT+CMGF=1 ESTABLECER MODO DE SMS (0= MODO PDU, 1 = MODO TEXTO) AT+CMGS="3107295940" ESTABLECER NUMERO DESTINO una vez al darle enter queda el siguente prompt ">" y luego se escribe el mensaje CONTROL Z = ENVIAR EL DECIMAL 26, EN VISUAL ES MSCOMM1.OUTPUT = Chr(26) Y LO ENVIA EL CELULAR RESPONDE +CMGS: 52 DONDE 52 ES EL NUMERO DE CARACTERES A ENVIAR

ENVIAR MENSAJES DE TEXTO A LA CARPETA ENVIADOS

AT+CMGF=1 ESTABLECER MODO DE SMS (0= MODO PDU, 1 = MODO TEXTO) AT+CMGW="3107295940" ESTABLECER NUMERO DESTINO una vez al darle enter queda el siguente prompt ">" y luego se escribe el mensaje CONTROL Z = ENVIAR EL DECIMAL 26, EN VISUAL ES MSCOMM1.OUTPUT = Chr(26) EL CELULAR RESPONDE +CMGW: 11 DONDE 11 ES LA POSICION EN LA CARPETA

BORRAR MENSAJE DE LA CARPETA ENVIADOS AT+CMGF=1 AT+CMGD=1 ATZ&F ESTABLECER MODO DE SMS (0= MODO PDU, 1 = MODO TEXTO) ESTABLECER POSICION DE MENSAJE A BORRAR LEER MENSAJES DE TEXTO EN LA CARPETA RECIBIDOS LEIDOS reset a celular para cancelar error de recepcion de mensajes de texto

AT+CMGF=1 AT+CMGL="REC READ"

establecer modo de sms (0= modo pdu, 1 = modo texto) GRUPO DE MENSAJES QUE SE QUIEREN LEER ("REC UNREAD"(RECIBIDOS NO LEIDOS) "REC READ"(RECIBIDOS LEIDOS) "STO UNSENT"(ALMACENADOS SIN ENVIAR) "STO SENT"(ENVIADOS)

221 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


"ALL"(TODOS)) LEE EL MENSAJE 1 DE TODOS LOS MEMSAJES EN LA CARPETA RECIBIDOS

AT+CMGR=1 LEIDOS ATZ&F MENSAJES DE TEXTO AT+CMGF=1

LEER MENSAJES DE TEXTO NUEVO MANUALMENTE RESET A CELULAR PARA CANCELAR ERROR DE RECEPCION DE ESTABLECER MODO DE SMS (0= MODO PDU, 1 = MODO TEXTO) DEVUELVE: +CMGL: 8,"REC UNREAD","3107374112",,"08/05/27,22:00:25DONDE HOLA ES EL MENSAJE, AUTOMATICAMENTE CONVIERTE EL

AT+CMGL="REC UNREAD" 20" (ENTER)hola MENSAJE EN RECIBIDO LEIDO

SI NO AY MENSAJE NUEVO SOLO DEVUELVE OK

ATZ&F MENSAJES DE TEXTO

LEER MENSAJES DE TEXTO NUEVO AUTOMATICO RESET A CELULAR PARA CANCELAR ERROR DE RECEPCION DE

AT+CMGF=1 ESTABLECER MODO DE SMS (0= MODO PDU, 1 = MODO TEXTO) AT+CNMI=1,2,0,0,0 HABILITA EL MODO AUTOMATICO DE RECEPCION DE MENSAJES. AL LLEGAR UN MENSAJE AUTOMTICAMENTE SE MUESTRA CON LA FECHA Y EL NUMERO. AL APAGAR EL CELULAR SALE DE ESTE MODO.

AT+CCFC: [Call Forwarding Number] - Gestiona el Desvo de Llamadas. Permite redireccionar llamadas entrantes a otro nmero de telfono. - Sintaxis: AT+CCFC=<razn>,<modo>,<nmero>,<tipo>,<clase>,[<subaddr>,<satype>,[<time>]]

<razn> Razn por la cual entra en accin el desvo de llamada. 0 - incondicional 1 - si telfono ocupado 2 - si no obtiene respuesta 3 - si inalcanzable 4 - todos los desvos de llamadas 5 - todos los desvos de llamadas condicionales <modo> Estado del desvo de llamada. 0 - desahabilitado 1 - habilitado 2 - query status 3 - registro

222 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


4 - erasure (borrado) <nmero> Cadena de texto con el nmero de telfono destino del desvo de llamada. Se especifica en el formato indicado en el campo <type> <tipo> Tipo de cdigo de direccin de telfono: 145 - para cdigo internacional + 129 - en otro caso <clase> Cdigo que representa la clase de informacin que contiene la llamada a desviar. 1 - voz 2 - datos 4 - fax 7 - cualquier clase (por defecto) <time> Tiempo en segundos a esperar antes de desviar la llamada. 1..30 (por defecto, 20) <status> Estado de la opcin desvo de llamadas. (Slo en respuesta AT) 0 - no activo 1 - activo - Ejemplo: Implementacin del comando en Blooover: "AT+CCFC=0,3,\"+4913377001\",145,7\r" Vemos que utiliza los siguientes parmetros: <razn> = 0, incondicional <modo> = 3, registro <nmero> = +4913377001 <tipo> = 145, formato de cdigo internacional <clase> = 7, cualquier clase de informacin a desviar

## Comandos de Control del Telfono ## AT+CPAS: [Phone Activity Status] 1) AT+CPAS=? - Muestra la implementacin del comando. - Sintaxis: AT+CPAS=? | +CPAS: (lista de estados soportados) 0 - Ready (Encendido pero inactivo) 1 - Unavailable (No disponible) 2 - Unknown (Desconocido) 3 - Ringing (Llamada entrante en proceso) 4 - Call in progress (Llamada saliente en proceso) 5 - Asleep (Dormido) - Respuesta: +CMGD: (0,2,3,4) 2) AT+CPAS - Informa del estado de actividad del telfono. - Sintaxis: AT+CPAS | +CPAS: <estado> - Respuesta: +CPAS: 0, en estado normal de inactividad. +CPAS: 3, si el telfono atacado est sonando a causa de una llamada entrante. Microcontroladores y celulares Nokia GSM. La mayora de celulares Nokia tienen conexiones F-Bus y M-Bus que permiten la conexin al PC e incluso a un microcontrolador. Esto permite realizar control de algunas funciones del telfono o tambin la actualizacin de nuevo firmware. Por medio del bus se pueden mandar y recibir SMS. Protocolo M-Bus. M-Bus es un bus bi-direccional para transmitir y recibir datos desde el telfono. Es muy lento (9600bps) and only half-duplex. Solamente utiliza dos pines del celular, uno de tierra y otro de datos. El M-Bus corre a 9600bps, 8 bits de datos, paridad impar y un bit de parada.

223 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


Protocolo F-Bus. Este es un bus serial bi-direccional que corre a 115200bps, 8 bits de datos. Para la conexin al micro se debe conectar el pin DTR a +3 o 12 voltios y el RTS a -3 o -12 voltios. La forma ms fcil para lograr la conexin es usando un MAX232 y conectar el pin DTR del cable serial al pin de voltaje positivo del MAX232, de igual manera se hace con el pin RTS. Luego se debe sincronizar el UART en el telfono con el PC o el microcontrolador. Esto se logra enviando una cadena de 0x55 o 'U' 128 veces. De esta forma el bus queda listo para enviar tramas. Circuito para la conexin de celulares Nokia para protocolo MBUS y FBUS

Se pudo establecer que algunos celulares de marcas Siemens, Sony, Sagem, Nokia entre otros respondan a comandos AT. La primera prctica que se hizo para probar los comandos AT fue con un Nokia 3220. Para esto se tuvo que adquirir un cable de datos CA42 o DKU5 fabricados para los celulares Nokia con conector PopPort.

Celular 3220 conectado al cable de datos CA42.

Este cable de conexin USB lleva internamente un integrado que genera un puerto COM Virtual en el equipo para comunicarse con el celular siguiendo el protocolo RS232. VB6 interactuara directamente con el celular a travs del control MSComm el cual deba ser configurado para trabajar a una velocidad de transferencia de 115.000 bps, un bit de parada, 8 bits de datos, ningn bit de paridad y control de flujo XON-XOFF. Para la prctica con el A56, se tom un cable de datos CA42 y se parti ya que el conector era Pop-port especialmente diseado para Nokia. Ese cable lleva al celular tres hilos; uno de transmisin, otro de recepcin y la referencia GND. Cables CA42

224 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


Descripcin de pines del conector de Siemens A56.

Despus de haber analizado la conexin de pines con un manos libres se hicieron las conexiones para los datos. Cable de datos para siemens.

Cuando entra una llamada se recibe la palabra RING. Cuando esto pasaba se enviaba el comando ATA + Enter ante el cual el celular contestaba la llamada. El NO CARRIER al final significa que el usuario que inici la llamada colg. Algo importante que debe ser especificado aqu es que a diferencia de los celulares Nokia, la velocidad de transmisin para los Siemens es 9.600 bps. Prueba comandos AT con siemens A56

Dentro de los comandos que fueron probados exitosamente se encuentran: AT ATA ATH AT+CBC AT+CGMI AT+CGMM AT+CGMR AT+CGSN Comando ms bsico. Respuesta de llamada. Colgado de llamada. Nivel de carga de la batera. Identificacin del fabricante. Identificacin del modelo. Identificacin de la revisin. Identificacin del serial del equipo.

225 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


AT+CPAS Estado del telfono. El celular Siemens tiene una desventaja que radica en que para el reconocimiento del dispositivo manos libres debe tener unidos los terminales 2 y 5 que hacen referencia a GND y CTS respectivamente, adems de la unin entre los terminales 3, 4 y 6 los cuales corresponden a Tx, Rx y RTS respectivamente. Esto claramente imposibilita la transmisin de datos mientras se quiera usar el dispositivo manos libres. El inconveniente del siemens se subsan con el Nokia 3220 ya que para el reconocimiento del manos libres slo es necesario la unin entre los pines 2 y 3 del conector Pop-port como se muestra en la siguiente figura. Descripcin del conector Pop-port de 14 pines para celulares Nokia.

1. Unir pines 2 y 3 para reconocimiento de manos libres. 2. La salida de audio del PC (jack verde usualmente) se conecta al pin 9 y 10 del Pop-Port (tierra al 9 y cualquiera de los 2 canales stereo al 10). 3. La entrada de audio del PC (jack rosado usualmente) se conecta al pin 11 y 12 (tierra al 11 y cualquiera de los 2 canales stereo del micrfono al 12) TRAMA INICIAL PARA ACTIVAR COMANDOS AT EN CELULARES NOKIA POP-PORT #55#55#55#55#55#55#55#55#1E#00#10#DA#00#06#00#01#00#00#01#60#0F#BD se debe enviar estos datos hexadecimales a 115200 baudios. EL CELULAR RESPONDE : #1E#10#00#7F#00#02#DA#00#C4#6D indicando que se activ el modo comandos AT Nota: Los celulares siemes A56 no requieren la trama de inicio, entran en modo AT automticamente.

226 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

Nota: Los recomendados son Nokia 6070, 6020, se han presentado inconvenientes con el nokia 3220, pierde seal.

227 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

SISTEMA DE POSICIONAMIENTO GLOBAL GPS


(TEORIA GPS)

$PTYCVTG,1 $PTYCVTG,0 PSTMVER,B

;ACTIVO MODO VEL EN KM/H PARA QUE ENVIE LA TRAMA ;DESACTIVO MODO VEL EN KM/H PARA QUE NO ENVIE LA TRAMA ;TRAMA INICIAL ENVIADA POR EL GPS

El sistema de posicionamiento global mediante satlites GPS supone uno de los ms importantes avances tecnolgicos de las ltimas dcadas. Diseado inicialmente como herramienta militar para la estimacin precisa de posicin, velocidad y tiempo, se ha utilizado tambin en mltiples aplicaciones civiles. Por razones de seguridad, las seales GPS generadas para uso civil se someten a una degradacin deliberada (error), al tiempo que su emisin se restringe a una determinada frecuencia. El Sistema de Posicionamiento Global es un sistema de localizacin, diseado por el Departamento de Defensa de los Estados Unidos con fines militares para proporcionar estimaciones precisas de posicin, velocidad y tiempo; operativo desde 1995. El sistema consta de una constelacin de 24 satlites cada uno dotado con relojes automticos, computadoras, emisores y receptores de radio, estaciones terrenas que monitorean constantemente a cada uno de ellos. Los satlites artificiales del Sistema de Posicionamiento Global permiten que un receptor de GPS conozca de forma exacta los puntos de referencia para calcular la latitud, longitud, altitud y tiempo exacto con aproximaciones del orden de metros, incluso centmetros con el uso de estaciones diferenciales en tierra. Los receptores, a partir de los mensajes que provienen de cada satlite visible, calculan distancias y proporcionan una estimacin de posicin y tiempo.
2

Figura 1. Sistema GPS.

El receptor mide el tiempo que tardan en llegar las seales enviadas desde los diferentes satlites (A, B y C); se necesitan tres satlites para determinar la latitud y la longitud, mientras que un cuarto satlite (D) es necesario para determinar la altitud y velocidad; (Fig.1). Esto es posible porque en todo momento cualquier punto de la Tierra recibe cobertura de los satlites.

T. A. Herring, The Global Positioning System, Scientific American.

228 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

PRINCIPIO DE FUNCIONAMIENTO DEL SISTEMA GPS El sistema GPS funciona gracias a la constelacin NAVSTAR, formada por 24 satlites situados a unos 20.000 kilmetros de altura. Este sistema tiene por objetivo calcular la posicin de un punto cualquiera en un espacio de coordenadas (x,y,z)3, partiendo del clculo de las distancias del punto a un mnimo de tres satlites cuya localizacin es conocida. La distancia entre el usuario (receptor GPS) y un satlite se mide multiplicando el tiempo de vuelo de la seal emitida desde el satlite por su velocidad de propagacin. Para medir el tiempo de vuelo de la seal de radio es necesario que los relojes de los satlites y de los receptores estn sincronizados, pues deben generar simultneamente el mismo cdigo. La desviacin en los relojes de los receptores aade una incgnita ms que hace necesario un mnimo de cuatro satlites para estimar correctamente las posiciones (Fig. 2). Figura 2. Principio de funcionamiento del sistema GPS.

Estos satlites llevan a bordo un reloj atmico de gran precisin y emiten seales personalizadas que indican la hora en que fueron emitidas. El receptor en tierra reconoce el satlite que ha emitido la seal, determina, el tiempo que ha tardado en llegar y calcula as la distancia que le separa de l. Una vez que el receptor GPS se ha contactado con cuatro satlites, es capaz de determinar su posicin y altura. Dado que el viaje de la seal es tan rpido y el control de su retardo debe ser tan preciso (un error de un milisegundo genera desviaciones de cientos de kilmetros), exige una crucial sincronizacin perfecta entre satlite y receptor. Los receptores GPS no cuentan con relojes atmicos pero son capaces de ajustar los desfases mediante una medicin adicional sobre otro satlite, que al final de todas los convierte en relojes de precisin atmica. Cada satlite transmite su posicin y el tiempo exacto 1000 veces por segundo a la tierra, donde cada milisegundo un receptor computarizado puede calcular a qu distancia se encuentra de un satlite en particular que se encuentra a la vista, multiplicando la velocidad de la luz por el tiempo transcurrido de la seal del satlite al receptor GPS y al combinar las seales de varios satlites, el receptor puede establecer con "exactitud" su propia posicin, altitud y velocidad. La idea bsica de la determinacin de la posicin se basa en la triangulacin de los satlites. Para "triangular" un receptor GPS calcula la distancia con base al tiempo de travesa de la seal a travs de las capas de la atmsfera conociendo de antemano la velocidad de la luz. Para calcular el tiempo de travesa, los receptores GPS necesitan calcular los tiempos en ambos relojes el del receptor y el del satlite de una manera muy precisa.
3

G. J. Sonnenberg, The Global Positioning System, Radar and Electronic Navigation, Butterworths.

229 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

GPS DIFERENCIAL Se llama GPS diferencial (DGPS) al sistema modificado, desarrollado por los fabricantes de receptores civiles, que pretende conseguir o aproximarse a la precisin ofrecida por el cdigo militar. Para conseguir este aumento de la precisin es necesario acoplar al receptor GPS, mediante una conexin interface especial, otro tipo de receptor. Este receptor complementario (debe ser compatible) capta las seales emitidas por una red de radiobalizas situadas en estaciones costeras. Un aparato que disponga de la funcin DGPS, interconectado con un receptor adecuado, puede "burlar" la disponibilidad selectiva impuesta por el Departamento de Defensa de USA, al disponer de otra serie de datos complementarios, ofreciendo de esta manera, una precisin en las coordenadas de posicin que oscila entre los cinco y los diez metros. Cada marca de GPS facilita los parmetros de compatibilidad entre los receptores con funcin DGPS y los receptores que captan las seales de las radiobalizas. La utilizacin del sistema DGPS solo es aplicable en la navegacin marina, siendo especialmente til en las maniobras de poca visibilidad.

NMEA
NMEA4 (National Marine Electronics Association) es una asociacin sin fines de lucro de fabricantes, distribuidores, instituciones educacionales y otros interesados en equipos perifricos marinos. La definicin estndar NMEA 0183 es una interfaz elctrica y un protocolo de datos para la comunicacin entre instrumentos marinos. NMEA se establece como un grupo de trabajo para el desarrollo de nuevos estndares de comunicacin de datos para dispositivos marinos a bordo de las embarcaciones. Protocolo NMEA El protocolo NMEA es usado para la comunicacin entre dispositivos de uso marino para transmitir datos. La salida NMEA es EIA-422A, pero para la mayora de los propsitos puede considerarlo RS-232 compatible. Todos los datos son trasmitidos a travs de sentencias con caracteres ASCII5, cada sentencia comienza con $ y termina con <CR><LF> (CR: Carriage Retun retorno de carro, LF: Line Feed fin de lnea ENTER). Los primeros dos caracteres despus de $ son los que identifican el equipo o dispositivo (por ejemplo GP que se usa para identificar los datos GPS), y los siguientes tres caracteres es el identificador del tipo de formato o sentencia que se est enviando. Los tres tipos de sentencias NMEA que existen son los de envo (Talker Sentences), Origen del equipo (Proprietary Sentences) y consulta (Query Sentences). En la siguiente tabla se presentan algunos tipos de identificadores de equipos. UTC/GMT El tiempo universal coordinado, o UTC, tambin conocido como tiempo civil, es la zona horaria de referencia respecto a la cual se calculan todas las otras zonas del mundo. Es el sucesor del GMT (Greenwich Mean Time: tiempo promedio del Observatorio de Greenwich, en Londres) aunque todava coloquialmente algunas veces se le denomina as. La nueva denominacin fue acuada para eliminar la inclusin de una localizacin especfica en un estndar internacional, as como para basar la medida del tiempo en los estndares atmicos, ms que en los celestes.

4 5

http://www.nmea.org/ American Standard Code for Information Interchange

230 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


Formato de Sentencias NMEA BASICAS A continuacin en las siguientes tablas se muestra formatos de algunas sentencias NMEA. Tabla 2. Descripcin de las principales sentencias.

Sentencia

Descripcin Tiempo Universal Coordinado UTC( hhmmss.sss) (Campo 1)

Latitud (ddmm.mmmm) (Campo 2) Indicador N/S latitud (N = Norte, S = Sur) (Campo 3) Longitud ( dddmm.mmmm) (Campo 4) $GPGGA Total de Campos(14) Indicador E/W long ( E = Este, W = Oeste) (Campo 5) Indicador de la Calidad del GPS(0 = No Valido, 1 = Valido SPS, 2 = Valido DGPS, 3 = Valido PPS ) (Campo 6) Satlites Usados ( Numero de Satlites en Uso (0-12) (Campo 7) Altitud ( Altitud en metros de acuerdo al elipsoide WGS-84) (Campo 9) Unidad Altitud( M = Metros) (Campo 10)

PDOP( Position dilution of precision (error de la precisin)) (Campo 15) $GPGSA Total de Campos(17) HDOP( Horizontal dilution of precision) (Campo 16) VDOP( Vertical dilution of precision) (Campo 17)

231 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


$GPGSV Total de Campos(19) $GPRMC Total de Campos(11) Fecha UTC( DDMMYY) (Campo 9) Curso( Curso en grados) (Campo 1) $GPVTG Total de Campos(8) Velocidad( Velocidad horizontal) (Campo 7) Unidad( K = KM/h) (Campo 8)

Satlites en vista( Nmero total de SV en vista) (Campo 3)

232 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


EJEMPLOS DE LAS SENTENCIAS NMEA UTILIZADAS $GPGGA Sentencia (Fix data). GGA = Datos Fijo del Sistema Global de Posicionamiento Ejemplo(seal no adquirida): $GPGGA,235947.000,0000.0000,N,00000.0000,E,0,00,0.0,0.0,M,,,,0000*00 Ejemplo (seal adquirida): $GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*1F

Tabla 3. Formato de sentencia NMEA GPGGA. Campo Sentencia ID Tiempo UTC Latitud Indicador N/S Longitud Indicador E/W Indicador de la Calidad del GPS Satlites Usados HDOP Altitud Unidad Altitud Separacin Geoidal Unidad Separacin DGPS Intervalo DGPS Estacin ID Checksum Terminador 0000 *1F CR/LF Suma de verificacin Retorno de carro y cambio de lnea (Enter) Ejemplo $GPGGA 092204.999 4250.5589 S 14718.5084 E 1 04 24.4 19.7 M hhmmss.sss tiempo universal coordinado UTC ddmm.mmmm N = Norte, S = Sur dddmm.mmmm E = Este, W = Oeste 0 = No Valido, 1 = Valido SPS, 2 = Valido DGPS, 3 = Valido PPS Numero de Satlites en Uso (0-12) Dilucin Horizontal de la Posicin Altitud en metros de acuerdo al elipsoide 84 M = Metros Separacin Geoidal en metros de acuerdo al elipsoide WGS-84 M = Metros Intervalo en segundos DGPS desde la ultima actualizacin de una estacin de referencia ID WGSComentarios

233 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


Sentencia $GPGSA (Active satellites).

GSA = Modo de operacin de receptor GPS, SV empleados para navegacin y valores DOP. Ejemplo (seal no adquirida): $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30 Ejemplo (seal adquirida): $GPGSA,A,3,01,20,19,13,,,,,,,,,40.4,24.4,32.2*0A Tabla 4. Formato de sentencia NMEA GPGSA Campo Sentencia ID Modo 1 Modo 1 Satlite usado 1 Satlite usado 2 Satlite usado 3 Satlite usado 4 Satlite usado 5 Satlite usado 6 Satlite usado 7 Satlite usado 8 Satlite usado 9 Satlite usado 10 Satlite usado 11 Satlite usado 12 PDOP HDOP VDOP Checksum Terminador 40.4 24.4 32.2 *0A CR/LF Ejemplo $GPGSA A 3 01 20 19 13 A = Automtico 2D/3D, M = Manual forzado 2D/3D 1 = No disponible, 2 = 2D, 3 = 3D Satlite usado en canal 1 Satlite usado en canal 2 Satlite usado en canal 3 Satlite usado en canal 4 Satlite usado en canal 5 Satlite usado en canal 6 Satlite usado en canal 7 Satlite usado en canal 8 Satlite usado en canal 9 Satlite usado en canal 10 Satlite usado en canal 11 Satlite usado en canal 12 Position dilution of precision (error de la precisin) Horizontal dilution of precision Vertical dilution of precision Suma de verificacin Retorno de carro y cambio de lnea (Enter) Comentarios

234 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


Sentencia $GPGSV (Satellites in view). GSV = Nmero de SV en vista, nmeros de PRN, elevacin, azimut y valores SNR. Ejemplo (seal no adquirida): $GPGSV,1,1,01,21,00,000,*4B Ejemplo (seal adquirida): $GPGSV,3,1,10,20,78,331,45,01,59,235,47,22,41,069,,13,32,252,45*70 Tabla 5. Formato de sentencia NMEA GPGSV Campo Sentencia ID Nmero de mensajes Nmero de secuencia Satlites en vista Satlite ID 1 Elevacin 1 Azimuth 1 SNR 1 Satlite ID 2 Elevacin 2 Azimuth 2 SNR 2 Satlite ID 3 Elevacin 3 Azimuth 3 SNR 3 Satlite ID 4 Elevacin 4 Azimuth 4 SNR 4 Checksum Terminador 13 32 252 45 *70 CR/LF Ejemplo $GPGSV 3 1 10 20 78 331 45 01 59 235 47 22 41 069 Nmero total de mensajes de este tipo en este ciclo (1-3) Nmero de secuencia de esta entrada (1-3) Nmero total de SV en vista Rango es 1-32 Nmero de SV PRN Elevacin en grados (0-90) Azimuth en grados (0-359), grados del Norte verdadero Seal de porcin de ruido en dBHZ (0-99) Rango es 1-32. Informacin sobre segundo SV Elevacin en grados (0-90) Azimuth en grados (0-359) Seal de porcin de ruido en dBHZ (0-99) Rango es 1-32 Elevacin en grados (0-90) Azimuth en grados (0-359) Seal de porcin de ruido en dBHZ (0-99) Rango es 1-32 Elevacin en grados(0-90) Azimuth en grados (0-359) Seal de porcin de ruido en dBHZ (0-99) Suma de verificacin Retorno de carro y cambio de lnea (Enter) Comentarios

235 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


Sentencia $GPRMC (Position and time) RMC = Mnimo de Datos GPS/TRANSIT Especficos Recomendados. Ejemplo (seal no adquirida): $GPRMC,235947.000,V,0000.0000,N,00000.0000,E,,,041299,,*1D Ejemplo (seal adquirida): $GPRMC,092204.999,A,4250.5589,S,14718.5084,E,0.00,89.68,211200,,*25 Tabla 6. Formato de sentencia NMEA GPRMC Campo Sentencia ID Tiempo UTC Estados de los datos Latitud Indicador N/S Longitud Indicador E/W velocidad sobre la tierra Curso sobre la tierra Fecha de UTC Grados magnticos de variacin Indicador variacin magntica Checksum Terminador *25 CR/LF Ejemplo $GPRMC 092204.999 A hhmmss.sss. Tiempo Universal Coordinado (Coincide con el campo 1 de GPGGA) A = Valido, V = Invalido Comentarios

4250.5589 ddmm.mmmm S N = Norte, S = Sur

14718.5084 dddmm.mmmm E 0.00 0.00 211200 E = Este, W = Oeste Nudos Grados verdaderos DDMMYY = 21 DE DICIEMBRE DE 2000 Grados E = Este, W = Oeste Suma de verificacin Retorno de carro y cambio de lnea (Enter)

236 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


Sentencia $GPVTG (Course over ground) Curso en tierra VTG = Curso y velocidad en tierra Ejemplo (seal no adquirida): $GPVTG,,T,,M,,N,,K*4E Ejemplo (seal adquirida): $GPVTG,89.68,T,,M,0.00,N,0.0,K*5F Tabla 7. Formato de sentencia NMEA GPVTG Campo Sentencia ID 1.Curso 2.Referencia 3.Curso 4.Referencia 5.Velocidad 6.Unidad 7.Velocidad 8.Unidad Checksum Terminador M 0.00 N 0.00 K *5F CR/LF Ejemplo $GPVTG 89.68 T Curso en grados T = (True heading), indica que el curso bien hecho es relativo al Norte verdadero Curso en grados. No usado M = Magnetic heading Velocidad sobre el fondo en Nudos N = Nudos Velocidad horizontal K = KM/h Suma de verificacin Retorno de carro y cambio de lnea (Enter) Comentarios

237 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

ORDEN EN DETECCION AUTOMATICA DE INTERRUPCIONES DE LPM


1. INTERRUPCION_HP_TMR1 2. INTERRUPCION_HP_TMR0 3. INTERRUPCION_RXUART_PC7 , UART0, UART1, UART2 4. INTERRUPCION_1_TECPS2_PB2 5. INTERRUPCION_4_TECPS2_PB4_7 6. INTERRUPCION_TEC_4X4_PB4_7 7. INTERRUPCION_1_IR_PB1 8. INTERRUPCION_4_IR_PB4_7 9. INTERRUPCION_DTMF1_HP_STD_PTB0 10. INTERRUPCION_DTMF2_HP_STD_PTB1 , INT TRF 2.4GHZ 11. INTERRUPCION_HP_PTB0_FL 12. INTERRUPCION_HP_PTB0H 13. INTERRUPCION_HP_PTB1L 14. INTERRUPCION_HP_PTB1H 15. INTERRUPCION_HP_PTB2L 16. INTERRUPCION_HP_PTB2H 17. INTERRUPCION_HP_PTB4L 18. INTERRUPCION_HP_PTB4H 19. INTERRUPCION_HP_PTB5L 20. INTERRUPCION_HP_PTB5H 21. INTERRUPCION_HP_PTB6L 22. INTERRUPCION_HP_PTB6H 23. INTERRUPCION_HP_PTB7L 24. INTERRUPCION_HP_PTB7H

238 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

REGISTROS DESTINO DE MODULOS LPM (RDM)


Nota: las variables o registros destino terminados en dos puntos dos (:2) implica que son registros tipo word (16 bit) MODULO CONVERSOR_CAD REGISTRO DESTINO :CONVERCAD (0-1023 SI RESOLUCION=B10),(0-255 SI RESOLUCION=B8) : REG_GCENT (DATO VLIDO: 0 A 500 GRADOS CENTIGRADOS) :CONVERCAD (0-1023 SI RESOLUCION=B10),(0-255 SI RESOLUCION=B8) :REG_RXUART :REG_RXUART0 :REG_RXUART1 :REG_RXUART2 :REG_TECPS2 (DATO VLIDO: DATOS ASCII 0 A 255) (DATO VLIDO: DATOS ASCII 0 A 255) (DATO VLIDO: DATOS ASCII 0 A 255) (DATO VLIDO: DATOS ASCII 0 A 255) ("A" a "Z", "0" a "9", TEC_ESCAPE, TEC_ENTER, TEC_F1 a TEC_F12, TEC_SPACE, TECK_BACK)

CONVERSOR_CAD DECOD_RX_UART DECOD_RX_UART0 DECOD_RX_UART1 DECOD_RX_UART2 DECOD_TECLADO_PS2 DECOD DTMF1_PB0 DECOD DTMF2_PB1 RECEPTOR_IR grabadas TEC MATRICIAL 4X4, 4X3 TRANSCEIVER_TRF2p4 SIPO_4015B 32 BIT PISO_4021B 32 BIT COMUNICACION_SPI BUS_I2C TIME_KEEPER_DS1307_I2C MEMORIA_24256_I2C TABLA EEPROM_DATO RELOJ (TIMER1) RANDOM 8 BIT COUNTER_BCD_9_DIGITOS DISPLAY_7SEG SUMA 16 BIT RESTA 16 BIT

:REG_RXDTMF1 (DATO VLIDO: DTMF_0 A DTMF_9, DTMF_A, DTMF_N) :REG_RXDTMF2 (DATO VLIDO: DTMF_0 A DTMF_9, DTMF_A, DTMF_N) :REG_TECIR (DATO VLIDO: 1 A 51) :POINTER_REC_IR (DATO VLIDO: 1 A 51), devuelve el nmero de teclas :REG_TECMAT (DATOS VLIDO: 1 a 16) :25 BYTES: REG_TRF1 A REG_TRF25 :REG_SIPO1:REG_SIPO2:REG_SIPO3:REG_SIPO4 :LAS SALIDAS SON:OUT_SIPO1 A OUT_SIPO32, (RELLENAR CON VARNN) :REG_PISO1:REG_PISO2:REG_PISO3:REG_PISO :LAS ENTRADAS SON:INP_PISO1 A INP_PISO32 :REG_SPI :REG_I2C :SEG_TK,MIN_TK,HORA_TK,DIA_SEMANA_TK,DIA_MES_TK,MES_TK,AO_TK :REG_M24XXX,DIR_LOW_M24XXX,DIR_HIGH_M24XXX,DIR_M24XXX:2 :REG_TABLA (0 A 255) :REG_EEDATO (0 A 255) :HORA:MINUTO:SEGUNDO :REG_RANDOM (0 A 255) :C9DIG9:C9DIG8:C9DIG7:C9DIG6:C9DIG5:C9DIG4:C9DIG3:C9DIG2:C9DIG1 :C9DIG9:C9DIG8:C9DIG7:C9DIG6:C9DIG5:C9DIG4:C9DIG3:C9DIG2:C9DIG1 :RESULTADO:2 :RESULTADO:2

Nota: SI RESULTADO < 0 ENTONCES: F_OVER_FLOW_MATH = 1 RESULTADO=0 MULTIPLICACION 16 BIT DIVISION 16 BIT :RESULTADO:4 :COCIENTE:2 :RESIDUO:2

Nota: SI COCIENTE < 0 ENTONCES:

239 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


F_OVER_FLOW_MATH = 1 COCIENTE = 0, RESIDUO = 0 C_BCD (CONV BIN 16 -> BCD) : BCD5,BC4,BCD3,BCD2,BCD1 C_BIN (CONV BCD 5->BIN 16) : BINHL VECTOR0 : REG_V0 TIPO BYTE REG_V0:2 TIPO WORD VECTOR1 : REG_V1 TIPO BYTE REG_V1:2 TIPO WORD VECTOR2 : REG_V2 TIPO BYTE REG_V2:2 TIPO WORD REGISTROS DESTINO DEL CONTROL DE MOTOR PASO PASO POR TIMER1 FLAG_SENTIDO_MOTOR_PASO :sentido de giro de los 8 motores (0->izquierda, 1->derecha) FLAG_MODE_STOP_MOTOR_PASO :estado stop de los 8 motores (0->girando, 1->parado) FLAG_BURST_MOTOR_PASO :modo burst de los 8 motores (0->burst desactivado, 1->bursa activado) MOTOR_PASO1 :POINTER_M_PASO1,STEP_M_PASO1:2,DELAY_M_PASO1:2,FLAG_DIR_M_PASO1,FLAG_BURST_M_PASO1,FL AG_STOP_M_PASO1 MOTOR_PASO2 :POINTER_M_PASO2,STEP_M_PASO2:2,DELAY_M_PASO2:2,FLAG_DIR_M_PASO2,FLAG_BURST_M_PASO2,FL AG_STOP_M_PASO2 MOTOR_PASO3 :POINTER_M_PASO3,STEP_M_PASO3:2,DELAY_M_PASO3:2,FLAG_DIR_M_PASO3,FLAG_BURST_M_PASO3,FL AG_STOP_M_PASO3 MOTOR_PASO4 :POINTER_M_PASO4,STEP_M_PASO4:2,DELAY_M_PASO4:2,FLAG_DIR_M_PASO4,FLAG_BURST_M_PASO4,FL AG_STOP_M_PASO4 MOTOR_PASO5 :POINTER_M_PASO5,STEP_M_PASO5:2,DELAY_M_PASO5:2,FLAG_DIR_M_PASO5,FLAG_BURST_M_PASO5,FL AG_STOP_M_PASO5 MOTOR_PASO6 :POINTER_M_PASO6,STEP_M_PASO6:2,DELAY_M_PASO6:2,FLAG_DIR_M_PASO6,FLAG_BURST_M_PASO6,FL AG_STOP_M_PASO6 MOTOR_PASO7 :POINTER_M_PASO7,STEP_M_PASO7:2,DELAY_M_PASO7:2,FLAG_DIR_M_PASO7,FLAG_BURST_M_PASO7,FL AG_STOP_M_PASO7 MOTOR_PASO8 :POINTER_M_PASO8,STEP_M_PASO8:2,DELAY_M_PASO8:2,FLAG_DIR_M_PASO8,FLAG_BURST_M_PASO8,FL AG_STOP_M_PASO8 REGISTROS DESTINO DEL CONTROL PWM, SERVOMOTOR Y MOTOR DC POR TIMER1 PWM1_PTD0 PWM2_PTD1 PWM3_PTD2 PWM4_PTD3 PWM5_PTD4 PWM6_PTD5 PWM7_PTD6 PWM8_PTD7 PAC1_PTD0 PAC2_PTD1 : PUL_PWM1:2, PER_PWM1:2, CU_PWM1:2 : PUL_PWM2:2, PER_PWM2:2, CU_PWM2:2 : PUL_PWM3:2, PER_PWM3:2, CU_PWM3:2 : PUL_PWM4:2, PER_PWM4:2, CU_PWM4:2 : PUL_PWM5:2, PER_PWM5:2, CU_PWM5:2 : PUL_PWM6:2, PER_PWM6:2, CU_PWM6:2 : PUL_PWM7:2, PER_PWM7:2, CU_PWM7:2 : PUL_PWM8:2, PER_PWM8:2, CU_PWM8:2 REGISTROS DESTINOS DEL CONTROL DE TRIAC DE POTENCIA AC :TOFF_PAC1:2 :TOFF_PAC2:2

240 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2


PAC3_PTD2 PAC4_PTD3 PAC5_PTD4 PAC6_PTD5 PAC7_PTD6 PAC8_PTD7 :TOFF_PAC3:2 :TOFF_PAC4:2 :TOFF_PAC5:2 :TOFF_PAC6:2 :TOFF_PAC7:2 :TOFF_PAC8:2

REGISTROS DESTINO DEL MODULO CLAVE F_CLAVE_MAXIMA FLAG_KEY,0 ;despus de introducir una tecla indica que se introdujeron ms digitos de los programados en la macro capturar_clave F_CLAVE_CORRECTA FLAG_KEY,1 ;despus de la tecla aceptar indica que la clave introducida es correcta F_CLAVE_INCORRECTA FLAG_KEY,2 ;despus de la tecla aceptar indica que la clave introducida es incorrecta F_CLAVE_BORRAR FLAG_KEY,3 ;indica que se presion la tecla borrar ultimo digito introducido F_CLAVE_CANCELAR FLAG_KEY,4 ;indica que se presion la tecla cancelar clave F_CLAVE_ACEPTAR FLAG_KEY,5 ;indica que se presion la tecla aceptar clave F_CLAVE_SIGUIENTE FLAG_KEY,6 ;indica que se presion una tecla diferente a aceptar, cancelar y borrar ltimo digito REG_CLAVE1,REG_CLAVE2,REG_CLAVE3,REG_CLAVE4,REG_CLAVE5,REG_CLAVE6,REG_CLAVE7 ;registros de la clave introducida temporalmente POINTER_CLAVE ;devuelve y establece el nmero de digitos que se han ingresado de la clave

241 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2 TRANSMISOR X10 CON DETECTOR DE CRUCE POR CERO NO AISLADO ELECTRICAMENTE ENTRE PIC Y 120VAC (TIERRA DE PIC UNIDO A NEUTRO)

242 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2 RECEPTOR X10 CON DETECTOR DE CRUCE POR CERO NO AISLADO ELECTRICAMENTE ENTRE PIC Y 120VAC (TIERRA DE PIC UNIDO A NEUTRO)

243 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

244 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

245 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

DIGIBOOK - SECCION 2 TUTORIAL LPM2 GAMA ALTA 18FXX2

246 de 246
DigiBook - Gua de Proyectos Microcontrolados
Versin Marzo/2010

You might also like