BASIC PARAMICROCONTROLADORES PIC   Christian Bodington Esteva      Ingeniero en Electrónica
CONTENIDOPrólogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
4.3.1.- Define. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41                 4.3.2...
5.8.- Proyecto #8. Implementación de la instrucción Branch . . . . . . . . . . . . 91      5.9.- Proyecto #9. Implementaci...
Capitulo VIII. Memoria de Datos.      8.1.- Memoria de Datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
10.3.- Proyecto #29. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196      10.4.- Pr...
Capitulo XIV. Módulos RF para comunicaciones.      14.1.- Módulos RF. . . . . . . . . . . . . . . . . . . . . . . . . . . ...
Goto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324High...
SerOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .343     ...
PrólogoEmprender el estudio de microcontroladores para el desarrollo de proyectoselectrónicos que sean la base para nuevas...
manera que el diseñador puede prestar mayor atención a los detalles,logrando así perfeccionar su desempeño en cualquiera d...
Herramientas de Diseño                                               Capitulo IEn la elaboración de proyectos electrónicos...
•   Programador de Microcontroladores PIC: es una herramienta    indispensable con la cual podemos grabar el código genera...
•   Placa de prototipos: proporciona al diseñador conexiones sin    soldaduras, con lo cual se hace más práctico el desarr...
•   Fuente de poder regulada con salida de voltaje variable. En el capítulo    III se propone la construcción de una fuent...
•   Osciloscopio: este instrumento se requiere para el desarrollo de    algunas prácticas en las cuales se hace necesario ...
Microcode Studio                                                     Capitulo IIMicrocode Studio (IDE), es un Ambiente Int...
Figura 2.2.                     (Fuente: http://www.microengineeringlabs.com)Además de esta herramienta, es necesario adqu...
Haga clic en el Link aquí                                                          señalado, para descargar la            ...
El proceso de instalación es muy sencillo. El primer paso será ejecutar elarchivo mcsinstall.exe, el cual es el responsabl...
Haga clic en el botón “Next” y podrá ver en la siguiente ventana el acuerdo delicencia para Microcode Studio:             ...
Pulse “Next” para iniciar la copia de archivos (figura 2.11), y finalmente espereque se complete la instalación (figura 2....
Una vez instalado Microcode Studio, es importante tomar en cuenta que antesde iniciar este software, es necesario instalar...
Figura 2.14.Seguidamente se debe especificar el nombre de la carpeta que va a contenerlos accesos directos a los archivos ...
Una vez seleccionadas las rutas de instalación del compilador, se debe hacerclic en el botón “Install” (figura 2.16), para...
Figura 2.18.Finalmente se puede ver en la ventana de la figura 2.18, un mensaje en elcual se confirma que el compilador PI...
Integración de Microcode Studio y Pic Basic Pro:Es importante integrar Microcode Studio con el compilador PicBasic Pro,ind...
3. En la pestaña “Compiler” haga clic en el botón “Find Automatically”   para una ubicación automática del compilador, o s...
Se debe ubicar en la lista el programador “PICALL Programmer”, haciendoclic en el botón denominado “Add New Programmer” (F...
Microcontroladores PIC                                         Capitulo III3.1. Que es un PIC?Los PIC son una familia de m...
del microcontrolador para el control de dispositivos periféricos como pantallasLCD, teclados, motores paso a paso, leds, s...
•   PIC18F4XX, estos microcontroladores resultan muy útiles cuando           deseamos diseñar proyectos más avanzados.Cada...
Diagrama de pines del PIC16F84:                                       Figura 3.2.     PIN   Identificación                ...
El microcontrolador PIC16F84 cuenta con dos puertos I/O, el puerto A, el cualconsta de cinco pines I/O y el puerto B, el c...
•   Oscilador HS: Oscilador de alta velocidad (High Speed).   •   Oscilador RC: Resistencia / Condensador.En los modos de ...
Por ejemplo, para un oscilador tipo XT, podemos utilizar un cristal de cuarzocomo el de la figura 3.5.                    ...
La lectura de la frecuencia y período en este caso sería la siguiente:   •   Frecuencia: 3,972 Mhz   •   Período: 251,71 n...
Figura 3.8.La lectura de la frecuencia y período en este caso sería la siguiente:   •   Frecuencia: 3,999 Mhz   •   Períod...
Figura 3.9.3.3. Circuito de Reset: El Pin denominado MCLR (Master Clear), siempredebe ser tomado en cuenta cuando se diseñ...
Figura 3.10.Este circuito permite reiniciar el microcontrolador cada vez que el pulsador P1es presionado.3.4. Consideracio...
En el primer circuito, el LED se iluminará solo cuando el estado lógico del pinde salida del puerto sea igual a “1”, es de...
3.4.2. Lectura de un estado lógico en un pin I/O:El microcontrolador también nos permite capturar datos o señales externas...
El primer circuito en la figura 3.12 mantiene un nivel lógico alto (5V) mientrasel pulsador permanece abierto. Al presiona...
En la configuración de la figura 3.13, cuando en el pin I/O aplicamos un 1lógico (5V), el LED del opto-acoplador enciende ...
través del cual circulará la corriente necesaria entre sus contactos, para hacerfuncionar cualquiera de estos dispositivos...
3.4.4. Fuente de poder, 5Vdc / 3.3Vdc:En caso de no disponer de una fuente de poder regulada, proponemos laconstruccion de...
Estructura de un programa.Componentes y operadores en PicBasic.                         Capitulo IV4.1.- Estructura de un ...
Sección A: Corresponde al encabezado del programa, en el cual se debeconsiderar información básica del mismo, como el nomb...
Los comentarios ayudan al diseñador a identificar cada línea de programa ocada una de las funciones de cada subrutina, gar...
4.3.- Componentes y operadores en PicBasic.PIC Basic cuenta con una serie de herramientas de programación entre lascuales ...
Parámetro                           Descripción      OSC {frecuencia}          Frecuencia del Oscilador en Mhz      LCD_DR...
4.3.3.- Arrays: Las variables Arrays tienen un determinado número de“elementos”, definido según el tamaño de la variable. ...
4.3.4.- Constantes: Ayudan a identificar un valor constante en nuestroprograma, facilitando aún más la comprensión del mis...
4.3.6.- Operadores Aritméticos: Entre los operadores aritméticos másutilizados tenemos los que se muestran en la siguiente...
El resultado de esta operación es Var1 = %000000014.3.8.- Operadores de Comparación: Los operadores de comparaciónnormalme...
Primeros Programas con el PIC16F84                              Capitulo VPara aprender a programar un microcontrolador re...
Proyecto # 1                           Componentes               Cantidad                PIC16F84A                        ...
Un ejemplo de configuración de los pines I/O del puerto A es el siguiente:                                        Registro...
Para el caso particular del puerto B, se puede observar que el pin RB0 ha sidoconfigurado como salida y el resto de los pi...
LOWSintaxis:    LOW pinLa instrucción “LOW” coloca en cero lógico un pin I/O específico.GOTOSintaxis:    GOTO etiquetaLa i...
TRISA = %11110     Configuración el Puerto A    TRISB = %11111110  Configuración el Puerto B    PORTA = 0            Inici...
Al escribir el programa en el editor de texto de Microcode Studio, se debegrabar el mismo con el nombre de su preferencia ...
Modelo            Compilar                           Compilar y           del uC.                           Grabar en     ...
Antes de programar el microcontrolador, también resulta conveniente verificarlos fusibles de programación, accediendo al b...
•   En la sección “Hardware” también disponemos de la opción “Power Up       Timer”, la cual una vez activada en el microc...
5.2.- Proyecto #2: En este ejemplo conectaremos un Led en cada pin delpuerto B, el cual a su vez deberá ser configurado co...
En el proyecto #1 se pudo observar como es posible encender un ledconectado a un pin del puerto A o B en un PIC16F84A, uti...
Define Osc 4            Define el Oscilador para un Cristal                        de 4 Mhz.   TRISB = %00000000    Config...
5.3.- Proyecto #3: Los pines en los puertos de un microcontrolador puedenser configurados también como entradas, como se d...
IF – THEM – ELSESintaxis:       If expresión 1 {AND / OR expresión 2} Then etiquetaCon la instrucción If – Them podemos to...
En este caso si el pulsador ha sido activado, entonces RA0 = 1, es decir, secumple la condición y por lo tanto RB0 = 1, es...
Proyecto # 4                               Componente                 Cantidad                  PIC16F877A                ...
Define Osc 4         Define el Oscilador para un Cristal                     de 4 Mhz.   TRISB = $FF       Configura el Pu...
5.5.- Proyecto #5: En el ejemplo a continuación se realiza un conteoascendente desde cero hasta nueve en un display de 7 s...
FOR… NEXTSintaxis:    For variable = inicio to final          {step {-} incremento}      *      *      Instrucciones…     ...
Ocho         CON %01111111   Nueve        CON %01100111    Configuración del Puerto de Salida:   TrisD = $00              ...
For I = 0 To 9 Step 2     Repetición de Instrucciones dentro del Lazo                              For – Next con incremen...
Figura 5.13.                                      Proyecto # 6                              Componente               Canti...
correspondiente al dígito “0” de un teclado telefónico, entonces, según la tabla5.7, el dígito a introducir en la instrucc...
Antes de empezar a programar, vamos a verificar la sintaxis de la instrucciónDTMFout:DTMFoutSintaxis:    DTMFout pin, {On-...
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Próxima SlideShare
Cargando en…5
×

Basic

2.579 visualizaciones

Publicado el

0 comentarios
2 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
2.579
En SlideShare
0
De insertados
0
Número de insertados
12
Acciones
Compartido
0
Descargas
0
Comentarios
0
Recomendaciones
2
Insertados 0
No insertados

No hay notas en la diapositiva.

Basic

  1. 1. BASIC PARAMICROCONTROLADORES PIC Christian Bodington Esteva Ingeniero en Electrónica
  2. 2. CONTENIDOPrólogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1Capítulo I. Herramientas de Diseño. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3Capítulo II. MicroCode Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8Capitulo III. Microcontroladores PIC. 3.1.- ¿Que es un PIC? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21 3.2.- El Oscilador Externo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 3.3.- El Circuito de Reset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.4.- Consideraciones técnicas de diseño. . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.4.1.- Estado Lógico de un pin I/O. . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.4.2. Lectura de un estado lógico en un pin I/O. . . . . . . . . . . . . . . 33 3.4.3. El Opto-acoplador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.4.4. Fuente de poder, 5Vdc / 3.3Vdc. . . . . . . . . . . . . . . . . . . . . . . 37Capítulo IV. Estructura de un programa. Componentes y operadores enPicBasic. 4.1.- Estructura de un programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.2.- Subrutinas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.3.- Componentes y operadores en PicBasic. . . . . . . . . . . . . . . . . . . . . . . .41 i
  3. 3. 4.3.1.- Define. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.3.2.- Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42 4.3.3.- Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.3.4.- Constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.3.5.- Símbolos o Alias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.3.6.- Operadores Aritméticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . .45 4.3.7.- Operadores Binarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45 4.3.8.- Operadores de Comparación. . . . . . . . . . . . . . . . . . . . . . . . 46 4.3.9.- Operadores Lógicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Capitulo V. Primeros Programas con el PIC16F84. 5.1.- Proyecto #1. Implementación de las instrucciones de programa High, Low Goto y Pause. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47 5.2.- Proyecto #2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.3.- Proyecto #3. Implementación de la instrucción If-Them-Else. . . . . . . .60 5.4.- Proyecto #4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.5.- Proyecto #5. Implementación de la instrucción For-Next. . . . . . . . . . . 65 5.6.- Proyecto #6. Implementación de la instrucción Frecout. . . . . . . . . . . . 68 5.7.- Proyecto #7. Implementación de la instrucción Button . . . . . . . . . . . . .76 5.7.1.- Proyecto #7.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 5.7.2.- Proyecto #7.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.7.3.- Proyecto #7.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 ii
  4. 4. 5.8.- Proyecto #8. Implementación de la instrucción Branch . . . . . . . . . . . . 91 5.9.- Proyecto #9. Implementación de la instrucción PWM . . . . . . . . . . . . . 94Capitulo VI. Módulos LCD. 6.1.- Pantallas LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 6.2.- Identificación de los pines de una pantalla LCD . . . . . . . . . . . . . . . . . 98 6.3.- Conexión de una pantalla LCD en Pic Basic. . . . . . . . . . . . . . . . . . . . 99 6.4.- Proyecto #10. Implementación de la instrucción Lcdout . . . . . . . . . . 103 6.5.- Proyecto #11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 6.6.- Proyecto #12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109 6.7.- Proyecto #13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111 6.8.- Proyecto #14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 6.9.- Proyecto #15. Implementación de la instrucción Count. . . . . . . . . . . 115 6.10.- Proyecto #16. Implementación de la instrucción Pulsin. . . . . . . . . . 122 6.11.- Proyecto #17. Implementación de la instrucción Pot. . . . . . . . . . . . 124 6.12.- Memoria CGRAM en la Pantalla LCD. . . . . . . . . . . . . . . . . . . . . . . .127 6.13.- Proyecto #18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130 6.14.- Proyecto #19. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137Capitulo VII. Teclado Matricial. 7.1.- Teclado Matricial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149 7.2.- Proyecto #20. Aplicación de un teclado 3x4. . . . . . . . . . . . . . . . . . . .154 iii
  5. 5. Capitulo VIII. Memoria de Datos. 8.1.- Memoria de Datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157 8.2.- Proyecto #21. Implementación de la instrucción Read. . . . . . . . . . . .161 8.3.- Proyecto #22. Implementación de la instrucción Write. . . . . . . . . . . .163 8.4.- Proyecto #23. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165 8.5.- Proyecto #24. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168Capitulo IX. Interrupciones. 9.1.- ¿Qué son las Interrupciones?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175 9.2.- Fuentes de Interrupciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175 9.3.- Registro INTCON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175 9.4.- Activación de interrupción a través del pin RB0/INT. . . . . . . . . . . . . . 177 9.5.- Proyecto #25. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 9.6.- Interrupción TMR0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180 9.7.- Registro OPTION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181 9.8.- Proyecto #26. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 9.9.- Interrupción por cambio de estado de uno de los pines más significativos del puerto B (RB4-RB7). . . . . . . . . . . . . . . . . . . . . . . . . . . . .186 9.10.- Proyecto #27. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187Capitulo X. Memoria Serial I2C. 10.1.- ¿Qué es el bus I2C?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190 10.2.- Proyecto #28. Implementación de las instrucciones I2Cwrite, I2Cread . . 192 iv
  6. 6. 10.3.- Proyecto #29. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196 10.4.- Proyecto #30. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198Capitulo XI. Conversor A/D en el PIC16F877. 11.1.- Conversor A/D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202 11.2.- El registro ADCON0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209 11.3.- El registro ADCON1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210 11.4.- Proyecto #31. Implementación de la instrucción ADCin. . . . . . . . . . 214Capitulo XII. Comunicación Serial. Transmisión y Recepción de Datos. 12.1.- Comunicación Serial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 12.2.- Instrucción SerIn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 12.3.- Proyecto #32. Implementación de la instrucción SerIn. . . . . . . . . . . 221 12.4.- Instrucción SerOut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233 12.5.- Proyecto #33. Implementación de la instrucción SerOut. . . . . . . . . .233 12.6.- Proyecto #34 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .240Capitulo XIII. Servomotor. 13.1.- ¿Qué es un Servomotor?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268 13.2.- Proyecto #35. Implementación de la instrucción PauseUs. . . . . . . . .272 13.3.- Proyecto #36. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .276 13.4.- Proyecto #37. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280 13.5.- Proyecto #38. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .283 v
  7. 7. Capitulo XIV. Módulos RF para comunicaciones. 14.1.- Módulos RF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .293 14.2.- Proyecto #39. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296 14.3.- Proyecto #40. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .300 14.4.- Proyecto #41. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .305Capitulo XV. Instrucciones de programa de PicBasic. @. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 ADCin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Asm… EndAsm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .311 Branch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .312 Button. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Call. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .315 ClearWDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .316 Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 DTMFout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 EEPROM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321 End. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 FreqOut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321 For… Next. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .323 Gosub. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 vi
  8. 8. Goto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324High. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324I2Cread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325I2Cwrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .326IF-Then-Else. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326Input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .328LCDin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .329LCDout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330Low. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331NAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331Output. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332Pause. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333PauseUs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333Pot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334PulsIn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335PulsOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .337Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338Return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339Reverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .340Select Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .340SerIn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342 vii
  9. 9. SerOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .343 Sleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344 Swap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344 Toggle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .345 While-Wend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .347Apéndice A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348Apéndice B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .358Apéndice C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .360Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .362 viii
  10. 10. PrólogoEmprender el estudio de microcontroladores para el desarrollo de proyectoselectrónicos que sean la base para nuevas ideas es el objetivo primordial deesta primera edición, en la cual nos hemos concentrado en dar al lectoralgunas herramientas fundamentales con las cuales esperamos abrir uncampo de conocimiento en la electrónica de control, a través de un sinnumero de posibilidades de diseño a partir de una serie de ejemplos prácticosdesarrollados en lenguaje Basic para Microcontroladores PIC.De toda la gama de posibilidades entre las familias de microcontroladores PICque ofrece Microchip Inc., hemos elegido para empezar el microcontroladormás popular de toda la serie, el PIC16F84, que será utilizado en este libropara estudiar algunas de sus características a través del desarrollo deactividades que en principio no requieren un nivel de conocimiento elevado ya través del cual daremos los pasos necesarios para adentrarnos en lasgamas mas altas, de las que se ha seleccionado el microcontroladorPIC16F877 para la realización de proyectos electrónicos de nivel medio yavanzado, y en los que podremos manejar dispositivos periféricos que le danun gran valor agregado a cada uno de nuestros proyectos y abrenposibilidades de desarrollo muy interesantes al lector.Además, hemos considerado proporcionar la información adecuada referentea las herramientas de desarrollo más importantes en la actualidad, paraprogramación en lenguaje Basic para microcontroladores PIC. En estaocasión iniciamos con el estudio del compilador PicBasic Pro, de la empresamicroEngineering Labs, Inc., la cual ofrece una de las herramientas maspopulares en el área, debido a que cuenta con una gran variedad deinstrucciones que hacen de la programación de microcontroladores una tareafácil y muy productiva a la hora de desarrollar proyectos que involucrenperiféricos como pantallas LCD, teclados matriciales, sensores detemperatura, presión, gas, humedad, memorias de datos entre otros, y dondeuna de las características más relevantes es el considerable ahorro detiempo, lo que se traduce en efectividad y menos líneas de programa, de tal
  11. 11. manera que el diseñador puede prestar mayor atención a los detalles,logrando así perfeccionar su desempeño en cualquiera de las funciones quedesee programar.Otra de las herramientas que hemos decidido incorporar a la obra, es elprogramador de microcontroladores PIC P16Pro/PicAll, de la página oficial dePicallW, de Boban Dobaj, Diseñador. Este programador soporta una grancantidad de modelos de las series 12, 16 y 18 de Microchip. Su construcciónes sumamente sencilla y de muy bajo costo, además de una serie de ventajasentre las cuales podemos mencionar la alta velocidad de transferencia dedatos hacia el dispositivo al momento de ser grabado.Cada capítulo contiene teoría sobre la cual se pretende estudiar elfuncionamiento de los microcontroladores y periféricos conectados a él. Paraello hemos desarrollado una serie de prácticas en las que el lector deberáhacer montajes de circuitos en base a los diagramas esquemáticos siguiendolas instrucciones y leyendo detenidamente los comentarios de cada línea deprograma.Esperamos con esto proporcionar al lector una base sólida de conocimientospara el desarrollo de proyectos electrónicos, proyectos de robótica y todoaquello que represente una innovación científica en este campo.Finalmente, el agradecimiento para todos nuestros colaboradores en laedición de esta publicación, quienes se han encargado de revisar cadadetalle, proyectos e ideas plasmadas en cada capitulo.Ingeniero en Información, Maria del Carmen Lara T.Ingeniero en Electrónica, Jesús Frank Phorlakis.Técnico Superior en Electricidad, Raúl Mastropasqua. 2
  12. 12. Herramientas de Diseño Capitulo IEn la elaboración de proyectos electrónicos con microcontroladores PIC,resulta muy importante considerar una serie de herramientas, las cualesvamos a describir a continuación:Software: para la programación en Lenguaje Basic, contamos con una granvariedad de posibilidades en el mercado, y entre las cuales hemos elegidopara esta primera edición, el Ambiente Integrado de Desarrollo MicrocodeStudio (IDE) de microEngineering Labs, Inc., además del compilador Basic,PICBasic Compiler, o PICBasic Pro Compiler. Con estas dos herramientasestaremos realizando la programación en cada uno de los proyectospropuestos a partir del capítulo V. Figura 1.1. (Fuente: http://www.microengineeringlabs.com) 3
  13. 13. • Programador de Microcontroladores PIC: es una herramienta indispensable con la cual podemos grabar el código generado por el compilador PicBasic para poner en funcionamiento cada uno de los proyectos propuestos en cada capítulo. Existen en internet una gran cantidad de modelos de programadores para microcontroladores PIC, de muy bajo costo y fácil construcción. Consideramos una buena experiencia realizar el montaje de cualquiera de estos diseños, aunque en esta oportunidad nuestra recomendación es el programador P16Pro/Picallw. Los detalles para la construcción de este programador están contenidos en el apéndice A. Figura 1.2. 4
  14. 14. • Placa de prototipos: proporciona al diseñador conexiones sin soldaduras, con lo cual se hace más práctico el desarrollo de los proyectos electrónicos propuestos a lo largo de cada capítulo. Figura 1.3.• Multímetro digital: este instrumento de medición será muy útil durante la elaboración de los circuitos propuetos en cada capítulo. Figura 1.4. 5
  15. 15. • Fuente de poder regulada con salida de voltaje variable. En el capítulo III se propone la construcción de una fuente de poder regulada a 5 Vdc y 3.3 Vdc. Figura 1.5.• Herramientas de corte, extractor de circuitos integrados, cable rígido para conexiones en la placa de prototipos. Figura 1.6. 6
  16. 16. • Osciloscopio: este instrumento se requiere para el desarrollo de algunas prácticas en las cuales se hace necesario medir las señales generadas desde el microcontrolador. Figura 1.7.• Componentes electrónicos: microcontroladores PIC en los modelos definidos en cada ejemplo práctico, resistencias, diodos, servomotores, condensadores, cristales y otros componentes de fácil adquisición. Cada proyecto cuenta con una tabla en la cual se decriben los componentes electrónicos que deberán ser utilizados en el cada montaje. Figura 1.7. 7
  17. 17. Microcode Studio Capitulo IIMicrocode Studio (IDE), es un Ambiente Integrado de Desarrollo deMECANIQUE, diseñado especialmente para microEngineering Labs, Inc.,de libre adquisición a través de la página Webhttp://www.microengineeringlabs.com Figura 2.1. (Fuente: http://www.microengineeringlabs.com)Descargar este programa es muy sencillo y esto lo podemos haceringresando a la siguiente dirección: http://www.microengineeringlabs.com/resources/win_ide.htmEn esta página se puede encontrar una sección destinada para la descargadel archivo instalador, como se observa en la figura 2.2: 8
  18. 18. Figura 2.2. (Fuente: http://www.microengineeringlabs.com)Además de esta herramienta, es necesario adquirir el compilador PicBasic,(Figura 2.3). Se puede acceder directamente a la página de productos demicroEngineering Labs a través de la dirección: http://www.melabs.com/products/index.htm Figura 2.3. (Fuente: http://www.microengineeringlabs.com)Es posible descargar una versión DEMO del compilador PIC Basic, con lacual se pueden compilar programas con un máximo de 31 líneas de código, através de la dirección: http://www.melabs.com/pbpdemo.htm 9
  19. 19. Haga clic en el Link aquí señalado, para descargar la versión Demo de PicBasic. Pro Figura 2.4. (Fuente: http://www.melabs.com)Para empezar la descarga del archivo de instalación del compilador, solo hayque hacer clic en el link señalado en la figura 2.4, e indicar la ruta en la cualse desea que el archivo de instalación sea almacenado.Nota Importante: Es necesario adquirir una de las versiones completas delcompilador Basic, para no tener límites en la cantidad de líneas del programaa compilar.En la figura 2.5 se puede observar el archivo descargado para la versióndisponible del software Microcode Studio, y en la figura 2.6 se puede observarel archivo del compilador PicBasic Pro en su versión de prueba. Figura 2.5. Figura 2.6. 10
  20. 20. El proceso de instalación es muy sencillo. El primer paso será ejecutar elarchivo mcsinstall.exe, el cual es el responsable de iniciar el proceso deinstalación de Microcode Studio: Figura 2.7.Seguidamente Microcode Studio le da la bienvenida en la ventana que semuestra a continuación: Figura 2.8. 11
  21. 21. Haga clic en el botón “Next” y podrá ver en la siguiente ventana el acuerdo delicencia para Microcode Studio: Figura 2.9.La ruta por defecto para la instalación de Microcode Studio es C:Archivos deprogramaMecaniqueMCS. Esta ruta puede ser cambiada haciendo clic en elbotón “Browse”, a través del cual se podrá ubicar la nueva carpeta en la cualdeberá ser instalado el software: Nombre de la carpeta en la cual se encontrará el archivo ejecutable de Microcode Studio. Figura 2.10. 12
  22. 22. Pulse “Next” para iniciar la copia de archivos (figura 2.11), y finalmente espereque se complete la instalación (figura 2.12). Figura 2.11. Figura 2.12. 13
  23. 23. Una vez instalado Microcode Studio, es importante tomar en cuenta que antesde iniciar este software, es necesario instalar el compilador Basic, el cual esindispensable para la generación del código que será cargado en elmicrocontrolador PIC.Instalación del compilador PicBasic Pro:Para dar inicio a la instalación del compilador Pic Basic, será necesarioejecutar el archivo denominado “pbpdemo.exe” para el caso de la versión dedemostración. La figura 2.13 muestra la ventana de inicio del proceso deinstalación, en la cual se da la bienvenida al usuario y le invita a cerrarcualquier otra aplicación que se encuentre en uso en ese momento. Figura 2.13.En la siguiente ventana se debe especificar la unidad de disco duro en la cualse instalará el compilador y el nombre de la carpeta que va a contener losarchivos a ser instalados. El software de instalación del compilador establecepor defecto la ruta indicada en la figura 2.14. 14
  24. 24. Figura 2.14.Seguidamente se debe especificar el nombre de la carpeta que va a contenerlos accesos directos a los archivos que ofrecen información adicional acercadel compilador PicBasic. Este paso puede ser omitido seleccionando la opción“Don’t create a Start Menu Folder”: Figura 2.15. 15
  25. 25. Una vez seleccionadas las rutas de instalación del compilador, se debe hacerclic en el botón “Install” (figura 2.16), para dar inicio a la copia de archivos. Figura 2.16. Figura 2.17. 16
  26. 26. Figura 2.18.Finalmente se puede ver en la ventana de la figura 2.18, un mensaje en elcual se confirma que el compilador PICBasic Pro ha sido instaladosatisfactoriamente. Deshabilite la opción “Install Microcode Studio IDE” yseguidamente haga clic en el botón “Finish”.Nota: Puede descargar la documentación completa del compilador PicBasic através de la dirección: http://www.melabs.com/support/index.htm 17
  27. 27. Integración de Microcode Studio y Pic Basic Pro:Es importante integrar Microcode Studio con el compilador PicBasic Pro,indicando la ruta en la cual se encuentra instalado. Para esto debemos iniciarel software y seguir las siguientes instrucciones: 1. Desde el menú de Inicio de Windows ejecute “Microcode Studio”. Figura 2.19. 2. Haga clic en el menú “View” y seleccione la opción “Compile and Program Options”. Figura 2.20. 18
  28. 28. 3. En la pestaña “Compiler” haga clic en el botón “Find Automatically” para una ubicación automática del compilador, o si lo prefiere haga clic en “Find Manually” para ubicar el compilador manualmente. Figura 2.21.4. En la pestaña “Programmer” se pide la ubicación del software del programador que estaremos utilizando para grabar los microcontroladores. Figura 2.22. 19
  29. 29. Se debe ubicar en la lista el programador “PICALL Programmer”, haciendoclic en el botón denominado “Add New Programmer” (Figura 2.22), yseguidamente se debe seleccionar de la lista de opciones, como se puedeobservar en la figura 2.23: Figura 2.23.Por último, al hacer clic en el botón “Next”, el software realizará la búsquedaautomática de la carpeta que contiene el archivo ejecutable del programadorPicall, el cual ha debido ser instalado según el procedimiento descrito en elApéndice A. 20
  30. 30. Microcontroladores PIC Capitulo III3.1. Que es un PIC?Los PIC son una familia de microcontroladores desarrollados y fabricados porla empresa Microchip Technologies Inc., los cuales cuentan con unatecnología tipo RISC (Reduced Instruction Set Computer) y poseen en suarquitectura interna características especiales que varían según el modelo dePIC que deseamos utilizar.Podríamos decir que estos dispositivos se asemejan a una computadora perode tamaño muy reducido, ya que cuentan con casi los mismos recursos queéstas, es decir, poseen memoria de programa, memoria RAM, memoria dedatos, puertos de entrada o salida, temporizadores y en algunos casoscuentan con recursos adicionales como convertidores A/D, comparadores,USART (Universal Synchronous/Asynchronous Receiver/Transmitter),comunicación serie I2C, entre otros.Con todas estas características es lógico pensar que este dispositivo pasa aser el corazón del circuito a ser controlado. Esto significa que elmicrocontrolador es el encargado de dirigir todos los procesos de un circuitoelectrónico, en base a las instrucciones de programa o rutinas que definenfunciones específicas de control, donde las mismas serán realizadas enlenguaje Basic para microcontroladores PIC. Es por esta razón queconsideramos muy importante estudiar la arquitectura interna delmicrocontrolador que se desea programar y aunque esta tarea pueda parecerdifícil, el Lenguaje Basic para microcontroladores PIC la hace sumamentesencilla.El diseño de programas para microcontroladores PIC va acompañadonormalmente con un previo estudio del diseño del hardware que hará quenuestros proyectos se pongan en marcha. Es decir, resulta absolutamentenecesario saber cual será la función específica de cada pin; por ejemplo, en elcaso de los puertos I/O (IN/OUT) a ser utilizados en el microcontrolador, esimportante definir sus funciones antes de empezar a programar, ya que éstospueden ser configurados a conveniencia como entrada o como salida dedatos de forma independiente. También podemos destinar un puerto completo 21
  31. 31. del microcontrolador para el control de dispositivos periféricos como pantallasLCD, teclados, motores paso a paso, leds, servomotores entre otros. De ahí laimportancia de establecer cual será la función de cada puerto delmicrocontrolador PIC elegido para nuestros proyectos.Otra decisión importante será elegir convenientemente el modelo demicrocontrolador a ser utilizado, ya que hay una gran gama de modelos quepueden ser adaptados a necesidades específicas de diseño. Figura 3.1.Los microcontroladores PIC comúnmente más utilizados son los siguientes: • PIC12C508 y PIC12C509, tienen memoria de programa EPROM, oscilador interno, y son muy utilizados en diseños de pequeños circuitos. • PIC16F84A, tiene memoria de programa tipo FLASH, oscilador externo, 13 pines I/O entre otras características que estaremos estudiando a lo largo del contenido de esta obra. Este PIC ha resultado ser uno de los más populares de toda la serie. • PIC16F87X, incluyen un gran número de mejoras en comparación con el PIC16F84, debido principalmente a que cuentan con un numero de pines I/O superior a éste, además de otras características relevantes. Por ejemplo, con esta serie de microcontroladores contamos con una mayor capacidad en cuanto a memoria de programa y memoria de datos. 22
  32. 32. • PIC18F4XX, estos microcontroladores resultan muy útiles cuando deseamos diseñar proyectos más avanzados.Cada uno de estos microcontroladores cuenta con una completa hoja dedatos que puede ser descargada de la página oficial de Microchip: http://www.microchip.comEstas características influyen directamente al momento de decidir que modelode microcontrolador PIC deseamos utilizar en nuestros proyectos, según seael objetivo de diseño del circuito que deseamos realizar.El microcontrolador PIC16F84 es uno de los microcontroladores máspopulares y en algunos casos, el preferido por estudiantes para dar inicio alestudio de la programación de microcontroladores, seguido del PIC16F877 elcual posee más recursos importantes que estaremos estudiando acontinuación.Antes de empezar a revisar todo lo referente a la programación demicrocontroladores PIC, consideramos importante recordar algunas de lascaracterísticas de éstos dispositivos, para tener una base de conocimientosbásicos para poder realizar un programa de control de un diseñocompletamente personalizado.Para empezar, veamos algunas características del microcontroladorPIC16F84: • Microcontrolador de 8 Bits. • Memoria de programa tipo Flash de 1024 palabras de 14 bits. • Memoria RAM de 68 bytes. • Memoria EEPROM de datos de 64 bytes. • Velocidad de operación de hasta 20 Mhz. • Cuatro fuentes de interrupción. • Posee 13 pines I/O (pines de entrada o salida). 23
  33. 33. Diagrama de pines del PIC16F84: Figura 3.2. PIN Identificación Descripción del Pin 1 RA2 Pin de Entrada/Salida (I/O) del puerto A 2 RA3 Pin de Entrada/Salida (I/O) del puerto A 3 RA4/TOCKI Pin de Entrada/Salida (I/O) del puerto A 4 MCLR Reset y entrada de voltaje de programación. 5 Vss Pin de Alimentación a Tierra (GND) 6 RB0/INT Pin de Entrada/Salida (I/O) del puerto B 7 RB1 Pin de Entrada/Salida (I/O) del puerto B 8 RB2 Pin de Entrada/Salida (I/O) del puerto B 9 RB3 Pin de Entrada/Salida (I/O) del puerto B 10 RB4 Pin de Entrada/Salida (I/O) del puerto B 11 RB5 Pin de Entrada/Salida (I/O) del puerto B 12 RB6 Pin de Entrada/Salida (I/O) del puerto B 13 RB7 Pin de Entrada/Salida (I/O) del puerto B 14 Vdd Pin de Alimentación de 5Vdc 15 OCS2/CLKOUT Salida del oscilador a cristal. 16 OSC1/CLKIN Entrada del oscilador a cristal o fuente externa de reloj. 17 RA0 Pin de Entrada/Salida (I/O) del puerto A 18 RA1 Pin de Entrada/Salida (I/O) del puerto A Tabla 3.1 24
  34. 34. El microcontrolador PIC16F84 cuenta con dos puertos I/O, el puerto A, el cualconsta de cinco pines I/O y el puerto B, el cual consta de ocho pines I/O comose puede observar en la figura 3.3: Figura 3.3.En total se cuenta con trece pines I/O, los cuales pueden ser programadoscomo entrada o salida según convenga al momento de diseñar un circuito decontrol.Los pines correspondientes al oscilador (OSC1 y OSC2) y al reset (MCLR)deben ser siempre tomados en cuenta en el diseño de nuestros proyectos. Espor este motivo que damos inicio al estudio de algunos circuitosindispensables para el correcto funcionamiento del microcontrolador PIC.3.2. El Oscilador Externo.Es un circuito indispensable para el funcionamiento del microcontrolador y elcual además, define la velocidad a la cual va a trabajar. Para hacer funcionarnuestro diseño podemos elegir entre las siguientes cuatro opciones: • Oscilador LP: Oscilador de bajo consumo (Low Power). • Oscilador XT: Cristal / Resonador. 25
  35. 35. • Oscilador HS: Oscilador de alta velocidad (High Speed). • Oscilador RC: Resistencia / Condensador.En los modos de oscilador LP, XT y HS el cristal debe ser conectado a lospines 15 y 16, Osc2/CLKout y Osc1/CLKin respectivamente, como se muestraen la figura 3.4. Figura 3.4.Los valores de los condensadores cerámicos vienen dados según la tabla quese muestra a continuación: Modo Frecuencia Osc1/CLKin Osc2/CLKout 32 kHz 68 - 100 pF 68 - 100 pF LP 200 kHz 15 - 33 pF 15 - 33 pF 2 MHz 15 - 33 pF 15 - 33 pF XT 4 MHz 15 - 33 pF 15 - 33 pF 4 MHz 15 - 33 pF 15 - 33 pF HS 10 MHz 15 - 33 pF 15 - 33 pF Tabla 3.2 26
  36. 36. Por ejemplo, para un oscilador tipo XT, podemos utilizar un cristal de cuarzocomo el de la figura 3.5. Figura 3.5.Al conectar el microcontrolador a la fuente de alimentación de 5 Vdc y medirla señal de salida del oscilador XT con un osciloscopio, en el pin 15(Osc2/CLKout) del microcontrolador, podremos ver la onda generada bajo lossiguientes parámetros de medición seleccionados en el equipo: • Voltios/Div: 200mV • Time/Div: 100ns Figura 3.6. 27
  37. 37. La lectura de la frecuencia y período en este caso sería la siguiente: • Frecuencia: 3,972 Mhz • Período: 251,71 nsCristal de cuarzo TTL: Este tipo de cristal consta de cuatro pines, de loscuales solo tres están implementados de la siguiente manera: Figura 3.7. Pin 1: NC (Este pin no se encuentra conectado internamente) Pin 7: GND Pin 8: Salida TTL Pin 14: +5VdcEn su salida se obtiene un tren de pulsos como se puede observar en la figura3.8, bajo los siguientes parámetros de medición seleccionados en unosciloscopio: • Voltios/Div: 2V • Time/Div: 100ns 28
  38. 38. Figura 3.8.La lectura de la frecuencia y período en este caso sería la siguiente: • Frecuencia: 3,999 Mhz • Período: 250,013 nsEl oscilador externo en modo RC resulta ser el más sencillo de todos y porende el más económico. Su configuración lo hace menos preciso debido aque existe una tolerancia de error en sus componentes, sin olvidar tambiénque la temperatura puede afectar la operación de este tipo de oscilador.Los valores recomendados para este oscilador son los siguientes: • 5 Kohm ≤ R1 ≤ 100 Kohm • C1 > 20 pF 29
  39. 39. Figura 3.9.3.3. Circuito de Reset: El Pin denominado MCLR (Master Clear), siempredebe ser tomado en cuenta cuando se diseña un circuito conmicrocontroladores PIC. A través de este Pin se podrá reiniciar el dispositivo,si a éste se le aplica un nivel lógico bajo (0V), por lo tanto resulta importantedestacar que para que un programa cargado en un microcontrolador semantenga en ejecución, el Pin MCLR debe estar siempre en un nivel lógicoalto (5V).Si deseamos tener control externo del reset de un microcontrolador PIC,debemos considerar el circuito de la figura 3.10: 30
  40. 40. Figura 3.10.Este circuito permite reiniciar el microcontrolador cada vez que el pulsador P1es presionado.3.4. Consideraciones técnicas de diseño:A continuación veremos algunos circuitos básicos que deben ser tomados encuenta para el desarrollo de prácticas con microcontroladores PIC. Estoscircuitos son muy útiles cuando deseamos visualizar el resultado de unaacción programada en el microcontrolador.3.4.1. Estado Lógico de un pin I/O:Una manera muy sencilla de ver el estado lógico de un pin configurado comosalida en cualquiera de los puertos de microcontrolador es a través del uso deLEDs, como se observa en los circuitos de la figura 3.11. 31
  41. 41. En el primer circuito, el LED se iluminará solo cuando el estado lógico del pinde salida del puerto sea igual a “1”, es decir, 5 voltios.En el segundo circuito, el LED se iluminará solo cuando el estado lógico de lasalida del puerto sea igual a “0”, es decir, 0 voltios. Figura 3.11.Esto significa que si deseamos realizar un programa en Lenguaje Basicencargado de cambiar el estado lógico de un pin específico, en cualquiera delos puertos de un microcontrolador, una forma “básica” de visualizar estecambio es a través del uso de LEDs. 32
  42. 42. 3.4.2. Lectura de un estado lógico en un pin I/O:El microcontrolador también nos permite capturar datos o señales externaspara luego ser procesadas y convertidas en respuestas que pueden definiruna acción específica en nuestros circuitos de prueba. Un ejemplo comúnpodría ser el uso de un pulsador para hacer destellar un led cada vez queéste sea presionado.Si deseamos introducir un nivel lógico bajo (0V), o alto (5V), a una de lasentradas de un microcontrolador a través de un pulsador, podríamosconsiderar los circuitos de la figura 3.12, los cuales nos proporcionan dosformas diferentes de hacerlo: Figura 3.12. 33
  43. 43. El primer circuito en la figura 3.12 mantiene un nivel lógico alto (5V) mientrasel pulsador permanece abierto. Al presionar el pulsador, el nivel lógico en elpin I/O del puerto pasa a ser bajo (0V).El segundo circuito de la figura 3.12 mantiene un nivel lógico bajo (0V)mientras el pulsador permanece abierto. Al presionar el pulsador, el nivellógico en el pin I/O del puerto pasa a ser alto (5V).3.4.3. El Opto-acoplador:El opto-acoplador es un componente muy útil cuando se requiere acoplarcircuitos electrónicos digitales con etapas de manejo de potencia o con otroscircuitos.Este componente en una de sus versiones, se compone básicamente de undiodo LED el cual se encarga de iluminar un fototransistor, para que ésteconduzca corriente a través del colector. Figura 3.13. 34
  44. 44. En la configuración de la figura 3.13, cuando en el pin I/O aplicamos un 1lógico (5V), el LED del opto-acoplador enciende y el fototransistor conduce lacorriente a tierra; por lo tanto, en la salida tendremos un 0 lógico (0V).Si apagamos el LED, el transistor no conduce, de tal manera que en la salidatendremos un 1 lógico (5V).En la configuración de la figura 3.14, cuando en el pin I/O aplicamos un 1lógico (5V), el LED del opto-acoplador enciende y el fototransistor conducepara poner en la salida un 1 lógico (5V). Mientras haya un 0 lógico en laentrada, el fototransistor permanecerá abierto entre el emisor y colector,dando como resultado un 0 lógico (0V) en la salida. Figura 3.14.Una configuración muy común para el control de dispositivos de potenciacomo motores eléctricos, luces incandescentes, solenoides, etc., se puede veren la figura 3.15, la cual se basa en cualquiera de los dos circuitos antesmencionados (figura 3.13 y figura 3.14), en la cual se ha incluido un relé a 35
  45. 45. través del cual circulará la corriente necesaria entre sus contactos, para hacerfuncionar cualquiera de estos dispositivos de potencia. Figura 3.15. 36
  46. 46. 3.4.4. Fuente de poder, 5Vdc / 3.3Vdc:En caso de no disponer de una fuente de poder regulada, proponemos laconstruccion de un diseño sencillo que podemos implementar en todos losproyectos propuestos. En la figura 3.16 se puede observar el diseño de unafuente regulada con salidas de voltaje de +5 Vdc y +3.3 Vdc: Figura 3.16. 37
  47. 47. Estructura de un programa.Componentes y operadores en PicBasic. Capitulo IV4.1.- Estructura de un programa: Para que nuestros programas tengan unaapariencia ordenada y se facilite la comprensión del mismo ante otrosprogramadores que deseen realizar mejoras a éste, es necesario estableceruna estructura que nos permita identificar fácilmente cada una de las partesque lo componen. A B C D Figura 4.1.En la figura 4.1 se puede observar la estructura básica de un programa hechoen Microcode Studio, y en la cual hemos identificado las cuatro secciones queconsideramos más importantes para lograr un programa bien estructurado. 38
  48. 48. Sección A: Corresponde al encabezado del programa, en el cual se debeconsiderar información básica del mismo, como el nombre, la identificaciónde autor, Copyright, fecha de elaboración o fecha de los últimos cambiosrealizados, versión del programa que se está realizando, e incluso una brevedescripción acerca del objetivo del programa y su aplicación en undeterminado circuito electrónico.Es importante resaltar que cada línea del encabezado debe empezar con unacomilla simple, en forma de comentario (ver “Sección D”).Sección B: Esta sección empieza en la columna cero del editor de texto deMicrocode Studio, y en ella se pueden declarar las definiciones (concepto queestudiaremos mas adelante) y las etiquetas de cada una de las subrutinasque serán programadas.Las etiquetas identifican puntos específicos o subrutinas dentro de unprograma. Son definidas por el programador y deben tener al final de cadauna de ellas el símbolo de “dos puntos”, que definen el final de la misma.Sección C: Estará destinada para las instrucciones de programa y la mismaestá separada de la columna cero del editor de texto por una tabulación, esdecir, cuando el cursor se encuentra en la columna cero, presionamos unavez la tecla “TAB”, y de esta manera establecemos un espacio mínimo,siempre igual o superior entre la sección B y C.Sección D: Esta destinada para realizar comentarios acerca de la función queestará cumpliendo una instrucción específica en nuestro programa. Cadacomentario debe empezar siempre con una comilla simple como se muestra acontinuación: Define el Oscilador para un Cristal de 4 Mhz.Cuando un comentario es demasiado extenso, podemos continuar el mismoen la siguiente línea, siempre que la frase comience con su respectiva comilla. 39
  49. 49. Los comentarios ayudan al diseñador a identificar cada línea de programa ocada una de las funciones de cada subrutina, garantizando así una buenadocumentación en cada uno de los programas que realizamos.4.2.- Subrutinas: Una subrutina se presenta como un algoritmo separado delalgoritmo principal, y estará destinado a resolver una tarea específica. Lassubrutinas pueden ser referidas cada vez que sea necesario, llamando a laetiqueta que corresponde a ésta, la cual debe ir siempre al inicio de la misma.Led1: For Z = 0 To 9 LED = EncendidoEtiqueta Pause 1000 LED = Apagado Subrutina Pause 1000 Next Z GoTo Inicio End 40
  50. 50. 4.3.- Componentes y operadores en PicBasic.PIC Basic cuenta con una serie de herramientas de programación entre lascuales podemos mencionar las etiquetas, variables, identificadores,constantes, comentarios, símbolos entre otras.Algunas de estas herramientas son de uso obligatorio a la hora de realizar unprograma, y otras que no son de uso obligatorio, nos facilitarán el trabajoconsiderablemente.4.3.1.- Define: La directiva “Define” resulta muy importante en laprogramación de microcontroladores con PicBasic, ya que establece unaserie de parámetros que de no ser tomados en cuenta, causará que nuestrosprogramas sencillamente no funcionen en la mayoría de los casos.Esta serie de parámetros están directamente relacionados con dispositivosexternos al microcontrolador. Por ejemplo, si deseamos utilizar un osciladorde diferente frecuencia al valor establecido por defecto (4 Mhz), seráconveniente entonces definir la velocidad del mismo utilizando la directiva: Define Osc {frecuencia}De igual forma deben ser considerados estos parámetros para el uso dedispositivos como pantallas LCD, donde se deberán definir los puertos deconexión para el bus de datos y bus de control. Así mismo ocurre para el casode las comunicaciones seriales o I2C, donde los parámetros también debenser definidos. Veamos a continuación la tabla de parámetros para el uso de lainstrucción Define. 41
  51. 51. Parámetro Descripción OSC {frecuencia} Frecuencia del Oscilador en Mhz LCD_DREG {puerto} Puerto de datos LCD LCD_DBIT {bit} Bit inicial del puerto de datos LCD_RSREG {puerto} Puerto para RS (Register Select) LCD_RSBIT {bit} Pin del Puerto para RS LCD_EREG {puerto} Puerto para E (Enable) LCD_EBIT {bit} Pin del Puerto para E LCD_RWREG {puerto} Puerto para RW (Read/Write) LCD_RWBIT {pin} Pin del puerto para RW LCD_LINES {líneas} Número de líneas de la LCD (1,2 o 4) I2C_SCLOUT 1 Interface de Reloj I2C Bipolar Cuando en la transferencia es utilizado un I2C_SLOW 1 oscilador mas lento que 8 Mhz. Tabla 4.1.4.3.2.- Variables: En las variables podemos almacenar datos temporalmente,los cuales podrán ser consultados o modificados cada vez que sea necesario.Regularmente la definición de variables se hace al inicio del programa y paraello se utiliza la palabra VAR seguida por el tipo de variable según la tablaque mostramos a continuación: Nombre de Tipo de VAR Descripción la Variable Variable A1 Var Bit Toma los valores 0 y 1 unicamente Temp Var Byte Toma valores entre 0 y 255 (8 bits) dig1 Var Word Toma valores entre 0 y 65535 (16 bits) Tabla 4.2.El nombre de la variable es elegido por el programador y el tipo de variable sedefine según el tipo de dato que se desea almacenar temporalmente. 42
  52. 52. 4.3.3.- Arrays: Las variables Arrays tienen un determinado número de“elementos”, definido según el tamaño de la variable. Las variables Arrays tipoBit, pueden almacenar 256 elementos; las variables Arrays tipo Byte puedenalmacenar hasta 96 elementos y las variables Arrays tipo Word hasta 48elementos, los cuales a su vez pueden ser accesados en cualquiera de lostres casos a través de un índice. Este índice se específica entre corchetescomo se muestra en los siguientes ejemplos:Para declarar una variable Array utilizamos el siguiente formato: Dato Var Byte[7]El primer elemento de esta variable es Dato[0] y el último elemento esDato[7], lo cual significa que hemos declarado una variable array de 8elementos. En este caso podemos almacenar un byte en cada elemento,siempre especificando el índice.Ejemplo: Almacenar en cada elemento de la variable “Dato” los valores 200,15, 56, 75, 80, 20, 33, 45. Dato[0] = 200 Dato[1] = 15 Dato[2] = 56 Dato[3] = 75 Dato[4] = 80 Dato[5] = 20 Dato[6] = 33 Dato[7] = 45En algunos casos se debe verificar la hoja de datos del microcontrolador, yaque la cantidad de elementos que se pueden almacenar en variables arraystipo Byte o Word puede variar según el modelo del mismo. 43
  53. 53. 4.3.4.- Constantes: Ayudan a identificar un valor constante en nuestroprograma, facilitando aún más la comprensión del mismo a la hora de verificarsu funcionamiento. En la tabla 4.3 se puede observar la forma de declarar unaconstante. Nombre de la Valor de la CON Constante Constante Temp_Max CON 150 Temp_Min CON 55 Tabla 4.3.4.3.5.- Símbolos o Alias: Proveen un nombre único y específico a elementoso variables dentro de nuestro programa. Para definir un símbolo, utilizamos lapalabra “Symbol”, seguida del alias del elemento, el símbolo de igualdad “=”, ypor último el elemento en cuestión: Symbol {alias} = {elemento}Por ejemplo, si deseamos controlar un motor DC a través de uno de los pinesdel puerto A de un microcontrolador, resultaría mucho mas sencillo referirse aeste pin como “Motor”, en vez de referirse a él como “PortA.0”.Entonces, Symbol Motor = PORTA.0Veamos otros ejemplos: Symbol Relay = PORTB.0 Symbol Sensor = PORTA.0 Symbol LED = PORTA.1 Symbol RC0 = PORTC.0 44
  54. 54. 4.3.6.- Operadores Aritméticos: Entre los operadores aritméticos másutilizados tenemos los que se muestran en la siguiente tabla: Operador Descripción Operador Descripción + Suma ABS Valor Absoluto - Resta SIN Seno del Angulo * Multiplicación COS Coseno del Angulo / División MIN Minimo de un número // Residuo MAX Máximo de un número << Desplaza a la Izquierda REV Invertir un Bit Valor de un digito para un >> Desplaza a la Derecha DIG número decimal = Asignación de Valores Tabla 4.4.4.3.7.- Operadores Binarios: En la siguiente tabla veremos los operadoresbinarios proporcionados para el Lenguaje PicBasic: Operrador Descripción & AND Lógico | OR Lógico ^ XOR Lógico ˜ NOT Lógico &/ NAND Lógico |/ NOR Lógico ^/ NXOR Lógico Tabla 4.5.Con estos operadores resulta muy sencillo realizar operaciones binarias,como lo demuestra el siguiente ejemplo:Si aplicamos una AND lógica, donde deseamos filtrar los siete bits mássignificativos del valor almacenado en la siguiente variable: Var1 = %00101001Entonces, Var1 = Var1 & %00000001 45
  55. 55. El resultado de esta operación es Var1 = %000000014.3.8.- Operadores de Comparación: Los operadores de comparaciónnormalmente son utilizados con la instrucción If…Them… para realizarcomparaciones entre variables o datos extraídos de alguna operaciónaritmética. Operador Descripción = Igual <> Diferente < Menor que > Mayor que <= Menor o igual que >= Mayor o igual que Tabla 4.6.4.3.9.- Operadores Lógicos: Los operadores lógicos son utilizados paraestablecer condiciones entre variables y son utilizados de la misma maneraque los operadores de comparación. Operador Descripción AND AND Lógico OR OR Lógico XOR XOR Lógico NOT NOT Lógico NOT AND NAND Lógico NOT OR NOR Lógico NOT XOR NXOR Lógico Tabla 4.7.Ejemplo: If Var1 = 1 and Var2 = 3 And Var3 = 5 Then Goto inicioLa condición saltará a la etiqueta “inicio” solo si se cumplen las trescondiciones. 46
  56. 56. Primeros Programas con el PIC16F84 Capitulo VPara aprender a programar un microcontrolador resulta importante dar inicioal tema con ejemplos prácticos y sencillos, que nos ayuden a comprender elfuncionamiento de la arquitectura del PIC y las instrucciones de programa quese están empleando.El primer paso entonces será realizar el montaje del circuito con base en losconocimientos adquiridos en las páginas anteriores. Se debe tomar en cuentaque aunque en los diagramas de los circuitos que se muestran a continuación,no están presentes los pines de alimentación “Vcc” y “Gnd”, éstos deben serconectados debidamente a la fuente de alimentación de 5 Voltios.A medida que se van proponiendo ejemplos de aplicación práctica, estaremosestudiando la sintaxis de las instrucciones empleadas en cada proyecto parafacilitar la comprensión general de éste, referente a la programación y diseñoelectrónico.5.1.- Proyecto #1: A continuación realice el montaje de la figura 5.1, en baseal cual realizaremos la programación necesaria para encender dos Ledsconectados a los puertos del microcontrolador: Figura 5.1. 47
  57. 57. Proyecto # 1 Componentes Cantidad PIC16F84A 1 Cristal de 4 Mhz 1 Capacitor cerámico de 33 pF 2 LED 2 Resistencia de 220 Ohm 2 Fuente regulada de 5 Vdc 1 Tabla 5.1. • El Led 1 se encuentra conectado en el pin RA0 del puerto A, el cual deberá ser configurado como “Salida”. • El Led 2 se encuentra conectado en el pin RB0 del puerto B, el cual deberá ser configurado igualmente como “Salida”.Note que el ánodo del diodo LED se encuentra conectado al pin de salida delpuerto, por lo tanto para que encienda el LED debemos hacer salir un 1 lógicopor el pin correspondiente.Como los pines de los puertos pueden ser configurados como “entradas” ocomo “salidas”, es importante tomar en cuenta los registros de configuraciónde puertos, los cuales para el caso específico del PIC16F84 son dos:TrisA (registro de configuración I/O del puerto A), es un registro de 8 bits, delos cuales los tres más significativos no se encuentran implementados en estemodelo de microcontrolador, ya que como se puede observar en el diagramade pines del dispositivo (figura 3.2), el puerto A solo cuenta con 5 pines (RA0,RA1, RA2, RA3 y RA4). 48
  58. 58. Un ejemplo de configuración de los pines I/O del puerto A es el siguiente: Registro TrisA Bit menos 1 1 1 1 0 RA4 RA3 RA2 RA1 RA0 significativo Figura 5.2.1 = Entrada (Al configurar un bit del registro TrisA en “1”, éste se comporta como entrada).0 = Salida (Al configurar un bit del registro TrisA en “0”, éste se comporta como salida).Al ver la figura 5.2, se puede observar que el pin RA0 ha sido configuradocomo salida y el resto de los pines como entrada.En PicBasic, este paso se realiza de la siguiente manera:TrisA = %11110 (“%” para expresar la configuración en Binario), ó:TrisA = $1E (“$” para expresar la configuración en Hexadecimal) “Recordemos entonces que como el Led 1 se encuentra conectado en el pin RA0, el bit correspondiente a este pin en el registro TrisA ha sido configurado como salida”.TrisB, es un registro de 8 bits en el cual se configuran los pines del puerto B,ya sea como entrada o como salida, por ejemplo: Registro TrisB 1 1 1 1 1 1 1 0 Bit menos RB7 RB6 RB5 RA4 RA3 RA2 RA1 RA0 significativo Figura 5.3.1 = Entrada (Al configurar un bit del registro TrisB en “1”, éste se comporta como entrada).0 = Salida (Al configurar un bit del registro TrisB en “0”, éste se comporta como salida). 49
  59. 59. Para el caso particular del puerto B, se puede observar que el pin RB0 ha sidoconfigurado como salida y el resto de los pines como entrada.“Consideramos importante configurar los pines que no estarán en uso comoentrada, ya que de esta forma podemos evitar daños en el hardware internodel microcontrolador al experimentar con éste en un tablero de pruebas.”La configuración en PicBasic para el registro TrisB, ajustada al ejemplo de lafigura 5.3 sería entonces la siguiente:TrisB = %11111110 (si se desea hacer la notación en binario), ó:TrisB = $FE (si se desea hacer la notación en hexadecimal)Antes de verificar el programa propuesto para este ejemplo, veremos lasintaxis de las instrucciones utilizadas en él, para tener una idea clara de lafunción que cumple cada instrucción. Esta información puede sercomplementada en el capítulo XV, en el cual encontrará la descripción decada una de las instrucciones utilizadas en cada proyecto planteado en estaedición.Sintaxis de las Instrucciones empleadas en el programa:HIGHSintaxis: HIGH pinLa instrucción “High” pone en uno lógico un pin I/O específico. 50
  60. 60. LOWSintaxis: LOW pinLa instrucción “LOW” coloca en cero lógico un pin I/O específico.GOTOSintaxis: GOTO etiquetaLa instrucción “Goto” continúa la ejecución de un programa a partir de laetiqueta especificada (Esta instrucción no tiene retorno).PAUSESintaxis: PAUSE periodoLa instrucción “Pause” realiza una pausa en el programa por un periododefinido en milisegundos.Veamos el programa en PicBasic:***************************************** Nombre : Proyecto1.pbp ** Autor : Nombre del Autor ** Copyright : Copyright (Año) ** Fecha : Fecha ** Versión : 1.0 *****************************************Define Osc 4 Define el Oscilador para un Cristal de 4 Mhz. 51
  61. 61. TRISA = %11110 Configuración el Puerto A TRISB = %11111110 Configuración el Puerto B PORTA = 0 Inicializa el puerto "A", es decir, se ponen todos los pines en cero. PORTB = 0 Inicializa el puerto "B".Inicio: Etiqueta de Inicio del programa High PORTA.0 Enciente el Led conectado en el pin RA0 Pause 1000 Hace una pausa de 1000 milisegundos = 1 Seg. Low PORTA.0 Apaga el Led conectado en el pin RA0 Pause 1000 Hace una pausa de 1000 milisegundos = 1 Seg. High PORTB.0 Enciente el Led conectado en el pin RB0 Pause 1000 Hace una pausa de 1000 milisegundos = 1 Seg. Low PORTB.0 Apaga el Led conectado en el pin RB0 Pause 1000 Hace una pausa de 1000 milisegundos = 1 Seg. GoTo Inicio Salta a la etiqueta "Inicio" y se repite el proceso. EndLa instrucción “High” se encarga de poner un nivel lógico alto en el pinespecificado seguidamente. En este caso, primero se escribe el puerto yseguido de un punto, se especifica el número del pin en el puerto quedeseamos utilizar.La instrucción “Low” es responsable en este caso de poner el pinespecificado en un nivel lógico bajo. Al igual que en la instrucción “High”, sedebe especificar el puerto y el pin del puerto a ser utilizado.La instrucción “GoTo” realiza un salto hacia una etiqueta específica; en estecaso el programa salta a la etiqueta “Inicio” para empezar de nuevo todo elproceso. 52
  62. 62. Al escribir el programa en el editor de texto de Microcode Studio, se debegrabar el mismo con el nombre de su preferencia para que éste pueda sercompilado y al mismo tiempo pueda ser enviado al microcontrolador.Observe que para este programa, hemos designado el nombre“Proyecto1.pbp” (figura 5.4). Figura 5.4.Antes de compilar el programa, se debe asegurar de seleccionar el modeloapropiado de microcontrolador PIC, como se observa en la figura 5.5. Luegose compila el programa y se verifica que éste no tenga errores. 53
  63. 63. Modelo Compilar Compilar y del uC. Grabar en el PIC Figura 5.5.Seguidamente, se debe proceder a cargar el programa compilado en elmicrocontrolador con la ayuda del programador de microcontroladores Pic.Al hacer clic en el icono “Compilar y Grabar en el PIC” (ver figura 5.5), elcompilador habrá generado un archivo de nombre “Ejemplo1.hex” yseguidamente se abrirá el software “Picall/P16Pro”, como se observa en lafigura 5.6: Figura 5.6.En este momento el microcontrolador deberá estar montado en la base delprogramador en la posición indicada por la figura 5.6. 54
  64. 64. Antes de programar el microcontrolador, también resulta conveniente verificarlos fusibles de programación, accediendo al botón “Config”, el cual puede servisualizado en la figura 5.6.En esta sección se debe configurar el tipo de oscilador utilizado en nuestrocircuito, así como otras opciones disponibles que comentaremos acontinuación (ver figura 5.7). Figura 5.7.En la figura 5.7 se pueden observar tres secciones llamadas “Oscillator”,“Hardware” y “Protection”: • En la sección “Oscillator”, debemos seleccionar el tipo de oscilador utilizado en nuestro circuito electrónico, el cual en este caso es del tipo XT, debido a que el cristal que hemos elegido es de 4 Mhz. • En la sección “Hardware” es posible activar el temporizador “Perro Guardián”, el cual se encarga de reiniciar el microcontrolador en caso de fallas o bloqueos en el programa. Para utilizar el “Watchdog” es necesario diseñar el programa bajo ciertos parámetros, de forma que podamos reiniciar el temporizador “Watchdog” antes de que éste se desborde y provoque un “Reset” en el sistema. Si nuestro programa llegara a fallar, el temporizador Watchdog completaría su conteo y se desbordaría, provocando un “Reset” del sistema. 55
  65. 65. • En la sección “Hardware” también disponemos de la opción “Power Up Timer”, la cual una vez activada en el microcontrolador, hará que éste no pueda iniciar el programa hasta tanto el voltaje aplicado al circuito sea estable y seguro (ver figura 5.8). 6 5 Voltios 4 3 2 1 0 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 Tiempo Figura 5.8. • En la sección “Protection”, tenemos la posibilidad de proteger el código de programa almacenado en la memoria del microcontrolador.Finalmente hacemos clic en el botón “Program” (ver figura 5.6), paradescargar el programa “Proyecto1.hex” en el microcontrolador;inmediatamente se podrá ver el proceso de grabación y verificación de datos,para luego culminar con el montaje del microcontrolador en el circuito deprueba.Estos pasos se deben aplicar en cada uno de los proyectos aquí planteados,o cada vez que se desee realizar una modificación a un programa paraobtener siempre mejores resultados sobre el objetivo propuesto en cadaactividad. 56
  66. 66. 5.2.- Proyecto #2: En este ejemplo conectaremos un Led en cada pin delpuerto B, el cual a su vez deberá ser configurado como salida para garantizarel correcto funcionamiento del mismo. En la figura 5.9 podemos observar endetalle la conexión del circuito eléctrico que deberá ser montado. Figura 5.9. Proyecto # 2 Componente Cantidad PIC16F84A 1 Cristal de 4 Mhz 1 Capacitor de 33 pF 2 LED 8 Resistencia de 220 Ohm 8 Fuente regulada de 5 Vdc 1 Tabla 5.2. 57
  67. 67. En el proyecto #1 se pudo observar como es posible encender un ledconectado a un pin del puerto A o B en un PIC16F84A, utilizando lasinstrucciones High y Low. También existen otras formas de poner un “1” o un“0” lógico en un pin configurado como salida; esto se puede lograr de variasmaneras: PORTA.0 = 1 RA0 = 1 -> (es igual a High PortA.0) PORTA.0 = 0 RA0 = 0 -> (es igual a Low PortA.0)Cuando deseamos poner varios pines de un mismo puerto en “1”, podemosutilizar las siguientes opciones: PORTB = %10101010 RB7 = 1, RB5 = 1, RB3 = 1, RB1 = 1 RB6 = 0, RB4 = 0, RB2 = 0, RB0 = 0Este mismo ejemplo de configuración en hexadecimal: PORTB = $AA RB7 = 1, RB5 = 1, RB3 = 1, RB1 = 1 RB6 = 0, RB4 = 0, RB2 = 0, RB0 = 0Recordemos que el símbolo “%” expresa la notación en binario, por lo cual sedeben expresar los ocho bits a ser cargados en el registro “PortB”. Otra formade expresar este ejemplo sería colocando la notación en hexadecimal con elsímbolo “$”, seguido del valor calculado.Basados en esta información podemos lograr encender y apagar varios ledssimultáneamente conectados a uno de los puertos del microcontrolador comolo muestra el montaje de la figura 5.9.Veamos el siguiente programa:***************************************** Nombre : Proyecto2.pbp ** Autor : Nombre del Autor ** Copyright : Copyright (Año) ** Fecha : Fecha ** Versión : 1.0 ***************************************** 58
  68. 68. Define Osc 4 Define el Oscilador para un Cristal de 4 Mhz. TRISB = %00000000 Configura el Puerto B como Salida PORTB = %00000000 Inicializa el puerto "B".Inicio: Etiqueta de Inicio del programa PORTB = %01010101 Enciente las salidas RB0, RB2, RB4 y RB6, al mismo tiempo apaga RB1, RB3, RB5 y RB7. Pause 1000 Hace una pausa de 1000 milisegundos = 1 Seg. PORTB = %10101010 Enciente las salidas RB1, RB3, RB5 y RB7, al mismo tiempo apaga RB0, RB2, RB4 y RB6. Pause 1000 Hace una pausa de 1000 milisegundos = 1 Seg. GoTo Inicio Salta a la etiqueta "Inicio" y se repite el proceso. EndEste programa enciende primero las salidas pares del puerto B y apaga lassalidas impares, genera una pausa de 1 segundo (1000 ms) y seguidamentehace el proceso inverso en las salidas, es decir, enciende las salidas imparesy apaga las salidas pares para generar nuevamente otra pausa de 1 segundoy así repetir el proceso completo al generar un salto a la etiqueta “Inicio”. 59
  69. 69. 5.3.- Proyecto #3: Los pines en los puertos de un microcontrolador puedenser configurados también como entradas, como se detalla en el contenido delproyecto #1, donde se explica claramente que al poner un “1” en un bit de unregistro de configuración de puerto, ya sea TRISA o TRISB, para el caso delPIC16F84A, éste se comportará como entrada. Realice el montaje de la figura5.10 y analice el programa que se muestra a continuación. Figura 5.10. Proyecto # 3 Componente Cantidad PIC16F84A 1 Cristal de 4 Mhz 1 Capacitor cerámico de 33 pF 2 LED 1 Resistencia de 220 Ohm 1 Resistencia de 10K Ohm 1 Pulsador Normalmente Abierto 1 Fuente regulada de 5 Vdc 1 Tabla 5.3. 60
  70. 70. IF – THEM – ELSESintaxis: If expresión 1 {AND / OR expresión 2} Then etiquetaCon la instrucción If – Them podemos tomar decisiones a lo largo de unprograma, basadas en condiciones específicas definidas por el programador.El siguiente programa hace destellar un LED conectado en RB0, solo cuado elpulsador es activado:***************************************** Nombre : Proyecto3.pbp ** Autor : Nombre del Autor ** Copyright : Copyright (Año) ** Fecha : Fecha ** Versión : 1.0 *****************************************Define Osc 4 Define el Oscilador para un Cristal de 4 Mhz. TRISA = %11111 configura el Puerto A como Entrada TRISB = %00000000 Configura el Puerto B como Salida PORTB = $00 Inicializa el puerto BInicio: If PORTA.0 = 1 Then PORTB.0 = 1 Pregunta si RA0 = 1, si se cumple la condición entonces enciende el Led. Pause 1000 Hace una pausa de 1 segundo (1000 ms) Low PORTB.0 Apaga el Led Pause 1000 Hace una pausa de 1 segundo (1000 ms) GoTo inicio Salta a la etiqueta "Inicio" EndPara verificar si el pulsador está activado, se pregunta si RA0 = 1. Esto esposible gracias a la instrucción “IF” la cual genera un resultado siempre que lacondición planteada se cumpla, y para lo cual debemos utilizarnecesariamente su complemento “Then” seguido de la acción a ser tomada. 61
  71. 71. En este caso si el pulsador ha sido activado, entonces RA0 = 1, es decir, secumple la condición y por lo tanto RB0 = 1, es decir, el LED enciende.5.4.- Proyecto #4: En este ejemplo empleamos un microcontroladorPIC16F877A, con el cual nos hemos planteado la lectura de ocho pulsadoresconectados al puerto B, de tal manera que al activar uno de ellos podemosmostrar un dígito decimal en un Display de siete segmentos. Figura 5.11. 62
  72. 72. Proyecto # 4 Componente Cantidad PIC16F877A 1 Cristal de 4 Mhz 1 Capacitor cerámico de 33 pF 2 Resistencia de 220 Ohm 8 Resistencia de 10K Ohm 8 Pulsador Normalmente Abierto 8 Display de 7 Segmentos - Cátodo común 1 Fuente regulada de 5 Vdc 1 Tabla 5.4.En el diagrama esquemático de la figura 5.11 se pueden observar ochopulsadores normalmente abiertos, los cuales una vez activados generan unestado lógico alto en el puerto seleccionado (puerto “B”), el cual ha sidoconfigurado como entrada.El display de 7 segmentos de cátodo común, se encuentra conectado alpuerto “D”, donde el bit menos significativo RB0 corresponde al segmento “a”del display, RB1 corresponde al segmento “b”, RB2 corresponde al segmento“c”, RB3 corresponde al segmento “d”, RB4 corresponde al segmento “e”, RB5corresponde al segmento “f” y RB6 corresponde al segmento “g”.El siguiente programa es una forma básica de tomar una lectura de cadapulsador conectado al puerto “B” y generar un resultado en el puerto de salidaal cual hemos conectado un display de 7 segmentos:***************************************** Nombre : Proyecto4.pbp ** Autor : Nombre del Autor ** Copyright : Copyright (Año) ** Fecha : Fecha ** Versión : 1.0 ***************************************** 63
  73. 73. Define Osc 4 Define el Oscilador para un Cristal de 4 Mhz. TRISB = $FF Configura el Puerto B como Entrada TrisD = $00 Configura el Puerto D como SalidaInicio: A continuación se verifica cada pin del puerto B, si hay un 1 lógico en alguna de las entradas el puerto D se actualiza con el dato correspondiente para generar en el Display un dígito decimal. gfedcba ||||||| If PORTB.0 = 1 Then PortD = %00111111 Enciende los segmentos correspondientes al dígito “cero” en el display. If PORTB.1 = 1 Then PortD = %00000110 Enciende los segmentos correspondientes al dígito “uno” en el display. If PORTB.2 = 1 Then PortD = %01011011 Enciende los segmentos correspondientes al dígito “dos” en el display. If PORTB.3 = 1 Then PortD = %01001111 Enciende los segmentos correspondientes al dígito “tres” en el display. If PORTB.4 = 1 Then PortD = %01100110 Enciende los segmentos correspondientes al dígito “cuatro” en el display. If PORTB.5 = 1 Then PortD = %01101101 Enciende los segmentos correspondientes al dígito “cinco” en el display. If PORTB.6 = 1 Then PortD = %01111101 Enciende los segmentos correspondientes al dígito “seis” en el display. If PORTB.7 = 1 Then PortD = %00000111 Enciende los segmentos correspondientes al dígito “siete” en el display. GoTo Inicio Salta a la etiqueta "Inicio" End 64
  74. 74. 5.5.- Proyecto #5: En el ejemplo a continuación se realiza un conteoascendente desde cero hasta nueve en un display de 7 segmentos conectadoal puerto “D” de un PIC16F877A. Figura 5.12. Proyecto # 5 Componente Cantidad PIC16F877A 1 Cristal de 4 Mhz 1 Capacitor cerámico de 33 pF 2 Resistencia de 220 Ohm 8 Display de 7 Segmentos - Cátodo común 1 Fuente regulada de 5 Vdc 1 Tabla 5.5. 65
  75. 75. FOR… NEXTSintaxis: For variable = inicio to final {step {-} incremento} * * Instrucciones… * * Next { variable}La instrucción For…Next se encarga de hacer repeticiones de instruccionesque permanecen dentro del lazo For… Next.El parámetro Step afecta el incremento según el valor asignado después deesta palabra. Si este parámetro es omitido, el incremento es en una unidad.Analice el siguiente programa:***************************************** Nombre : Proyecto5.pbp ** Autor : Nombre del Autor ** Copyright : Copyright (Año) ** Fecha : Fecha ** Versión : 1.0 *****************************************Define Osc 4 Define el Oscilador para un Cristal de 4 Mhz. I Var Byte Declaración de la Variable "I" tipo Byte Constantes para definir cada dígito decimal en el Display: gfedcba ||||||| Cero CON %00111111 Uno CON %00000110 Dos CON %01011011 Tres CON %01001111 Cuatro CON %01100110 Cinco CON %01101101 Seis CON %01111101 Siete CON %00000111 66
  76. 76. Ocho CON %01111111 Nueve CON %01100111 Configuración del Puerto de Salida: TrisD = $00 Configura el Puerto D como SalidaInicio: For I = 0 To 9 Repetición de Instrucciones dentro del Lazo For - Next Call Digito Salto con Retorno hacia la etiqueta "Digito" Pause 1000 Pausa de 1 segundo (1000 ms) Next I GoTo Inicio Salta a la etiqueta "Inicio"Digito: Verificación del dígito a ser mostrado en el Display el cual se corresponde con el valor almacenado en la variable "I". If I = 0 Then PortD = cero If I = 1 Then PortD = Uno If I = 2 Then PortD = dos If I = 3 Then PortD = tres If I = 4 Then PortD = cuatro If I = 5 Then PortD = cinco If I = 6 Then PortD = seis If I = 7 Then PortD = siete If I = 8 Then PortD = ocho If I = 9 Then PortD = nueve Return Retorna una línea después del salto con retorno (Call) EndAl iniciar el conteo en el display de 7 segmentos, se puede observar unconteo ascendente que da inicio en cero y se va incrementando en unaunidad cada segundo hasta llegar a nueve.Si deseamos realizar el incremento en más de una unidad por vez, tan solodebemos incluir la directiva “Step”, seguido del incremento, es decir, siqueremos realizar un incremento de dos unidades por vez, entonces el lazoFor – Next se compone de la siguiente manera: 67
  77. 77. For I = 0 To 9 Step 2 Repetición de Instrucciones dentro del Lazo For – Next con incremento en dos unidades. Call Digito Salto con Retorno hacia la etiqueta "Digito" Pause 1000 Pausa de 1 segundo (1000 ms) Next IEsto significa que el conteo arranca en cero y cada segundo transcurrido sepodrán ver los dígitos: “2”, “4”, “6” y “8”.Para realizar un conteo regresivo, el lazo For – Next se compone de lasiguiente forma: For I = 9 To 0 Step -1 Repetición de Instrucciones dentro del Lazo For – Next. Call Digito Salto con Retorno hacia la etiqueta "Digito" Pause 1000 Pausa de 1 segundo (1000 ms) Next IEn este caso en conteo inicia en nueve y decrece en una unidad hasta llegara cero.5.6.- Proyecto #6: PicBasic cuenta con una instrucción capaz de generartonos DTMF (Dual Tone Multifrecuency - Multifrecuencia de doble tono), tonosque se utilizan en telefonía para marcar una serie de números y así poderestablecer la comunicación entre dos o más personas. Una aplicacióninteresante para esta instrucción podría ser el discado de números telefónicosen sistemas de alarma cuando ha sido activado un dispositivo de supervisión,para luego generar un mensaje de voz que nos alerte de dicho evento.Realice el montaje de la figura 5.13 y analice el programa que se muestra acontinuación, el cual genera tonos DTMF consecutivos de una serie de dígitospredefinidos. Es muy importante considerar que para generar los tonosadecuadamente el oscilador externo debe ser de 10 Mhz o superior. 68
  78. 78. Figura 5.13. Proyecto # 6 Componente Cantidad PIC16F84A 1 Cristal de 10 Mhz 1 Capacitor cerámico de 33 pF 2 Capcitor Electrolítico de 10 uF 2 Parlante de 8 Ohm 1 Fuente regulada de 5 Vdc 1 Tabla 5.6.En la tabla 5.7 se puede observar la frecuencia baja y la frecuencia alta decada digito entre cero y quince, los cuales se corresponden a su vez con cadauno de los dígitos de un teclado telefónico, como se puede observar en lasegunda columna de la misma tabla.Esto quiere decir que si generamos las frecuencias correspondientes al dígito“1” utilizando la instrucción “DTMFout”, obtendremos las mismas frecuenciasbaja y alta que se generan al pulsar el dígito “1” de cualquier teléfono de tonosDTMF. Si deseáramos generar desde el microcontrolador el tono DTMF 69
  79. 79. correspondiente al dígito “0” de un teclado telefónico, entonces, según la tabla5.7, el dígito a introducir en la instrucción “DTMFout” deberá ser el “10”. Dígito en la Dígito en un Frecuencias Frecuencias Instrucción Teclado Bajas Altas DTMFout Telefónico 1 1 697 HZ 1209 HZ 2 2 697 HZ 1336 HZ 3 3 697 HZ 1477 HZ 4 4 770 HZ 1209 HZ 5 5 770 HZ 1336 HZ 6 6 770 HZ 1477 HZ 7 7 852 HZ 1209 HZ 8 8 852 HZ 1336 HZ 9 9 852 HZ 1477 HZ 10 0 941 HZ 1209 HZ 11 * 941 HZ 1336 HZ 12 # 941 HZ 1477 HZ 13 A 697 HZ 1633 HZ 14 B 770 HZ 1633 HZ 15 C 852 HZ 1633 HZ 0 D 941 HZ 1633 HZ Tabla 5.7. Figura 5.14. 70
  80. 80. Antes de empezar a programar, vamos a verificar la sintaxis de la instrucciónDTMFout:DTMFoutSintaxis: DTMFout pin, {On-ms, Off-ms}, [tono, tono,...tono]La instrucción DTMFout genera tonos DTMF en secuencia y a través de unpuerto cualquiera del microcontrolador.Pin: especifica el pin del puerto en el cual se emitirán los tonos DTMF.On-ms: es una variable o constante que especifica la duración de cada tonoen milisegundos. En caso de no utilizar este parámetro, el tiempo por defectode cada tono es de 200 ms.Off-ms: es una variable o constante que especifica el tiempo en milisegundosdel silencio que hay entre cada tono. En caso de no utilizar este parámetro, eltiempo en silencio entre cada tono por defecto será de 50 ms.Tono: puede ser una variable o constante entre 0 y 15, que especifica el tonoque debe ser generado. 71

×