seccion 2 - tutorial lpm2 gama alta abril-2010

246
DIGIBOOK - SECCION 2 TUTORIAL LPM 2 GAMA ALTA 18FXX2 1 de 246 DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010 DIGIBOOK SECCION 2 TUTORIAL DE LPM² LENGUAJE DE PROGRAMACIÓN MODULAR POR MACROS PARA PIC GAMA ALTA 16 BIT PIC 18FXX2: 242/252/442/452 Guía de Proyectos Microcontrolados By: Ing. Oscar J. Cabrales Baena e-mail: [email protected] Colombia Cel: 310-7374112 Mat. Prof: NS 206-45262

Upload: jarodd03

Post on 29-Dec-2015

267 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

1 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

DDIIGGIIBBOOOOKK SSEECCCCIIOONN 22 TTUUTTOORRIIAALL DDEE LLPPMM²²

LLEENNGGUUAAJJEE DDEE PPRROOGGRRAAMMAACCIIÓÓNN MMOODDUULLAARR PPOORR MMAACCRROOSS

PPAARRAA PPIICC GGAAMMAA AALLTTAA 1166 BBIITT

PIC 18FXX2: 242/252/442/452

Guía de Proyectos Microcontrolados By: Ing. Oscar J. Cabrales Baena

e-mail: [email protected] Colombia

Cel: 310-7374112 Mat. Prof: NS 206-45262

Page 2: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

2 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

LLEENNGGUUAAJJEE DDEE PPRROOGGRRAAMMAACCIIÓÓNN MMOODDUULLAARR PPOORR MMAACCRROOSS ““LPM²”

PROBLEMA

La preparación de profesionales especializados en las áreas relacionadas con la Electrónica Digital Microcontrolada es de gran importancia actual y futura para la región y el país. 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 adaptación y una calidad suficiente a costos competitivos. Estas condiciones sólo se logran con una gran dedicación de recursos humanos y económicos a la transferencia e incorporación de nuevas tecnologías en los lenguajes de programación modular o estructurada que facilite y optimice los recursos de un microcontrolador en el desarrollo de proyectos en el sector productivo tales como la robótica, la visión artificial, el control numérico, el control digital, el control ‘adaptativo’, la microelectrónica, la economía energética, la gestión de la producción, la informática industrial, la telemática industrial, la gestión ambiental, etc.

JUSTIFICACION

El modelo LPM² de programación estructurada y modular por macros de assembler y compilado condicional de subrutinas optimizadas y funcionales es un freeware creado en el año 2005 y persigue proporcionar a programadores de microcontroladores PIC, expertos y/o novatos, herramientas prácticas que permitan el desarrollo rápido, fácil y optimizado de aplicaciones electrónicas. Con la implementación de númerosos módulos 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 programación modular está habilitado para microcontroladores de la familia microchip 16F y 18F. La principal ventaja de la programación estructurada por macros es el control o gestor automatizado y

optimizado de interrupciones (Handler Interruptions) (léase hándoel interwraptions)

METODOLOGIA

Los cursos se desarrollarán a través de clases teóricas fundamentales acompañadas de prácticas como proyectos de aplicación en los temas que lo requieran. Elaboración de prototipos, maquetas, y montaje de circuitos en protoboard, sustentación y verificación de las prácticas de laboratorios.

OBJETIVO GENERAL Desarrollar habilidades en la programación de microcontroladores microchip de la gama alta mediante la aplicación del programa LPM² y el versátil software de simulación avanzada Proteus Profesional.

OBJETIVOS ESPECIFICOS Impartir información básica relevante a la Electrónica Digital, unificar criterios fundamentales previos a la incursión en el mundo de los microcontroladores.

Introducir al estudiante en las técnicas de interfaz de periféricos avanzados, diseño optimizado de desarrollo tecnológico con circuitos digitales microcontrolados según las características del fabricante.

Desarrollar habilidades en la programación estructurada de la familia 18FXXXX de microchip, respetando la sintaxis y estructura de un código para microcontroladores.

BIBLIOGRAFIA

MICROELECTRONIC CIRCUITS. Adel. S. Sedra & K. C. Smith. Editorial OXFORD UNINERSITY PREES Diseño Electrónico. 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 versión 8.4 de Microchip Data sheet microcontroladores microchip

Page 3: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

3 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Autor de LPM2 Ing. OSCAR JOSÉ CABRALES BAENA

Ingeniero Electrónico nacido el 5 de Noviembre de 1978 en Mompós Bolívar (Colombia). Cursó el bachillerato en el colegio Nacional Pinillos de Mompós y egresado de ingeniero electrónico de la Universidad de Pamplona en abril de 2001. 9 años de experiencia laboral en docencia universitaria y desarrollo tecnológico. 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 Ingeniería Electrónica, Ingeniería de Sistemas, Ingeniería Eléctrica, Ingeniería Mecatrónica, Tecnología en Redes y Sistemas Teleinformáticos. Ha sido profesor de tiempo completo ocasional en la Universidad de Pamplona, Universidad Popular del Cesar, Instituto Superior de Educación Rural ISER y corporación UPARSISTEM DE VALLEDUPAR en el área de mantenimiento de computadoras, electrónica analógica, circuitos digitales, lenguajes de programación visual y programación de microcontroladores. Con amplia experiencia en Control y Automatización, programación WEB, Diseño de Redes de computadoras, programación orientada a objetos como Visual Basic .NET, programación de Microcontroladores Microchip y Motorola, Diseño Web, Bases de datos ACCESS, My SQL, lenguaje assembler, arreglos lógicos programables FPGA, VHDL, Programación de DSP (Digital Signal Processor), lenguajes de programación visuales bajo plataforma Windows, PLC’s NAIS, FESTO, control avanzado de periféricos del Computador (Puerto Paralelo, serial, USB, MODEM, Tarjeta de Red, Tarjeta de sonido), sistemas de posicionamiento global GPS, sistemas biométricos, sistemas GPRS – SMS – GSM, sistemas IVR-DTMF, RFID, Protocolos TCP-IP SNMP, comunicación inalámbrica ZIGBEE, sistemas SCADA y diseño 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”, artículos publicados en revista científica indexada, conferencista y ponente en diversos eventos científicos a nivel internacional. Fundador de la empresa en régimen común DIGISOFT ELECTRONIC Ltda en el año 2005 y la empresa en régimen simplificado DIGITAL CONTROL B&J en el año 2009. Diseñador del sistema de control de acceso biométrico “BIOMETRIC SYSTEM 1.0” instalado en las principales clínicas y hospitales del cesar. Diseñador del novedoso sistema de asignación de turno computarizado FOTOTURNO SOFT 1.0, diseñador del aplicativo SMART HOTEL SOFT de automatización de hoteles y moteles.

Page 4: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

4 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Page 5: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

5 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

INDICE GENERAL SECCION 2 PAGINTRODUCCIÓN AL MODELO DE PROGRAMACIÓN MODULAR POR MACROS LPM² 11 ALGORITMO MEDIANTE FLOW CHART (DIAGRAMA DE FLUJO) 11 FASES DE UN PROYECTO MICROCONTROLADO 11 DIAGRAMA DE FLUJO DE UN PROYECTO MICROCONTROLADO 13 SOFTWARE O INFORMACION REQUERIDA PARA EL DESARROLLO DE UN PROYECTO EN LPM² 14 HARDWARE Y EQUIPOS REQUERIDO PARA EL DESARROLLO DE UN PROYECTO EN LPM² 14 RESUMEN DATA SHEET 18FXX2 15 DIAGRAMA DE PINES DE PIC GAMA ALTA 18FXX2 16 PLANO DEL HARDWARE BASICO DE UN PROYECTO LPM² 17 CREACION DE UN PROYECTO LPM²: PRIMER PASO 18 CREACION DE UN PROYECTO LPM²: SEGUNDO PASO 19 CREACION DE UN PROYECTO LPM²: TERCER PASO 21 CREACION DE UN PROYECTO LPM²: CUARTO PASO CONFIGURACIÓN DEL EDITOR MPLAB IDE 7.1

22

CREACION DE UN PROYECTO LPM²: QUINTO Y ULTIMO PASO 29 BLOQUES DE UN PROYECTO LPM² 31 BLOQUE 0 INFORMACION GENERA Y CONFIGURACIÓNES ESPECIALES DEL MICROCONTROLADOR 32 BLOQUE 1 DE LPM² ACTIVACION / DESACTIVACION DE MODULOS 35 BLOQUE 2 DE LPM² CONFIGURACIÓN DE MÓDULOS Y ASIGNACIÓN DE PINES DE CONTROL 37 BLOQUE 3 DE LPM² DECLARACIÓN DE VARIABLES RAM DEL PROGRAMA DE USUARIO 38 BLOQUE 4 DE LPM² DECLARACION DE CONSTANTES, DEFINICION DE BANDERAS (FLAGS) Y MACROS EXTRAS DEL PROGRAMA DE USUARIO

40

BLOQUE 5 DE LPM² CONFIGURACIÓN MANUAL DE PUERTOS, REGISTROS ESPECIALES (SFR), ASIGNACION Y CONFIGURACIÓN MANUAL DE PINES DE ENTRADA/SALIDA

41

BLOQUE 6 DE LPM² DESARROLLO DE CONDICIONES INICIALES DEL PROGRAMA DE USUARIO 43 BLOQUE 7 DE LPM² DESARROLLO DEL PROGRAMA PRINCIPAL (MAIN PROGRAM) 44 BLOQUE 8 DE LPM² CONTROL AUTOMATICO DE INTERRUPCIONES DE ALTA Y BAJA PRIORIDAD 45 BLOQUE 9 DE LPM² DESARROLLO DE SUBRUTINAS Y TABLAS DEL PROGRAMA DE USUARIO 46 BLOQUE 10 DE LPM² ESCRITURA EN LA MEMORIA EEPROM DE DATO EN TIEMPO DE DISEÑO 47 COMPILACIÓN EXITOSA DE UN PROYECTO LPM² 48 WINPIC 800 INSTALACION “CARGADOR DE CODIGO HEXADECIMAL EN PIC” 49 CONFIGURACIÓN WINPIC 800 A HARDWARE JDM 50 INFORMACION GENERAL DE LPM² 56 PUNTUACION Y REQUISITOS PARA EL INFORME DE PROYECTOS 60 METODOLOGÍA DE SUSTENTACION DEL PROYECTO 60 INFRACCIONES EN PRESENTACION DE UN PROYECTO 61 FORMAS DE SUBIR LA NOTA 63 SOLUCIÓN DE PROBLEMAS DE HARDWARE 64 SIGNIFICADO DE ERRORES EN EL COMPILADOR MPASM 64 SIGNIFICADO DE WARNINGS (ADVERTENCIAS) EN EL COMPILADOR MPASM 65 SIGNIFICADO DE MENSAJES EN EL COMPILADOR MPASM 65 TIPOS DE DATOS SEGÚN LA LONGITUD 66 FORMATO DE DATOS ADMITIDOS EN ASSEMBLER Y LPM² 66 CONVENCION DE SIMBOLOS PARA INSTRUCCIONES O COMANDOS DE ASSEMBLER 66 INSTRUCCIONES, MNEMONICOS O COMANDOS DE ASSEMBLER PARA REGISTROS ORIENTADOS A BYTES

67

Page 6: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

6 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

Page 7: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

7 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

MACROS COUNTER 9 DIGITOS 112 MACROS DISPLAY 7 SEGMENTOS 112 TEORÍA DISPLAY DE 7 SEGMENTOS MATRICIAL CON MANEJO DINAMICO 113 PLANO DE CONEXIÓN DE UN DISPLAY DE 7 SEGMENTOS MATRICIAL 114 MACROS EXPANSOR DE SALIDAS SIPO 4015B DE 32 BIT 115 PLANO DE EXPANSION DE PUERTOS DE SALIDA CON REGISTRO DE DESPLAZAMIENTO SIPO (4015B Ó 74LS164)

116

MACROS EXPANSOR DE ENTRADAS PISO 4021B DE 32 BIT 117 PLANO DE EXPANSION DE PUERTOS DE ENTRADA CON REGISTRO DE DESPLAZAMIENTO PISO (4021B Ó 74LS165)

118

MACROS TABLA EN MEMORIA DE PROGRAMA FLASH EN EL BLOQUE 9 119 MACROS TIMER0 120 TABLA DE CONTANTES DE CONFIGURACIÓN DE TIEMPO DE TIMER0 120 TEORIA DE TEMPORIZADORES DEL PIC (TIMER0 Y TIMER1) CONFIGURACIÓN DEL MODULO TEMPORIZADOR TIMER0 / TIMER1

121

MACROS TIMER1 121 TABLA DE CONTANTES DE CONFIGURACIÓN DE TIEMPO DE TIMER1 122 TABLA DE CONTANTES DE CONFIGURACIÓN DE TIEMPO DE TIMER1 SEGÚN TABLA DE NÚMERO DE CANALES PWM, POWER AC Y MOTOR PASO PASO

122

TABLA DE NÚMERO DE INSTRUCCIONES CONSUMIDAS POR CADA MODULO INVOLUCRADO CON TIMER1

123

MACROS PUSH POP 123 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

124

TEORÍA DEL CONTROL PWM POR TIMER1 CONTROL DE POTENCIA POR PWM EN CORRIENTE DIRECTA

126

PLANO DEL CONTROL DE VELOCIDAD POR PWM OPTOACOPLADO Y DIRECCION MEDIANTE RELE DE DOBLE CONTACTO CONTROL DE MOTOR DC OPTOACOPLADOS SIN PUENTE H

129

TEORIA DE CONTROL DE SERVOMOTORES CON PWM DC 130 PLANO DE CONEXIÓN DE UN SERVOMOTOR A UN PIC 131 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

132

TEORIA DE MOTORES PASO A PASO BIPOLAR 138 SECUENCIAS PARA MANEJAR MOTORES PASO A PASO BIPOLARES 138 TEORIA DE MOTOR PASO A PASO UNIPOLAR 139 SECUENCIAS PARA MANEJAR MOTORES PASO A PASO UNIPOLARES 141 SECUENCIA (ALTO TORQUE) MOTOR UNIPOLAR 141 SECUENCIA WAVE DRIVE (BAJO TORQUE) MOTOR UNIPOLAR 141 SECUENCIA MOTOR UNIPOLAR DEL TIPO MEDIO PASO (HALF STEP) 142 ¿COMO SELECCIONAR UN MOTOR PARA UNA APLICACION? 142 MACROS CONTROL DE POTENCIA DE ALTERNA PAC1 A PAC8 CON BASE DE TIEMPO EN TIMER1 144 TEORÍA DE CONTROL DE POTENCIA ALTERNA MONOFASICA CONTROL DEL ANGULO DE DISPARO DEL GATE DE UN TRIAC (POWER AC - PAC)

145

PLANO DE CIRCUITO CROSS OVER OPTOACOPLADO 147 PLANO DE CONTROL DE POTENCIA DE AC/DC MEDIANTE RELE U OPTOACOPLADOR 148 MACROS CAD CONVERSOR ANALOGO DIGITAL 149 TABLA DE NÚMERO DE CANALES Y VOLTAJES DE REFERENCIA DEL CONVERSOR A/D 151 TABLA DE VELOCIDAD DE CONVERSION O FRECUENCIA DE MUESTREO DEL CONVERSOR A/D 152

Page 8: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

8 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

TEORIA DE CONVERSORES ANALOGO/DIGITAL (CAD) 153 PARAMETROS DE CONVERSORES ANALOGO/DIGITAL (CAD) 154 PLANO DE CONEXIÓN GENERAL DE SENSORES PARA CONVERSOR A/D 157 TABLA DE SENSORES COMERCIALES 158 MACROS DECODIFICADOR DE CONTROL REMOTO INFRA ROJO 160 TEORÍA DEL DECODIFICADOR DE CONTROL REMOTO INFRARROJO 160 PLANO RECEPTOR DE CONTROL REMOTO INFRARROJO IR CON INTERRUPCIÓN 162 CÓMO PROGRAMAR LAS TECLAS DEL CONTROL REMOTO IR 162 TEORÍA DEL SENSOR DE PROXIMIDAD INFRARROJO 163 PLANO DE SENSOR DE PROXIMIDAD INFRARROJO 164 MACROS DEL DECODIFICADOR TECLADO PS2 DE COMPUTADORA 165 TEORÍA DE TECLADO PS2 AT DE LA PC 165 PLANO DE CONEXIÓN DE 1 A 5 TECLADOS PS2 DE COMPUTADORA 167 DIAGRAMA DE CONEXIÓN DEL PLUG DEL TECLADO PS2 167 PROTOCOLO DE COMUNICACIÓN DE TECLADO A PIC 168 PROTOCOLO DE COMUNICACIÓN DE PIC A TECLADO 168 CODIGOS ENVIADOS POR EL CODIFICADOR DEL TECLADO PS2 169 MACROS TECLADO MATRICIAL 4X4 / 4X3 170 PLANO DEL TECLADO MATRICIAL 4X4, 4X3 171 PLANO DE CONEXIÓN DE LCD Y TECLADO MATRICIAL COMPARTIENDO CIERTOS PINES DE CONTROL

172

MACROS TRANSCEIVER TRF 2.4GHz (TRANSMISOR – RECEPTOR RF) PROTOCOLO IEEE 802.15.4 173 PLANO DE CONEXIÓN ENTRE PIC Y TRANSCEIVER TRF 2.4 GHZ 177 MACROS DEL DECODIFICADOR DE TONOS DUAL MULTIFRECUENCIA (DTMF) MT 8870 178 TEORIA DEL DECODIFICADOR DTMF MT8870 DE TONOS DE TELEFONO FIJO O CELULAR 179 PLANO DE CONEXIÓN DEL DECODIFICADOR DTMF MT 8870 179 MACROS UART RS 232 180 TEORIA DEL PUERTO SERIAL RS232 UART ENTRE PC Y PIC 181 TABLA DE SELECCIÓN DE VELOCIDAD EN BAUDIOS DEL MODULO UART RS232 POR PTC7 Y PTC6 182 TABLA DE SELECCIÓN DE VELOCIDAD EN BAUDIOS DE LOS MÓDULOS UART0, UART1 Y UART2 182 CALCULO DE VELOCIDAD EN BAUDIOS PARA EL MODULO UART INTERNO DEL PIC 183 CONFIGURACIÓN DE LA TRAMA RS232 PARA COMUNICACIÓN HALF DUPLEX PC - PIC 183 NIVELES DE VOLTAJE RS232 184 TRAMA RS232 184 SIGNIFICADO DE LOS PINES DEL CONECTOR DB9 DEL PUERTO SERIAL DEL PC 185 PLANO DE CONEXIÓN UART RS232 ENTRE PIC Y PC MEDIANTE MAX232 187 PLANO DE CONEXIÓN UART RS232 ENTRE PIC Y PC MEDIANTE TRANSISTORES 188 TABLA DE CONSTANTES DEL TECLADO DEL PC POR RECEPCIÓN UART RS232 189 TABLA ORDEN EN DETECCION AUTOMATICA DE INTERRUPCIONES DE LPM² 190 TABLA REGISTROS DESTINO DE MODULOS LPM² 191

Page 9: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

9 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

INDICE DE MACROS, PLANOS Y TABLAS DE LPM2 PAG

MACROS ACTIVACION / DESACTIVACION DE INTERRUPCIONES 72 MACROS BANDERAS DE INTERRUPCION 73 MACROS BIT DE PUERTOS 75 MACROS BLINK 91 MACROS CAD CONVERSOR ANALOGO DIGITAL 149 MACROS CLAVE DE ACCESO 81 MACROS COMPARACION DE BIT Y REGISTROS 80 MACROS CONFIGURACIÓN DE REGISTROS ESPECIALES FSR 71 MACROS CONFIGURACIÓN DE BIT DE REGISTRO ESPECIALES 71 MACROS CONTROL REMOTO INFRA ROJO DECODIFICADOR 160 MACROS CONVERSION DE TIPO DE DATOS 89 MACROS COUNTER 9 DIGITOS 112 MACROS DELAY 90 MACROS DIRECCIONAMIENTO INDIRECTO FSR0,FSR1,FSR2 102 MACROS DISPLAY 7 SEGMENTOS 112 MACROS DTMF DECODIFICADOR DE TONOS DUAL MULTIFRECUENCIA MT 8870 178 MACROS FLANCOS DE SUBIDA Y BAJADA DE INTERRUPCIONES 73 MACROS FOR DE SUBRUTINAS 79 MACROS I2C BUS 108 MACROS INCREMENTAR/DECREMENTAR VARIABLES 78 MACROS ISD 25XXX 96 MACROS LCD DISPLAY CRISTAL LIQUIDO LCD 2X16, 2X20, 2X24, 2X40 92 MACROS MEMORIA EEPROM DE DATO DEL PIC 106 MACROS MEMORIA SERIAL 24LC256 I2C (256KBITS = 32KBYTES) 111 MACROS MOTOR PASO A PASO 1 A 8 CON BASE DE TIEMPO EN TIMER1 132 MACROS MOVIMIENTO DE DATOS ENTRE REGISTROS 75 MACROS OPERACIONES CON REGISTROS 76 MACROS OPERACIONES MATEMATICAS 79 MACROS PISO EXPANSOR DE ENTRADAS PISO 4021B DE 32 BIT 117 MACROS POTENCIA DE ALTERNA PAC1 A PAC8 CON BASE DE TIEMPO EN TIMER1 144 MACROS PRIORIDAD DE INTERRUPCIONES 73 MACROS PULSO_LOW Y PULSO_HIGH 90 MACROS PUSH POP 123 MACROS PWM 1 A PWM8 CON BASE DE TIEMPO EN TIMER1 124 MACROS RANDOM 91 MACROS RELOJ CON TIMER 107 MACROS SIPO EXPANSOR DE SALIDAS SIPO 4015B DE 32 BIT 115 MACROS SPI DE 8 BIT INTERFAZ PERIFERICO SERIAL 108 MACROS STATUS REGISTRO 74 MACROS TABLA EN MEMORIA DE PROGRAMA FLASH EN BLOQUE 9 119 MACROS TECLADO MATRICIAL 4X4 / 4X3 170 MACROS TECLADO PS2 DE COMPUTADORA 165

Page 10: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

10 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

MACROS TIMEKEEPER DS1307 I2C 108 MACROS TIMER0 120 MACROS TIMER1 121 MACROS TRANSCEIVER TRF 2.4GHz EN MODO SHOCK BURST TRF 2.4 GHZ (TRANSMISOR – RECEPTOR DE RADIOFRECUENCIA) PROTOCOLO IEEE 802.15.4

173

MACROS UART RS 232 (UART, UART0, UART1, UART2) 180 MACROS VECTOR0 103 MACROS VECTOR1 103 MACROS VECTOR2 103 PLANO BÁSICO PLANO CAD CONVERSOR A/D (SENSORES DE TEMPERATURA, PRESION, LUMINOSIDAD)

17 157

PLANO CONTROL DE POTENCIA DE AC/DC MEDIANTE RELE U OPTOACOPLADOR 148 PLANO CROSS OVER OPTOACOPLADO 147 PLANO DISPLAY DE 7 SEGMENTOS MATRICIAL 114 PLANO DTMF MT 8870 129 PLANO ISD 25XXX 99 PLANO LCD 2X16 ALFANUMERICA 95 PLANO LCD Y TECLADO MATRICIAL 172 PLANO PISO EXPANSION DE PUERTOS DE ENTRADA (4021B Ó 74LS165) 118 PLANO PWM OPTOACOPLADO PARA CONTROL DE MOTOR DC Y DIRECCION MEDIANTE RELE 179 PLANO RECEPTOR DE CONTROL REMOTO INFRARROJO IR 162 PLANO SENSOR DE PROXIMIDAD INFRARROJO 164 PLANO SERVOMOTOR A UN PIC 131 PLANO SIPO EXPANSION DE PUERTOS DE SALIDA (4015B Ó 74LS164) 116 PLANO TECLADO MATRICIAL 4X4, 4X3 171 PLANO TECLADOS PS2 DE COMPUTADORA 167 PLANO TIMEKEEPER DS1307 Y DS1302 110 PLANO TRANSCEIVER TRF 2.4 GHZ (TRANSMISOR – RECEPTOR DE RADIOFRECUENCIA) PROTOCOLO IEEE 802.15.4

177

PLANO UART RS232 ENTRE PIC Y PC MEDIANTE MAX232 187 TABLA CAD NÚMERO DE CANALES Y VOLTAJES DE REFERENCIA DEL CONVERSOR A/D 151 TABLA CAD VELOCIDAD DE CONVERSION O FRECUENCIA DE MUESTREO DEL CONVERSOR A/D

152

TABLA ORDEN EN DETECCION AUTOMATICA DE INTERRUPCIONES DE LPM² 190 TABLA REGISTROS DESTINO DE MODULOS LPM² 191 TABLA TIMER0 CONTANTES DE CONFIGURACIÓN DE TIEMPO 120 TABLA TIMER1 CONTANTES DE CONFIGURACIÓN DE TIEMPO 122 TABLA TIMER1 CONTANTES DE CONFIGURACIÓN DE TIEMPO DE TIMER1 SEGÚN NÚMERO DE CANALES, POWER AC Y MOTOR PASO PASO

123

TABLA TIMER1 NÚMERO DE INSTRUCCIONES CONSUMIDAS POR CADA MODULO INVOLUCRADO CON TIMER1

123

TABLA UART CONSTANTES DEL TECLADO DEL PC POR RECEPCIÓN UART RS232 189 TABLA UART SELECCIÓN DE VELOCIDAD EN BAUDIOS DEL MODULO UART RS232 POR PTC7 Y PTC6

182

TABLA UART0, UART1, UART2 SELECCIÓN DE VELOCIDAD EN BAUDIOS 182

Page 11: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

11 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

INTRODUCCIÓN AL MODELO DE PROGRAMACIÓN MODULAR POR MACROS LPM²

El modelo de programación 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 prácticas que permitirán el desarrollo rápido, fácil, optimizado y funcional de aplicaciones electrónicas. Con la implementación 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 programación 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 PIC’s mencionados sólo difieren en número de puertos disponibles, tamaño de memoria RAM, tamaño de memoria de programa, etc.

ALGORITMO MEDIANTE FLOW CHART (DIAGRAMA DE FLUJO)

Para desarrollar una aplicación o un proyecto microcontrolado se recomienda escribir un algoritmo (especificación paso a paso de la solución de un programa mediante un diagrama de flujo - flow chart). La representación mediante un algoritmo debe garantizar: 1. Que sea fácilmente comprensible para una tercera persona que pretenda leerlo. 2. Debe obtener el resultado deseado de forma rápida. 3. Debe ocupar el menor espacio de memoria de programa y menor número de variables. 4. Cada bloque o sección del programa debe estar debidamente documentado mediante comentarios. 5. El programa debe estar dividido en subrutinas o secciones elementales, es decir, ser estructurado o modular para

facilitar un eventual cambio o actualización

FASES DE UN PROYECTO MICROCONTROLADO Cada nuevo proyecto nace con una idea y termina con el prototipo que la implementa. La realización de un proyecto se puede descomponer en 10 fases. Un amplio dominio de las diferentes opciones y configuraciónes a nivel de software en un microcontrolador optimiza y simplifica notablemente el diseño del hardware, lo cual se traduce en una disminución del costo de implementación del producto final.

LAS 10 FASES DE UN PROYECTO MICROCONTROLADO

1. DEFINICION DEL PROYECTO: Definir claramente el proyecto que se desea realizar con sus características hasta la absoluta comprensión de lo que se desea implementar. Se determinan los requerimientos de hardware así como las partes que integrarán el programa.

2. DISEÑO DEL HARDWARE: Realizar el esquemático del circuito físico a controlar. 3. IMPLEMENTACIÓN Y VERIFICACION DEL HARDWARE: Se deben adquirir todos los componentes y/o

dispositivos electrónicos del diseño. 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, relés, transistores, sensores análogos y digitales, continuidad en conductores, estabilidad y potencia de la fuente de alimentación, TRIAC, SCR, etc.

4. DIAGRAMA DE FLUJO DEL ALGORITMO DEL PROGRAMA: Todo el tiempo invertido en la depuración y

Page 12: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

12 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

perfeccionamiento del flow chart se ahorrará en la fase de edición del programa. 5. EDICION DEL PROGRAMA: Escribir el código fuente del programa mediante instrucciones de assembler y/o

macros de LPM² en el editor MPLAB IDE de microchip. 6. ENSAMBLAR EL CODIGO FUENTE: Mediante el programa MPASM de MPLAB IDE se genera el código de

máquina hexadecimal (archivo .Hex) que se cargará en la memoria de programa del PIC. 7. 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.

8. GRABACION DEL CODIGO DE MAQUINA EN MEMORIA DE PROGRAMA DEL PIC: Mediante el programa de libre distribución 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).

9. 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.

10. DOCUMENTACION DEL PROYECTO FINIQUITADO: Elaborar una guía fácilmente comprensible para una tercera persona ajena al proyecto.

Page 13: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

13 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

DIAGRAMA DE FLUJO DE UN PROYECTO MICROCONTROLADO

Page 14: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

14 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 Distribución por la empresa MICROCHIP) 2. Proteus Professional 6.7 (Simulador de circuitos electrónicos) 3. WinPic800 – Aplicativo Software cargador de código 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 mínimo, 4GB libre en Disco Duro. 2. Hardware Cargador – Programador De Pic’s 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 Mínimo 6. Fuente de +5vdc (+- 10%) / 1amp, Fuente De +12vdc (+- 10%) / 1amp 7. Multimetro Digital De Propósito General, puentes, herramientas básicas. Si dispone de todas las herramientas antes mencionadas y los software debidamente instalados puede iniciar la creación de un proyecto en programación modular LPM².

Page 15: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

15 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Page 16: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

16 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

DIAGRAMA DE PINES DE PIC GAMA ALTA 18FXX2

Page 17: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

17 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 protección del microcontrolador contra picos negativos de voltaje al presionar el

pulsador RESET. C1 y C2 son condensadores cerámicos de 27pF/10V cuya función es estabilizar la oscilación del cristal X1.

Por norma general (efecto de señales electromagnéticas de altas frecuencia) C1,C2 y X1 deben conectarse lo más cerca posible al microcontrolador.1

C3 y C4 son condensadores cerámicos (By pass) de 100nF = 104pF = 0.1uF/10V cuya función es filtrar ruidos de relativa alta frecuencia (no el rizado de 60 ó 120Hz) en la alimentación del PIC, por lo tanto, es prioritario conectarlos lo más cerca posible a los pines de alimentación 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 alimentación.

1 Nota: Cerciórese que C1 y C2 sean de 27pF a 33pF, algunos condensadores nominados como 27K en su presentación no son realmente de 27 pF, entonces procure utilizar condensadores nominados 27 solamente.

Page 18: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

18 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

Este circuito obtiene su alimentación directamente de la red eléctrica 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 electrolítico 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 eléctricos indeseados. Tenga precaución de no trabajar descalzo o tener contacto con piso, paredes o cualquier sistema de tierra pues podría sufrir sacudidas eléctricas.

Page 19: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

19 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 alimentación con adaptador de celular debido a la ausencia del típico rizado de 60 o 120Hz de las fuentes convencionales con transformador. Este tipo de fuentes operan con otra técnica (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 también debe alimentar a los periféricos del microcontrolador (led, LCD, teclado PS2, etc) se recomienda que mínimo proporcione 100mA.

Si el adaptador genera más de 5 VDC se recomienta poner en serie y en directa diodos 1N4001. Cada diodo “captura” 0.7VDC aproximadamente, es decir, si la tensión del adaptador es de 7VDC entonces conecte 3 diodos en serie.

Page 20: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

20 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

CREACION DE UN PROYECTO LPM²: PRIMER PASO

Copie la carpeta modelo (LPM2) según el PIC que empleará del CD DIGITAL BOOK y péguela en el directorio raíz de cualquier disco duro (C:\ D:\ E:\)

Page 21: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

21 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 SIMULACIÓN PROTEUS se debe incluir el plano del hardware para efectos de simulación (*.dsn). En la carpeta PLANOS PROTEUS DEL CD DIGITAL BOOK se encuentran varios ejemplos de planos en proteus, copie el ejemplo que más se acerque a su aplicación y péguelo en la carpeta SIMULACION PROTEUS de la carpeta que acaba de crear en el directorio raíz.

Page 22: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

22 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 raíz C:\ ó D:\ ó E:\ (esta restricción obedece a limitaciones impuestas por el editor MPLAB IDE 7.1, el cual máximo 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 máximos que permite el editor MPLAB IDE para compilar un archivo .asm.

Page 23: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

23 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

CREACION DE UN PROYECTO LPM²: CUARTO PASO CONFIGURACIÓN DEL EDITOR MPLAB IDE 7.1

Nota1: El cuarto paso sólo se debe realizar la primera vez que abre el editor MPLAB IDE 7.1, esta configuración permanece para todos los proyectos LPM² de aquí en adelante. Nota2: Se recomienda trabajar LPM2 con la versión MPLAB IDE 7.1 prescindiendo de la disponibilidad de versiones más 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 recomendación general ¡Nunca elimine los renglones básicos del formato general, ni comentarios (líneas 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, líneas de programación para ayuda del programador y no para la memoria del PIC. LETRA AZUL : Indica instrucción de assembler o directiva para el editor. En total hay 75 instrucciones de assembler y decenas de directivas.

Page 24: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

24 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

SELECCIÓN DE MICROCONTROLADOR Note en la barra de estado que el PIC seleccionado por defecto es el PIC18F452, cambie de microcontrolador si fuese necesario, esta opción se encuentra en el menú configure - selec device.

CONFIGURACIÓN DEL EDITOR MPLAB IDE

A continuación configure el editor de la siguiente forma:

Page 25: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

25 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Page 26: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

26 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Page 27: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

27 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Continuación de configuración del editor: asignación de la tecla de funciones F5 para compilación rápida (Quickbuild).

Configure la ventana Settings Workspace de la siguiente manera:

Por defecto la ventana Settings Hot Keys (teclas de acceso rápido) tiene asignado ALT + F10 para compilar (generar el archivo .Hex o hexadecimal con código de máquina 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 función F5). El sistema le pedirá guardar un archivo con la configuración de los cambios, guárdelo en C:/mis documentos, no en la propia carpeta que acaba de crear en el directorio raíz.

Page 28: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

28 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

ACTIVACION Y DESACTIVACION DEL SIMULADOR MPLAB - SIM

La activación 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 continuación. No se recomienda tenerlo activado si no piensa simular un programa.

Page 29: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

29 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

CONFIGURACIÓN DE RESOLUCIÓN DE PANTALLA

La resolución de pantalla óptima es 1024 x 768 a 32 bit, configúrese en el escritorio de windows, dando click derecho y seleccionado propiedades:

Page 30: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

30 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

CREACION DE UN PROYECTO LPM²: QUINTO Y ULTIMO PASO

Identifique los 11 bloques (BLOQUE 0 A BLOQUE 10) de programación modular en el formato general y no elimine ningún renglón, todos los bloques tienen un inicio y un final claramente visible.

Page 31: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

31 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

Para buscar una línea del programa digite CONTROL G y digite el número de la llínea seguido de la tecla enter:

Para pasar uno ó más renglones a mayúscula (Uppercase), minúscula (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.

Page 32: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

32 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

BLOQUES DEL FORMATO GENERAL EN UN PROYECTO LPM² El modelo de programación modular es muy sencillo, lógico e intuitivo, en pocas horas se adquiere la destreza en la implementación de complejas e intrincadas aplicaciones que de otro modo implicaría una considerable inversión de tiempo. LPM² comprende once (11) bloques (BK0 a BK10) en el archivo “Formato Gral.asm”, el usuario debe familiarizarse con la función de cada bloque y respetar la sintaxis de programación en cada uno.

BLOQUE 9

BLOQUE 8

BLOQUE 7

BLOQUE 6

BLOQUE 5

BLOQUE 4

BLOQUE 3

BLOQUE 2

BLOQUE 1

Edición de Información general del proyecto Selección del cristal oscilador (XTAL) Configuración de Brown Out Reset (BOR) Configuración de Wath Dog Timer (WDT) Configuración del Code Protect

Activación (SI) y Desactivación (NO) de módulos, interrupciones, periféricos y funciones requeridas en el proyecto

Asignación de Pines de control de periféricos activados en bloque 1 Configuración de módulos activados en bloque 1

Declaración de variables tipo Byte (máximo 868) Declaración de variables tipo Word (máximo 128)

Definición de constantes Declaración de Banderas (Flags) Declaración 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) Configuración manual de registros especiales (SFR) Definición y asignación de pines de entrada o salida no declarados en bloque 1 y 2

Acciones iniciales del programa al energizar o resetear el PIC Inicialización de Puertos, periféricos, variables, banderas, contadores Mensajes y efectos de bienvenida en LCD ó ISD Activación / Desactivación inicial del WATCH DOG TIMER Activación / Desactivación inicial del PULL UP interno del puerto B Activación / Desactivación inicial de PRIORIDAD DE INTERRUPCIONES Activación / Desactivación inicial de INTERRUPCIONES EN ALTA PRIORIDAD Activación / Desactivación inicial de INTERRUPCIONES EN BAJA PRIORIDAD

BLOQUE 0

Main Program (Programa principal). Activación/desactivación del método SLEEP (ahorro de energía por Stand By) Implementación de técnica POLLING (sensado cíclico de entradas)

Control automático de interrupciones activadas en bloque 1

Desarrollo de subrutinas del programa de usuario Desarrollo de tablas en memoria de programa

BLOQUE 10 Escritura inicial en la memoria EEPROM de dato (256 direcciones x 8 bit) Fin del Programa

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

Page 33: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

33 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PROGRAMACION EN BLOQUE 0 INFORMACION GENERAL

Y CONFIGURACIÓNES ESPECIALES DEL MICROCONTROLADOR

El bloque cero de LPM² comprende desde el primer renglón del formato general hasta el inicio del bloque 1, está compuesto por más de 5000 líneas de comentario (en color verde e inician con punto y coma). En la línea 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 información solicitada en el bloque 0 del formato general de LPM².

La selección del cristal de oscilación constituye la primera configuración en el editor MPLAB sobre el formato general, en la línea 5202 (esta línea puede ser diferente). Se puede seleccionar entre 4, 8, 10, 16, 20 ó 40 MHz, en la imagen se ilustra la selección de un cristal de 20MHz. Se recomienda trabajar con una frecuencia de oscilación igual a 20MHZ, el ciclo de máquina (tiempo que emplea el PIC por cada instrucción o renglón del programa) equivale a 200nSeg (CM=4/20MHz). La familia de la gama alta de microcontroladores microchip (18F) tiene la opción de activar un circuito PLL (phase locked loop) el cual multiplica por 4 la frecuencia de oscilación natural del cristal físico que se conecte en el circuito, es decir, para que el PIC trabaje a 40MHz sólo es necesario conectar un cristal de 10MHz y activar el módulo PLL por

Page 34: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

34 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

software, esto lo hace automáticamente el sistema de programación modular cuando configuramos la opción OSCILADOR_40MHZ. Para cualquier otra frecuencia menor de 40 MHz se debe colocar el respectivo cristal en el hardware del circuito y desactivar la opción PLL; esto también lo hace automáticamente el sistema modular, de esta forma si deseamos colocar un cristal de 20MHz, sólo configuramos la opción de la siguiente forma OSCILADOR_20MHZ e insertamos un cristal de 20MHz en el circuito. Una desventaja de activar el módulo PLL es que el µC consume aproximadamente 20mA mientras el cristal esté oscilando, en contraste con los 2 mA que consumiría con el módulo PLL desactivado y oscilando a la frecuencia natural del cristal, esto es especialmente importante cuando el circuito es alimentado con batería.

Page 35: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

35 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

Page 36: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

36 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PROGRAMACIÓN EN EL BLOQUE 1 DE LPM² (BLOQUE1)

ACTIVACION / DESACTIVACION DE MODULOS

En este bloque se activan (SI) o desactivan (NO), los módulos funcionales según el requerimiento de cada aplicación. La expresión “SI” en frente de un módulo implica que todas las macros y subrutinas de dicho módulos estarán disponibles en los bloques consecutivos. Por ejemplo, si se desea activar la interrupción del Timer0 (TMR0) en alta prioridad es necesario activar (SI) el módulo INTERRUPCION_HP_TMR0 como se aprecia en la siguiente figura.

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

Page 37: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

37 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

1. INTERRUPCION_HP_PTB7_FL : Interrupción de alta prioridad (HP) por flanco de bajada en PTB7 2. INTERRUPCION_HP_PTB7_FH : Interrupción de alta prioridad (HP) por flanco de subida en PTB7 3. INTERRUPCION_LP_PTB7_FL : Interrupción de baja prioridad (LP) por flanco de bajada en PTB7 4. INTERRUPCION_LP_PTB7_FH : Interrupción de baja prioridad (LP) por flanco de subida en PTB7 FUENTE DE INTERRUPCIÓN EXTERNA: Son pines del microcontrolador configurados como entrada que al cumplirse una determinada condición (flanco de subida/bajada) generan un salto de interrupción. (PTB0, PTB1, PTB2, PTB4, PTB5, PTB6, PTB7, RA4_T0CKI) FUENTE DE INTERRUPCIÓN INTERNA: Son recursos internos del microcontrolador mediante los cuales se genera un salto de interrupción. Por ejemplo: CONVERSOR A/D, TIMER0, TIMER1, TIMER2, USB, PWM, EEPROM. Nota1: No se permite la activación de dos prioridades simultáneamente para una misma fuente de interrupción. Nota2: La interrupción por los pines PTB0, PTB1 y PTB2 NO ADMITE la activación de dos flancos simultáneamente. Por ejemplo, no sería correcta la siguiente configuración en el bloque 1:

Nota3: La interrupción por los pines PTB4, PTB5, PTB6 Y PTB7 SI ADMITE la activación de dos flancos simultáneamente. Nota4: El puerto PTB0 sólo tiene disponible interrupción en alta prioridad con flanco de bajada o subida.

Page 38: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

38 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PROGRAMACIÓN EN EL BLOQUE 2 DE LPM² (BLOQUE2)

CONFIGURACIÓN DE MÓDULOS Y ASIGNACIÓN DE PINES DE CONTROL

En este bloque se configuran los módulos TIMER0, TIMER1, PWM, UART RS232, CONVERSOR A/D, INFRAROJO, ISD 25XXX, etc. También se asignan los pines de control de aquellos módulos que lo requieran, por ejemplo: LCD, TECLADO MATRICIAL 4X4, ISD 25XXX, DISPLAY DE 7 SEGMENTOS, etc. Cabe destacar que algunos módulos no tienen la opción de configurar o escoger todos sus pines de control, por ejemplo, los módulos TECLADO PS2 DE COMPUTADORA, RECEPTOR INFRA ROJO, TRANSMISIÓN UART RS232, CONVERSOR CAD y PWM tienen predefinidos parcial o totalmente los pines de control respectivos, la razón de ello radica en la particularidad y funcionalidad de los pines seleccionados, por ejemplo: el módulo teclado PS2 de computadora requiere un pin de entrada del PIC con interrupción, si se diera la libertad al usuario de escoger los pines de control se corre el riesgo de confusión o error en la selección, por todas estas razones los desarrolladores de LPM² optaron por pre-asignar los pines de control para ciertos módulos. Nota: El pin PTA4 tiene salida de drenador abierto (Open Drain OutPut), lo cual implica que cuando se configure como salida sólo podrá enviar 0 lógicos, nunca saldrá 1 lógico 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 algún módulo. Como norma general no asigne el pin PTA4 a algún módulo como salida si tiene la opción de utilizar cualquier otro pin. Si no tiene otra opción, entonces debe conectar un Pull UP externo (1k aproximadamente) a PTA4 para usarlo como salida.

Page 39: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

39 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Page 40: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

40 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PROGRAMACIÓN EN EL BLOQUE 3 DE LPM² (BLOQUE3) DECLARACIÓN DE VARIABLES RAM DEL PROGRAMA DE USUARIO

La declaración de variables de 8 ó 16bits tiene lugar en este bloque. Pese a disponer de 1536 variables de 8 bit, el “core” (núcleo) 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 ;BANCO2 : 512 TO 767 :VARIABLES EXCLUSIVAS LPM² : 256 BYTE ;BANCO3 : 768 TO 1023 :VARIABLES 8BIT PARA USUARIO : 256 BYTE ;BANCO4 : 1024 TO 1279 :VARIABLES 8BIT PARA USUARIO : 256 BYTE ;BANCO5 : 1280 TO 1535 :VARIABLES 8BIT PARA USUARIO : 256 BYTE ;BANCO15 : 3968 TO 4095 :REGISTRO FUNCIONES ESPECIALES (FSR) : 128 BYTE ;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.294’967.296 : VAR3, VAR4

Page 41: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

41 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Las variables declaradas de la dirección 0 a la dirección 99 (100 bytes) son tipo bytes u 8 bits, es decir, se puede guardar máximo un dato de 0 a 255, VAR1, DIGITO1 y REG0 son ejemplos de variables declaradas tipo byte. Las direcciones 768 a 1535 (768 Bytes) también están reservadas para variables tipo byte, por ejemplo: VAR5, VAR6, REG3. Las variables declaradas de la dirección 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 además debe escribirse :2 después del nombre de la variable, por ejemplo VAR3:2. El 2 indica el número de bytes que componen la variable, en efecto, una variable tipo byte también podría declararse como VAR1:1. En ciertas aplicaciones en las cuales se requiera direccionamiento indirecto (técnica de programación mediante la cual accedemos al contenido de una variable mediante su número de dirección en memoria y no a través de un nombre con el método tradicional del CBLOCK) es de utilidad declarar una o más variables en una dirección específica de la RAM. Por ejemplo: si el usuario necesita declarar 200 variables tipo byte en las direcciones 1000 a 1199 podría pegar el siguiente código al inicio del bloque 3 de LPM²:

Page 42: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

42 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PROGRAMACIÓN EN EL BLOQUE 4 DE LPM² (BLOQUE4) DECLARACION DE CONSTANTES, DEFINICION DE BANDERAS (FLAGS) Y MACROS EXTRAS

DEL PROGRAMA DE USUARIO

La programación en este bloque es opcional, sólo persigue facilitar la programación mediante asignar nombres propios a constantes, banderas (flags) o macros del programa. Una CONSTANTE es una expresión que no cambia su valor en todo el código 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 ;constante Decimal CARÁCTER= “A” ;constante Ascii MAXIMO = H’4A5F’ ;constante Hexadecimal MAXIMO = B’00011100’ ;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 podría verse como una variable booleana (sólo 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 diseñador y usualmente su significado está relacionado con la función que cumplirá en el programa. Por ejemplo, si se está diseñando una alarma y se desea dejar constancia (para posteriores verificaciones) que la alarma está activada, podría 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, automáticamente se insertarán los tres renglones que componen la macro. Nótese que una macro es diferente a una subrutina la cual se invoca con CALL y se regresa con RETURN.

Page 43: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

43 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PROGRAMACIÓN EN EL BLOQUE 5 DE LPM²

CONFIGURACIÓN MANUAL DE PUERTOS, REGISTROS ESPECIALES (SFR), ASIGNACION Y CONFIGURACIÓN MANUAL DE PINES DE ENTRADA/SALIDA

En este bloque se ofrece la posibilidad al usuario de realizar una configuración manual y personalizada (custom) de los puertos y registros especiales (SFR) del PIC. Los pines que un MÓDULO DE LPM² requiera como entrada o salida se configuran automáticamente. Por ejemplo, si en el bloque 1 se activo la interrupción PTB0 no es necesario que el usuario configure manualmente el pin PTB0 como entrada. No obstante, si el usuario requiere un grupo de pines (más de 1 pin) como entrada o salida y dicha función no está implementada como un módulo específico, 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 línea 604 de la siguiente figura se aprecia que los 4 bit externos ingresarán al microcontrolador mediante los últimos 4 bit del puerto C (1 entrada, 0 salidas). Si lo que se requiere es la conexión de un periférico de entrada o salida de un solo pin (por ejemplo un led, relé, sensor digital on/off, etc) la configuración se realiza con las MACROS ENTRADA, SALIDA de LPM². Por ejemplo, en la línea 623 y 624 se aprecia la declaración y configuración de una entrada llamada SENSOR_PUERTA por el pin PTB0. La macro ENTRADA automáticamente configura PTB0 como entrada y asigna el nombre SENSOR_PUERTA para este pin, es decir, de esta línea del programa en adelante puede aludirse a PTB0 con el nombre SENSOR_PUERTA y el compilador así lo interpretará. En la línea 625 se realiza la declaración y configuración de la salida LED_POWER al pin PTE0. La macro SALIDA automáticamente configura PTE0 como salida, inicia el pin en cero lógico 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 código es: ON LED_POWER.

Page 44: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

44 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

En la figura anterior se observa la configuración por defecto (default setting) del registro ADCON1 (línea 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 analógicas. Si la aplicación se diseña en su totalidad con los módulos de programación modular entonces no es necesario programar en el bloque 5 de configuración 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 módulo activo en el bloque 1 entonces prevalecerá la configuración automática establecida en el bloque 2 sobre la configuración 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 analógica y 7 digitales (A1_D7) entonces esta configuración prevalecerá sobre cualquier modificación que el usuario establezca manualmente en el registro ADCON0 Y ADCON1 del bloque 5. Cabe destacar que si no se activa el módulo CONVERSOR CAD todos los pines del puerto A y E están 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 están configurados por defecto en el bloque 5 como entradas digitales.

Page 45: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

45 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PROGRAMACIÓN 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á (sólo 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 sólo estarán disponibles funcionalmente al salir del bloque 6, se habilitan mediante la macro "ACT_INT_HIGHP" Y "ACT_INT_LOWP". Por ejemplo, si la aplicación 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 B’11110000’ se programaría el bloque 6 de la siguiente forma:

Observe que además de garantizar un estado en en puerto C (PTC) inicialmente, también se resetea la variable VAR1, se envía el mensaje “BIENVENIDOS A LPM²” al LCD y se reproduce el mensaje 1 en modo interrumpido (MI) del ISD 25XXX; todo esto sólo sucederá una vez, es decir, al energizar o resetear el microcontrolador. En el recuadro azul de la ilustración anterior se observan 5 renglones (línea 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)

Page 46: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

46 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PROGRAMACIÓN EN EL BLOQUE 7 DE LPM² DESARROLLO DEL PROGRAMA PRINCIPAL (MAIN PROGRAM)

Aquí se desarrolla el programa principal del usuario después de la etiqueta MAIN_PROG. Por ejemplo, si se requiere aplicar el método polling (sensado cíclico 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 interrupción. Si se desea que el PIC entre en modo STAND BY (bajo consumo de energía alrededor de 200nA) se debe digitar la instrucción SLEEP justo antes de la instrucción “BRA MAIN PROG” y después de la etiqueta MAIN PROG.

Page 47: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

47 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PROGRAMACIÓN EN EL BLOQUE 8 DE LPM² CONTROL AUTOMATICO DE INTERRUPCIONES DE ALTA Y BAJA PRIORIDAD

Es quizá el bloque más importante considerando que aquí se lleva a cabo la selección y asignación de funciones dependiendo del evento de interrupción. Al desencadenarse una interrupción interna o externa, de alta o baja prioridad (dependiendo de la configuración en el bloque 1), el puntero de programa (pointer program) llegará automáticamente a la etiqueta de la interrupción respectiva. Diversas fuentes de interrupción externa e internas son detectadas automáticamente en el bloque 8. A continuación se muestra una aplicación en la cual se conmuta el estado de un led en PTA0 (LED_STATE) por 7 fuentes distintas de interrupción: 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 interrupción UART RS232 4. ORG15_INT_1_IR: Cuando el PIC recibe la tecla grabada en la posición 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 línea Telefónica.

Note el uso de la macro OUT_IF para terminar un ciclo de comparación con la macro IF y el uso de la macro OUT_INT la cual es imprescindible para salir de cada fuente de interrupción. El gestor automático de interrupciones de LPM² controla los bit de habilitación y banderas de cada interrupción.

Page 48: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

48 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PROGRAMACIÓN 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 código de assembler que será cargado en la memoria de programa del PIC. Recuerde que las tablas no tienen limitación alguna en su extensión (hasta completar la memoria de programa disponible).

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

Page 49: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

49 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PROGRAMACIÓN EN EL BLOQUE 10 DE LPM² ESCRITURA EN LA MEMORIA EEPROM DE DATO EN TIEMPO DE DISEÑO

En este bloque se escriben los datos predefinidos en la memoria EEPROM de dato del PIC en el momento de cargar el código mediante el hardware cargador. Recuerde que sólo hay disponible 256 direcciones de 8 bit de datos. En el ejemplo de la siguiente figura se guardan datos en el siguiente orden: Dirección 0: Código ASCII de la letra A Dirección 1: Código ASCII de la letra B Dirección 2: Código ASCII de la letra C Dirección 3: Número 1 en decimal Dirección 4: Número 200 en decimal

El bloque 10 es el último bloque del modelo de programación modular, está seguido de la directiva END que indica el fin total del programa.

Page 50: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

50 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

COMPILACIÓN EXITOSA DE UN PROYECTO LPM² Presionando la tecla F5 se compila (generación del archivo .HEX hexadecima) mediante el aplicativo MPASM de microchip. La siguiente pantalla debe aparecer con cero errores, cero warnings (advertencias) y 2 mensajes.

Page 51: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

51 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

INSTALACION DEL APLICATIVO SOFTWARE LIBRE CARGADOR DE CODIGO EN MICROCONTROLADORES

WINPIC 800

Page 52: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

52 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

CONFIGURACIÓN DE WINPIC 800 A HARDWARE JDM Dé clic en el icono señalado por el círculo rojo

Page 53: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

53 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

DETECCIÓN AUTOMÁTICA DE MICROCONTROLADOR Dé clic en el icono señalado por el círculo rojo

Page 54: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

54 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

IMPORTACION DE ARCHIVO .HEX A CARGAR EN EL PIC Dé clic en el icono señalado por el círculo rojo

CARGAR (DOWNLOAD léase daunloud) CODIGO HEXADECIMAL EN PIC

Dé clic en el icono señalado por el círculo rojo

Page 55: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

55 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

VERIFICACION DE CODIGO EN MEMORIA DE PROGRAMA DEL PIC Dé clic en el icono señalado por el círculo rojo

LECTURA (UPLOAD léase aploud) DE CODIGO HEXADECIMA DEL PIC

Dé clic en el icono señalado por el círculo rojo

Page 56: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

56 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

BORRADO (ERASER) DE MEMORIA DE PROGRAMA DEL PIC Dé clic en el icono señalado por el círculo rojo

MEMORIA DE DATO EEPROM DEL PIC Dé clic en el icono señalado por el círculo rojo

Page 57: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

57 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

BIT`S DE CONFIGURACIÓN DEL PIC Dé clic en el icono señalado por el círculo rojo

Page 58: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

58 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

INFORMACION GENERAL DE LPM² 1. Esta versión de LPM² solo es compatible con el microcontrolador 18F 242/252/442/452, no obstante, debe tener en cuenta la limitación en número 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 máximo de prestaciones de LPM². LPM² sólo 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 físico) y el usuario debe insertar un xtal de 10MHz en el circuito.

2. Programar siempre con mayuscula fija, los comentarios están 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 numérico ni debe exceder 45 caracteres alfanuméricos. Si un comentario, macro o instrucción se torna de color negro es indicacion que en dicha línea o renglón se digitó un caracter inválido, elimine toda la línea y vuelva a digitarla pues algunos caracteres inválidos no tiene representación gráfica de manera que el usuario no puede percibir su presencia pero el programa ensamblador "MPASM" genera error o warning.

3. Configuración del editor MPLAB 7.10: (Se recomienda trabajar con esta versión)

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 -> configuración -> 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 configuración del pic 18fxx2, de lo contrario la simulacion se reseteara automaticamente por watchdog timer.

5. No se permite la activación de las dos prioridades simultáneamente para una misma fuente de interrupción en el bloque 1.

6: La interrupción ptb0, ptb1 y ptb2 no admite la activacion de dos flancos simultáneamente. 7: La interrupción ptb4, ptb5, ptb6 y ptb7 si admite la activación de dos flancos simultáneamente 8. El puerto ptb0 sólo tiene disponible interrupción en alta prioridad.

Page 59: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

59 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

9. En LPM² y assembler se programa con base en columnas y están separadas por tabulación 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 (mnemónicos 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 línea, inician con punto y coma () 14. Las etiquetas, macros y argumentos son de color rojo carmesi. Se sugiere llamar las etiquetas según la funcion y el bloque en que se encuentren.

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 módulo 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 línea. Por ejemplo,para saltar a la linea 2000 escriba este número 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", (léase biold saccirid) de lo contrario mostrará el mensaje "FAILLED BUILD" (léase 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 renglón anterior o posterior después de una macro, pues el usuario no tiene conocimiento de cuántas 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 generación del archivo .HEX (codigo de máquina 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 podría interpretar los argumentos de un comando o macro de una forma inesperada para el usuario.

22. La configuración automatica que realizan los modulos de LPM² sobre los registros especiales SFR del pic tiene prioridad sobre la configuración manual que realice el usuario en el bloque 5. 23. Tener precaución al invocar un mismo módulo o periférico en baja y alta prioridad simultáneamente, 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 debería escribir en la lcd desde la alta prioridad pues interrumpiría 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 número de memoria de programa consumido en un programa primero debe compilar exitosamente para obtener el archivo ".hex" con la tecla F5. A continuación diríjase a: menu view -> program memory, desplácese 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.

Page 60: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

60 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

25. La memoria de programa disponible del pic 18F452 es de 16384 words, es decir, que el usuario puede digitar hasta 16384 líneas o renglones si programa exclusivamene en lenguaje ensamblador. Sin embargo, considerando que cada comando o macro de LPM² puede incluir una o más instrucciones de assembler entonces si el usuario emplea macros de LPM² el número total de líneas 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 automáticos de LPM² pueden requerir una o más variables entonces si el usuario emplea macros o módulos de LPM² el número total de variables disponibles para el programador se reducen según la clasificacion expuesta en la cabecera del bloque 3.

27. Se recomienda emplear el programador "JDM SERIAL" o un PROGRAMADOR USB GENÉRICO para cargar el codigo de máquina 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 debería 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 temporización debería 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 debería 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 debería 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 instrucción de assembler llamada "CALL". Sin embargo existe otra instrucción llamada "RCALL" (relative call) la cual consume menos memoria de programa (sólo 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 invocación. 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 invocación de subrutina.

33. El salto a una etiqueta se puede realizar con la instrucción de assembler llamada "GOTO". Sin embargo, existe otra instrucción llamada "BRA" (BRANCH) la cual consume menos memoria de programa (sólo 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 módulos, excepto los módulos 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 algún módulo en el bloque 2, en tal caso tenga la debida precaución en el programa.

36. Si el programa ensamblador "MPASM" detecta un error en una macro o instrucción 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 línea del error en cuestion, elimínela y vuelva a escribirla. Muchas veces el usuario inserta el caracter (alt 255) con el teclado numérico, é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.

Page 61: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

61 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 número o constante, entonces el ensamblador "mpasm" no genera error e interpreta el comando como si el número o constante representara la dirección de la variable. Por ejemplo, si en el bloque 3 el usuario declaró la variable VAR1 en la dirección 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 dirección de la variable representara el valor de la constante: por ejemplo, si en el bloque 3 el usuario declaró var1 en la dirección 4 entonces MOVLF VAR1,VAR2 ;significa mueva la dirección 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 instrucción CALL ó RCALL de assembler y se retorna con la instrucción RETURN de assembler.

41. Una interrupción 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 sólo se puede emplear como argumento en una macro de comparación IF en el bloque 8. Constituye un error de desbordamiento de pila (overflow stack) el emplear OUT_IF como argumento en una comparación 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 corrección pues es posible que los errores o warnings subsiguientes se solucionen con la corrección del error o warning anterior. dé doble clik sobre el error o warning y el editor mplab ide indicará el renglón relacionado con el error. tenga precaución 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 continuación 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 ACTIVACIÓN DE: ...

45. Los mensajes (message) despues de una compilacion no implican error o advertencia, son principalmente informativos o sugerencias.

Page 62: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

62 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 según el formato establecido anteriormente da lugar a una infracción. 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 esquemáticos y board se pueden diseñar en orcad u otro programa de diseño asistido por computador. La nota obtenida es grupal, no obstante, la nota de la sustentación es individual.

1. Simulacion del circuito en proteus (traer plano impreso) (vr 0.5 p) 2. PLANOtico en eagle u orcad con descripcion y valor de componentes (vr 0.25 p) 3. Diseño de board en eagle u orcad con descripcion y valor de componentes (vr 0.25 p) 4. Presentacion del hardware funcionando al 100% (vr 1.0 p) 5. Sustentacion de software y hardware (vr 3.0 p)

METODOLOGÍA DE SUSTENTACION DEL PROYECTO 1. Todo proyecto consta de funciones u opciones explícitas 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 satisfacción de la respuesta.

3. El puntaje máximo en la sustentación es de 3 puntos. 4. El docente preguntará cualquier aspecto del software o hardware realizado por los diseñadores. Las preguntas se tomaran de la temática 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 máximo de sustentación por grupo es de 20 minutos a menos que el docente indique lo contrario. 6. Cuando en diferentes proyectos se cometa la misma infracción, la sanción es el doble por cada nuevo proyecto.

Page 63: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

63 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

INFRACCIONES EN PRESENTACION DE UN PROYECTO Cada infraccion vale 1 décima (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 día 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 imprecisión en los planos, error en los PLANOs o ausencia de referencia comercial de los elementos o dispositivos da lugar a una infracción.

3. El no presentar el cd-rom con los archivos del proyecto da lugar a una infraccion. 4. La presentaciòn del proyecto en un formato u organizacion diferente a la estipulada da lugar a una infracción.

5. La ausencia de comentario en el codigo fuente digitado por el diseñador da lugar a una infracción por cada línea

7. La ausencia del (led_power) led indicador de power (alimentación de +5vdc del circuito) da lugar a una infracción.

8. La ausencia del (led_state) led indicador de estado del pic da lugar a una infracción. 9. Cada conductor descubierto con posibilidad de shock eléctrico al usuario o corto en el circuito da lugar a una infracción

10. Cada led sin resistencia limitadora (220 a 2k) da lugar a una infracción. 11. Cada rele sin su debida etapa de potencia, diodo protector contra corrientes inversas o sin led piloto indicador de estado genera una infracción.

12. Las conductores de tierra (gnd) deben ser todos del mismo color (negro, blanco, gris) cada conductor con color erróneo genera una infracción.

13. Las conductores de +vcc, +vdd = 5v deben ser todos del mismo color (rojo, naranja) cada conductor con color erróneo genera una infracción.

14. Las conductores de +vcc = 12v deben ser todos del mismo color (amarillo) cada conductor con color erróneo genera una infracción.

15. Las conductores de conexion entre perifericos del circuito pueden tener distintos colores dependiendo del periférico (verde, azul,blanco/azul, blanco/verde, etc) cada conductor con color erróneo genera una infracción.

16. Cristal, condensador de estabilización o bypass lejanos (más de 1 cm) al circuito integrado que lo requiere. Cada caso genera una infracción.

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 disposición u orientación con respecto a un observador. cada caso genera una infraccción.

19. Fuente sin regulador de voltaje a 5 voltios da lugar a una infraccion. 20. Fuente sin tabulación de voltaje y corriente de cada una de sus terminales. Cada caso genera una infraccción.

21. El no usar las líneas verticales del protoboard para los terminales de alimentación +vcc, gnd genera una infracción

22. Cada puente o conexión en el protoboard con conductores cruzados formando ángulos diferentes a 0 ó 90 grados, demasiado largo o demasiado corto da lugar a una infracción.

Page 64: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

64 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

23. Una presentación general de hardware sin estética o desordenada da lugar a una infraccion.

24. Cada mensaje de un isd con bajo volumen o audio tan distorsionado que no se pueda percibir o discernir su mensaje da lugar a una infraccion.

25. El no llevar un hardware cargador de codigo en microcontroladores (jdm por ejemplo) a la sustentación del proyecto da lugar a una infracción.

26. La ausencia de fuente de alimentación, extensión eléctrica multitoma, elemento o dispositivo de hardware propio del proyecto en el momento de la sustentación da lugar a una infracción.

27. La no implementación cabal u operación incorrecta de alguna función del proyecto estipulada por el docente, da lugar a una sanción equivalente a 5 puntos entre el número total de funciones asignadas inicialmente por el docente . Por ejemplo si el docente asigno 10 funciones para un proyecto entonces la sanción 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 infracción 29. Dispositivos o elemetos electronicos con terminales exageradamente largos pueden causar efecto antena (mayor susceptibilidad al ruido electromagnético),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 infraccción.

30. Cada uno de los conductores, alambres o puentes de protoboard por encima o debajo de circuitos integrados genera una infracción.

31. Fuente sin switch general de encendido o con terminales al aire con la posibilidad de corto circuito genera una infracción.

32. Cada error ortográfico en el texto digitado en el formato general por parte de los diseñadores genera una sancion de 0.2 décimas, es decir, cada 5 errores ortográficos da lugar a una infracción.

33. Grupo de trabajo sin razón social, nombre de empresa, estructura jerárquica (presidente, gerente financiero, gerente técnico) da lugar a una infraccion.

34. Da lugar a infracción 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 técnico, 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 sustentación.

Page 65: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

65 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

F O R M A S D E S U B I R L A N O T A Si los diseñadores implementan una opcion o funcion extra al hardware o software de talForma que mejore las prestaciones del proyecto entonces subirá en dos décimas la notaFinal del grupo por cada aspecto mejorado. Entiéndase funcion extra como adiciones que realizan de manera voluntaria los diseñadores a las exigencias o funciones que inicialmente estipuló el docente. En todo caso el grado de mejoramiento de un proyecto es una consideración 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. Reducción de precio del hardware en mas del 20% 2. Reducción del consumo de potencia del hardware en mas del 20% 3. Reduccion de memoria de programa del microcontrolador en mas del 20% 4. Reduccion de memoria de dato del microcontrolador en mas del 20% 5. 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 garantía del hardware mediante la selección o diseño meticuloso de los elememtos que lo integran en mas del 50%.

8. Aumento de posibilidades comerciales mediante la implementación de opciones especificas a una aplicación 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 podría implementarse.

Page 66: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

66 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

S O L U C I Ó N D E P R O B L E M A S D E H A R D W A R E FUENTE DE ALIMENTACION EN MAL ESTADO: verifique con un voltimetro en el protoboard o circuito impreso que la tensión 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. También 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 generación de código máquina y por lo tanto es imprescindible corregirlos para poder continuar. los errores más habituales son:

- 101: (ERROR)--> ERROR DEFINIDO POR LPM². se genera por las siguientes causas: 1: al activar un mismo modulo en dos prioridades simultáneamente 2: por no activar un módulo necesario en el bloque 1 3: por activar dos módulos que empleen los mismos puertos del pic

- 102: (OUT OF MEMORY)--> Excedió el número 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 --> NÚMERO INVÁLIDO, LOS NÚMEROS VÁLIDOS SON 0-1 PARA BINARIOS, 0-7 PARA OCTAL, 0-9 PARA DECIMAL, 0-9, A-F PARA HEXADECIMAL.

- 108: ILLEGAL CHARACTER --> CARACTER INVÁLIDO EN UNA ETIQUETA O UNA VARIABLE. LAS ETIQUETAS O VARIABLES SE DEBEN DEFINIR CON LETRAS DE LA A - Z Y NÚMEROS 0-9, PUEDE EMPLEAR UNDERLINE (_). DEBEN EMPEZAR POR UNA LETRA.

- 109: UNMATCHED ( --> ABRIO PARENTESIS Y NO CERRÓ PARÉNTESIS. - 110: UNMATCHED ) --> CERRÓ PARÉNTESIS SIN ABRIRLO. - 113: SYMBOL NOT PREVIOUSLY DEFINED --> USO UNA VARIABLE O CONSTANTE SIN DEFINIRLA

Page 67: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

67 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 INSTRUCCIÓN DE ASSEMBLER MAL ESCRITA. - 126: ARGUMENT OUT OF RANGE --> USO UNA MACRO O INSTRUCCÍON 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 INSTRUCCIÓN CON MÁS ARGUMENTOS DE LOS REQUERIDOS. - 128: MISSING ARGUMENT(S) --> MACRO O INSTRUCCIÓN CON MENSO ARGUMENTOS DE LOS REQUERIDOS. - 173: SOURCE FILE PATH EXCEEDS 62 CHARACTERS --> LA RUTA DEL ARCHIVO FORMATO GRAL.ASM ES DEMASIADO EXTENSA, MÁXIMO 62 CARACTERES.

SIGNIFICADO DE WARNINGS DEL COMPILADOR MPASM Advertencias (warning). estos mensajes no impiden la obtención del archivo hexadecimal, pero advierten de algo que al ensamblador le parece extraño. 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 NÚMERO DE 16 BIT EN LUGAR DE 8 BIT

- 203, 206: FOUND OPCODE IN COLUMN 1 --> ESCRIBIÓ UNA MACRO O INSTRUCCIÓN 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 instrucción o macro.

- 208: LABEL TRUNCATED AT 32 CHARACTERS --> ETIQUETA O VARIABLE DEMASIADO EXTENSA (MAX 32 CARACTERES) - 209: MISSING QUOTE --> LE FALTA EL APÓSTROFO O COMILLA A UNA CONSTANTE BINARIA O ASCCI. - 210: EXTRA "," --> DIGITÓ UNA COMA DE MAS. - 211: EXTRANEOUS ARGUMENTS ON THE LINE --> ARGUMENTOS EXTRAÑOS - 214: UNMATCHED ( --> SE ESPERABA USO DE PARÉNTESIS - 219, 220, 228: INVALID RAM LOCATION SPECIFIED --> DECLARÓ UNA VARIABLE EN UNA DIRECCION INVÁLIDA

SIGNIFICADO DE LOS MENSAJES DEL COMPILADOR MPASM MENSAJES (MESSAGE- meseich): no impiden la obtención de código de máquina .hex y añaden información adicional. - 301: MESSAGE --> mensaje de LPM2 - 302: REGISTER IN OPERAND NOT IN BANK 0 --> en assembler usó variable que no esta en banco 0

Page 68: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

68 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

- 305: USING DEFAULT DESTINATION OF 1 (FILE) --> Algunas instrucciones de assembler que operan con registros que necesitan como dato el destino, es decir, dónde se quiere almacenar el resultado de la operación que realiza la instrucción. El destino es un solo bit y por tanto sólo 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 instrucción (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 había trabajado.

TIPOS DE DATOS SEGÚN 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.294’967.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 número o constante es interpretado en base 10, por ej: si el usuario escribe MOVLF 32,VAR1 se interpretará como el número 32 en base 10 y no h'20' en hexadecimal.

CONVENCION DE SIMBOLOS PARA INSTRUCCIONES O COMANDOS DE ASSEMBLER

S I M B O L O : S I G N I F I C A D O F8 :REGISTRO O VARIABLE DE 8 BIT D :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

Page 69: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

69 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

INSTRUCCIONES MNEMONICOS O COMANDOS DE ASSEMBLER PARA REGISTROS ORIENTADOS A BYTES

Las instrucciones, mnemónicos o comandos de assembler se indicarán en MAYÚSCULA Y AZUL

NEGRILLA.

Los argumentos o parámetros y las etiquetas o label se indicarán en MAYÚSCULA Y ROJO SIN NEGRILLA.

Los comentarios se indicarán con minúscula 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 F8,D,A ;suma variable con w, guarda en f/w ADDWFC F8,D,A SUMA VARIABLE CON W Y CARRY Y GUARDA EN F/W ANDWF F8,D,A REALIZA OPERACION AND ENTRE F8 Y W, GUARDA EN F/W CLRF F8,A F8=0 COMF F8,D,A COMPLEMENTA O INVIERTE LOS 8 BIT DE F8, GUARDA EN F/W CPFSEQ F8,A SALTA UN RENGLÓN SI F8 = W CPFSGT F8,A SALTA UN RENGLÓN SI F8 > W CPFSLT F8,A SALTA UN RENGLÓN SI F8 < W DECF F8,D,A DECREMENTA EN 1 VALOR DE F8, GUARDA CAMBIO EN F/W DECFSZ F8,D,A DECREMENTA EN 1 VALOR DE F8 Y SALTA 1 RENGLON SI F8 = 0 DCFSNZ F8,D,A DECREMENTA EN 1 VALOR DE F8 Y SALTA 1 RENGLON SI F8 > 0 INCF F8,D,A INCREMENTA EN 1 VALOR DE F8, GUARDA CAMBIO EN F/W INCFSZ F8,D,A INCREMENTA EN 1 VALOR DE F8 Y SALTA 1 RENGLON SI F8 = 0 INFSNZ F8,D,A INCREMENTA EN 1 VALOR DE F8 Y SALTA 1 RENGLON SI F8 > 0 IORWF F8,D,A REALIZA OPERACION OR INCLUSIVA ENTRE F8 Y W, GUARDA EN F/W MOVF F8,A COPIA VALOR DE F8 EN W MOVFF F8,F8 COPIA VALOR DE VAR1 EN VAR2 MOVWF F8,A MUEVE EL VALOR DE W A F8 MULWF F8,A MULTIPLICA F8 x W Y GUARDA EN PRODH:PRODL NEGF F8,A NIEGA F8 CON COMPLEMENTO A 2 Y GUARDA EN F8 RLCF F8,D,A ROTA F8 A LA IZQUIERDA A TRAVÉS DE CARRY RLNCF F8,D,A ROTA F8 A LA IZQUIERDA A TRAVÉS DE SI MISMA SIN CARRY RRCF F8,D,A ROTA F8 A LA DERECHA A TRAVÉS DE CARRY RRNCF F8,D,A ROTA F8 A LA DERECHA A TRAVÉS DE SI MISMA SIN CARRY

Page 70: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

70 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

SETF F8,A F8 = 255 = B'11111111' SUBFWB F8,D,A RESTA F8-W CON ACARREO DE BIT CARRY DE STATUS SUBWF F8,D,A RESTA F8-W, GUARDA EN F/W SWAPF F8,D,A INVIERTE EL NIBBLE ALTO POR EL BAJO DE F8 TSTFSZ F8,A SALTA UN RENGLÓN SI F8 = 0 XORWF F8,D,A REALIZA OPERACION OR EXCLUSIVA ENTRE F8 Y W, GUARDA EN F/W

EJEMPLO MOVLW 5 ADDWF VAR1,F ;suma var1 con 5 y guarda en var1 SUBLWF VAR1,W ;resta var1 con 5 y guarda en w TSTFSZ VAR1 ;si var1 = 0 salta a label2, sino a label1 LABEL1 LABEL2

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

BCF F,B,A ;establece bit b de registro f en cero BSF F,B,A ESTABLECE BIT B DE REGISTRO F EN CERO BTFSC F,B,A SALTA SI BIT B DE REGISTRO F ESTA EN CERO BTFSS F,B,A SALTA SI BIT B DE REGISTRO F ESTA EN UNO BTG F,B,A INVIERTE ESTADO DEL BIT B DEL REGISTRO F

EJEMPLO ASSEEMBLER BSF PORTA,3 PTA3 = 1 BTG PORTC,6 INVIERTE PTC6 BTFSS PORTB,3 :SI PTB3 = 1 SALTA A LABEL2, SI NO EN LABEL1 LABEL1 LABEL2

INSTRUCCIONES O COMANDOS DE ASSEMBLER PARA CONTROL DE OPERACIONES

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

Page 71: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

71 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PUSH :GUARDAR POINTER PROGRAM EN PILA RCALL LABEL :LLAMADO DE SUBRUTINA MÁXIMO 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 L8 SUMA L8 CON W Y GUARDA EN W ANDLW L8 REALIZA OPERACION AND ENTRE L8 CON W Y GUARDA EN W IORLW L8 REALIZA OPERACION AND ENTRE L8 CON W Y GUARDA EN W LFSR FSRX,L12 X=0,1,2 CARGA DATO MEDIANTE DIRECCIONAMIENTO INDIRECTO INDF0 POSTINC0 POSTDEC0 MOVLB L4 MUEVE L4 A REGISTRO DE SELECCION DE BANCO BSR MOVLW L8 MUEVE CONSTANTE L8 A W MULLW L8 MULTIPLICA L8 x W Y GUARDA EN PRODH:PRODL RETLW L8 RETORNO DE LLAMADO DE SUBRUTINA POR CALL O RCALL CON W=L8 SUBLW L8 RESTA L8 - W Y GUARDA EN W XORLW L8 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 información del manejo de TABLAS TBLRD* TBLRD*+ TBLRD* TBLRD+* TBLWT* TBLWT*+ TBLWT*- TBLWT+*

Page 72: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

72 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

Las macros de lpm2 se indicarán en MAYÚSCULA Y AZUL NEGRILLA.

Los argumentos y etiquetas de lpm2 se indicarán en MAYÚSCULA Y ROJO SIN NEGRILLA.

Los comentarios se indicaran con minúscula y verde sin negrilla.

S I M B O L O : S I G N I F I C A D O 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(DÉCIMA 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

Page 73: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

73 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

MACROS DE CONFIGURACIÓN DE BIT DE REGISTRO ESPECIALES ACT_PRIO_INT :ACTIVAR PRIORIDAD DE INTERRUPCIONES DES_PRIO_INT :DESACTIVAR PRIORIDAD DE INTERRUPCIONES ACT_PULL_UP :ACTIVAR PULL UP DES_PULL_UP :DESACTIVAR PULL UP ACT_INT_GLOB :ACTIVAR INTERRUPCIONES GLOBALES DES_INT_GLOB :DESACTIVAR INTERRUPCIONES GLOBALES ACT_INT_HIGHP :ACTIVAR INTERRUPCIONES HIGH PRIORITY DES_INT_HIGHP :DESACTIVAR INTERRUPCIONES HIGH PRIORITY ACT_INT_LOWP :ACTIVAR INTERRUPCIONES LOWH PRIORITY DES_INT_LOWP :DESACTIVAR INTERRUPCIONES LOW PRIORITY ACT_PAEDIG :PUERTOS A Y E COMO I/O DIGITALES DES_PAEDIG :PUERTOS A Y E COMO I/O ANALOGAS ACT_WDT :ACTIVAR WATCH DOG TIMER DES_WDT :DESACTIVAR WATCH DOG TIMER OUT_INT :salida de int en control automatico de interrupciones (sólo en bloque 8) OUT_IF :salida de interrupción en comando de comparacion IF (sólo en bloque 8). Esta macro no puede emplearse si la interrupción se desencadenó por finalización 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 según la bandera activada.

BANCO L4 :selecciona banco de operacion (0 a 5)

MACROS DE CONFIGURACIÓN 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

Page 74: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

74 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

CONFIG_PIR1 L8 CONFIG_PIE2 L8 CONFIG_PIR2 L8 CONFIG_ADCON0 L8 CONFIG_ADCON1 L8

MACROS DE ACTIVACION / DESACTIVACION DE INTERRUPCIONES

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

Page 75: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

75 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

MACROS DE CONTROL DE FLANCOS DE SUBIDA Y BAJADA DE INTERRUPCIONES

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

MACROS DE CONTROL DE PRIORIDAD DE INTERRUPCIONES LPIB1 ;low priority en interrupción de ptb1 HPIB1 ;high priority en interrupción de ptb1 LPIB2 HPIB2 LPIB47 HPIB47 LPITMR0 HPITMR0 LPITMR1 HPITMR1 LPIRXUART

Page 76: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

76 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

HPIRXUART

MACROS DE REGISTRO STATUS MACROS ARGUMENTOS SET_N establece el bit n (neg de status) en 1 CLR_N establece el bit n (neg de status) en 0 IF_N1 LABEL si el bit n de status = 1 entonces salta el sig renglon sino salta a la etiqueta label

IF_N0 LABEL si el bit n de status = 0 entonces salta el sig renglon 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

Page 77: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

77 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

MACROS DE MOVIMIENTO DE DATOS ENTRE REGISTROS SIMBOLOGIA SIGNIFICADO PT : PORTA, PORTB, PORTC, PORTD O PORTE B15 A B0 : BIT 15 A BIT 0 DE UN REGISTRO O PUERTO F8/16 : VARIABLE DE 8 O 16 BIT TIPO BYTE O WORD (0 - 255 Ó 0 A 65535) F8 : VARIABLE DE 8 BIT TIPO BYTE (0 - 255) F16 : VARIABLE DE 16 BIT TIPO WORD (0 - 65535) L16 : CONSTANTE DE 8 O 16 BIT (0 - 255 Ó 0 A 65535) L8 : CONSTANTE O LITERAL ENTERA DE 8 BIT (0 - 255) L16 : CONSTANTE O LITERAL ENTERA DE 16 BIT (0 - 65535) MACROS ARGUMENTOS EJEMPLO MOVLF L16,F8/16 EJ: MOVLF 25,VAR1 : mueve la constante 25 a var1 MOVFFF F8/16,F8/16 EJ: MOVFFF VAR1,VAR2 : copia el dato de var1 en var2 MOVFF F8,F8 EJ: MOVFF VAR1,VAR2 : copia el dato de var1 en var2 MOVFW F8 EJ: MOVFW VAR1 : copia el dato de var1 en w MOVWF 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 ARGUMENTOS OUT_PORT_BYTE F8,PT,B7,PT,B6,PT,B5,PT,B4,PT,B3,PT,B2,PT,B1,PT,B0 OUT_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 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

E J E M P L O 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 B'11110001',VAR1 OUT_PORT_BYTE VAR1,PTB3,PTB2,PTB1,PTB0,PTA3,PTA2,PTA1,PTA0

E J E M P L O 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

Page 78: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

78 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 través de carry y guarda cambio en VAR1.

DESPLCF F8 EJ: DESPLF VAR1 desplaza los bit de var1 a la izquierda a través de carry y guarda cambio en VAR1.

ROTRF F8 EJ: ROTRF VAR1 rota en si mismo los bit de var1 a la derecha y guarda cambio en var1.

ROTLF F8 EJ: ROTLF VAR1 rota en si mismo los bit de Var1 a la izquierda y guarda cambio en var1

SWAPFF F8/16 EJ: SWAPFF VAR1 intercambia los nibbles de var1 y guarda cambio en var1

ANDFL F8/16,L16 EJ: ANDFL VAR1,15 VAR1 = VAR1 AND 15 ANDFF F8/16,F8/16 EJ: ANDFF VAR1,VAR2 VAR1 = VAR1 AND VAR2 IORFL F8/16,L16 EJ: IORFL VAR1,512 VAR1 = VAR1 IOR 512 IORFF F8/16,F8/16 EJ: IORFF VAR1,VAR2 VAR1 = VAR1 IOR VAR2 XORFL F8/16,L16 EJ: XORFL VAR1,1024 VAR1 = VAR1 XOR 1024 XORFF F8/16,F8/16 EJ: XORFF VAR1,VAR2 VAR1 = VAR1 XOR VAR2 INV_BIT F8,BIT EJ: INV_BIT VAR1,4 : invierte el bit 4 de var1, var1 es un puerto o variable tipo byte

INV F8/F16 EJ: INV VAR1 : invierte los 8 ó 16 bit de VAR1, var1 es una variable o un puerto

ON F8,BIT EJ: ON VAR1,3 : establece en 1 el bit 3 de var1, var1 es una variable byte o un puerto

OFF F8,BIT EJ: OFF VAR1,3 : establece en 0 el bit 3 de var1, var1 es una variable byte o un puerto

SET_INP PUERTO,BIT EJ: SET_INP PTC3 : configura ptc3 como entrada SET_OUT PUERTO,BIT EJ: SET_OUT PTC4 : configura ptc4 como salida e inicializa en cero

Page 79: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

79 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

ENTRADA NOMBRE_ENTRADA,PIN_PUERTO EJ: ENTRADA SENSOR1,PTC0 SALIDA NOMBRE_SALIDA,PIN_PUERTO EJ: SALIDA RELE1,PTC5 el pin inicia en cero BANDERA NOMBRE_BANDERA,BIT_VARIABLE EJ: BANDERA F_SIRENA FLAG1,0 CONSTANTE NOMBRE_CONSTANTE,VALOR EJ: CONSTANTE MAX_TEMP 99 PAUSE ;inicia un bucle indefinido solo interrumpido por un reset o interrupción CLR_PORTS ;resetea (pone en cero) todos los puertos configurados como salida CLR_ALL_RAM_GPR ;resetea (pone en cero) todos los registros de la ram de dir 0 a 1535 de 18f452 DIRECCION1,DIRECCCION2 CLEAR_RAM L12 ,L12 ;resetea todas las var de dir1 a dir2 incluyendo dir 1 y dir2

DIRECCION1,DIRECCION2,CONSTANTE FILL_RAM L12 ,L12 ,L8 ;llena las variables de dir1 a dir2 con la constante L8

DIRECCION1,DIRECCION2,VALOR ;llena las var de dir1 a dir2 con el dato de F8 FILL_RAMF L12 ,L12 ,F8

Page 80: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

80 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

MACROS DE MODULO INCREMENTAR Y DECREMENTAR VARIABLES

Las MACROS INCVAR y DECVAR incrementan y decrementan una variable entre un mÍnimo y un máximo programado, en pasos o cambios programados

MACROS ARGUMENTOS VARIABLE, VALOR_MINIMO, VALOR_MAXIMO, RESOLUCION_DE_CAMBIO DECVAR F8/16 , L16 , L16 , L16 DECVARF F8/16 , F8/16 , F8/16 , F8/16 INCVAR F8/16 , L16 , L16 , L16 INCVARF F8/16 , F8/16 , F8/16 , F8/16 IF_MAX_INC LABEL IF_MIN_DEC LABEL HABILITAR_PUSH_POP_INC_DECVAR SI/NO ;en bloque 1

E J E M P L O Active la interrupción de PTB0 y PTB1 en bloque1

ORG1_INT_PTB0 INCVAR VAR1,100,2000,50 ;incrementa de 100 a 2000 en pasos de 50 IF_MAX_INC LBL1 ------ var1 llego al maximo valor = 2000 ---------- LBL1 ------ var1 esta entre 100 y 1999 ---------- OUT_INT ORG2_INT_PTB1 DECVAR VAR1,100,2000,50 ;decrementa de 100 a 2000 en pasos de 50 IF_MIN_DEC LBL2 ------ var1 llego al minimo valor = 100 ---------- LBL2 ------ var1 esta entre 100 y 1999 ---------- OUT_INT

Page 81: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

81 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 división 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 ARGUMENTOS SUMFL F8/16,L16 EJ: SUMFL VAR1,500 : RESULTADO(16BIT) = VAR1 + 500 SUMFF F8/16,F8/16 EJ: SUMFF VAR1,VAR2 : RESULTADO(16BIT) = VAR1 + VAR2 RESTFL F8/16,L16 EJ: RESTFL VAR1,5 : RESULTADO(16BIT) = VAR1 - 5 RESTLF L16,F8/16 EJ: RESTLF 495,VAR1 : RESULTADO(16BIT) = 495 - VAR1 RESTFF F8/16,F8/16 EJ: RESTFF VAR1,VAR2 : RESULTADO(16BIT) = VAR1 - VAR2 MULTFL F8/16,L16 EJ: MULTFL VAR1,2500 : RESULTADO(32BIT) = VAR1 x 2500 MULTFF F8/16,F8/16 EJ: MULTFF VAR1,VAR2 : RESULTADO(32BIT) = VAR1 x VAR2 DIVFL F8/16,L16 EJ: DIVFL VAR1,5 : COCIENTE(16BIT) = VAR1 / 5 DIVLF L16,F8/16 EJ: DIVLF 412,VAR1 : COCIENTE(16BIT) = 412 / VAR1 DIVFF F8/16,F8/16 EJ: DIVFF VAR1,VAR2 : COCIENTE(16BIT) = VAR1 / VAR2 : RESIDUO(16BIT)

MACROS FOR DE SUBRUTINAS MACROS ARGUMENTOS EXPLICACION NÚMERO_REPETICIONES,NOMBRE_SUBRUTINA FOR_SUB L8 ,LABEL ;llama un número de veces una subrutina FOR_SUBF F8 ,LABEL ;llama un número de veces una subrutina E J E M P L O 1 debe crear una subrutina llamada SUB_RESET en bloque 9 FOR_SUB 5,SUB_RESET :LLAMA 5 VECES LA SUB SUB_RESET E J E M P L O 2 debe crear una subrutina llamada sub_reset en bloque 9, declare var1 tipo byte en bloque 3

MOVLF 200,VAR1 ;VAR1 = 200 FOR_SUBF VAR1,SUB_RESET :llama 200 veces la sub sub_reset

Page 82: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

82 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

MACROS DE COMPARACION DE BIT Y REGISTROS (MIF) SIMBOLOGIA EN COMPARACION IF = IGUAL <> DIFERENTE > MAYOR QUE < MENOR QUE todas las macros de comparacion "if" saltan al siguiente renglón si se cumple la condición, 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 F8,BIT,LABEL :SI... F8,BIT ES UNO ENTONCES... IF0 F8,BIT,LABEL :SI... F8,BIT ES CERO ENTONCES... IFF255 F8,LABEL :SI... F8=255 ENTONCES... IFF0 F8,LABEL :SI... F8=0 ENTONCES... IFPAR F8/16,LABEL :SI... F8/16 ES PAR ENTONCES... IFIMPAR F8/16,LABEL :SI... F8/16 ES IMPAR ENTONCES... IFFIL F8/16,L16,LABEL :SI... VAR1 = CONSTANTE ENTONCES... IFFDL F8/16,L16,LABEL :SI... VAR1 <> CONSTANTE ENTONCES... DIFERENTE IFFMAL F8/16,L16,LABEL :SI... VAR1 > CONSTANTE ENTONCES... IFFMEL F8/16,L16,LABEL :SI... VAR1 < CONSTANTE ENTONCES... IFFIF F8/16,F8/16,LABEL :SI... VAR1 = VAR2 ENTONCES... IFFDF F8/16,F8/16,LABEL :SI... VAR1 <> VAR2 ENTONCES... 'DIFERENTE IFFMAF F8/16,F8/16,LABEL :SI... VAR1 > VAR2 ENTONCES... IFFMEF F8/16,F8/16,LABEL :SI... VAR1 < VAR2 ENTONCES... E J E M P L O 1 IF1 VAR1,3,LABEL1 :SI EL BIT 3 DE VAR1 ESTÁ EN 1 LIMPIA CLR_LCD :LA LCD SI NO SALTA A LABEL1 LABEL1 E J E M P L O 2 IFPAR VAR1,LABEL2 :SI VAR1 ES PAR ENTONCES LIMPIA LCD CLR_LCD :SINO SALTA A LABEL2 LABEL2 E J E M P L O 3 IFFMAL VAR1,200,LABEL2 :SI VAR1 > 200 ENTONCES LIMPIA LCD CLR_LCD :SINO SALTA A LABEL3 LABEL3

Page 83: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

83 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

E J E M P L O 4 IFFIL VAR1,1,LABEL4 :SI VAR1 = 1 ENTONCES LIMPIA LCD

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

MACROS DEL MODULO CLAVE (MCLAVE) Nota1: las macros de comparacion "IF" saltan al siguiente renglón 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 numéricos, 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 más 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 número de digitos que se han ingresado de la clave

SIMBOLOGIA : EQUIVALENCIA MAX_DIGITOS = MAX_DIG_1 A MAX_DIG_7

Page 84: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

84 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

TECLA_ACEPTAR = CUALQUIER CONSTANTE, CARACTER O NÚMERO DIFERENTE DE 254 TECLA_CANCELAR = CUALQUIER CONSTANTE, CARACTER O NÚMERO DIFERENTE DE 254 TEC_BORRAR = CUALQUIER CONSTANTE, CARACTER O NÚMERO DIFERENTE DE 254 LABEL = CUALQUIER ETIQUETA DEL PROGRAMA CLAVE1 A CLAVE7 = cualquier constante, caracter o número 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 código 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 IFCLAVE L8 ,L8 ,L8 ,L8 ,L8 ,L8 ,L8 ,ETIQUETA ;compara con constantes IFCLAVEF F8 ,F8 ,F8 ,F8 ,F8 ,F8 ,F8 ,ETIQUETA ;compara con registros de la RAM SHOW_AST_CLAVE LINEA,COL ;muestra el número de digitos introducidos en forma de astericos en la linea y columna estipulada IF_TECLA_ACEPTAR LABEL IF_TECLA_CANCELAR LABEL IF_TECLA_BORRAR LABEL IF_TECLA_SIGUIENTE LABEL IF_TECLA_MAX LABEL 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 después 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

Page 85: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

85 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

E J E M P L O 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 recepción 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 SI INTERRUPCION_HP_RXUART_PTC7 SI INTERRUP_LP_1_TECPS2_CK_PTB2 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 MÁS BANDERAS F_WAIT_CLAVE_US) BANDERA F_PUK_OK FLAG_CAMBIO_CLAVE,0 ; declara un flag en el bit 0 de la var flag_cambio_clave BANDERA F_WAIT_ENTER_CLAVE FLAG_CAMBIO_CLAVE,1 ; declara un flag en el bit 1 de la var flag_cambio_clave BANDERA F_WAIT_CLAVE_US1 FLAG_CAMBIO_CLAVE,2 ; declara un flag en el bit 2 de la var flag_cambio_clave BANDERA F_WAIT_CLAVE_US2 FLAG_CAMBIO_CLAVE,3 ; declara un flag en el bit 3 de la var flag_cambio_clave ;_________________________________________________________________________________________ ;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: CAPTURAR_CLAVE REG_RXUART,MAX_DIG_7 ;max 7 digitos en caulquier clave IFCLAVE "A","B","C","D","E","F","G",LBL_UART1 CLEAR FLAG_CAMBIO_CLAVE ON F_PUK_OK

Page 86: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

86 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

MENS_LCD "PUK CORRECTO ",L1,C1,0 MENS_LCD "SELECCION US 1-2" ,L2,C1,0 BLINK_LCD 2 OUT_INT LBL_UART1 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 LBL_UART7 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 LBL_UART6 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 LBL_UART9 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 LBL_UART8 MENS_LCD "ANTES DE ACEPTAR",L1,C1,0 MENS_LCD "SELECCION US 1-2",L2,C1,0 BLINK_LCD 2

Page 87: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

87 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 LBL_UART3 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 LBL_UART4 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 LBL_UART16 IF_TECLA_SIGUIENTE LBL_UART17 TLCD "DIGITANDO CLAVE" SHOW_AST_CLAVE L2,C5 OUT_INT LBL_UART17 IF_TECLA_BORRAR OUT_IF TLCD "DIGITANDO CLAVE" SHOW_AST_CLAVE L2,C5 OUT_INT 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 LBL_UART10 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

Page 88: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

88 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 LBL_UART12 IF_TECLA_SIGUIENTE LBL_UART13 TLCD "DIGITANDO CLAVE" SHOW_AST_CLAVE L2,C5 OUT_INT LBL_UART13 IF_TECLA_BORRAR LBL_UART14 TLCD "DIGITANDO CLAVE" SHOW_AST_CLAVE L2,C5 OUT_INT LBL_UART14 IF_TECLA_MAX LBL_UART15 TLCD "EXCEDIO NUM DIG" OUT_INT 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

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

Page 89: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

89 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

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 errónea 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 L16 :convierte l8/l16--> bcd5,bc4,bcd3,bcd2,bcd1 C_BCDF F8/16 :convierte f8/f16--> bcd5,bc4,bcd3,bcd2,bcd1 C_BIN F8,F8,F8,F8,F8 :convierte bcd5,bc4,bcd3,bcd2,bcd1 -->binhl

E J E M P L O 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

Page 90: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

90 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

MACROS DE MODULO DELAY (léase diléi) (MDELAY) MACRO : DELAY L16,UNIDAD SINTAXIS : DELAY TIEMPO,UNIDAD ARGUMENTO1: TIEMPO ;constante de 1 a 65535 ARGUMENTO2: UNIDAD US,MS,DS,SEG ;(base de tiempo) EJEMPLO1 : DELAY 5,SEG ; pausa de 5 segundos EJEMPLO2 : DELAY 34654,US ; pausa de 34654 microsegundos MACRO : DELAYF F8/16,UNIDAD SINTAXIS : DELAYF TIEMPO,UNIDAD ARGUMENTO1: TIEMPO ;variable tipo byte/word ARGUMENTO2: UNIDAD US,MS,DS,SEG ;base de tiempo EJEMPLO1 : DELAYF F8,SEG ; pausa del valor guardado en F8 segundos EJEMPLO2 : DELAYF F16,US ; pausa del valor guardado en F16 microsegundos

MACROS DEL MODULO PULSO_LOW Y PULSO_HIGH (MPULSO) MACROS ARGUMENTOS PIN, TIEMPO, UNIDAD PUL_LOW PIN, L16 ,US/MS/DS/SEG ;pulso en bajo por un tiempo programado PUL_LOWF PIN, F8/16 ,US/MS/DS/SEG ;pulso en bajo por un tiempo programado PUL_HIGH PIN, L16 ,US/MS/DS/SEG ;pulso en alto por un tiempo programado PUL_HIFHF PIN, F8/16 ,US/MS/DS/SEG ;pulso en alto por un tiempo programado ARGUMENTO1: PIN :cualquier pin del pic ARGUMENTO2: TIEMPO :constante/variable con dato entre 1 a 65535 ARGUMENTO3: UNIDAD ;US/MS/DS/SEG base de tiempo

E J E M P L O 1 PUL_HIGH PTE0,5,SEG :genera un pulso con flanco de subida en pte0 por 5 segundos

E J E M P L O 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 (MBLINK) Función: genera un número de pulsos con periodo high y periodo low programable Aplicacion: control de servomotor, pwm para motor dc, generador de frecuencia programable,oscilacion de led Sintaxis: BLINK PIN,NUM_PULSOS,TIEMPO1,UNIDAD1,TIEMPO2,UNIDAD2 MACROS ARGUMENTOS

Page 91: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

91 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 lógico por tener salida de drenador abierto

NUM_PULSO: constante o variable tipo byte o word l8/f8 para número de pulsos que se generará por el pin seleccionado

TIEMPO1: constante o variable tipo byte o word para número de veces que se invocará la unidad1 UNIDAD1: US/MS/DS/SEG TIEMPO2: constante o variable tipo byte o word para número de veces que se invocará la unidad2 UNIDAD2: US/MS/DS/SEG

E J E M P L O En el siguiente ejemplo se genera por el pin PTD0 37 pulsos con período en 1 lógico igual a 100us y período en cero lógico igual a 1ms, es decir, genera una frecuencia de 1/(100us+1ms) --> f = 1/1100us : f = 909hz. Si fuese una señal pwm entonces el voltaje promedio que genera esta señal 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 PIEZOELÉCTRICO

(PLANO BUZZER)

Page 92: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

92 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 protección al transistor y al PIC contra picos de voltaje generados por el buzzer.

MACROS DEL MODULO RANDOM (MRANDOM) Genera números enteros aleatorios entre un rango determinado tipo byte y devuelve el dato aleatorio en el registro REG_RANDOM. Si se desea un mayor efecto randómico se debe tener activada en bloque 1 la interrupción timer0 ó timer1 con cualquier período en bloque 2, sin embargo, el usuario puede emplear la interrupción de timer en bloque 8 para cualquier otra aplicación. MACROS ARGUMENTOS INICIO, FIN : INICIO <= REG_RANDOM <= FIN RANDOM L8 ,L8 RANDOMF F8 ,F8

E J E M P L O 1 RANDOM 5,20 ;genera números enteros aleatorios entre 5 y 20 incluidos el 5 y 20, el número se encuentra en la variable tipo byte: reg_random

E J E M P L O 2 RANDOMF VAR1,VAR2 ;genera números enteros aleatorios entre el SBCD_LCDF REG_RANDOM ;valor de var1 y var2 y lo muestra en LCD

MACROS DE DISPLAY CRISTAL LIQUIDO LCD 2X16, 2X20, 2X24, 2X40 (MLCD)

SIMBOLOGIA: LINEA : L1,L2 :LINEA O FILA DE LA LCD SIMBOLOGIA: COL : C1 A C40 :COLUMNA DE LA LCD SIMBOLOGIA: FACTOR: X1, X10, X100 :FACTOR DE MULTIPLICACION DE VOLTAJE AL CONVERTIR SIMBOLOGIA: DELAY_MENSAJE: 0 A 255 :PAUSA ENTRE CARACTERES EN DÉCIMAS DE SEGUNDO SIMBOLOGIA EN MACRO CONFIG_LCD4B: D4_P11_PTC0 = dato4 pin 11 de lcd se conecta al bit 0 de portc SIMBOLOGIA EN MACRO CONFIG_LCD4B: D5_P12_PTC1 = dato5 pin 12 de lcd se conecta al bit 1 de portc SIMBOLOGIA EN MACRO CONFIG_LCD4B: D6_P13_PTC2 = dato6 pin 13 de lcd se conecta al bit 1 de portc SIMBOLOGIA EN MACRO CONFIG_LCD4B: D7_P14_PTC3 = dato7 pin 14 de lcd se conecta al bit 1 de portc SIMBOLOGIA EN MACRO CONFIG_LCD4B: RS_P4_PTC4 = RS pin 4 de lcd se conecta al bit 1 de portc SIMBOLOGIA EN MACRO CONFIG_LCD4B: ENA1_P6_PTC5= ENABLE pin 6 de lcd1 se conecta al bit 1 de portc SIMBOLOGIA EN MACRO CONFIG_LCD4B: ENA2_P6_PTNN= ENABLE pin 6 de lcd2 se conecta al bit 1 de portc SIMBOLOGIA EN MACRO CONFIG_LCD4B: ENA3_P6_PTNN= ENABLE pin 6 de lcd3 se conecta al bit 1 de portc

Page 93: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

93 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 simultáneamente (lcd1 a lcd4), en la conexión por hardware las 4 LCD comparten los 4 pines de datos y el pin RS, únicamente se independiza el pin ENABLE. Si sólo 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 automáticamente el comando CLR_LCD, es decir, está todo en blanco y posicionadas en linea1 columna 1.

MACROS ARGUMENTOS CONFIG_LCD4B D4_P11_PTC0,D5_P12_PTC1,D6_P13_PTC2,D7_P14_PTC3,RS_P4_PTC4,ENA1_P6_PTC5,ENA2_P6_PTNN,ENA3_P6_PTNN,ENA4_P6_PTNN ;asignacion de pines de control en bloque 2 SELEC_LCD (L4) :selecciona la lcd a controlar según el peso binario. Si no emplea esta macro por defecto selecciona LCD1. Para seleccionar todas las LCD utilice la constante número 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 décimas 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 LINEA,COL :asigna la linea y columna del siguiente caracter LINE_COL_LCDF LINEA,F8 :asigna la linea y columna del siguiente caracter PRINT_LCD CHAR,LINEA,COL :muestra un caracter en la linea y columna asignada PRINT_LCDF F8,LINEA,COL :muestra un caracter en la linea y columna asignada PRINT_LCDAF F8,LINEA,COL :muestra el valor numérico 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 muestra un caracter en lcd CHAR_LCDAF F8 muestra el valor numérico de una variable de 0 a 9 BLINK_LCD L8 prende y apaga la lcd el número de veces programada BLINK_LCDF F8 prende y apaga la lcd el número de veces programada RR_LCD L8 rota a la derecha todo el mensaje el número de veces prog RR_LCDF F8 rota a la derecha todo el mensaje el número de veces prog RL_LCD L8 rota a la izquierda todo el mensaje el número de veces prog RL_LCDF F8 rota a la izquierda todo el mensaje el número de veces prog CMD_LCD L8 envia un comando a lcd CMD_LCDF F8 envia un comando a lcd SBIT_LCD L8 muestra el número binario (0,1) de una constante en lcd SBIT_LCDF F8 muestra el número binario (0,1) de una variable en lcd SBCD_LCD L16 muestra el bcd de 5 digitos de una constante max 16bit SBCD_LCDF F8/16 MUESTRA EL BCD DE 5 DIGITOS DE UNA VARIABLE DE 16BIT SED_LCD L8 MUESTRA EL DATO DE LA DIRECCION DE EEPROM DE DATO

Page 94: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

94 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

SED_LCDF F8 MUESTRA EL DATO DE LA DIRECCION DE EEPROM DE DATO SAED_LCD L8 MUESTRA EL ASCII DEL DATO DE LA DIRECCION DE EEPROM DE DATO SAED_LCDF F8 MUESTRA EL ASCII DEL DATO DE LA DIRECCION DE EEPROM DE DATO SBCDED_LCD L8 muestra el bcd de la direccion de eeprom de dato SBCDED_LCDF F8 muestra el bcd de la direccion de eeprom de dato SRELOJ_LCD :muestra la hora en lcd: hh:mm:ss SC9DIG_LCD :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 :Limpia Linea 1 De Lcd Y Se Posiciona En Linea 1 Columna 1 CLR_LCDL2 :limpia linea 2 de lcd y se posiciona en linea 2 columna 1 OFF_BLINK_CURSOR :desactiva parpadeo de cursor y caracter ON_BLINK_CURSOR :ACTIVA PARPADEO DE CURSOR Y CARACTER OFF_CURSOR_LCD OCULTA EL CURSOR DE LCD ON_CURSOR_LCD MUESTRA EL CURSOR DE LCD CURSOR_HOME_LCD ENVIA EL CURSOR A LINEA1 COLUMNA1 CURSOR_R_LCD ROTA EL CURSOR UNA COLUMNA A LA DERECHA CURSOR_L_LCD ROTA EL CURSOR UNA COLUMNA A LA IZQUIERDA SCREEN_R_LCD 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 décima 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 décima de segundos cada caracter

E J E M P L O 1 SELEC_LCD 1 ;selecciona la lcd número 1 de 4 CLR_LCD ;limpia pantalla de lcd MENS_LCD "MENSAJE1",L1,C1,2 ;linea 1, columna1, 2 décimas de segundo entre caracteres MENS_LCD "MENSAJE2",L2,C3,0 ;linea 2, columna 3, sin pausa entre caracteres BLINK_LCD 5 ;parpadea 5 veces la pantalla RR_LCD 17 ;rota 17 col a la derecha DELAY 2,SEG ;pausa de 2 segundos BLINK_LCD 3 ;parpadea 3 veces la pantalla RL_LCD 17 ;rota 17 col a la izquierda MENS_LCD "MENSAJE1",L1,C1,2 ;mensaje en línea 1, columna1, pausa de 2 ds entre caracter MENS_LCD "MENSAJE2",L2,C1,1 ;mensaje en línea 2, columna1, pausa de 2 ds entre caracter

Page 95: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

95 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

BLINK_LCD 2 ;parpadea 2 veces la pantalla CAD CH0 ;convierte por canal 0 (pta0) SLM35_LCD ;muestra temperatura de lm35 en lcd CAD CH1 ;convierte por canal 1 (pta1) SVOLT_LCD X10 ;muestra voltaje en (volt)en lcd multiplicado x 10

E J E M P L O 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 (número entero) de la memoria eeprom de dato en la dir 200

Page 96: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

96 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

TEORIA DISPLAY DE CRISTAL LIQUIDO LCD ALFANUMERICA CONFIGURACIÓN DEL MODULO LCD A 4 BIT

LPM2 permite controlar simultáneamente hasta 4 LCD 2x16, 2x20 ó 2 x 40. Las 4 LCD comparten los pines DATO4, DATO5, DATO6, DATO7 Y RS. La selección de cada LCD se realiza mediante la línea ENABLE la cual debe enviarse a un pin distinto del PIC para cada LCD. En la siguiente configuración se habilitarán 2 LCD por el puerto C. Por ejemplo, la configuración 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 LCD’s. 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 simbólica de NO asignar pines reales del puerto en la configuración de un módulo respectivo

PLANO DE CONEXIÓN DE LCD 2X16 ALFANUMERICA (PLANO LCD)

Page 97: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

97 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Nota: Remitirse a la SECCION 6 - PERIFERICOS DEL MICROCONTROLADOR.DOC para profundizar en la programación y protocolo de comunicación 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 aplicación 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 reproducirán 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 asignación de pines de control en bloque 2

NUM_MENSAJE, MODE ;reproduce el mensaje seleccionado PLAY_ISD1 L8 , MC/MI ;la posicion del mensaje es: 1 a 255 PLAY_ISD1F F8 , MC/MI POSICION,TIEMPO_REC(SEG) graba un mensaje en una posicion REC_ISD1 L8 ,L8 programada por un tiempo prog REC_ISD1F F8 ,F8 posicion del mensaje:1 a 255 STOP_ISD1 genera un pulso en stop de isd

Page 98: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

98 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

E J E M P L O PLAY_ISD1 1,MC ;reproduce el primer mensaje de isd1 en mc PLAY_ISD2 6,MI ;reproduce el sexto mensaje de isd2 en mi REC_ISD1 2,5 ;graba un mensaje de 5 seg en posicion 2 PLAY_ISD1 1,MC ;play mensaje1 y no pasa al sig renglón hasta terminar de reproducirlo PLAY_ISD1 6,MI ;reproduce el sexto mensaje de isd1 y continuúa al siguiente renglón 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 aplicación 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 reproducirán 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 PLAY_ISD2 L8 , MC/MI LA POSICION DEL MENSAJE ES: 1 a 255 PLAY_ISD2F F8 , MC/MI POSICION,TIEMPO_REC(SEG) GRABA UN MENSAJE EN UNA POSICION REC_ISD2 L8 ,L8 PROGRAMADA POR UN TIEMPO PROG REC_ISD2F F8 ,F8 POSICION DEL MENSAJE:1 A 255 STOP_ISD2 genera un pulso en stop de isd START_ISD2 genera un pulso en start de isd

Page 99: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

99 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

P_R_ISD2 REC/PLAY ;establece modo de isd, play o rec M0_ISD2 NORMAL/SALTAR ;establece modo de pin m0 (saltar)

E J E M P L O PLAY_ISD2 1,MC ;reproduce el primer mensaje de isd2 en mc PLAY_ISD2 6,MI ;reproduce el sexto mensaje de isd2 en mi REC_ISD2 2,5 ;graba un mensaje de 5 seg en posicion 2 PLAY_ISD2 1,MC ;play mensaje1 y no pasa al sig renglón hasta terminar de reproducirlo

PLAY_ISD2 6,MI ;reproduce el sexto mensaje de isd2 y continua al siguiente renglón sin esperar que termine mensaje 6

Page 100: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

100 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

TEORÍA DEL REPRODUCTOR / GRABADOR DE VOZ DE ESTADO SÓLIDO ISD 25XXX

CONFIGURACIÓN DEL MODULO ISD 25XXX (2560-2590-25120 60 A 120 SEGUNDOS) Por ejemplo, la configuración

CONFIG_ISD START_P23_PTE0, RESET_P24_PTE1, M0_P1_PTE2, EOM_P25_PTA4, P_R_P27_PTA5 significa que… START_P23_PTE0 : Selecciona el Pin PTE0 para el control del pin 23 del ISD que corresponde a START.

Por ejemplo, la configuración

CONFIG_ISD START_P23_PTE0, RESET_P24_PTE1, M0_P1_PTE2, EOM_P25_PTNN, P_R_P27_PTNN 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 simbólica de NO asignar pines reales del puerto en la configuración de un módulo respectivo. Este “artificio” sólo es posible en algunos módulos, es decir, se puede optar por el control del ISD con 5 pines o sólo con 3. Lo anterior depende de la aplicación en particular, no obstante, es importante que el usuario conozca la función de cada pin del ISD en particular. START: Pin de entrada del ISD. Es el encargado de iniciar o pausar un grabación o reproducción. 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 grabación o reproducción. 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 reproducción de cualquier mensaje del ISD en cualquier orden no consecutivo. Cuando sólo 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 envía al PIC entonces se habilita la opción 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 lógico, de esta manera la reproducción del mensaje nunca se interrumpirá (MC modo completo). Lo anterior implica que si el usuario no requiere de esta opción en particular (MC modo completo de reproducción) puede optar por no enviar el pin EOM al PIC, es decir configurarlo como PTNN. P_R : Pin de entrada del ISD. Usualmente se envía a +VCC. Cuando está en 1 lógico (+VCC) el ISD está en modo reproducción de mensajes, en 0 lógico el ISD está en modo grabación. Cuando sólo 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 aplicación requiere modificar los mensajes grabados en tiempo de ejecución del programa, entonces es imprescindible enviar este pin al PIC.

Page 101: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

101 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PLANO DE CONEXIÓN GENERAL DE CONTROL DEL ISD 25XXX MEDIANTE MICROCONTROLADOR O MANUALMENTE (PLANO ISD)

Page 102: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

102 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PLANO DE CONEXIÓN SIMPLIFICADO PARA GRABACION DE SEÑAL

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 sólo se requieren las salidas START, RESET. Para mejorar la calidad de grabación del audio directo del PC se puede conectar la salida de audio del PC

Page 103: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

103 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 grabación es alimentar el circuito temporalmente con 3 baterías de 1.5V (4.5V), recuerde que la ISD máximo soporta 5VDC y consume 30mA en grabación o reproducción y 1uA en stand BY. Si definitivamente no se puede alimentar con baterías entonces inserte condensadores de alta capacitancia (22000 a 4700uF) de filtro entre Vcc y tierra lo más cerca del ISD. Un error muy común es que los mensajes se corran, lo cual se manifiesta en que aparentemente el PIC funciona mal en el modo salto M0 de búsqueda de mensajes y reproduce el mensaja incorrecto. Usualmente esto se debe a que envían sin darse cuenta un flanco de bajada (nivel lógico 0) al pin 27 (Play/Rec). Otra razón quie explica el problema antes mencionado es el error de configurar un pin (A0,A1,A2,A3,A5,E0,E1,E2) como entrada analógica 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 estén 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 analógica, esté averiado o que esté siendo usado por otro módulo /periférico como LCD, Display, etc. Sea precabido al manipular el ISD después de grabar los mensajes y nunca retire la resistencia de 10K del pin 27 a +VCC. Si la grabación se efectúa con alimentación 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 Analógico) a tierra lo más cercano al ISD.

El esquema anterior es un económico amplificador de audio de 8 Watt de potencia RMS suficiente para escuchar un mensaje de la ISD en una habitación o casa.

Page 104: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

104 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

GRABACIÓN DE MENSAJES MANUALMENTE EN EL ISD 25XXX Para grabar mensajes consecutivos en el chip grabador reproductor digital de estado sólido 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 grabación = 0 en el pin 27 PLAY/REC) 5. Presionar el pulsador Reset para posicionarse en el origen de la memoria de grabación del ISD 6. Presionar el pulsador START para iniciar la grabación del mensaje 1, y volver a presionarlo para finalizar el mensaje 1. Cada vez que se inicia el proceso de grabación se encenderá el LED D1 INDICADOR PLAY/REC conectado al pin 25 EOM del ISD, cuando finalice la grabación se apagará. Se debe hablar fuerte y cerca del micrófono para obtener buen volumen de reproducción. 7. Repetir el paso 6 para la grabación 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 grabación de un nuevo mensaje el LED INDICADOR PLAY REC no se encenderá, en estas circunstancias debe presionar el botón reset para volver a grabar los mensajes o sencillamente abrir el SW GRABAR para salir del modo grabación y entrar en modo reproducción (modo reproducción = 1 en el pin 27 PLAY/REC). Nota: El negativo del micrófono electret es el que tiene continuidad con la carcasa del micrófono.

Page 105: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

105 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 reproducción = 1 en el pin 27 PLAY/REC) 5. Presionar el pulsador RESET para posicionarse en el origen de la memoria de reproducción del ISD 6. Presionar el pulsador START para iniciar la reproducción del mensaje 1. Si vuelve a presionar antes de terminar la reproducción del mensaje 1 entonces se comportará como una pausa del mensaje 1, si lo presionara después de finalizar la reproducción del mensaje 1 entonces iniciará la reproducción del mensaje 2. Por lo tanto, el pulsador START tiene doble función: iniciar una reproducción o pausarla. Si se desea obtener un mayor volumen de reproducción se debe implementar un amplificador de audio con un LM386, TDA 2003 u otro amplificador de audio convencional, una forma de amplificación que recomiendo es mediante el speaker o altavoces de las computadoras, el inconveniente es que estos amplificadores requieren alimentación de 120VAC. Claro está, usted puede abrirlos y eliminar la etapa del transformador de 120VAC y alimentarlos directamente con su fuente de +5/12VDC.

REPRODUCCIÓN 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 reproducción = 1 en el pin 27 PLAY/REC) 5. Presionar el pulsador RESET para posicionarse en el origen de la memoria de reproducción del ISD 6. Si desea reproducir el primer mensaje se presiona el pulsador START para iniciar la reproducción 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 (activación del modo salto de mensajes - SKIP Message) 8. Presionar el pulsador RESET para posicionarse en el origen de la memoria de reproducción del ISD 9. presionar el pulsador START (N veces -1) donde N es la posición del mensaje que se desea reproducir, por ejemplo, si se desea reproducir el mensaje 5 del ISD, entonces se presiona START cuatro veces, a continuación se enviar el pin 1 del ISD (M0) a tierra para salir del modo salto y se presiona el pulsador START para iniciar la reproducción del mensaje 5. Como pudo observar la clave de la reproducción 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 lógico y se presiona el pulsador START para iniciar la reproducción en el mensaje deseado. Una vez más, si se vuelve a presionar el pulsador START antes de haber terminado la respectiva reproducción entonces se pausa el mensaje.

Page 106: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

106 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

Nota: Todas la macros relacionadas con FSR0 también están 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 DIRECCIÓN 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 DIRECCIÓN 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

Page 107: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

107 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 módulo VECTOR0 también existen para VECTOR1 y VECTOR2 Nota2: El módulo 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 décimo 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 dirección en que se encuentre, por ejemplo, si el elemento seleccionado queda en la dirección 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 ;activación/desactivación en bloque 1 VECTOR0_TIPO_WORD SI/NO ;activación/desactivación en bloque 1 VECTOR1_TIPO_BYTE SI/NO ;activación/desactivación en bloque 1 VECTOR1_TIPO_WORD SI/NO ;activación/desactivación en bloque 1 VECTOR2_TIPO_BYTE SI/NO ;activación/desactivación en bloque 1 VECTOR2_TIPO_WORD SI/NO ;activación/desactivación en bloque 1 SI/NO ;activación/desactivación 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

Page 108: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

108 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

DIR1 , DIR2 ,PAUSA SV0_LCD 0-1535,0-1535,L16 ;envia elementos del vector0 a lcd DESDE DIRECCIÓN1 HASTA DIRECCIÓN2 DEL VECTOR con pausa en décima de segundos cada caracter DIR1 ,DIR2 ,PAUSA TXV0_UART 0-1535,0-1535,L16 ;envia elementos del vector0 por uart DESDE DIRECCIÓN1 HASTA

DIRECCIÓN2 DEL VECTOR con pausa en milisegundos entre cada caracter

E J E M P L O 1 FILL_V0FF MOVFFF VAR1,VAR3 ;llena las posiciones de var1 a var2 con var4 SET_V0F VAR1 LBL1 WI_V0F VAR4 INCRE1 VAR3 IFFMAF VAR3,VAR2,LBL1

PROM_V0F MOVFFF VAR1,VAR3 ;saca el promedio de las pos var1 a var2 la respuesta esta en w1 CLEAR W1 SET_V0F VAR1 LBL2 RI_V0 INCREF W1,REG_V0 INCRE1 VAR3 IFFMAF VAR3,VAR2,LBL2 RESTFF VAR2,VAR1 INCRE1 RESULTADO DIVFF W1,RESULTADO MOVFFF COCIENTE,W1 SUM_V0F MOVFFF VAR1,VAR3 ;hace la sumatoria de var1 a var2,la respuesta;esta en w1 CLEAR W1 SET_V0F VAR1 LBL3 RI_V0 INCREF W1,REG_V0 INCRE1 VAR3 IFFMAF VAR3,VAR2,LBL3

FIND_V0F MOVLF 11,VAR4 MOVFFF VAR1,VAR3 ;si encuentra var4 en el vector salta a LBL_BINGO SET_V0F VAR1 ; y en var3 esta la posicion sino llega a LBL_NOFIND LBL7 RI_V0 IFFIF REG_V0,VAR4,LBL9 BRA LBL_BINGO LBL9 INCRE1 VAR3 IFFMAF VAR3,VAR2,LBL7 LBL_NOFIND LBL_BINGO

Page 109: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

109 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

E J E M P L O 2 ;en bloque 1: VECTOR0_TIPO_BYTE SI ;activa vector 0 tipo byte (no funciona con vector tipo word) ;en bloque 2: CONFIG_ORG_VECTOR0 768 ;establece direccion inicial en ram del vector 0 SET_V0 50 ;establezco dirección inicial en vector0 WI_V0 "A" ;guardo "a" en posicion 50 de vector0 WI_V0 "B" ;guardo "b" en posicion 51 de vector0 WI_V0 "C" ;guardo "c" en posicion 52 de vector0 WI_V0 "D" ;guardo "d" en posicion 53 de vector0 WI_V0 "E" ;guardo "e" en posicion 54 de vector0 SV0_LCD 50,54,2 ;envia "ABCDE" a lcd con pausa de 2 dec de seg entre cada letra TXV0_UART 52,54,100 ;envia "CDE" por uart con pausa de 100 ms entre cada caracter IFCIV0 "CDE",52,LBL1 ;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 renglón, sino salta a LBL1

Page 110: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

110 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

DIR READ_EEDF F8 ;lee un dato de la eeprom y lo guarda en reg_eedato

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

DIR,DATO WRITE_EEDF F8 ,F8 ;escribe un dato en la direccion estipulada

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

SED_LCD L8 ;muestra el dato de la direccion de eeprom de dato SED_LCDF F8 ;muestra el dato de la direccion de eeprom de dato SAED_LCD L8 ;muestra el ascii del dato de la direccion de eeprom de dato SAED_LCDF F8 ;muestra el ascii del dato de la direccion de eeprom de dato SBCDED_LCD L8 ;muestra el bcd de la direccion de eeprom de dato SBCDED_LCDF F8 ;muestra el bcd de la direccion de eeprom de dato TXED_UART L8 ;transmite por UART el dato de la dirección en L8 TXED_UARTF F8 ;transmite por UART el dato de la dirección en F8 TXAED_UART L8 ;transmite por UART el dato ASCII 0-9 de la dirección en L8 TXAED_UARTF F8 ;transmite por UART el dato ASCII 0-9 de la dirección en F8 TXBCDED_UART L8 ;transmite por UART el dato BCD de la dirección en L8 TXBCDED_UARTF F8 ;transmite por UART el dato BCD de la dirección en F8

E J E M P L O 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

E J E M P L O 2 Declaración 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"

Page 111: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

111 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 ;_________________________________________________________________________________________ ; E J E M P L O ; 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 ;ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº

Page 112: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

112 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

MACROS INTERFAZ PERIFERICO SERIAL SPI DE 8 BIT (MSPI) Envía u obtiene un bit con cada flanco de subida de la señal 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 ARGUMENTOS CONFIG_SPI PIN_DATO,PIN_CLOCK asignacion de pines en bloque 2 LOAD_SPI L8 carga constante tipo byte en modulo spi LOAD_SPIF F8 carga variable tipo byte en modulo spi GET_SPI obtiene un dato tipo byte y lo muestra en la variable "REG_SPI"

E J E M P L O CONFIG_SPI DATO_SPI_PTE0,CK_SPI_PTE1 ;asignacion de pines en bloque 2 LOAD_SPI 1 ;carga la constante b'00000001' en modulo spi LOAD_SPI VAR1 ;carga el valor de var1 tipo byte en modulo spi GET_SPI ;obtiene un byte de un modulo spi SBCD_LCDF REG_SPI ;muestra en lcd el byte leido por spi

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 ARGUMENTOS EXPLICACION CONFIG_BUS_I2C PIN_DATO,PIN_CLOCK ASIGNACION DE PINES EN BLOQUE 2 WRITE_I2C L8 WRITE_I2CF F8 READ_I2C READ_END_I2C START_I2C STOP_I2C

Page 113: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

113 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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) AÑO_TK : (0 A 99) (2000 A 2099) Nota: por el pin 7 del ds1307 (sqw/out) se obtiene una señal cuadrada a 1 hz, 4 khz, 8 khz ó 32 khz la cual se puede enviar al pic por entrada de interrupción 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 años 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,AÑO establece hora y fecha en constantes WRITE_TIMEKF HH,MM,SEG,DIA_SEMANA,DIA_MES,MES,AÑO 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"

Page 114: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

114 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

E J E M P L O ESCRITURA EN TIME KEEPER DS1307

WRITE_TIMEK 12,30,00,LUNES,30,ABRIL,7 ;carga: 12:30:00 lunes 30 de abril de 2007

LECTURA EN TIME KEEPER DS1307 LINE_COL_LCD L1,C1 ;posiciona puntero de lcd SHTK_LCD ;muestra hora, minuto, seg del timek en lcd LINE_COL_LCD L2,C1 ;posiciona puntero de lcd SFTK_LCD ;muestra fecha del timekeeper en 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 AÑO_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 código a ejecutar a las 5:30:25 pm del día 5 de enero de 2008 ... LBL1 .... todavía no ha llegado la fecha y hora programada .... OUT_INT

TEORIA DEL TIMEKEEPER GENERADOR DE FECHA Y HORA CONFIGURACIÓN DEL MODULO TIMEKEEPER DS1307

Por ejemplo, la configuración

CONFIG_BUS_I2C DATO_I2C_PTA2,CK_I2C_PTA3 Significa que… Las señales de Dato y Clock del Time Keeper DS1307 se controlarán con los pines PTA2 y PTA3 respectivamente. Recuerde que debe usar resistencias de pull up de 4.7K a la línea de dato y clock del time keeper. Si emplea el puerto B puede ahorrarse las resistencias de pull up.

Page 115: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

115 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PLANO DE CONEXIÓN 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.

Page 116: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

116 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 dirección máximo 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 máxima 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 F8/16 dato entre 0 y 32767 para memoria 24lc256 SET_DIR_M24256 L16 dato entre 0 y 32767 para memoria 24lc256 WRITE_M24256F F8 WRITE_M24256 L8 STOP_WRITE_M24256 SETUP_R_M24256F F8/16 SETUP_R_M24256 L16 READ_M24256 READ_END_M24256

E J E M P L O ESCRITURA EN MEMORIA EEPROM SERIAL 24LC256

SET_DIR_M24256 0 ;configura inicio de escritura en dir = 0 WRITE_M24256 "A" ;guarda letra a en dir 0 WRITE_M24256 "B" ;guarda letra b en dir 1 WRITE_M24256 "C" ;guarda letra c en dir 2 STOP_WRITE_M24256 ;fin de escritura

Page 117: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

117 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

LECTURA EN MEMORIA EEPROM SERIAL 24LC256

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

MACROS DEL MODULO COUNTER 9 DIGITOS (MC9DIG) MACROS ARGUMENTOS CLR_C9DIG :RESETEA EL CONTADOR DE 9 DIGITOS : 0 0 0 0 0 0 0 0 0 INC_C9DIG :INCREMENTA EN 1 EL CONTADOR DE 9 DIGITOS DEC_C9DIG :DECREMENTA EN 1 EL CONTADOR DE 9 DIGITOS SC9DIG_LCD MUESTRA EL CONTADOR EN LCD 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 7,C9DIG3 ; MOVLF 2,C9DIG2 ; MOVLF 9,C9DIG1 ;_________________________________________________________________________________________ ; E J E M P L O ;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: ;ORG12_INT_TMR0: INC_C9DIG ;INCREMENTA COUNTER EN 1 ; LINE_COL_LCD L1,C1 ;POSICIONA LCD ; SC9DIG_LCD ;MUESTRA CONTADOR 9 DIGITOS ; OUT_INT ;SALIR DE INTERRUPCION ;

Page 118: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

118 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 7,C9DIG3 ; MOVLF 2,C9DIG2 ; MOVLF 9,C9DIG1

E J E M P L O ;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 ;BARRIDO CÍCLICO DE DISPLAYS 7 SEGMENTOS ; BRA MAIN_PROG ; inserte el siguiente codigo en bloque 8: ;ORG12_INT_TMR0: INC_C9DIG ;INCREMENTA COUNTER EN 1 CADA SEGUNDO ; OUT_INT ;SALIR DE INTERRUPCION

DISPLAY DE 7 SEGMENTOS MATRICIAL CON MANEJO DINAMICO CONFIGURACIÓN DEL MODULO DISPLAY 7 SEGMENTOS DE 9 DIGITOS

Por ejemplo, la configuración 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 máximo 1 es el mínimo) son de cátodo común (CC) , que

Page 119: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

119 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 cátodos comunes de los display estarán 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 módulo Display de 7 segmentos sólo controlará 3 displays de ánodo común (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 estarán 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 7,C9DIG3 ; MOVLF 2,C9DIG2 ; MOVLF 9,C9DIG1 ; E J E M P L O ;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 ;BARRIDO CÍCLICO DE DISPLAYS 7 SEGMENTOS ; BRA MAIN_PROG ; 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 visualización 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 visualización del punto se levanta la bandera, por ejemplo si se desea visualizar el numero 3.1415 se activa F_PUNTO5 así: ; ON F_PUNTO5

Page 120: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

120 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PLANO DE CONEXIÓN DE UN DISPLAY DE 7 SEGMENTOS MATRICIAL DE 4 DIGITOS SIN AMPLIFICADOR DE CORRIENTE

(PLANO D7SEG)

(Este circuito es válido si no se requiere gran luminosidad en los displays, recuerde que los PIC máximo pueden proporcionar 25mA en modo sink/source)

Page 121: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

121 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

Page 122: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

122 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 pone en cero los 4 sipos LOAD_SIPO1 L8 carga configuración en sipo1 LOAD_SIPO1F F8 LOAD_SIPO2 L8 carga configuración en sipo2 LOAD_SIPO2F F8 LOAD_SIPO3 L8 carga configuración en sipo3 LOAD_SIPO3F F8 LOAD_SIPO4 L8 carga configuración en sipo4 LOAD_SIPO4F F8 RUN_SIPO establece la configuración programada en los 4 sipos

E J E M P L O LOAD_SIPO 15,15,B'00001111',B'00001111' ;carga sipo1 a 4 con 15 INV_BIT OUT_SIPO30 ;invierte el bit 5 del registro sipo4 RUN_SIPO ;establece la configuración programada

Page 123: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

123 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

(PLANO SIPO)

Nota1: LPM2 controla hasta 4 registros SIPO en cascada (expansión a 32 salidas con 4 SIPO de 8 bit en cascada). La conexión en cascada de 2 ó más 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 sólo 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 Nota2: Aunque LPM2 controla indistintamente el 4015B ó 74LS164, se recomienda trabajar con tecnología CMOS (40XXB) por efecto de Fan In, impedancia de entrada y baja disipación 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.

Page 124: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

124 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 DATO_P3_PTE1,CK_P10_PTA5,LOAD_P9_PTA4 asignacion de pines en bloque 2 GET_PISO :obtiene el estado de los 4 reg piso y lo muetra en las variables REG_PISO1, REG_PISO2, REG_PISO3, REG_PISO4

E J E M P L O GET_PISO ; obtiene estado de entradas piso IF1 INP_PISO30,LBLPISO ; pregunta si el bit 5 del piso4 =1 CHAR_LCD "A" ; muestra letra a en lcd si inp_piso30 =1 LBLPISO

Page 125: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

125 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

(PLANO PISO)

Nota1: LPM2 controla hasta 4 registros PISO en cascada (expansión a 32 entradas con 4 PISO de 8 bit en cascada). La conexión en cascada de 2 ó más 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 expansión 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 sólo 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 tecnología CMOS (40XXB) por efecto de Fan In, impedancia de entrada y baja disipación 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.

Page 126: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

126 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 ARGUMENTOS EXPLICACION NAME_TABLA,POSICION READ_TABLA ETIQUETA ,F16 ;Lee datos tipo byte de una tabla y devuelve el resultado en "REG_TABLA"

READ_TABLAW ETIQUETA ,F16 ;lee datos tipo word de una tabla y devuelve el resultado en "REG_TABLAW”

READ_TABLA_SIG ;lee el siguiente dato de la tabla y devuelve el resultado en "REG_TABLA"

READ_TABLAW_SIG ;lee el siguiente dato de la tabla y devuelve el resultado en "REG_TABLAW"

E J E M P L O 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 ; mueve la constante 1 a var1 READ_TABLA TABLA1,VAR1 ;extrae el segundo dato "p" de la tabla1 y lo guarda en la variable reg_tabla

SBCD_LCDF REG_TABLA ;muestra el dato de la tabla en la lcd TABLA1 DATA "LPM2" ;dato en formato ascii

E J E M P L O 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 READ_TABLAW TABLA2,VAR1 ;extrae el tercer dato (letra c) de la tabla2 y lo guarda en la ;variable reg_tabla

SBCD_LCDF REG_TABLAW ;muestra el dato de la tabla en la lcd TABLA2 DATA 5500 ;primer dato tipo word en decimal DATA H'FF03' ;segundo dato tipo word en hexadecimal DATA "AB" ;tercer dato tipo word en ascii DATA B'0000111100001111' ;cuarto dato tipo word en binario

Page 127: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

127 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

MACROS DEL MODULO TIMER0 (MTMR0) ;REGISTRO DESTINO:TMR0H ;es un registro especial de 8 bit que controla la parte alta ;del periodo de timer0 ;REGISTRO DESTINO:TMR0L ;es un registro especial de 8 bit que controla la parte baja ;del periodo de timer0 MACROS ARGUMENTOS EXPLICACION INTERRUPCION_LP_TMR0 SI/NO ;act/des interrupcion tmr0 en baja prioridad en bloque 1 INTERRUPCION_HP_TMR0 SI/NO ;act/des interrupcion tmr0 en alta prioridad en bloque 1 CONFIG_INT_TMR0 BASE_TIEMPO ;asignacion de periodo de tiempo en bloque 2 PREESCALA,VALOR L3,L16 LOAD_TMR0 BASE_TIEMPO ;carga un nuevo periodo de tiempo en timer0 e inicia conteo

F3,F8/16 LOAD_TMR0F PREESCALA,VALOR ;carga un nuevo periodo de tiempo en timer0 e inicia conteo

RESET_TMR0 ;reinicializa el timer0 y lo habilita para iniciar conteo ACT_INT_TMR0 ;habilita la interrupcion por timer0 DES_INT_TMR0 ;deshabilita la interrupcion por timer0 CFITMR0 ;acostar bandera de interrupcion tmr0 HPITMR0 ;activar modo alta prioridad de interrupcion tmr0 LPITMR0 ;activar modo baja prioridad de interrupcion tmr0

E J E M P L O 1 LOAD_TMR0 TMR0_500US ;carga nueva base de tiempo en timer0 según tabla de constates TMR0

E J E M P L O 2 ;CONFIGURAR EL TIMER A UN PERIODO PERSONALIZADO QUE NO SE ENCUENTRA EN LA TABLA DE

CONSTANTES

Page 128: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

128 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

;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 período 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

;_________________________________________________________________________________________

E J E M P L O 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 período 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

Page 129: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

129 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

TEORIA DE TEMPORIZADORES DEL PIC (TIMER0 Y TIMER1) CONFIGURACIÓN DEL MODULO TEMPORIZADOR TIMER0 / TIMER1

Por ejemplo, la configuración

CONFIG_INT_TMR0 TMR0_1SEG CONFIG_INT_TMR1 TMR1_100US

Significa que la interrupción de Timer0 ocurrirá cada 1 segundo y la interrupción 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 están disponibles para todas las frecuencias de oscilación del cristal. Por ejemplo no es correcto seleccionar un período de interrupción de 2 segundos para el timer 0 con una frecuencia de oscilación de 40 MHz (10MHz x 4 PLL).

Page 130: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

130 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

MACROS DEL MODULO TIMER 1 (MTMR1) ;REGISTRO DESTINO:TMR1H ;es un registro especial de 8 bit que controla la parte alta ;del periodo de timer1 ;REGISTRO DESTINO:TMR1L ;es un registro especial de 8 bit que controla la parte baja ;del periodo de timer1 MACROS ARGUMENTOS EXPLICACION INTERRUPCION_LP_TMR1 SI/NO ;act/des de interrupcion por tmr1 en baja prioridad en bloque 1 INTERRUPCION_HP_TMR1 SI/NO ;act/des de interrupcion por tmr1 en alta prioridad en bloque 1 CONFIG_INT_TMR1 BASE_TIEMPO ;asignacion de periodo de tiempo en bloque 2 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 ;reinicializa el timer1 y lo habilita ACT_INT_TMR1 ;habilita la interrupcion por timer1 DES_INT_TMR1 ;deshabilita la interrupcion por timer1 CFITMR1 ;acostar bandera de interrupcion tmr1 HPITMR1 ;activar modo alta prioridad de interrupcion tmr1 LPITMR1 ;activar modo baja prioridad de interrupcion tmr1

E J E M P L O LOAD_TMR1 TMR1_500US ;carga nueva base de tiempo en timer1 según tabla de constantes TMR1

Page 131: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

131 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Page 132: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

132 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

MACROS DEL MODULO PUSH POP (MPUSHPOP) La habilitación de los módulos PUSH POP es requerida si el módulo en cuestión se empleará en main program, interrupción de baja prioridad y /o interrupción de alta prioridad, es decir, deben habilitarse siempre que exista la posibilidad en el programa de utilizarlo en 2 o más tareas simultáneamente. Por ejemplo si en la interrupción de timer1 en baja prioridad esá visualizando la hora cada segundo en una LCD y en la interrupción del teclado PS2 en alta prioridad también enviará mensajes a la LCD, entonces es necesario habilitar el modulo PUSH POP DELAY Y LCD. HABILITAR_PUSH_POP_DELAY SI/NO ;act/des de opcion push - pop en bloque1 HABILITAR_PUSH_POP_BLINK SI/NO ;act/des de opcion push - pop en bloque1 HABILITAR_PUSH_POP_RANDOM SI/NO ;act/des de opcion push - pop en bloque1 HABILITAR_PUSH_POP_MATH_C SI/NO ;act/des de opcion push - pop en bloque1 HABILITAR_PUSH_POP_TABLA SI/NO ;act/des de opcion push - pop en bloque1 HABILITAR_PUSH_POP_INC_DECVAR SI/NO ;act/des de opcion push - pop en bloque1 HABILITAR_PUSH_POP_LCD SI/NO ;act/des de opcion push - pop en bloque1 HABILITAR_PUSH_POP_ISD1 SI/NO ;act/des de opcion push - pop en bloque1 HABILITAR_PUSH_POP_ISD2 SI/NO ;act/des de opcion push - pop en bloque1

Page 133: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

133 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 pequeños 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 señal 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 señal pwm.

Nota4: si el parametro num_pulsos en la macro setup_pwm es 65535 entonces se generarán pulsos indefinidamente.

Nota5: si el parametro num_pulsos en la macro setup_pwm es 0 entonces se supenderá la generación de pulsos.

Nota6: cuando un ciclo pwm finaliza se desencadena una interrupción en bloque 8. por ejemplo: si configura el canal pwm1 para generar 1000 pulsos con un periodo de 1ms, entonces después 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 configuración al canal pwm1. es importante que el usuario salga de esta interrupción con la macro out_int_pwm1 y no con la macro out_int. tampoco puede emplear la macro OUT_IF para salir de esta interrupción con una macro de comparación IF.

REGISTROS DESTINO DEL MODULO PWM, SERVOMOTOR Y MOTOR DC POR TIMER1 PWM1_PTD0 :PER_PWM1:2, CU_PWM1:2, PUL_PWM1:2 PWM2_PTD1 :PER_PWM2:2, CU_PWM2:2, PUL_PWM2:2 PWM3_PTD2 :PER_PWM3:2, CU_PWM3:2, PUL_PWM3:2 PWM4_PTD3 :PER_PWM4:2, CU_PWM4:2, PUL_PWM4:2 PWM5_PTD4 :PER_PWM5:2, CU_PWM5:2, PUL_PWM5:2 PWM6_PTD5 :PER_PWM6:2, CU_PWM6:2, PUL_PWM6:2 PWM7_PTD6 :PER_PWM7:2, CU_PWM7:2, PUL_PWM7:2 PWM8_PTD7 :PER_PWM8:2, CU_PWM8:2, PUL_PWM8:2 MACROS ARGUMENTOS EXPLICACION OUT_PWM1_PTD0 SI/NO activacion/desactivacion en bloque 1 OUT_PWM2_PTD1 SI/NO activacion/desactivacion en bloque 1 OUT_PWM3_PTD2 SI/NO activacion/desactivacion en bloque 1 OUT_PWM4_PTD3 SI/NO activacion/desactivacion en bloque 1 OUT_PWM5_PTD4 SI/NO activacion/desactivacion en bloque 1 OUT_PWM6_PTD5 SI/NO activacion/desactivacion en bloque 1 OUT_PWM7_PTD6 SI/NO activacion/desactivacion en bloque 1 OUT_PWM8_PTD7 SI/NO activacion/desactivacion en bloque 1 SETUP_PWM1 L16,L16,L16 ;num_pulsos, periodo_total, duty_cicle SETUP_PWM2 L16,L16,L16 ;num_pulsos, periodo_total, duty_cicle SETUP_PWM3 L16,L16,L16 ;num_pulsos, periodo_total, duty_cicle SETUP_PWM4 L16,L16,L16 ;num_pulsos, periodo_total, duty_cicle SETUP_PWM5 L16,L16,L16 ;num_pulsos, periodo_total, duty_cicle

Page 134: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

134 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

SETUP_PWM6 L16,L16,L16 ;num_pulsos, periodo_total, duty_cicle SETUP_PWM7 L16,L16,L16 ;num_pulsos, periodo_total, duty_cicle SETUP_PWM8 L16,L16,L16 ;num_pulsos, periodo_total, duty_cicle SETUP_PWM1F F8/16,F8/16,F8/16 ;num_pulsos, periodo_total, duty_cicle SETUP_PWM2F F8/16,F8/16,F8/16 ;num_pulsos, periodo_total, duty_cicle SETUP_PWM3F F8/16,F8/16,F8/16 ;num_pulsos, periodo_total, duty_cicle SETUP_PWM4F F8/16,F8/16,F8/16 ;num_pulsos, periodo_total, duty_cicle SETUP_PWM5F F8/16,F8/16,F8/16 ;num_pulsos, periodo_total, duty_cicle SETUP_PWM6F F8/16,F8/16,F8/16 ;num_pulsos, periodo_total, duty_cicle SETUP_PWM7F F8/16,F8/16,F8/16 ;num_pulsos, periodo_total, duty_cicle SETUP_PWM8F F8/16,F8/16,F8/16 ;num_pulsos, periodo_total, duty_cicle OUT_INT_PWM1 ;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM1 OUT_INT_PWM2 ;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM2 OUT_INT_PWM3 ;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM3 OUT_INT_PWM4 ;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM4 OUT_INT_PWM5 ;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM5 OUT_INT_PWM6 ;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM6 OUT_INT_PWM7 ;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM7 OUT_INT_PWM8 ;SALIDA DE INT POR FIN DE CICLO EN CANAL PWM8 ORG_FIN_PWM1 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM1 ORG_FIN_PWM2 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM2 ORG_FIN_PWM3 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM3 ORG_FIN_PWM4 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM4 ORG_FIN_PWM5 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM5 ORG_FIN_PWM6 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM6 ORG_FIN_PWM7 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM7 ORG_FIN_PWM8 ;ETIQUETA ORIGEN DE INT POR FIN DE CICLO PWM8

Page 135: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

135 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

E J E M P L O 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 Instrucción CALL de assembler. SUB_ROBOT_SERVO IFFIL CNT_ROBOT,0,LBL1 ;posicion 0 del robot SETUP_PWM1 100,500,10 ;genera 100 pulsos con periodo de ;(500x100us = 50ms) y ciclo util ; de (10x100us=1ms) LBL1 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) LBL2 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) LBL3 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 LBL4 INCRE1 CNT_ROBOT ;incrementa puntero de posicion del robot RETURN

ORG28_FIN_PWM1: CALL SUB_ROBOT_SERVO ;llamar sub OUT_INT_PWM1 ;salida de interrupcion

TEORÍA DEL CONTROL PWM POR TIMER1 CONTROL DE POTENCIA POR PWM EN CORRIENTE DIRECTA

El módulo PWM (Pulse Wide Modulation – Modulación por ancho de pulso) genera oscilación 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 período diferente múltiplo entero de la base de tiempo programada a Timer 1 en un rango de 1 a 65535 (16 bit). Las 8 salidas del módulo PWM son compartidas con el módulo 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 100,4,1 ;num_pulsos,periodo,cicloutil Entonces… Se genera una señal PWM DC con 100 REPETICIONES O NÚMERO DE PULSOS PERIODO TOTAL = 4 x 20uS = 80uS CICLO ÚTIL O TIEMPO EN ALTO = 1 x 20uS = 20uS Es decir, genera una señal periódica 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 %

Page 136: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

136 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

para efectos prácticos puede afirmarse que la tensión que percibiría un voltímetro en directa conectado entre el pin PTD0 y tierra de un PIC alimentado con VCC = 5V sería :

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 señal) de la macro SETUP_PWM1 debe ser menor o igual al segundo argumento (periodo total de la señal). La técnica conocida como modulación por ancho de pulso (Pulse Width Modulation o PWM) se basa en que el valor promedio de una señal periódica es igual a la integral entre cero y el periodo de la función de la señal respecto al tiempo, dividido todo ello por el valor del periodo. En el caso de una señal lógica y considerando el periodo constante, podemos considerar que la función no es continua sino definida a trozos. Entonces obtenemos que el valor medio de la señal durante el periodo fijado es igual al valor de la señal en estado "alto" multiplicado por el tiempo en estado "alto" mas el valor de la señal en estado "bajo" multiplicado por el tiempo en estado "bajo", y dividido todo ello por el tiempo total (periodo).

Según este planteamiento, si generamos las señales de control a un puente de transistores a una frecuencia fija y variamos proporcionalmente cuantas veces mandamos la señal de activación en un sentido y cuantas veces mandamos la señal de detención, podremos variar la tensión media de alimentación del motor y por tanto su velocidad. Para ello podemos utilizar un proceso generado periódicamente que utilizando unas variables de control envíe las señales de actuación al controlador. La técnica PWM (Pulse Wide Modulation) léase (Puls Uáid Moduléishon) consiste en generar una señal periódica repetitiva la cual genera un voltaje promedio de DC en uno o más pines del µC dependiendo del ciclo útil (duty cycle) léase (dáry sáicol). El ciclo útil alude al porcentaje del tiempo que un periodo permanece en ‘1’ lógico. CICLO UTIL (DUTY CYCLE) (Léase Dari sáicol). Se expresa como un porcentaje (%) y se define como la relación entre el ancho del pulso en alto y el período T. Se evalúa con la siguiente fórmula:

% 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 técnica PWM radica en no modificar el período de la señal cíclica generada, es decir, la sumatoria del ciclo útil y el ciclo muerto (dead cicle) siempre debe ser constante. Para modificar la tensión de salida PWM sólo deben alterarse las proporciones de ambos ciclos de la siguiente manera: si se desea incrementar la tensión 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.

Page 137: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

137 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Por ejemplo, en la siguiente figura el período de la señal PWM generada por un µC es 500 uS, el ciclo útil (tiempo en 1 lógico) es 100 uS, el ciclo muerto (dead cicle) (tiempo en ‘0’ lógico) es 400 uS, por lo tanto la tensión promedio DC (tensión que percibiría un multímetro en DC, un carga resistiva, un motor de DC o un led) que se obtendría 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 período T es un tiempo que depende de la carga a controlar con el PWM, está en función de la inercia (mecánica de los motores u óptica de los dispositivos emisores de iluminación 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 fórmulas anteriores se puede generar cualquier tensión analógica entre 0 y VCC. Recuerde que un µC 18F máximo 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 estén separadas. El PIC controlará el ciclo PWM por medio de un optoacoplador, todo esto para evitar que perturbaciones electromagnéticas 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.

Page 138: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

138 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 función de D1, D3 y D2 es proteger al transistor mosfet de posibles picos de tensión 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 alimentación del PIC de la tierra de la etapa de potencia que alimenta al rele y el motor.

Page 139: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

139 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 información de MOTORES SERVOS, DC, AC y PASO PASO referirse a SECCION 19 - MOTORES.DOC

Page 140: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

140 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

TEORIA DE CONTROL DE SERVOMOTORES CON PWM DC

Page 141: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

141 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

CIRCUITO SENCILLO PROBADOR DE SERVOS

Los servos para modelismo son pequeños mecanismos dotados de un motor DC, una reducción por engranajes y electrónica todo integrado dentro de un diminuto gabinete plástico. 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 clásico de la electrónica conectado de tal forma de generar un tren de pulsos ajustable por medio del potenciómetro del 10K. El transistor conectado a la salida amplia la capacidad de manejo de corriente.

A medida que se gira el cursor del potenciómetro el tren de pulsos es modificado con lo que se logra alterar el estado del servo el cual desplaza su eje en función del potenciómetro. Es recomendable emplear un potenciómetro lineal, para que el efecto sea igual en cualquier parte del recorrido del mismo.

El circuito debe ser alimentado con 6v de corriente continua.

Page 142: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

142 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PLANO DE CONEXIÓN DE UN SERVOMOTOR A UN PIC (PLANO SERVOMOTOR)

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

Page 143: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

143 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 pequeños 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á estático y frenado, el motor comsumirá energía. Nota4: el modo burst (léase berst) desactivado (ametrallamiento de bobinas desactivada) implica que el eje delmotor permanecerá libre y no consumirá energía 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 interrupción 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 después 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 interrupción 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 interrupción con una macro de comparación 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,FLAG_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,FLAG_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,FLAG_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

Page 144: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

144 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

:POINTER_M_PASO8,STEP_M_PASO8:2,DELAY_M_PASO8:2,FLAG_DIR_M_PASO8,FLAG_BURST_M_PASO8,FLAG_STOP_M_PASO8

S I M B O L O G I A Y C O N V E N C I O N E S 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

NÚMERO 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 número 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 multiplicación 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 ARGUMENTOS EXPLICACION MOTOR_PASO1 SI/NO :ACTIVACION /DESACTIVACION EN BLOQUE 1 MOTOR _PASO2 SI/NO :ACTIVACION /DESACTIVACION EN BLOQUE 1 MOTOR_PASO3 SI/NO :ACTIVACION /DESACTIVACION EN BLOQUE 1 MOTOR_PASO4 SI/NO :ACTIVACION /DESACTIVACION EN BLOQUE 1 MOTOR_PASO5 SI/NO :ACTIVACION /DESACTIVACION EN BLOQUE 1 MOTOR_PASO6 SI/NO :ACTIVACION /DESACTIVACION EN BLOQUE 1 MOTOR_PASO7 SI/NO :ACTIVACION /DESACTIVACION EN BLOQUE 1 MOTOR_PASO8 SI/NO :ACTIVACION /DESACTIVACION EN BLOQUE 1 MACROS EN BLOQUE 2: ARGUMENTOS CONFIG_MOTOR_PASO1 OUT_A_PTA5,OUT_B_PTE0,OUT_C_PTE1,OUT_D_PTE2,TIPO_MOTOR CONFIG_MOTOR_PASO2 OUT_A_PTD0,OUT_B_PTD1,OUT_C_PTD2,OUT_D_PTD3,TIPO_MOTOR CONFIG_MOTOR_PASO3 OUT_A_PTD0,OUT_B_PTD1,OUT_C_PTD2,OUT_D_PTD3,TIPO_MOTOR CONFIG_MOTOR_PASO4 OUT_A_PTD0,OUT_B_PTD1,OUT_C_PTD2,OUT_D_PTD3,TIPO_MOTOR CONFIG_MOTOR_PASO5 OUT_A_PTD0,OUT_B_PTD1,OUT_C_PTD2,OUT_D_PTD3,TIPO_MOTOR CONFIG_MOTOR_PASO6 OUT_A_PTD0,OUT_B_PTD1,OUT_C_PTD2,OUT_D_PTD3,TIPO_MOTOR CONFIG_MOTOR_PASO7 OUT_A_PTD0,OUT_B_PTD1,OUT_C_PTD2,OUT_D_PTD3,TIPO_MOTOR CONFIG_MOTOR_PASO8 OUT_A_PTD0,OUT_B_PTD1,OUT_C_PTD2,OUT_D_PTD3,TIPO_MOTOR

Page 145: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

145 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

MACROS ARGUMENTOS EXPLICACION SETUP_M_PASO1 L16,L16,SENTIDO,MODO_BURST ;número de pasos,tiempo entre pasos,sentido,modo de ametrallamiento SETUP_M_PASO2 L16,L16,SENTIDO,MODO_BURST ;número de pasos,tiempo entre pasos,sentido,modo de ametrallamiento SETUP_M_PASO3 L16,L16,SENTIDO,MODO_BURST ;número de pasos,tiempo entre pasos,sentido,modo de ametrallamiento SETUP_M_PASO4 L16,L16,SENTIDO,MODO_BURST ;NÚMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO5 L16,L16,SENTIDO,MODO_BURST ;NÚMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO6 L16,L16,SENTIDO,MODO_BURST ;NÚMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO7 L16,L16,SENTIDO,MODO_BURST ;NÚMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO8 L16,L16,SENTIDO,MODO_BURST ;NÚMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO1F F8/16,F8/16,SENTIDO,MODO_BURST NÚMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO2F F8/16,F8/16,SENTIDO,MODO_BURST NÚMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO3F F8/16,F8/16,SENTIDO,MODO_BURST NÚMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO4F F8/16,F8/16,SENTIDO,MODO_BURST NÚMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO5F F8/16,F8/16,SENTIDO,MODO_BURST NÚMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO6F F8/16,F8/16,SENTIDO,MODO_BURST NÚMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO7F F8/16,F8/16,SENTIDO,MODO_BURST NÚMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO SETUP_M_PASO8F F8/16,F8/16,SENTIDO,MODO_BURST NÚMERO DE PASOS,TIEMPO ENTRE PASOS,SENTIDO,MODO DE AMETRALLAMIENTO PAUSA_M_PASO1 L16,L16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST PAUSA_M_PASO2 L16,L16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST PAUSA_M_PASO3 L16,L16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST PAUSA_M_PASO4 L16,L16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST PAUSA_M_PASO5 L16,L16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST PAUSA_M_PASO6 L16,L16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST PAUSA_M_PASO7 L16,L16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST PAUSA_M_PASO8 L16,L16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST PAUSA_M_PASO1F F8/16,F8/16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST PAUSA_M_PASO2F F8/16,F8/16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST PAUSA_M_PASO3F F8/16,F8/16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST

Page 146: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

146 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PAUSA_M_PASO4F F8/16,F8/16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST PAUSA_M_PASO5F F8/16,F8/16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST PAUSA_M_PASO6F F8/16,F8/16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST PAUSA_M_PASO7F F8/16,F8/16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST PAUSA_M_PASO8F F8/16,F8/16,MODO_BURST TIEMPO_PAUSA,BASE_TIEMPO,MODO_BURST STOP_M_PASO_DB DETIENE TODOS LOS MOTORES CON BURST DESACTIVADO STOP_M_PASO_AB 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 ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS DE TODOS LOS 8 MOTORES CLEAR_M_PASO1 ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS CLEAR_M_PASO2 ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS CLEAR_M_PASO3 ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS CLEAR_M_PASO4 ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS CLEAR_M_PASO5 ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS CLEAR_M_PASO6 ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS CLEAR_M_PASO7 ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS CLEAR_M_PASO8 ESTABLECE EN OFF EL ESTADO DE LAS 4 BOBINAS SET_STEP_M_PASO1 L2 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO POINTER_M_PASO1 EL VALOR VÁLIDO ES DE 0 A 3 SET_STEP_M_PASO2 L2 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO POINTER_M_PASO2 EL VALOR VÁLIDO ES DE 0 A 3 SET_STEP_M_PASO3 L2 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO POINTER_M_PASO3 EL VALOR VÁLIDO ES DE 0 A 3 SET_STEP_M_PASO4 L2 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO

Page 147: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

147 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

POINTER_M_PASO4 EL VALOR VÁLIDO ES DE 0 A 3 SET_STEP_M_PASO5 L2 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO POINTER_M_PASO5 EL VALOR VÁLIDO ES DE 0 A 3 SET_STEP_M_PASO6 L2 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO POINTER_M_PASO6 EL VALOR VÁLIDO ES DE 0 A 3 SET_STEP_M_PASO7 L2 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO POINTER_M_PASO7 EL VALOR VÁLIDO ES DE 0 A 3 SET_STEP_M_PASO8 L2 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO POINTER_M_PASO8 EL VALOR VÁLIDO ES DE 0 A 3 SET_STEP_M_PASO1F F8 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO POINTER_M_PASO1 EL VALOR VÁLIDO ES DE 0 A 3 SET_STEP_M_PASO2F F8 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO POINTER_M_PASO2 EL VALOR VÁLIDO ES DE 0 A 3 SET_STEP_M_PASO3F F8 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO POINTER_M_PASO3 EL VALOR VÁLIDO ES DE 0 A 3 SET_STEP_M_PASO4F F8 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO POINTER_M_PASO4 EL VALOR VÁLIDO ES DE 0 A 3 SET_STEP_M_PASO5F F8 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO POINTER_M_PASO5 EL VALOR VÁLIDO ES DE 0 A 3 SET_STEP_M_PASO6F F8 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO POINTER_M_PASO6 EL VALOR VÁLIDO ES DE 0 A 3 SET_STEP_M_PASO7F F8 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO POINTER_M_PASO7 EL VALOR VÁLIDO ES DE 0 A 3 SET_STEP_M_PASO8F F8 ESTABLECE EL ESTADO DE LAS BOBINAS EN REGISTRO POINTER_M_PASO8 EL VALOR VÁLIDO ES DE 0 A 3 OUT_INT_M_PASO1 SALIDA DE INT POR FIN DE CICLO EN CANAL PWM1 OUT_INT_M_PASO2 SALIDA DE INT POR FIN DE CICLO EN CANAL M_PASO2 OUT_INT_M_PASO3 SALIDA DE INT POR FIN DE CICLO EN CANAL M_PASO3 OUT_INT_M_PASO4 SALIDA DE INT POR FIN DE CICLO EN CANAL M_PASO4 OUT_INT_M_PASO5 SALIDA DE INT POR FIN DE CICLO EN CANAL M_PASO5 OUT_INT_M_PASO6 SALIDA DE INT POR FIN DE CICLO EN CANAL M_PASO6 OUT_INT_M_PASO7 SALIDA DE INT POR FIN DE CICLO EN CANAL M_PASO7 OUT_INT_M_PASO8 SALIDA DE INT POR FIN DE CICLO EN CANAL M_PASO8 ORG_FIN_M_PASO1 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO1 ORG_FIN_M_PASO2 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO2 ORG_FIN_M_PASO3 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO3 ORG_FIN_M_PASO4 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO4 ORG_FIN_M_PASO5 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO5 ORG_FIN_M_PASO6 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO6 ORG_FIN_M_PASO7 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO7 ORG_FIN_M_PASO8 ETIQUETA ORIGEN DE INT POR FIN DE CICLO M_PASO8

Page 148: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

148 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

E J E M P L O 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 instrucción call de assembler. en el procedimiento org_fin_m_paso1 del bloque 8 llame la subrutina sub_robot_mpaso, mediante la instrucción 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

Page 149: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

149 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 controlarán al motor, se recomienda que +V del motor sea independiente de +5VDC del PIC.

SECUENCIA MOTOR BIPOLAR

Estos motores necesitan la inversión de la corriente que circula en sus bobinas en una secuencia determinada. Cada inversión 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 TERMINALES A B C D 1 1 0 1 0 2 1 0 0 1 3 0 1 0 1

Page 150: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

150 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 controlarán al motor, este driver puede controlar hasta 2 motores paso a paso unipolares. Otra opción es emplear el driver ULN 2003 que solamente tiene 7 compuertas internamente, es decir, sólo maneja un motor paso a paso unipolar.

Page 151: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

151 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 común de los motores unipolares deben enviarse a + vcc del motor preferiblemente independiente de los +5VDC del PIC.

Page 152: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

152 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

SECUENCIAS PARA MANEJAR MOTORES PASO A PASO UNIPOLARES

Existen tres secuencias posibles para este tipo de motores, las cuales se detallan a continuación. 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 más 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 retención.

PASO Bobina A Bobina B Bobina C Bobina D

1 1 0 1 0

2 0 1 1 0

3 0 1 0 1

4 1 0 0 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 más suave. La contrapartida es que al estar solo una bobina activada, el torque de paso y retención es menor.

PASO Bobina A Bobina B Bobina C Bobina D

1 1 0 0 0

2 0 1 0 0

3 0 0 1 0

4 0 0 0 1

Page 153: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

153 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 Bobina A Bobina B Bobina C Bobina D

1 1 0 0 0 2 1 0 1 0 3 0 0 1 0 4 0 1 1 0 5 0 1 0 0 6 0 1 0 1 7 0 0 0 1 8 1 0 0 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 aplicación específica 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 número 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 características de frenado del motor. 4. INERCIA: La inercia mecánica 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 número de terminales de control y al proceso como tal para variar parámetros 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. TAMAÑO: Son las dimensiones del motor, usualmente en robótica microcontrolada se prefieren pequeños, mas eso depende de la aplicación. 10. RUIDO ACUSTICO Y ELECTROMAGNÉTICO: Al emplear bobinas, todo motor genera un ruido electromagnético que puede afectar el comportamiento del dispositivo de control (uC). 11. PRECISION: Alude a la capacidad de precisar el número de vueltas o grados desde su posición 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 máximo a 12VDC y hasta 1 amperio de corriente dependiendo del Par (torque o fuerza). Suelen ser económicos, tienen alta velocidad y bajo torque. Se encuentran en los juguetes, grabadoras, etc.

Page 154: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

154 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Ventajas: alta velocidad, bajo costo, tamaño pequeño, con 2 pines del uC se puede controlar totalmente, baja potencia, baja inercia. Desventaja: bajo torque, poca precisión (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 precisión (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 ó más. Ventajas: alta precisión, relativo bajo costo (15000 pesos colombianos), tamaño pequeño, 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 ó más. Suelen ser más grandes y tener más torque que los unipolares. Ventajas: alta precisión, 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 más complejo (driver) aunque puede controlarse con un puente H L293. 5. SERVOMOTORES: Son motores relativamente costosos (40.000 pesos colombianos) empleando en modalismo, radiocontrol, animatrónica, 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 precisión, 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 información de MOTORES SERVOS, DC, PASO PASO referirse a SECCION 19

Page 155: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

155 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 MONOFÁSICAS DE 120VAC Y 220VAC A 50/60 Hz

(MPAC) Nota1: Los módulos 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 pequeños que suele configurarse en timer1 al operar para el modulo pac1 a pac8.

Nota2: El tiempo muerto TOFF se controla a través 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 máximo.

Nota4: si el valor de la variable TOFF_PAC es 0 entonces el triac permanecerá en estado ON (máxima tensión de salida) durante todo el semiciclo.

Nota5: Mientras se asigne el timer1 al control PAC no estará disponible la interrupción ORG13_INT_TMR1 ni la interrupción ORG2_INT_PTB1 en bloque 8.

Nota6: Dado que la señal de cross over es inyectada al PIC por el pin PTB1 el módulo PAC configura automáticamente esta interrupción.

Nota7: El usuario debe desactivar manualmente el pull up del puerto B debido a la señal 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 : ARGUMENTOS : EXPLICACION OUT_PAC1_PTD0 SI/NO :activacion /desactivacion en bloque 1 OUT_PAC2_PTD1 SI/NO :activacion /desactivacion en bloque 1 OUT_PAC3_PTD2 SI/NO :activacion /desactivacion en bloque 1 OUT_PAC4_PTD3 SI/NO :activacion /desactivacion en bloque 1 OUT_PAC5_PTD4 SI/NO :activacion /desactivacion en bloque 1 OUT_PAC6_PTD5 SI/NO :activacion /desactivacion en bloque 1 OUT_PAC7_PTD6 SI/NO :activacion /desactivacion en bloque 1 OUT_PAC8_PTD7 SI/NO :activacion /desactivacion en bloque 1 INTERRUPCION_LP_TMR1 SI/NO :activacion /desactivacion en bloque 1 CONFIG_INT_TMR1 PERIODO_TIMER :periodo del timer en bloque2 DES_PULL_UP :desactivacion pull up en bloque 6

E J E M P L O Active timer1 en low priority con una base de tiempo = 1mS con xristal de 20 a 40 MHz preferiblemente (también funciona con otros cristales inferiores para lo cual se recomienda operar el tiempo de timer1 a mínimo 500uS). En el bloque 6 de condiciones iniciales desactive pull up de portb. Con una base de tiempo en timer1 = 1mS se obtiene máximo 8 pasos de voltaje de salida (8.33mS/1mS). Para modificar mediante pulsadores externos en tiempo de ejecución el ángulo de disparo o tiempo muerto TOFF, activamos la interrupción de PTB4 y PTB5 con flanco de bajada y alta prioridad y programamos en bloque 8 de la siguiente forma:

Page 156: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

156 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

;_________________________________________________________________________________________ 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

TEORÍA DE CONTROL DE POTENCIA ALTERNA MONOFASICA CONVERSOR AC – AC CONTROLADO POR ANGULO

DE DISPARO DE TRIAC PARA TENSIONES MONOFÁSICAS DE 120VAC Y 220VAC A 50/60 Hz

(POWER AC - PAC) (MPAC)

Con el módulo Power AC (PAC) de LPM2 se puede controlar y regular la tensión de hasta 8 cargas monofásicas de 120VAC ó 220VAC de alterna como motores, ventiladores, taladros, licuadoras, cargas resistivas como planchas, bombillas incandescentes (no se puede controlar la luminosidad de lámparas fluorescente pues operan con otro principio de funcionamiento). La tensiones que se pueden controlar son monofásicas bifilar, es decir, una fase y el neutro a 120VAC ó 2 fases pero una de las dos se toma como el neutro. El módulo 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 señal de la red de 60Hz) por los pines PTD0 a PTD7, en total son 8 salidas PAC configurable para control de ángulo de conducción de un TRIAC optoacoplado para señales de 120VAC ó 220VAC. Cada una de las 8 salidas puede tener un tiempo de apagado del TRIAC diferente múltiplo 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 módulo POWER AC son compartidas con el módulo 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.

Page 157: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

157 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Por ejemplo, si configura INTERRUPCION_LP_TMR1 SI ;activación Timer 1 en bloque1 OUT_PAC1_PTD0 SI ;activación pac en bloque1 CONFIG_INT_TMR1 TMR1_1MS ;base de tiempo, en bloque 2 DES_PULL_UP ;desactivación pull up portb en bloque 6 MOVLF 4,TOFF_PAC1 ;programación de tiempo muerto de la ;señal 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 señal senoidal de 120VAC ó 220VAC por interrupción de PTB1 en baja prioridad) presenta un cambio de flanco. La señal del cross over entra al microcontrolador por el pin PTB1 configurado automáticamente como interrupción. 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

Page 158: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

158 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 conducción del TRIAC) hasta el siguiente cruce por cero, es decir, por 4.33 mS:

Ton = Tiempo de conducción del TRIAC = 4.33ms = (8.33mS – 4mS).

Para este ejemplo TOFF equivale aproximadamente a la mitad parte del período total de un semiciclo (8.33 mS) en una señal alterna de 60Hz. La señal del pin PTD0 se acopla ópticamente (optotriac MOC 3011 para 110VAC, MOC 3020 para 220AC monofásico) al gate de un TRIAC (BT136). Para efectos prácticos podría afirmarse que la tensión por efecto PWM que percibiría una carga resistiva o inductiva en alterna conectada al TRIAC optoacoplado es proporcional a la siguiente relación:

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

TON = PERÍODO SEMICICLO - TOFF

TON = 8.33mS – 4mS TON = 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 mínima tensión de salida. Si TOFF es programado con un tiempo = 0 el TRIAC estará siempre encendido y se obtendrá la máxima tensión de salida.

Page 159: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

159 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

CROSS OVER OPTOACOPLADO (PLANO CROSS OVER CROSS ZERO)

Page 160: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

160 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

(PLANO PAC) (PLANO TRIAC)

SELECCIÓN 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 tensión umbral de los led comerciales de 3 ó 5mm es de 2 voltios aproximadamente, la tensión umbral de los led internos de los optotriac MOC 30XX es de 1.2 a1.5 Voltios. La corriente que se recomienda a través del led interno del optrotriac es de 10mA aproximadamente. En los optotriac serie 30XX la primera X indica el voltaje máximo 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 conmutación (MOSFET, IGBT, TRIAC etc.) de las

Page 161: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

161 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

sobre tensiones producidas por una carga inductiva. Al ser una red de protección esta se coloca en paralelo con el elemento de conmutación.

Nota: Para mayor información 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 físico (dos láminas metálicas que se unen por atracción magnética del electroimán creado

al energizar la bobina) por lo tanto no hay caida de tensión entre sus terminales y toda la potencia de la fuente se aplica a la carga, además al no presentar una resistencia en el swich no hay pérdidas por efecto joule (calor).

3. El relé aísla (magnéticamente) la etapa de alta potencia de la de control (PIC).

DESVENTAJAS DEL CONTROL POR RELE

1. La activación de la bobina del relé genera interferencia electromagnética y picos indeseados de tensión que

podrían averiar al transistor de conmutación y alterar el funcionamiento del PIC. 2. El número de ciclos de conmutación on/off del relé es muy limitado (10000 aproximadamente, depende del rele),

desgaste mecánico, sulfatación de las láminas metálicas de contacto.

3. El control de los relés es ON/OFF, no permite variar o regular la potencia en la carga.

4. La excitación 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 electrónico de estado sólido el cual controla cargas de alterna con relativa

facilidad. 2. Al ser de estado sólido no experimenta desgaste mecánico y tiene indefinido ciclos de encendido apagado.

3. Permite la regulación 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 más seguro que el acople magnético del relé.

Page 162: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

162 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

DESVENTAJAS DEL CONTROL POR TRIAC

1. El control de cargas inductivas (motores por ejemplo) con el TRIAC puede generar armónicos o interferencia electromagnética a la red, lo cual podría 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 sólido hay una pequeña resistencia y caída de tensión en la unión 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)

Page 163: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

163 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Page 164: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

164 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

MACROS DEL MODULO CONVERSOR ANALOGO DIGITAL (MCAD)

El PIC 18F452 posee un conversor análogo digital de aproximaciones sucesivas (SAR) de 8 canales de entrada multiplexadas, es decir, no puede convertir por las 8 entradas o canales simultáneamente, por el contrario, es menester seleccionar un canal a la vez por software, no obstante, considerando la alta velocidad de conversión (mayor de 30KHz) puede afirmarse que para la mayoría de variables físicas (variables de dinámica lenta como temperatura, presión, humedad, etc) el PIC se comporta como 8 conversores paralelo operando simultáneamente. El modulo conversor análogo/digital convierte un máximo de 8 señales analógica a digital por el puerto a y e del pic. el valor binario de la conversión lo expresa en la variable CONVERCAD en formato de 8 bit o 10 bit dependiendo de la configuración en bloque 1. Las macros IFLM35XXX, IFMVOLTXXX y C_GCENT deben ir precedidas por la macro CAD, es decir, la comparación de voltajes y temperaturas se realiza con base en el último canal convertido. Resolución 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 CONV_ANALOGO_DIGITAL_8BIT SI/NO ;activacion de cad a 8 bit en bloque 1 CONV_ANALOGO_DIGITAL_10BIT SI/NO ;activacion de cad a 10 bit en bloque 1 CONFIG_CAD A1_D7,FM_4 ;selecciona canales a/d, frecuencia de muestreo en bloque 2 CAD CH0-CH7 ;convierte por el canal 0 a 7 CADF F8 :convierte por el canal indicado en F8 CAD_FAST :convierte por el ultimo canal seleccionado SLM35_LCD :muestra en lcd la temp en c de lm35 despues de una ;Conversion SVOLT_LCD FACTOR :muestra en lcd voltaje en (volt) despues de una ;conversion multiplicado por un factor (x1, x10 ó x100) SMVOLT_LCD FACTOR :muestra en lcd voltaje en (mvolt) lcd despues de una ;conversion multiplicado por un factor (x1, x10 ó x100) CFIADC ;acuesta bandera de conversión a/d IFLM35IL L8,LABEL :L8 (0 A 100C) SI TEMP = L8->SIGUIENTE RENGLON IFLM35DL L8,LABEL :L8 (0 A 100C) SI TEMP <> L8->SIGUIENTE RENGLON IFLM35MAL L8,LABEL :L8 (0 A 100C) SI TEMP > L8->SIGUIENTE RENGLON IFLM35MEL L8,LABEL :L8 (0 A 100C) SI TEMP < L8->SIGUIENTE RENGLON IFLM35IF F8,LABEL :F8 (0 A 100C) SI TEMP = F8->SIGUIENTE RENGLON IFLM35DF F8,LABEL :F8 (0 A 100C) SI TEMP <> F8->SIGUIENTE RENGLON

Page 165: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

165 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

E J E M P L O

Conversor A/D como voltímetro y termómetro con sensor LM 35, configurar interrupción 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 ;convierte por ch0 SLM35_LCD ;muestra temperatura en grados CHAR_LCD "g" CHAR_LCD "-" IFLM35MAL 33,LBL_TMR0_1 ;compara si temp > 33 grados CLR_LCD ; si es mayor de 33 º llega aqui T_LCD “ALARMA TEMP” BLINK_LCD 3 LBL_TMR0_1 CAD CH1 ;convierte por ch1 SVOLT_LCD X1 ;muestra voltaje real X1 (mutiplicado por 1) CHAR_LCD "-" IFMVOLTMAL 4500,LBL_TMR0_2 ;compara si volt real > 4500mv TLCD “ALARMA VOLT” ;si es mayor de 4500 mV llega aqui BLINK_LCD 3 LBL_TMR0_2 CAD CH3 ;convierte por ch3 SBCD_LCDF CONVERCAD ;muestra conversion en lcd OUT_INT

Page 166: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

166 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Page 167: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

167 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Page 168: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

168 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

TEORIA DE CONVERSORES ANALOGO/DIGITAL (CAD) CONFIGURACIÓN DEL CONVERSOR ANALOGO / DIGITAL (CAD)

Por ejemplo, la configuración CONFIG_CAD A4_D2_RPN,FM_1 en bloque 2 significa … A4_D2_RPN: Selección de 4 canales analógicos, es decir, se puede conectar hasta 4 sensores o señales analógicos. D2 implica que 2 pines serán I/O digitales, RPN implica que PTA2 será el voltaje de referencia negativo y PTA3 será el voltaje de referencia positivo. La máxima diferencia de potencial entre Vref- y Vref+ será +VCC (5.5V) FM_1: Selección de velocidad de conversión: es la velocidad más alta. La selección de resolución de conversión (10 bit) u (8 bit) se realiza directamente en el bloque 1.

Cuando selecciona B10 en bloque 1 la resolución es 10 bit y el resultado de la conversión 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 resolución es 8 bit y el resultado de la conversión 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 resolución de voltaje Rv de un conversor obedece a la siguiente ecuación:

Rv =(Vref Pos - Vref Neg) / (2n – 1) Donde… n es el número de bit de resolución 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 módulo conversor análogo-digital es generar un número decimal equivalente a la señal analógica aplicada en la entrada. Por ejemplo, si en una entrada analógica (AN0 = CH0 = PTA0) se introduce una tensión de 2.5 Voltios entonces el conversor configurado a 10 bits y el PIC alimentado a 5 Voltios proporciona un número decimal = 512:

#Decimal = 2.5V / Rv

#Decimal = 2.5V/4.88mV #Decimal = 512.29

(se toma la parte entera)

#Decimal = 512

Page 169: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

169 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PARÁMETROS DE UN CONVERSOR A/D

1. Número de bit de salidas (n): alude al número 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 más número bit de salida más precisión y mejor resolución de voltaje se obtendrá.

2. Número de canales (channel) de conversión (Nc): Un mismo circuito conversor ADC puede tener

múltiples entradas, por ejemplo la familia 18FXXXX sólo tiene un circuito ADC tipo SAR pero ofrece hasta 13 entradas análogas multiplexadas (la familia 18F4x2 sólo dispone de 8 canales análogos).

3. Rango de Voltaje de entrada: Expresa la diferencia de potencial entre la mínima y máxima amplitud de

señal 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 sería 3Voltios pero con un offset negativo en -2Voltios. Este proceso es muy importante para un hipotético sensor que varíe -1 a 1 voltio en pasos de 1 mV. Si este fuese el caso, lo correcto sería configurar: Vref- = -1V, Vref+=+1V. Recuerde que lo importante es que la diferencia de potencia entre Vref- y Vref+ no exceda la tensión de alimentación del microcontrolador VDD.

4. Resolución de voltaje (Rv): alude al cambio mínimo de voltaje análogo de entrada que el ADC es capaz

de detectar, es decir, el valor de un bit LSB. Entre más pequeño sea esta tensión mejor será la exactitud de la conversión.

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 número de bit de salida del conversor (8, 10, 12, 16) Vref+ y Vref- son tensiones impuestas por el diseñador, recuerde que la diferencia de potencial entre ellas no puede exceder la alimentación positiva del uC. Nótese que la resolución 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 varía en el orden de 1 a 10 mV tales como electrodos en aplicaciones de biomedicina o sensores de deformación de materiales (strain gauges). Si el diseñador no desea modificar el rango predefinido de voltaje de entrada de un uC (0 a 5V) puede optar por acondicionar la señal de los sensores antes de introducirlas al conversor del PIC. Esto puede hacerse mediante etapas con amplificador operacional o por medio de WheaStone Bridge (léase puente wiston) que convierten leves cambios de resistencia en voltaje.

5. Tiempo de Conversión (Tc): Tiempo en uS ó mS que tarda un ADC en un ciclo de conversión. 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 propagación de los dispositivos internos del conversor, etc.

El tiempo de conversión 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

Page 170: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

170 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

• 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 ADQUISICIÓN 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 > 25ºC. 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

CÁLCULO DEL TIEMPO MÍNIMO DE CONVERSION DE UN PIC 18F452 (Tc) n = 10 bit de resolución Fx = Frecuencia del cristal = 10MHz Fo = Frecuencia de oscilación = 40MHz (10MHz x 4 del PLL) Tosc=Período de oscilación =1/Frec de oscilación = 25nS ADCS (Selección de división del cristal: 2, 4, 8, 16, 32, 64) = 2, es decir: (Fx/2) TACQ = 12.86 uS a 25ºC TAD: Tiempo de conversion por Bit, el TAD mínimo es 1.6uS, es decir: Si Fosc= 4MHz, Tosc = 250nS, ADCS mínimo = 1.6uS/250nS = 6.4, se aproxima al mayor siguiente = 8 Si Fosc= 4MHz, Tosc = 250nS, ADCS mínimo = 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 conversión máxima es Fm= 1/Tc

Fm = 1/32,06 uS Fm = 31.191 KHz

6. Frecuencia máxima de muestreo (Fm): Está determinada por el tiempo de conversión Fmax=1/Tc. Lo ideal es que tienda a infinito, esto determinará la capacidad del ADC de procesar y convertir señales análogas de alta velocidad, tales como audio, vídeo, voz en tiempo real, radiofrecuencia, microondas, etc. Para el PIC 18F452 esta frecuencia es configurable y depende del tiempo de conversión, bit de resolución y la frecuencia del cristal. La frecuencia máxima es Fm = 31 KHz 7. Error de Exactitud (E): Es un error que indica la variación positiva o negativa expresada en LSB. Este valor alude al rango máximo de error que el fabricante garantiza que puede existir en una conversión. Por ejemplo el PIC 18FXXXX tiene un error de exactitud de +- ½ LSB. Esto implica que el valor digital de salida podría desviarse máximo +- ½ LSB por debajo o por encima del valor binario ideal. Es decir, si el valor análogo en la entrada (Vin) es 1 voltio, el número binario de salida (Nb) debería ser

Rv = 1LSB = 0.0196 V

Page 171: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

171 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Nb = Vin/ Rv Nb ideal = 1V / 0.0196V = 51,02 = 51 (se toma la parte entera)

Para este caso, la salida binaria real podría oscilar entre 50 y 52

8. Impedancia de entrada (Zin): Alude a una resistencia virtual conectada a tierra que percibiría la señal o tensión aplicada al pin de entrada del conversor A/D. Los uC se caracterizan por tener una alta impedancia de entrada (Tecnología CMOS en el orden de los MΏ) lo cual garantiza que no representará una carga (load) para la señal que se aplique, es decir, toda la tensión de la señal se transferirá al conversor A/D. Por otro lado, una alta impedancia de entrada incrementa la sensibilidad al ruido eléctrico ambiental lo cual puede distorsionar la medición de la señal, 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 percibiría la señal o tensión aplicada al pin de entrada del conversor A/D. Para los uC 18FXXXX es de 5pF. Entre más pequeño sea el condensador mayor será la frecuencia de corte de la señal de entrada, es decir, mayor frecuencia de entrada admitida al conversor. 10. Corriente de Fuga (I Leakage): Alude a una corriente muy pequeña 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 información acerca de teoría de conversores A/D y D/A referirse a la SECCIÓN 5 de la carpeta SECCIONES DIGIBOOK. Un listado comercial de dispositivos sensóricos de bajo costo se encuentra en la SECCIÓN 1. Para obtener mayor información acerca de la teoría y funcionamiento de sensores remitirse a la SECCION 11. A continuación se ilustra la conexión de dos sensores de temperatura (LM35 / LM335), un sensor de luminosidad LDR (fotorresistencia) y un sensor de presión Motorola a un PIC 18F452. Note los condensadores y resistencias que funcionan como filtros pasabajos de la señal proporcionada por los sensores. La alimentación de todos estos sensores es de +5V pero el rango de tensión de salida varía desde 0 Volts a 2 Volts para los sensores de temperatura y desde 0.2V – 4.8 Volts para el sensor de presión, por lo cual no es necesario activar los voltajes de referencia del PIC (pin PTA2 y PTA3). Los data sheet pdf’s de cada uno de estos sensores se encuentra en la carpeta “DATA SHEET” contenida en el CD DIGITAL BOOK.

Page 172: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

172 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Page 173: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

173 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PLANO DE CONEXIÓN GENERAL DE SENSORES PARA CONVERSOR A/D (PLANO CAD)

Page 174: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

174 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Page 175: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

175 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

TEORÍA DEL DECODIFICADOR DE CONTROL REMOTO INFRARROJO

LPM2 decodifica hasta 5 receptores infrarrojos integrados. Considerando que el pin para el pulsador y led indicador de grabación no requiere entrada por interrupción 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 códigos IR en la memoria EEPROM de dato, el máximo de códigos o teclas que se pueden grabar es 51. PUL_LED_IR_PTA4: Se asigna el pin PTA4 para la conexión simultánea del led indicador de grabación y pulsador de grabación. Se sugiere seleccionar PTA4 debido a la limitación 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 versión agosto/2007 sólo decodifica la marca emerson. PRINCIPIO DE FUNCIONAMIENTO: Al presionar cualquier tecla del control remoto IR el gestor automático 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 grabación en la EEProm de dato. Considerando que no es posible independizar la activación/desactivación de la interrupción por los pines RB4 RB7 (el PIC controla estas 4 interrupciones con una sola orden o bit de habilitación 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 quedarán configurados como entradas por interrupción esperando que se conecte el dato de los 4 receptores infrarrojos.

Si la aplicación sólo 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 aplicación 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 aplicación 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

Page 176: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

176 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

respectivamente. Si la aplicación 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 quedarían inutilizadas para cualquier hardware, déjelas al aire pues tienen pull up interno activado.

Si la aplicación 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 quedaría inutilizada para cualquier hardware, déjela al aire pues tiene pull up interno activado.

El módulo receptor IR requiere de uno a cinco sensores integrados IR (se recomienda Sharp metálico) de tres pines (+VCC=5Volt, GND y Dato de salida), suelen venir en dos encapsulados: plástico y metálico. En la siguiente figura se muestra cuáles son los 3 pines respectivos dependiendo del encapsulado aunque esto puede variar de un fabricante a otro. Debe respetarse siempre la conexión del dato del sensor IR en el puerto B con interrupción. Note que el Led indicador de grabación y recepción de radiación infrarroja comparte el pin del PIC con el pulsador, esto se denomina programación simultánea de pines y es muy útil para ahorrar pines I/O del microcontrolador. El módulo RX infrarrojo tiene asignada toda la memoria EEPROM de dato (256 direcciones de 8 bit) para guardar los códigos de cada tecla programada, es decir, cuando active el módulo 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 dirección cero. En conclusión, máximo se pueden programar 51 teclas del control para 51 funciones diferentes ( 51 x 5 = 255 bytes de memoria EEPROM de dato ocupadas). Es de interés para el lector saber que si sólo programa 10 teclas del control entonces sólo ocupará 50 bytes de la memoria EEPROM de dato (10 teclas x 5 Bytes = 50 Bytes), quedando disponibles 206 bytes (dirección 50 a 255) para alguna aplicación particular del usuario.

Page 177: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

177 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PLANO RECEPTOR DE CONTROL REMOTO INFRARROJO IR CON INTERRUPCIÓN (PLANO RXIR)

El sensor IR Sharp metálico tiene los pines ilustrados en la figura anterior mirándolo de frente, es decir, mirando al fotodiodo o fototransistor interno de la cápsula. Lo mismo es aplicable al sensor con encapsulado plástico. Algunos sensores con encapsuado plástico tienen una estructura metálica exterior, en este caso, los pines del mismo corresponden al orden del encapsulado totalmente metálico. Se debe conectar a tierra la estructura metálica que cubre los sensores infrarrojos para evitar interferencia electromagnética.

Page 178: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

178 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

CÓMO PROGRAMAR LAS TECLAS DEL CONTROL REMOTO IR Se pueden programar hasta 51 teclas del control remoto para asignarles funciones específicas en nuestra aplicación. 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 grabación de teclas en la posición 0, es decir, prepara al microcontrolador para grabar en la primera posición de la EEPROM de programa (dirección 0). 3. Procure realizar esta operación en un lugar con bajo nivel de luminosidad, no permita que lámparas fluorescentes incidan directamente sobre el receptor IR. 4. Presione y mantenga presionado el pulsador “GRABADOR DE CODIGO” mientras emite una radiación infrarroja cualquiera hacia el sensor IR. Libere el pulsador “GRABADOR DE CODIGO” y espere hasta que el led indicador se apague automáticamente (2 seg aproximadamente). A continuación se debe presionar a una distancia de 30cm aproximadamente la tecla del control remoto que se desea grabar en la primera posición de memoria. Si el proceso es correcto el LED indicador de grabación debe oscilar 3 veces y luego apagarse. 5. Automáticamente el puntero de grabación 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 aplicación puede probar si quedaron bien programadas presionado la tecla respectiva del control remoto y verificando que ocurre la interrupción de recepción de código IR (esto lo veremos más adelante). Nota 1: Para evitar la interferencia electromagnética (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 alimentación 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 apuntándole 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 más factible, que los pines seleccionados no sean los correctos, en tal caso cambie la distribución de los pines y vuelva a intentar.

SENSOR DE PROXIMIDAD INFRARROJO

Otra aplicación de los sensores infrarrojos es un sensor de proximidad por reflexión que podría 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 través de una etapa amplificadora en corte saturación tal como un transistor NPN en emisor común con una resistencia de 10 a 47 Ώ (resistencias pequeñas garantizan un gran alcance en el detecor de proximidad reflectivo) en serie con el led o los led’s infrarrojos. Aunque en teoría una resistencia de 10 ohm implicaría una corriente elevada circulando por el led y el emisor del transistor la realidad es que como la señal de control es una onda cuadrada entonces se presenta el efecto de PWM de DC. La distancia de reflexión depende: 4. La sensibilidad del receptor infrarrojo (se recomienda sharp metálico de 3 pines). 5. El ciclo útil de la señal 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 número 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 través de los led emisor infrarrojos. Garantice una corriente de aproximadamente 150mA DC

pulsantes, para lograr esto debe calcular la RC para uno ó más led infrarrojos en serie como se observa en la siguiente figura. Utilice una RC = 27 Ώ para 1 led, 1 Ώ para 2 led.

Page 179: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

179 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

La detección de la señal reflejada se puede programar en el microcontrolador por el método polling o por interrupción (sugerido) de un pin del puerto B.

PLANO DE SENSOR DE PROXIMIDAD INFRARROJO (PLANO SENSOR PROXIMIDAD)

Page 180: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

180 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 señales provenientes de ;cualquier control remoto infrarrojo de uso doméstico 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 ;_________________________________________________________________________________________ ; E J E M P L O 1 ;El siguiente ejemplo decodifica e identifica la tecla presionada desde un control remoto ;infrarrojo de TV ó cualquier electrodoméstico 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) ; código 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 ;_________________________________________________________________________________________ ; E J E M P L O 2 ; SIMULACION EN PROTEUS DEL CONTROL INFRA ROJO

Page 181: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

181 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

;El siguiente ejemplo permite detectar datos provenientes de un control Infrarojo y conexión ;UART RS232 para simulación de teclado PS2 desde Proteus. Con el control "virtual terminal" ;de Proteus el PIC recibirá datos desde el teclado conectado al PC y simularán 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 transmisión de datos del módulo UART de LPM2 y el ;"virtual terminal" de proteus a la misma tasa de baudios. ;Este ejemplo sólo simula las teclas 0 a 9 desde proteus, le resta 48 al número ascii ;recibido para convertirlo en decimal. Es decir, el ascci del número "0" es 48, el del ;número 1 es 49 y así sucesivamente, para convertirlo a decimal se le resta 48 al dato ;ascci recibido. ; -------------------------------------------------- ; código en bloque 8 de interrupciones ;ORG14_INT_RXUART: DECRE REG_RXUART,48 ;convierto ascii a decimal ; MOVFFF REG_RXUART,REG_TECIR ;cargar dato uart en reg_IR ; GOTO ORG18_INT_1_IR ;salto a interrupcion infrarrojo ; -------------------------------------------------- ;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

Page 182: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

182 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

TEORÍA DE TECLADO PS2 AT DE LA PC (TEORIA TPS2)

LPM2 decodifica hasta 5 teclados PS2 sincrónico (NO teclado USB) de computadora. Decodifica todas las teclas del 0 al 9, de la A mayúscula hasta la Z mayúscula, F1 A F12, ESCAPE, SPACE, BACK, TAB. Considerando que la línea DATO de cada uno de estos teclados no requiere entrada por interrupción 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 línea de dato del teclado PS2 número 1 se conecta al pin PTB3 (no tiene interrupción) 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 línea de dato del teclado PS2 número 2 a PS2 número 5 se conecta al pin PTNN, es decir, no se asigna al PIC pues sólo se conectará un teclado PS2 al PIC (el teclado número 1). La línea 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 módulo 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 automático 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 activación/desactivación de la interrupción por los pines RB4 RB7 (el PIC controla estas 4 interrupciones con una sola orden o bit de habilitación 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 quedarán configurados como entradas por interrupción esperando que se conecte el CK de 4 teclados PS2.

Si la aplicación sólo 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 línea de dato (debido al pull up interno).

Si la aplicación 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 aplicación requiere de 5 teclados PS2 entonces active INTERRUP_HP_1_TECPS2_CK_PTB2 y

Page 183: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

183 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

active INTERRUP_4_TECPS2_CK_PTB4_7 y utilice las entradas PTB2 y PTB4 a PTB7 como entrada de reloj respectivamente.

Si la aplicación 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 quedaría inutilizada para cualquier hardware, déjelas al aire pues tienen pull up interno activado.

Si la aplicación 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 quedaría inutilizada para cualquier hardware, déjela al aire pues tiene pull up interno activado.

Si otro módulo (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 módulo teclado PS2.

Se pueden conectar varios teclados PS2 en paralelo siempre y cuando no presione teclas simultáneamente, es decir, si una aplicación 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 través de un diodo 1N4148 como lo muestra la siguiente figura:

Page 184: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

184 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Page 185: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

185 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PLANO DE CONEXIÓN DE TECLADOS PS2 DE COMPUTADORA (PLANO TPS2)

DIAGRAMA DE CONEXIÓN DEL PLUG (MACHO-MOLE) DEL TECLADO PS2

5 Pin DIN

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

PS/2

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

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 daña irremediablemente el microcontrolador interno del teclado.

Page 186: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

186 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PROTOCOLO DE COMUNICACIÓN DE TECLADO A PIC

PROTOCOLO DE COMUNICACIÓN DE PIC A TECLADO

Page 187: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

187 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

CODIGOS ENVIADOS POR EL CODIFICADOR DEL TECLADO PS2

El uC de los teclados PS2 no envían 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 código ASCII 65 sino un código particular (1C) en hexadecimal, es decir el número 28 en decimal.

Nota: Si requiere mayor información del Teclado PS2 remitirse a la SECCION 6 del DIGIBOOK.

Page 188: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

188 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 números 0 a 9 son detectados con su respectivo código

; Ascii, por lo tanto no requieren representarse mediante constantes especiales

TEC_ESCAPE 27 TECLA ESCAPE TEC_BACK 8 TECLA RETROCESO TEC_ENTER 13 TECLA ENTER TEC_TAB 9 TECLA TAB TEC_F1 112 TECLA F1 TEC_F2 113 TECLA F2 TEC_F3 114 TECLA F3 TEC_F4 115 TECLA F4 TEC_F5 116 TECLA F5 TEC_F6 117 TECLA F6 TEC_F7 118 TECLA F7 TEC_F8 119 TECLA F8 TEC_F9 120 TECLA F9 TEC_F10 121 TECLA F10 TEC_F11 122 TECLA F11 TEC_F12 123 TECLA F12 TEC_SPACE 32 TECLA ESPACIO

;_________________________________________________________________________________________ ; E J E M P L O 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)

; --------------------------------------------------

; código 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

Page 189: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

189 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

; TLCD "TECLA ESCAPE" ;LBL3 OUT_INT

;_________________________________________________________________________________________ ; E J E M P L O 2

; SIMULACION EN PROTEUS DEL TECLADO PS2 DE COMPUTADORA

;El siguiente ejemplo permite detectar datos provenientes de un teclado PS2 y conexión UART ;RS232 para simulación de teclado PS2 desde Proteus. Con el control "virtual terminal" de

;Proteus el PIC recibirá datos UART desde el teclado conectado al PC y simularán 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 transmisión de datos del módulo UART de LPM2 y el

;"virtual terminal" de proteus a la misma tasa de baudios.

; -------------------------------------------------- ; código en bloque 8 de interrupciones

;ORG14_INT_RXUART: MOVFFF REG_RXUART,REG_TECPS2 ;cargar dato uart en reg_tps2

; GOTO 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 ;ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº

Page 190: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

190 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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). ;_________________________________________________________________________________________ ; E J E M P L O 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. ; código 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. ;ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº

Page 191: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

191 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PLANO DEL TECLADO MATRICIAL 4X4, 4X3 CONFIGURACIÓN DEL TECLADO MATRICIAL 4X3 ó 4X4

POR INTERRUPCION DE CAMBIO EN RB4 A RB7 (PLANO TMAT) Por ejemplo, la configuración CONFIG_TEC_MAT OUT1_PTC0,OUT2_PTC1,OUT3_PTC2,OUT4_PTC3 ;en bloque 2 Significa que… Los 4 primeros pines del puerto C serán las 4 salidas de la matriz del teclado, note que la macro sólo espera como argumentos 4 pines del PIC. Las 3 ó 4 entradas del PIC para la matriz SIEMPRE serán los pines RB4 a RB6 (para el teclado 4 x 3) o los pines RB4 a RB7 (para el teclado 4 x4).

LPM2 soporta la programación de pines I/O con funciones simultáneas. Por ejemplo si en un proyecto se requiere conectar un teclado matricial con una o más 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 automático 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).

Page 192: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

192 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PLANO DE CONEXIÓN DE LCD Y TECLADO MATRICIAL COMPARTIENDO CIERTOS PINES DE CONTROL (PLANO TMAT)

Page 193: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

193 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

MACROS TRANSCEIVER TRF2p4 HP DR1 PTB1 EN MODO SHOCK BURST TRF 2.4 GHZ (MTRF)

El transceiver TRF de 2.4GHz emplea modulación 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 lógico. La limitación 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. CONFIGURACIÓN TRF 2.4 (PARA CAMBIAR ESTA CONFIGURACIÓN VER EL ARCHIVO MACROS DE LPM²)

en la configuración 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 BYTE_18_TEST3 142 H'8E' B'10001110' VALOR DEFAULT #DEFINE BYTE_17_TEST2 8 B'00001000' VALOR DEFAULT #DEFINE BYTE_16_TEST1 28 B'00011100' VALOR DEFAULT #DEFINE BYTE_15_DATA2_W 200 B'11001000' # BITS DE DATOS PAYLOAD RX2 #DEFINE BYTE_14_DATA1_W 200 B'11001000' # BITS DE DATOS PAYLOAD RX1 #DEFINE BYTE_13_ADD2_5 10 ;DIRECCION DE RX 2 #DEFINE BYTE_12_ADD2_4 8 #DEFINE BYTE_11_ADD2_3 6 #DEFINE BYTE_10_ADD2_2 4 #DEFINE BYTE_9_ADD2_1 2 #DEFINE BYTE_8_ADD1_5 5 ;DIRECCION DE RX 1 #DEFINE BYTE_7_ADD1_4 4 #DEFINE BYTE_6_ADD1_3 3 #DEFINE BYTE_5_ADD1_2 2 #DEFINE BYTE_4_ADD1_1 1 #DEFINE BYTE_3_ADDR_CRC 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)

#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

#DEFINE BYTE_1_CHANNEL B'00010100' BIT 7-1= SELEC CHANNEL TX 1 A 128 BIT1 = RX(1)/TX(0)

Page 194: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

194 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 ;establece la direccion del transceiver destino TX_PAYLOAD_TRF ;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

Page 195: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

195 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

D E S A R R O L L O D E S U B R U T I N A S EN BLOQUE 9

TX_TRAMA SET_DIR_RX_TRF 5,4,3,2,1 ;establece la direccion del transceiver destino TX_PAYLOAD_TRF ;transmite direccion destino y payload establecido ;en REG_TRF1 a REG_TRF25 RETURN

Page 196: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

196 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

E J E M P L O 2 Recepción de 25 bytes de PAYLOAD y retransmisión al pc por UART RS232 ORG28_INT_RX_TRF2p4: TX_UARTF REG_TRF25 TX_UARTF REG_TRF24 TX_UARTF REG_TRF23 TX_UARTF REG_TRF22 TX_UARTF REG_TRF21 TX_UARTF REG_TRF20 TX_UARTF REG_TRF19 TX_UARTF REG_TRF18 TX_UARTF REG_TRF17 TX_UARTF REG_TRF16 TX_UARTF REG_TRF15 TX_UARTF REG_TRF14 TX_UARTF REG_TRF13 TX_UARTF REG_TRF12 TX_UARTF REG_TRF11 TX_UARTF REG_TRF10 TX_UARTF REG_TRF9 TX_UARTF REG_TRF8 TX_UARTF REG_TRF7 TX_UARTF REG_TRF6 TX_UARTF REG_TRF5 TX_UARTF REG_TRF4 TX_UARTF REG_TRF3 TX_UARTF REG_TRF2 TX_UARTF REG_TRF1 OUT_INT

Page 197: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

197 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PLANO DE CONEXIÓN ENTRE PIC Y TRANSCEIVER TRF 2.4 GHZ (PLANO TRF)

Nota: PTB1 no puede ser cambiado, es la entrada de interrupción.

Page 198: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

198 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 VALOR EQUIVALENTE DTMF_1 | 1 DTMF_2 | 2 DTMF_3 | 3 DTMF_4 | 4 DTMF_5 | 5 DTMF_6 | 6 DTMF_7 | 7 DTMF_8 | 8 DTMF_9 | 9 DTMF_0 | 10 DTMF_A | 11 DTMF_N | 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). ;_________________________________________________________________________________________ ; E J E M P L O 1 ;El siguiente ejemplo identifica el dato DTMF recibido desde un decodificador MT8870 ;y lo muestra en LCD.

Page 199: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

199 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

;Active INTERRUPCION_DTMF1_HP_STD_PTB0 en bloque 1. ; código 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.

Page 200: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

200 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

TEORIA DEL DECODIFICADOR DTMF MT8870 CONFIGURACIÓN DEL MODULO DECODIFICADOR DE TONOS TELEFÓNICOS CON INTERRUPCIÓN

El circuito integrado DTMF 8870 es un decodificador de tonos DTMF (Multifrecuencia de doble tono) que envía un pulso de 100mS con flanco de subida por el pin 15 (STD) cuando recibe un tono válido del 0al 9, # ó *. LPM2 admite la conexión de dos circuitos integrados decodificadores de tono telefónico DTMF MT88L70. Mediante este módulo se puede emplear una línea telefónica fija o celular como control remoto. Por ejemplo, la configuración

CONFIG_DECOD_DTMF1 Q1_P11_PTA5,Q2_P12_PTE0,Q3_P13_PTE1,Q4_P14_PTE2 Significa … Q1_P11_PTA5 : El pin PTA5 recibirá la señal 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 módulo activado) como entrada de interrupción por flanco de subida. No es necesario desactivar el pull up del puerto B. Nota2: La alimentación del DTMF no debe exceder 5.0 voltios, de lo contrario decodificará ciertos tonos y otros no. En verdad según el data sheet este integrado debe alimentarse a 3.6 Voltios, no obstante con tensiones entre 3.6 y 5 voltios funciona bien. Otra opción es alimentar el PIC también a 3.6 Voltios. Nota3: La resistencia R1 sólo es necesaria si la conexión será a través de teléfono fijo alámbrico.

PLANO DE CONEXIÓN DEL DECODIFICADOR DTMF MT 8870 (PLANO DTMF)

Al presionar cualquier tecla del teléfono fijo o celular el gestor automático de interrupciones (handler interruptions de

Page 201: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

201 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

CÓDIGO GENERADO

0 1010 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 * 1011 # 1100

Page 202: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

202 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

SWICH ANALOGO 4016B ó 4066B

Page 203: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

203 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Page 204: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

204 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

POTENCIOMETROS DIGITALES X9C102/103/104/503

Page 205: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

205 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

GENERADOR DE TONOS DTMF

Page 206: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

206 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

LPM2 posee 4 módulos independientes de comunicación UART RS232 half duplex entre pic – pc, número de bit de datos:8, paridad:ninguna y bit stop:1. El número 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 podrán transmitir en modo half duplex (uno a la vez, no simultáneamente) hasta (19200/10)= 1920 caracteres ASCII o bytes en un segundo, se recomienda trabajar a 19200 baudios. Todas las macros terminadas en UART, también 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 según tabla LOAD_SPEED_UART VELOCIDA_BAUDIOS ;establece velocidad de uart en baudios segun tabla en tiempo de ejecución TX_UARTF F8/16 ;envia el dato de la variable por uart TX_UART L16 ;envia la constante por uart TXA_UARTF F8/16 ;envia convertido a ascii el dato decimal 0 a 9 de una variable TXBCD_UARTF F8/16 ;envía el bcd de la variable por uart TXABCD_UARTF F8 /16 ;envia convertido a ascii el dato BCD decimal 0 a 9 de una variable TXC9DIG_UART ;envia los 9 registros del contador de 9 digitos bcd9 a bcd1 TXAC9DIG_UART ;envia convertido a ascii el dato BCD decimal 0 a 9 del contador de 9 digitos bcd9 a bcd1 TXED_UART L8 ;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 ; CADENA ;envia cadena de caracteres por uart sin pausa entre CARACTERES ;TEXTO_UART MENSAJE ; CADENA ;envia cadena de caracteres por uart sin pausa entre ;TUART MENSAJE ;caracteres y envia enter al final para cambio de linea ;ENTER_UART ;enviar el ascii 13 equivalente al enter por uart

Page 207: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

207 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

CADENA ,PAUSA MENS_UARTF MENSAJE,F16 ;envia cadena de caracteres por uart con pausa en milisegundos entre cada carácter, la variable de pausa deber tipo word SLM35_UART ;transmite por uart temp en ºc de lm35 despues de una conversion cad SVOLT_UART FACTOR ;transmite por uart voltaje en (volt) multiplicado por un factor después de una 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 carácter. ;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 ; E J E M P L O 1 ; SIMULACION EN PROTEUS DE RECEPCIÓN DE DATOS UART RS232 ;El siguiente ejemplo decodifica e identifica el dato proveniente de una conexión UART a ;un PC u otro periférico con este protocolo como un enlace ZigBee, GPS, GPRS, etc. ;Active INTERRUPCION_HP_RXUART_PTC7 en bloque 1. ;Configure la velocidad de transmisión de datos del módulo UART de LPM2 y el ;"virtual terminal" de proteus a la misma tasa de baudios. ; -------------------------------------------------- ; código 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 código ASCII 65, es decir, ;en el ejemplo anterior : IFFIL REG_RXUART,65,LBL1

Page 208: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

208 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

CONFIGURACIÓN DEL MODULO UART RS 232 PARA COMUNICACIÓN HALF DUPLEX PC-PIC

Por ejemplo, la configuración CONFIG_UART BAUDIOS_19200 ;en bloque 2 significa que… Selecciona 19200 baudios de velocidad de transmisión, es decir, transmite hasta 1920 bytes o caracteres en un segundo: Número 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 aplicación específica requiere una tasa de transmisión en baudios que no esté disponible en las tabla anterior entonces se puede calcular la configuración 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 solución a X es la ecuación 1 ó 2 en la siguiente figura.

Page 209: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

209 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

En el ejemplo anterior X en modo BRGH = 0 (Ecuación 1 ) = 25 X en modo BRGH = 1 (Ecuación 2 ) = 103 Los valores válidos de X están comprendidos entre los enteros de 0 a 255 y se toma el que tenga menor parte decimal pues ésta constituye el error de transmisión 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 podrían ser útiles pues al reemplazar el 103 de la ecuación en modo BRGH1 también se obtendría una tasa de baudios de 9615 lo cual implica un error del 0.16%, es decir, que otra forma alternativa de configuración es:

CONFIG_UART BRGH1,103

Page 210: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

210 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

FUNCIONAMIENTO DE LA INTERRUPCION UART: Al enviar cualquier dato desde el PC hacia el PIC el gestor automático de interrupciones (handler of interruptions) (léase hándoel 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 código 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 comunicación entre un microcontrolador y un PC por el puerto serial con el protocolo RS232 y con el conector DB9 sólo 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)

CONFIGURACIÓN DE LA TRAMA RS232 PARA COMUNICACIÓN HALF DUPLEX PC - PIC BIT START: (0 LÓGICO) Es un Bit con el cual inicia una transmisión RS 232. BIT DE DATOS (4,5,6,7,8): Corresponden a la información útil (Configurar como 8 para comunicación con

PIC) BIT PARIDAD (PAR, IMPAR, NINGUNA) (Configurar como NINGUNA para comunicación con PIC) BIT STOP: (1 1.5 2) (1 LÓGICO) Configurar como 1 BIT STOP para comunicación con PIC) CONTROL DE FLUJO: (XON/XOFF, HARDWARE, NINGUNO) Configurar como NINGUNO para

comunicación con PIC) VELOCIDAD (BAUDIOS O BIT POR SEGUNDO): (300, 1200, 2400,9600, 19200, 76800, 96000, 300000)

Configurar como 19200 para comunicación con PIC) La trama configurada entre comunicación PIC – PC half duplex UART es de 10 bit : (1 bit start + 8 bit de datos + 1 bit stop)

Page 211: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

211 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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 fórmula:

19200 bps/10 bit de trama = 1920 bytes En resumen: para establecer una comunicación entre un µC y el PC por el puerto serial y Visual Basic una

configuración correcta es: BAUDIOS, PARIDAD, #BIT, BIT STOP

19200,N,8,1

Page 212: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

212 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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) Detección de llamada. PIN 8: CTS: (Clear to Send) El DCE autoriza la transmisión solicitada. PIN 3: TXD: (Transmit Data) Línea de transmisión de datos serie.

Page 213: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

213 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PIN 2: RXD: (Received Data) Línea de recepción de datos serie. PIN 5: GND: (Ground) Línea de masa de referencia. 0V. PIN 1: DCD: (Data Carrier Detect) Detección de portadora.

Las velocidades de transmisión que puede soportar este estándar van desde los 75bps hasta los 300Kbps. Con respecto a las distancias máximas se propone que no sean superiores a 15 metros. Aunque un diseño cuidadoso puede permitir distancias muy superiores, hay que suponer que esta limitación teórica se puede manifestar en la práctica en dispositivos que cumplan la norma.

Por otro lado, el Puerto Serie permite que los cables que se emplean para la comunicación sean más 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 intrínseca de los conductores no va a ser un problema para los cables empleados en este tipo de comunicación. Otra ventaja respecto a una comunicación por el puerto paralelo es que no se necesitan tantos conductores lo que abarata mucho los sistemas. La comunicación efectuada por un Puerto RS232 es asincrónica. Esto significa que no hay señal de reloj asociada a la señal de datos. Cada palabra es sincronizada empleando un bit de comienzo (start bit) y un reloj interno en cada lado que mantiene la temporización. Siempre que se emplea el formato 8N1, es decir, 8 bits de datos, sin paridad y un bit de parada ( stop bit) la línea de datos, cuando no esta transmitiendo datos validos, se pone a ´1´ (-9Volt aproximadamente). Es de imaginar entonces que una transmisión siempre comienza con un ´0´ lógico. Entonces cada bit es enviado por la línea una cada vez. El LSB bit menos significativo es enviado primero. Al final de la señal aparece el bit de parada, que es un nivel lógico ´1´., que señala el fin de la transmisión. El bit siguiente al bit de parada es un ´0´ lógico. Esto debe significar que hay otra palabra a continuación. Si no fuera así, la línea de recepción se mantendría entonces en un ‘1’ lógico, que es su estado de no transmisión de datos validos. Si esto ocurre por un tiempo en que se pudiera haber enviado otra palabra, el receptor lo interpretara como una señal de ruptura. Lo anteriormente descrito solo es valido para la señal UART. Recordemos el RS232 emplea niveles de voltajes entre –3 y –25 y +3 y +25. Las líneas de transmisión y recepción del RS232, que son las que esencialmente portan datos, de ahí el nombre de Puerto Serie. Existen en este además otras líneas que son, en esencia, de comunicación paralela. Estas son (RTS, CTS, DCD, DSR, DTR, RTS Y RI) pero mantienen los niveles lógicos del RS232.

Nota: Para mayor información del puerto serial y protocolo RS232 referirse a SECCION 7 - PUERTOS E INTERFACES DEL COMPUTADOR.DOC en la carpeta SECCIONES DIGIBOOK.

Page 214: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

214 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PLANO DE CONEXIÓN HALF DUPLEX RS232 ENTRE PIC Y PC MEDIANTE UART MAX232 (PLANO UART)

Page 215: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

215 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PLANO ECONOMICO OPCIONAL DE CONEXIÓN HALF DUPLEX RS232

ENTRE PIC Y PC MEDIANTE TRANSISTORES SIN USAR MAX 232 (PLANO UART)

CONSTANTES DEL TECLADO DEL PC POR RECEPCIÓN UART RS232

NOMBRE CODIGO SIGNIFICADO TEC_ESCAPE 27 TECLA ESCAPE

Page 216: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

216 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

Page 217: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

217 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

CONEXIÓN 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 máximo 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 periféricos con la misma tensión de puerto USB del PC, siempre y cuando consuma menos de 100mA. Tenga precaución de no hacer un cortocircuito pues podría 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 número 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 haría con un COM físico del PC. La conexión 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

Page 218: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

218 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

NOTA: TAMBIÉN PUEDE USARSE EL CABLE DKU5 COMO REEMPLAZO DEL CA-42

Page 219: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

219 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

INTERFAZ UART ZIG BEE XBEE

VDD

RX

TX

XBee - Pro

5

2

3

4

14

6

7

8

9

10 11

12

13

1

15

16

17

18

19

20

RESET

DOUT

DIN/CONFIG

DO8

VREF

PWM0/RSSI

PWM1

RESERVED

DTR/SLEEP_RQ/DI8

GND AD4/DIO4

CTS/DIO7

ON/SLEEP

VDD

ASSOC/AD5/DIO5

RTS/AD6/DIO6

AD3/DIO3

AD2/DIO3

AD1/DIO1

AD0/DIO0

220

TX/PWR

XBP - PIC

Page 220: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

220 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

(TEORIA AT)

Los comandos AT son instrucciones codificadas que conforman un lenguaje de comunicación entre el hombre y un terminal modem. Se denominan así por la abreviatura de attention. La finalidad principal de los comandos AT es la comunicación con módems, aunque la telefonía móvil GSM también ha optado este lenguaje como estándar 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 ------------------- Configuración 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 línea) 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 más básico OK ATI FABRICANTE NOKIA ATA Respuesta de llamada. OK ATH Colgado de llamada de voz OK AT+CHUP Colgado de llamada de dato y voz para nokia OK AT+CBC Nivel de carga de la batería. 0,95 cargador desconectado, 95% de carga. 1,95 cargador conectado, 95% de carga AT+CPAS Estado del teléfono COLGADO/DESCOLGADO, MARCANDO, LLAMADA ACTIVA AT+CGMI Identificación del fabricante FABRICANTE

Page 221: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

221 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

AT+CGMM Identificación del modelo Nokia 3220 AT+CGMR Identificación de la revisión ID DE REVISION AT+CGSN Identificación del serial del equipo ID DEL EQUIPO AT+CSQ Calidad de señal CALIDAD DE SEÑAL ATD3107374112; marcacion de voz OK ATDL REDIAL ATD1 ENVIAR tono DTMF DE TECLA 1 OK ATE0 CANCELAR MODO ECO OK ATE1 ACTIVAR MODO ECO OK ATV0 RESPUESTA MODO NUMERICA ATV1 RESPUESTA MODO TEXTO ATF0 Activar eco en línea ATF1 DESActivar eco en línea • el celular envia "" cuando se cuelga la llamada. NO CARRIER • el celular envia "RING" cuando llega una llamada. 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 ESTABLECER MODO DE SMS (0= MODO PDU, 1 = MODO TEXTO) AT+CMGD=1 ESTABLECER POSICION DE MENSAJE A BORRAR

• LEER MENSAJES DE TEXTO EN LA CARPETA RECIBIDOS LEIDOS

ATZ&F reset a celular para cancelar error de recepcion de mensajes de texto AT+CMGF=1 establecer modo de sms (0= modo pdu, 1 = modo texto) AT+CMGL="REC READ" GRUPO DE MENSAJES QUE SE QUIEREN LEER ("REC UNREAD"(RECIBIDOS NO LEIDOS) "REC READ"(RECIBIDOS LEIDOS) "STO UNSENT"(ALMACENADOS SIN ENVIAR) "STO SENT"(ENVIADOS)

Page 222: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

222 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

"ALL"(TODOS)) AT+CMGR=1 LEE EL MENSAJE 1 DE TODOS LOS MEMSAJES EN LA CARPETA RECIBIDOS LEIDOS

• LEER MENSAJES DE TEXTO NUEVO MANUALMENTE ATZ&F RESET A CELULAR PARA CANCELAR ERROR DE RECEPCION DE MENSAJES DE TEXTO AT+CMGF=1 ESTABLECER MODO DE SMS (0= MODO PDU, 1 = MODO TEXTO) AT+CMGL="REC UNREAD" DEVUELVE: +CMGL: 8,"REC UNREAD","3107374112",,"08/05/27,22:00:25-20" (ENTER)hola DONDE HOLA ES EL MENSAJE, AUTOMATICAMENTE CONVIERTE EL MENSAJE EN RECIBIDO LEIDO SI NO AY MENSAJE NUEVO SOLO DEVUELVE OK

• LEER MENSAJES DE TEXTO NUEVO AUTOMATICO ATZ&F RESET A CELULAR PARA CANCELAR ERROR DE RECEPCION DE MENSAJES DE TEXTO 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 AUTOMÁTICAMENTE SE MUESTRA CON LA FECHA Y EL NUMERO. AL APAGAR EL CELULAR SALE DE ESTE MODO. AT+CCFC: [Call Forwarding Number] - Gestiona el Desvío de Llamadas. Permite redireccionar llamadas entrantes a otro número de teléfono. - Sintaxis: AT+CCFC=<razón>,<modo>,<número>,<tipo>,<clase>,[<subaddr>,<satype>,[<time>]] <razón> Razón por la cual entra en acción el desvío de llamada. 0 - incondicional 1 - si teléfono ocupado 2 - si no obtiene respuesta 3 - si inalcanzable 4 - todos los desvíos de llamadas 5 - todos los desvíos de llamadas condicionales <modo> Estado del desvío de llamada. 0 - desahabilitado 1 - habilitado 2 - query status 3 - registro

Page 223: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

223 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

4 - erasure (borrado) <número> Cadena de texto con el número de teléfono destino del desvío de llamada. Se especifica en el formato indicado en el campo <type> <tipo> Tipo de código de dirección de teléfono: 145 - para código internacional + 129 - en otro caso <clase> Código que representa la clase de información 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 opción desvío de llamadas. (Sólo en respuesta AT) 0 - no activo 1 - activo - Ejemplo: Implementación del comando en Blooover: "AT+CCFC=0,3,\"+4913377001\",145,7\r" Vemos que utiliza los siguientes parámetros: <razón> = 0, incondicional <modo> = 3, registro <número> = +4913377001 <tipo> = 145, formato de código internacional <clase> = 7, cualquier clase de información a desviar ## Comandos de Control del Teléfono ## AT+CPAS: [Phone Activity Status] 1) AT+CPAS=? - Muestra la implementación 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 teléfono. - Sintaxis: AT+CPAS | +CPAS: <estado> - Respuesta: +CPAS: 0, en estado normal de inactividad. +CPAS: 3, si el teléfono atacado está sonando a causa de una llamada entrante. Microcontroladores y celulares Nokia GSM. La mayoría de celulares Nokia tienen conexiones F-Bus y M-Bus que permiten la conexión al PC e incluso a un microcontrolador. Esto permite realizar control de algunas funciones del teléfono o también la actualización 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 teléfono. 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.

Page 224: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

224 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Protocolo F-Bus. Este es un bus serial bi-direccional que corre a 115200bps, 8 bits de datos. Para la conexión al micro se debe conectar el pin DTR a +3 o 12 voltios y el RTS a -3 o -12 voltios. La forma más fácil para lograr la conexión 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 teléfono 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 conexión de celulares Nokia para protocolo MBUS y FBUS

Se pudo establecer que algunos celulares de marcas Siemens, Sony, Sagem, Nokia entre otros respondían a comandos AT. La primera práctica 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 conexión 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 través del control MSComm el cual debía ser configurado para trabajar a una velocidad de transferencia de 115.000 bps, un bit de parada, 8 bits de datos, ningún bit de paridad y control de flujo XON-XOFF.

Para la práctica con el A56, se tomó un cable de datos CA42 y se partió ya que el conector era Pop-port especialmente diseñado para Nokia. Ese cable lleva al celular tres hilos; uno de transmisión, otro de recepción y la referencia GND.

Cables CA42

Page 225: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

225 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Descripción de pines del conector de Siemens A56.

Después de haber analizado la conexión 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 transmisión para los Siemens es 9.600 bps.

Prueba comandos AT con siemens A56

Dentro de los comandos que fueron probados exitosamente se encuentran: AT Comando más básico. ATA Respuesta de llamada. ATH Colgado de llamada. AT+CBC Nivel de carga de la batería. AT+CGMI Identificación del fabricante. AT+CGMM Identificación del modelo. AT+CGMR Identificación de la revisión. AT+CGSN Identificación del serial del equipo.

Page 226: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

226 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

AT+CPAS Estado del teléfono. 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, además de la unión entre los terminales 3, 4 y 6 los cuales corresponden a Tx, Rx y RTS respectivamente. Esto claramente imposibilita la transmisión 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 sólo es necesario la unión entre los pines 2 y 3 del conector Pop-port como se muestra en la siguiente figura.

Descripción 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 micrófono 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 automáticamente.

Page 227: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

227 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

Page 228: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

228 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

SISTEMA DE POSICIONAMIENTO GLOBAL GPS (TEORIA GPS)

$PTYCVTG,1 ;ACTIVO MODO VEL EN KM/H PARA QUE ENVIE LA TRAMA $PTYCVTG,0 ;DESACTIVO MODO VEL EN KM/H PARA QUE NO ENVIE LA TRAMA PSTMVER,B ;TRAMA INICIAL ENVIADA POR EL GPS El sistema de posicionamiento global mediante satélites GPS supone uno de los más importantes avances tecnológicos de las últimas décadas. Diseñado inicialmente como herramienta militar para la estimación precisa de posición, velocidad y tiempo, se ha utilizado también en múltiples aplicaciones civiles. Por razones de seguridad, las señales GPS generadas para uso civil se someten a una degradación deliberada (error), al tiempo que su emisión se restringe a una determinada frecuencia. El Sistema de Posicionamiento Global2 es un sistema de localización, diseñado por el Departamento de Defensa de los Estados Unidos con fines militares para proporcionar estimaciones precisas de posición, velocidad y tiempo; operativo desde 1995. El sistema consta de una constelación de 24 satélites cada uno dotado con relojes automáticos, computadoras, emisores y receptores de radio, estaciones terrenas que monitorean constantemente a cada uno de ellos. Los satélites 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 centímetros con el uso de estaciones diferenciales en tierra. Los receptores, a partir de los mensajes que provienen de cada satélite visible, calculan distancias y proporcionan una estimación de posición y tiempo.

Figura 1. Sistema GPS.

El receptor mide el tiempo que tardan en llegar las señales enviadas desde los diferentes satélites (A, B y C); se necesitan tres satélites para determinar la latitud y la longitud, mientras que un cuarto satélite (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 satélites.

2 T. A. Herring, “The Global Positioning System”, Scientific American.

Page 229: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

229 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

PRINCIPIO DE FUNCIONAMIENTO DEL SISTEMA GPS El sistema GPS funciona gracias a la constelación NAVSTAR, formada por 24 satélites situados a unos 20.000 kilómetros de altura. Este sistema tiene por objetivo calcular la posición de un punto cualquiera en un espacio de coordenadas (x,y,z)3, partiendo del cálculo de las distancias del punto a un mínimo de tres satélites cuya localización es conocida. La distancia entre el usuario (receptor GPS) y un satélite se mide multiplicando el tiempo de vuelo de la señal emitida desde el satélite por su velocidad de propagación. Para medir el tiempo de vuelo de la señal de radio es necesario que los relojes de los satélites y de los receptores estén sincronizados, pues deben generar simultáneamente el mismo código. La desviación en los relojes de los receptores añade una incógnita más que hace necesario un mínimo de cuatro satélites para estimar correctamente las posiciones (Fig. 2).

Figura 2. Principio de funcionamiento del sistema GPS.

Estos satélites llevan a bordo un reloj atómico de gran precisión y emiten señales personalizadas que indican la hora en que fueron emitidas. El receptor en tierra reconoce el satélite que ha emitido la señal, 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 satélites, es capaz de determinar su posición y altura. Dado que el viaje de la señal es tan rápido y el control de su retardo debe ser tan preciso (un error de un milisegundo genera desviaciones de cientos de kilómetros), exige una crucial sincronización perfecta entre satélite y receptor. Los receptores GPS no cuentan con relojes atómicos pero son capaces de ajustar los desfases mediante una medición adicional sobre otro satélite, que al final de todas los convierte en relojes de precisión atómica. Cada satélite transmite su posición 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 satélite en particular que se encuentra a la vista, multiplicando la velocidad de la luz por el tiempo transcurrido de la señal del satélite al receptor GPS y al combinar las señales de varios satélites, el receptor puede establecer con "exactitud" su propia posición, altitud y velocidad. La idea básica de la determinación de la posición se basa en la triangulación de los satélites. Para "triangular" un receptor GPS calcula la distancia con base al tiempo de travesía de la señal a través de las capas de la atmósfera conociendo de antemano la velocidad de la luz. Para calcular el tiempo de travesía, los receptores GPS necesitan calcular los tiempos en ambos relojes el del receptor y el del satélite de una manera muy precisa.

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

Page 230: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

230 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

GPS DIFERENCIAL

Se llama GPS diferencial (DGPS) al sistema modificado, desarrollado por los fabricantes de receptores civiles, que pretende conseguir o aproximarse a la precisión ofrecida por el código militar. Para conseguir este aumento de la precisión es necesario acoplar al receptor GPS, mediante una conexión interface especial, otro tipo de receptor. Este receptor complementario (debe ser compatible) capta las señales emitidas por una red de radiobalizas situadas en estaciones costeras. Un aparato que disponga de la función 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 precisión en las coordenadas de posición que oscila entre los cinco y los diez metros.

Cada marca de GPS facilita los parámetros de compatibilidad entre los receptores con función DGPS y los receptores que captan las señales de las radiobalizas. La utilización del sistema DGPS solo es aplicable en la navegación marina, siendo especialmente útil en las maniobras de poca visibilidad.

NMEA NMEA4 (National Marine Electronics Association) es una asociación sin fines de lucro de fabricantes, distribuidores, instituciones educacionales y otros interesados en equipos periféricos marinos. La definición estándar NMEA 0183 es una interfaz eléctrica y un protocolo de datos para la comunicación entre instrumentos marinos. NMEA se establece como un grupo de trabajo para el desarrollo de nuevos estándares de comunicación de datos para dispositivos marinos a bordo de las embarcaciones.

Protocolo NMEA El protocolo NMEA es usado para la comunicación entre dispositivos de uso marino para transmitir datos. La salida NMEA es EIA-422A, pero para la mayoría de los propósitos puede considerarlo RS-232 compatible. Todos los datos son trasmitidos a través 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 línea ó ENTER). Los primeros dos caracteres después 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 envío (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, también 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 todavía coloquialmente algunas veces se le denomina así. La nueva denominación fue acuñada para eliminar la inclusión de una localización específica en un estándar internacional, así como para basar la medida del tiempo en los estándares atómicos, más que en los celestes.

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

Page 231: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

231 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Formato de Sentencias NMEA BASICAS A continuación en las siguientes tablas se muestra formatos de algunas sentencias NMEA.

Tabla 2. Descripción de las principales sentencias.

Sentencia Descripción

$GPGGA Total de Campos(14)

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) 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)

Satélites Usados ( Numero de Satélites en Uso (0-12) (Campo 7) Altitud ( Altitud en metros de acuerdo al elipsoide WGS-84) (Campo 9) Unidad Altitud( M = Metros) (Campo 10)

$GPGSA Total de Campos(17)

PDOP( Position dilution of precision (error de la precisión)) (Campo 15)

HDOP( Horizontal dilution of precision) (Campo 16) VDOP( Vertical dilution of precision) (Campo 17)

Page 232: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

232 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

$GPGSV Total de Campos(19)

“Satélites en vista( Número total de SV en vista) (Campo 3)

$GPRMC Total de Campos(11)

Fecha UTC( DDMMYY) (Campo 9)

$GPVTG Total de Campos(8)

Curso( Curso en grados) (Campo 1) Velocidad( Velocidad horizontal) (Campo 7)

Unidad( K = KM/h) (Campo 8)

Page 233: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

233 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

EJEMPLOS DE LAS SENTENCIAS NMEA UTILIZADAS

$GPGGA Sentencia (Fix data).

GGA = Datos Fijo del Sistema Global de Posicionamiento

Ejemplo(señal no adquirida): $GPGGA,235947.000,0000.0000,N,00000.0000,E,0,00,0.0,0.0,M,,,,0000*00 Ejemplo (señal 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 Ejemplo Comentarios

Sentencia ID $GPGGA

Tiempo UTC 092204.999 hhmmss.sss tiempo universal coordinado UTC

Latitud 4250.5589 ddmm.mmmm

Indicador N/S S N = Norte, S = Sur

Longitud 14718.5084 dddmm.mmmm

Indicador E/W E E = Este, W = Oeste

Indicador de la Calidad del GPS 1 0 = No Valido, 1 = Valido SPS, 2 = Valido DGPS, 3 =

Valido PPS

Satélites Usados 04 Numero de Satélites en Uso (0-12)

HDOP 24.4 Dilución Horizontal de la Posición

Altitud 19.7 Altitud en metros de acuerdo al elipsoide WGS-84

Unidad Altitud M M = Metros

Separación Geoidal Separación Geoidal en metros de acuerdo al elipsoide WGS-84

Unidad Separación M = Metros

DGPS Intervalo Intervalo en segundos DGPS desde la ultima actualización de una estación de referencia ID

DGPS Estación ID 0000

Checksum *1F Suma de verificación

Terminador CR/LF Retorno de carro y cambio de línea (Enter)

Page 234: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

234 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Sentencia $GPGSA (Active satellites). GSA = Modo de operación de receptor GPS, SV empleados para navegación y valores DOP. Ejemplo (señal no adquirida): $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30 Ejemplo (señal adquirida): $GPGSA,A,3,01,20,19,13,,,,,,,,,40.4,24.4,32.2*0A

Tabla 4. Formato de sentencia NMEA GPGSA

Campo Ejemplo Comentarios

Sentencia ID $GPGSA

Modo 1 A A = Automático 2D/3D, M = Manual forzado 2D/3D

Modo 1 3 1 = No disponible, 2 = 2D, 3 = 3D

Satélite usado 1 01 Satélite usado en canal 1

Satélite usado 2 20 Satélite usado en canal 2

Satélite usado 3 19 Satélite usado en canal 3

Satélite usado 4 13 Satélite usado en canal 4

Satélite usado 5 Satélite usado en canal 5

Satélite usado 6 Satélite usado en canal 6

Satélite usado 7 Satélite usado en canal 7

Satélite usado 8 Satélite usado en canal 8

Satélite usado 9 Satélite usado en canal 9

Satélite usado 10 Satélite usado en canal 10

Satélite usado 11 Satélite usado en canal 11

Satélite usado 12 Satélite usado en canal 12

PDOP 40.4 Position dilution of precision (error de la precisión)

HDOP 24.4 Horizontal dilution of precision

VDOP 32.2 Vertical dilution of precision

Checksum *0A Suma de verificación

Terminador CR/LF Retorno de carro y cambio de línea (Enter)

Page 235: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

235 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Sentencia $GPGSV (Satellites in view). GSV = Número de SV en vista, números de PRN, elevación, azimut y valores SNR. Ejemplo (señal no adquirida): $GPGSV,1,1,01,21,00,000,*4B Ejemplo (señal 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 Ejemplo Comentarios Sentencia ID $GPGSV Número de mensajes 3 Número total de mensajes de este tipo en este ciclo (1-3) Número de secuencia 1 Número de secuencia de esta entrada (1-3) Satélites en vista 10 Número total de SV en vista Satélite ID 1 20 Rango es 1-32 Número de SV PRN Elevación 1 78 Elevación en grados (0-90) Azimuth 1 331 Azimuth en grados (0-359), grados del Norte verdadero SNR 1 45 Señal de porción de ruido en dBHZ (0-99) Satélite ID 2 01 Rango es 1-32. Información sobre segundo SV Elevación 2 59 Elevación en grados (0-90) Azimuth 2 235 Azimuth en grados (0-359) SNR 2 47 Señal de porción de ruido en dBHZ (0-99) Satélite ID 3 22 Rango es 1-32 Elevación 3 41 Elevación en grados (0-90) Azimuth 3 069 Azimuth en grados (0-359) SNR 3 Señal de porción de ruido en dBHZ (0-99) Satélite ID 4 13 Rango es 1-32 Elevación 4 32 Elevación en grados(0-90) Azimuth 4 252 Azimuth en grados (0-359) SNR 4 45 Señal de porción de ruido en dBHZ (0-99) Checksum *70 Suma de verificación Terminador CR/LF Retorno de carro y cambio de línea (Enter)

Page 236: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

236 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Sentencia $GPRMC (Position and time) RMC = Mínimo de Datos GPS/TRANSIT Específicos Recomendados. Ejemplo (señal no adquirida): $GPRMC,235947.000,V,0000.0000,N,00000.0000,E,,,041299,,*1D Ejemplo (señal 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 Ejemplo Comentarios

Sentencia ID $GPRMC

Tiempo UTC 092204.999 hhmmss.sss. Tiempo Universal Coordinado (Coincide con el campo 1 de GPGGA)

Estados de los datos A A = Valido, V = Invalido

Latitud 4250.5589 ddmm.mmmm

Indicador N/S S N = Norte, S = Sur

Longitud 14718.5084 dddmm.mmmm

Indicador E/W E E = Este, W = Oeste

velocidad sobre la tierra 0.00 Nudos

Curso sobre la tierra 0.00 Grados verdaderos

Fecha de UTC 211200 DDMMYY = 21 DE DICIEMBRE DE 2000

Grados magnéticos de variación Grados

Indicador variación magnética E = Este, W = Oeste

Checksum *25 Suma de verificación

Terminador CR/LF Retorno de carro y cambio de línea (Enter)

Page 237: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

237 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Sentencia $GPVTG (Course over ground) Curso en tierra VTG = Curso y velocidad en tierra Ejemplo (señal no adquirida): $GPVTG,,T,,M,,N,,K*4E Ejemplo (señal adquirida): $GPVTG,89.68,T,,M,0.00,N,0.0,K*5F

Tabla 7. Formato de sentencia NMEA GPVTG

Campo Ejemplo Comentarios

Sentencia ID $GPVTG

1.Curso 89.68 Curso en grados

2.Referencia T T = (True heading), indica que el curso bien hecho es relativo al Norte verdadero

3.Curso Curso en grados. No usado

4.Referencia M M = Magnetic heading

5.Velocidad 0.00 Velocidad sobre el fondo en Nudos

6.Unidad N N = Nudos

7.Velocidad 0.00 Velocidad horizontal

8.Unidad K K = KM/h

Checksum *5F Suma de verificación

Terminador CR/LF Retorno de carro y cambio de línea (Enter)

Page 238: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

238 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

Page 239: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

239 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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)

M O D U L O R E G I S T R O D E S T I N O CONVERSOR_CAD :CONVERCAD (0-1023 SI RESOLUCION=B10),(0-255 SI RESOLUCION=B8) : REG_GCENT (DATO VÁLIDO: 0 A 500 GRADOS CENTIGRADOS)

CONVERSOR_CAD :CONVERCAD (0-1023 SI RESOLUCION=B10),(0-255 SI RESOLUCION=B8)

DECOD_RX_UART :REG_RXUART (DATO VÁLIDO: DATOS ASCII 0 A 255) DECOD_RX_UART0 :REG_RXUART0 (DATO VÁLIDO: DATOS ASCII 0 A 255) DECOD_RX_UART1 :REG_RXUART1 (DATO VÁLIDO: DATOS ASCII 0 A 255) DECOD_RX_UART2 :REG_RXUART2 (DATO VÁLIDO: DATOS ASCII 0 A 255) DECOD_TECLADO_PS2 :REG_TECPS2 ("A" a "Z", "0" a "9", TEC_ESCAPE, TEC_ENTER, TEC_F1 a TEC_F12, TEC_SPACE, TECK_BACK)

DECOD DTMF1_PB0 :REG_RXDTMF1 (DATO VÁLIDO: DTMF_0 A DTMF_9, DTMF_A, DTMF_N) DECOD DTMF2_PB1 :REG_RXDTMF2 (DATO VÁLIDO: DTMF_0 A DTMF_9, DTMF_A, DTMF_N) RECEPTOR_IR :REG_TECIR (DATO VÁLIDO: 1 A 51) :POINTER_REC_IR (DATO VÁLIDO: 1 A 51), devuelve el número de teclas grabadas TEC MATRICIAL 4X4, 4X3 :REG_TECMAT (DATOS VÁLIDO: 1 a 16) TRANSCEIVER_TRF2p4 :25 BYTES: REG_TRF1 A REG_TRF25 SIPO_4015B 32 BIT :REG_SIPO1:REG_SIPO2:REG_SIPO3:REG_SIPO4 :LAS SALIDAS SON:OUT_SIPO1 A OUT_SIPO32, (RELLENAR CON VARNN)

PISO_4021B 32 BIT :REG_PISO1:REG_PISO2:REG_PISO3:REG_PISO :LAS ENTRADAS SON:INP_PISO1 A INP_PISO32

COMUNICACION_SPI :REG_SPI BUS_I2C :REG_I2C TIME_KEEPER_DS1307_I2C :SEG_TK,MIN_TK,HORA_TK,DIA_SEMANA_TK,DIA_MES_TK,MES_TK,AÑO_TK MEMORIA_24256_I2C :REG_M24XXX,DIR_LOW_M24XXX,DIR_HIGH_M24XXX,DIR_M24XXX:2 TABLA :REG_TABLA (0 A 255) EEPROM_DATO :REG_EEDATO (0 A 255) RELOJ (TIMER1) :HORA:MINUTO:SEGUNDO RANDOM 8 BIT :REG_RANDOM (0 A 255) COUNTER_BCD_9_DIGITOS :C9DIG9:C9DIG8:C9DIG7:C9DIG6:C9DIG5:C9DIG4:C9DIG3:C9DIG2:C9DIG1 DISPLAY_7SEG :C9DIG9:C9DIG8:C9DIG7:C9DIG6:C9DIG5:C9DIG4:C9DIG3:C9DIG2:C9DIG1 SUMA 16 BIT :RESULTADO:2 RESTA 16 BIT :RESULTADO:2 Nota: SI RESULTADO < 0 ENTONCES: F_OVER_FLOW_MATH = 1 RESULTADO=0 MULTIPLICACION 16 BIT :RESULTADO:4 DIVISION 16 BIT :COCIENTE:2 :RESIDUO:2 Nota: SI COCIENTE < 0 ENTONCES:

Page 240: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

240 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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,FLAG_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,FLAG_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,FLAG_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,FLAG_STOP_M_PASO8

REGISTROS DESTINO DEL CONTROL PWM, SERVOMOTOR Y MOTOR DC POR TIMER1

PWM1_PTD0 : PUL_PWM1:2, PER_PWM1:2, CU_PWM1:2 PWM2_PTD1 : PUL_PWM2:2, PER_PWM2:2, CU_PWM2:2 PWM3_PTD2 : PUL_PWM3:2, PER_PWM3:2, CU_PWM3:2 PWM4_PTD3 : PUL_PWM4:2, PER_PWM4:2, CU_PWM4:2 PWM5_PTD4 : PUL_PWM5:2, PER_PWM5:2, CU_PWM5:2 PWM6_PTD5 : PUL_PWM6:2, PER_PWM6:2, CU_PWM6:2 PWM7_PTD6 : PUL_PWM7:2, PER_PWM7:2, CU_PWM7:2 PWM8_PTD7 : PUL_PWM8:2, PER_PWM8:2, CU_PWM8:2

REGISTROS DESTINOS DEL CONTROL DE TRIAC DE POTENCIA AC PAC1_PTD0 :TOFF_PAC1:2 PAC2_PTD1 :TOFF_PAC2:2

Page 241: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

241 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

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

REGISTROS DESTINO DEL MODULO CLAVE F_CLAVE_MAXIMA FLAG_KEY,0 ;después de introducir una tecla indica que se introdujeron más digitos de los programados en la macro capturar_clave F_CLAVE_CORRECTA FLAG_KEY,1 ;después de la tecla aceptar indica que la clave introducida es correcta F_CLAVE_INCORRECTA FLAG_KEY,2 ;después 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 número de digitos que se han ingresado de la clave

Page 242: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

242 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

TRANSMISOR X10 CON DETECTOR DE CRUCE POR CERO NO AISLADO ELECTRICAMENTE ENTRE PIC Y 120VAC (TIERRA DE PIC UNIDO A NEUTRO)

Page 243: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

243 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

RECEPTOR X10 CON DETECTOR DE CRUCE POR CERO NO AISLADO ELECTRICAMENTE ENTRE PIC Y 120VAC (TIERRA DE PIC UNIDO A

NEUTRO)

Page 244: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

244 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Page 245: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

245 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010

Page 246: Seccion 2 - Tutorial Lpm2 Gama Alta Abril-2010

DDIIGGIIBBOOOOKK -- SSEECCCCIIOONN 22 TTUUTTOORRIIAALL LLPPMM2 GAMA ALTA 18FXX2

246 de 246

DigiBook - Guía de Proyectos Microcontrolados Versión Marzo/2010