Académique Documents
Professionnel Documents
Culture Documents
Manual de Prcticas
PROGRAMACIN DE SISTEMAS INTEGRADOS EMBEBIDOS OPTATIVA I. INGENIERA EN MECATRNICA
Contenido
INTRODUCCIN. .................................................................................................................................. 1 Conexin bsica............................................................................................................................... 1 Alimentacin ............................................................................................................................... 1 Seal de reinicio .......................................................................................................................... 2 Seal de reloj ............................................................................................................................... 2 Cristal de cuarzo .......................................................................................................................... 2 Resonador cermico.................................................................................................................... 3 Oscilador RC ................................................................................................................................ 3 Oscilador externo ........................................................................................................................ 3 Componentes adicionales ............................................................................................................... 4 Interruptores y botones de presin ............................................................................................ 4 Rel .............................................................................................................................................. 5 Diodos LED................................................................................................................................... 6 Quemar con rapidez .................................................................................................................... 6 Quemar lentamente .................................................................................................................... 7 Algo para recordar ...................................................................................................................... 7 Display LED .................................................................................................................................. 7 Optoacopladores ....................................................................................................................... 10 Display LCD ................................................................................................................................ 10 Pines del display LCD ................................................................................................................. 11 Pantalla LCD............................................................................................................................... 11 Memoria LCD ............................................................................................................................. 12 Memoria DDRAM ...................................................................................................................... 12 Memoria CGROM ...................................................................................................................... 13 Memoria CGRAM ...................................................................................................................... 14 i
MANUAL DE PRCTICAS Comandos bsicos del visualizador LCD .................................................................................... 15 Qu es una bandera de ocupado (busy flag)? ......................................................................... 16 Conectar al visualizador LCD ..................................................................................................... 16 Inicializar al visualizador LCD..................................................................................................... 17 Unidad I ARQUITECTURA INTERNA DE LOS MICROCONTROLADORES ............................................. 18 Prctica 1.1 Conexiones bsicas y encendido de leds ................................................................... 18 Descripcin P1.1: ....................................................................................................................... 18 Cdigo P1.1: .............................................................................................................................. 18 Circuito P1.1: ............................................................................................................................. 19 Actividades P1.1: ....................................................................................................................... 19 Prctica 1.2 Oscilador interno y ciclos de repeticin .................................................................... 19 Descripcin P1.2: ....................................................................................................................... 19 Cdigo P1.2: .............................................................................................................................. 20 Circuito P1.2: ............................................................................................................................. 21 Actividades P1.2 ........................................................................................................................ 21 Prctica 1.3 Ciclos anidados .......................................................................................................... 21 Descripcin P1.3: ....................................................................................................................... 21 Cdigo P1.3: .............................................................................................................................. 22 Circuito P1.3: ............................................................................................................................. 23 Actividades P1.3 ........................................................................................................................ 23 Prctica 1.4 Temporizador TMR0 e interrupciones ...................................................................... 23 Descripcin P1.4: ....................................................................................................................... 23 Cdigo P1.4: .............................................................................................................................. 23 Circuito P1.4: ............................................................................................................................. 25 Actividades P1.4 ........................................................................................................................ 25 Prctica 1.5 Uso de botones y subrutinas ..................................................................................... 25 Descripcin P1.5: ....................................................................................................................... 25 Cdigo P1.5: .............................................................................................................................. 26 Circuito P1.5: ............................................................................................................................. 27 Actividades P1.5 ........................................................................................................................ 27 Prctica 1.6 Temporizador TMR0 como contador, variables y relevadores ................................. 27 Descripcin P1.6: ....................................................................................................................... 27 ii
MANUAL DE PRCTICAS Cdigo P1.6: .............................................................................................................................. 28 Circuito P1.6: ............................................................................................................................. 29 Actividades P1.6 ........................................................................................................................ 29 Prctica 1.7 Macros y rutinas para evitar el rebote de botones ................................................... 29 Descripcin P1.7: ....................................................................................................................... 29 Cdigo P1.7: .............................................................................................................................. 30 Circuito P1.7: ............................................................................................................................. 32 Actividades P1.7 ........................................................................................................................ 32 Prctica 1.8 Temporizador TMR1 e interrupciones ...................................................................... 33 Descripcin P1.8: ....................................................................................................................... 33 Cdigo P1.8: .............................................................................................................................. 33 Circuito P1.8: ............................................................................................................................. 34 Actividades P1.8 ........................................................................................................................ 34 Prctica 1.9 Temporizador TMR2 y configuracin del oscilador ................................................... 34 Descripcin P1.9: ....................................................................................................................... 34 Cdigo P1.9: .............................................................................................................................. 35 Circuito P1.9: ............................................................................................................................. 36 Actividades P1.9 ........................................................................................................................ 36 Prctica 1.10 Modulo CCP 1 como generador de seales tipo PWM ........................................... 36 Descripcin P1.10: ..................................................................................................................... 36 Cdigo P1.10: ............................................................................................................................ 37 Circuito P1.10: ........................................................................................................................... 39 Actividades P1.10 ...................................................................................................................... 39 Prctica 1.11 Uso del convertidor analgico-digital (ADC) .......................................................... 39 Descripcin P1.11: ..................................................................................................................... 39 Cdigo P1.11: ............................................................................................................................ 40 Circuito P1.11: ........................................................................................................................... 40 Actividades P1.11 ...................................................................................................................... 41 Prctica 1.12 Uso de la memoria EEPROM ................................................................................... 41 Descripcin P1.12: ..................................................................................................................... 41 Cdigo P1.12: ............................................................................................................................ 41 Circuito P1.12: ........................................................................................................................... 43 iii
MANUAL DE PRCTICAS Actividades P1.12 ...................................................................................................................... 43 Prctica 1.13 Contador de dos dgitos multiplexado .................................................................... 43 Descripcin P1.13: ..................................................................................................................... 43 Cdigo P1.13: ............................................................................................................................ 44 Circuito P1.13: ........................................................................................................................... 47 Actividades P1.13 ...................................................................................................................... 47 Prctica 1.14 Generacin de sonidos usando macros .................................................................. 47 Descripcin P1.14: ..................................................................................................................... 47 Cdigo P1.14: ............................................................................................................................ 47 Circuito P1.14: ........................................................................................................................... 49 Actividades P1.14 ...................................................................................................................... 50 Prctica 1.15 Uso del display de cristal lquido (LCD) ................................................................... 50 Descripcin P1.15: ..................................................................................................................... 50 Cdigo P1.15: ............................................................................................................................ 50 Circuito P1.15: ........................................................................................................................... 54 Actividades P1.15 ...................................................................................................................... 54 Prctica 1.16 Comunicacin serial RS232...................................................................................... 54 Descripcin P1.16: ..................................................................................................................... 54 Cdigo P1.16: ............................................................................................................................ 55 Circuito P1.16: ........................................................................................................................... 57 Actividades P1.16 ...................................................................................................................... 58 Unidad II PROGRAMACIN DE MICROCONTROLADORES CON ELEMENTOS DE LENGUAJE C .......... 59 Prctica 2.1 Encendido de leds y configuraciones bsicas. ........................................................... 59 Descripcin P2.1: ....................................................................................................................... 59 Circuito P2.1: ............................................................................................................................. 59 Cdigo P2.1: .............................................................................................................................. 59 Prctica 2.2 Oscilador interno y mezcla de lenguaje ensamblador y C............................................ 60 Descripcin P2.2: ....................................................................................................................... 60 Circuito P2.2: ............................................................................................................................. 61 Cdigo P2.2: .............................................................................................................................. 61 Prctica 2.3 Temporizador TMR0 como contador, variables y relevadores ................................. 62 Descripcin P2.3: ....................................................................................................................... 62 iv
MANUAL DE PRCTICAS Circuito P2.3: ............................................................................................................................. 62 Cdigo P2.3: .............................................................................................................................. 63 Prctica 2.4 Temporizadores TMR0, TMR1 y TMR2 e interrupciones .......................................... 63 Descripcin P2.4: ....................................................................................................................... 63 Circuito P2.4: ............................................................................................................................. 64 Cdigo P2.4: .............................................................................................................................. 64 Prctica 2.5 Uso del watchdog timer (perro guardin) ............................................................. 67 Descripcin P2.5: ....................................................................................................................... 67 Circuito P2.5: ............................................................................................................................. 67 Cdigo P2.5: .............................................................................................................................. 67 Prctica 2.6 Modulo CCP 1 como generador de seales tipo PWM ............................................. 68 Descripcin P2.6: ....................................................................................................................... 68 Circuito P2.6: ............................................................................................................................. 68 Cdigo P2.6: .............................................................................................................................. 69 Prctica 2.7 Uso del convertidor analgico-digital (ADC) ............................................................ 69 Descripcin P2.7: ....................................................................................................................... 69 Circuito P2.7: ............................................................................................................................. 70 Cdigo P2.7: .............................................................................................................................. 70 Prctica 2.8 Uso de la memoria EEPROM ......................................................................................... 71 Descripcin P2.8: ....................................................................................................................... 71 Circuito P2.8: ............................................................................................................................. 71 Cdigo P2.8: .............................................................................................................................. 72 Prctica 2.9 Contador de dos dgitos multiplexado ...................................................................... 72 Descripcin P2.9: ....................................................................................................................... 72 Circuito P2.9: ............................................................................................................................. 73 Cdigo P2.9: .............................................................................................................................. 73 Prctica 2.10 Uso del display de cristal lquido (LCD) ................................................................... 74 Descripcin P2.10: ..................................................................................................................... 74 Circuito P2.10: ........................................................................................................................... 75 Cdigo P2.10: ............................................................................................................................ 75 Prctica 2.11 Comunicacin serial RS232...................................................................................... 76 Descripcin P2.11: ..................................................................................................................... 76 v
MANUAL DE PRCTICAS Circuito P2.11: ........................................................................................................................... 77 Cdigo P2.11: ............................................................................................................................ 77 Prctica 2.12 Generacin de sonidos utilizando una librera ........................................................ 78 Descripcin P2.12: ..................................................................................................................... 78 Circuito P2.12: ........................................................................................................................... 78 Cdigo P2.12: ............................................................................................................................ 78 Unidad III CONTROL Y MONITOREO DE SISTEMAS AUTOMTICOS .................................................. 80 Prctica 3.1 Control de un motor de DC mediante un puente H .................................................. 80 Descripcin P3.1: ....................................................................................................................... 80 Circuito P3.1: ............................................................................................................................. 80 Cdigo P3.1: .............................................................................................................................. 81 Prctica 3.2 Control de un motor de pasos ................................................................................... 81 Descripcin P3.2: ....................................................................................................................... 81 Circuito P3.2: ............................................................................................................................. 82 Cdigo P3.2: .............................................................................................................................. 83 Prcticas 3.3 Control de un servo motor....................................................................................... 83 Descripcin P3.3: ....................................................................................................................... 83 Circuito P3.3: ............................................................................................................................. 84 Cdigo P3.3: .............................................................................................................................. 84 Prctica 3.4 Control de temperatura tipo ON/OFF ....................................................................... 85 Descripcin P3.4: ....................................................................................................................... 85 Circuito P3.4: ............................................................................................................................. 85 Cdigo P3.4: .............................................................................................................................. 85 Prctica 3.5 Modulo remoto de medicin y control. 3 sensores, 2 actuadores, comunicacin mediante RS232, modo de control remoto mediante PC, modo de control local mediante botones. ........................................................................................................................................ 85 Descripcin P3.5: ....................................................................................................................... 85 Circuito P3.5: ............................................................................................................................. 86 Cdigo P3.5: .............................................................................................................................. 86 Formato de reportes ......................................................................................................................... 87 Criterios y ponderaciones de evaluacin .......................................................................................... 88
vi
INTRODUCCIN
INTRODUCCIN.
El propsito de este manual es proporcionar la informacin bsica que se necesita saber para ser capaz de utilizar microcontroladores con xito en la prctica. Por eso, este manual no contiene ningn programa demasiado elaborado, tampoco dispone de un esquema de dispositivo con soluciones extraordinarias. Por el contrario, la intensin de este manual es mostrar el gran potencial y la facilidad con la que se programan y manejan los microcontroladores. El manual contiene una serie de ejemplos cuyo objetivo es brindar de herramientas al lector para el desarrollo de aplicaciones de propsito especfico, como la realizacin de proyecto finales de muy buena calidad.
Conexin bsica
Para que un microcontrolador funcione apropiadamente es necesario proporcionar lo siguiente: Alimentacin; Seal de reinicio; y Seal de reloj.
Como se muestra en la figura anterior, se trata de circuitos simples, pero no tiene que ser siempre as. Si el dispositivo destino se utiliza para controlar mquinas costosas o para mantener funciones vitales, todo se vuelve mucho ms complicado. Alimentacin Aunque el PIC16F887 es capaz de funcionar a diferentes voltajes de alimentacin, no es recomendable probar la ley de Murphy. Lo ms adecuado es proporcionar un voltaje de alimentacin de 5V en CD. El circuito anterior, utiliza un regulador de voltaje positivo de tres terminales LM7805. Es un regulador integrado y barato que proporciona una estabilidad de voltaje 1
INTRODUCCIN de alta calidad y suficiente corriente para habilitar el funcionamiento apropiado del controlador y de los perifricos (aqu suficiente significa una corriente de 1A). Seal de reinicio Para que un microcontrolador pueda funcionar apropiadamente, un uno lgico (VCC) se debe colocar en el pin de reinicio. El botn de presin que conecta el pin MCLR a GND no es necesario. Sin embargo, este botn casi siempre est proporcionado ya que habilita al microcontrolador volver al modo normal de funcionamiento en caso de que algo salga mal. Al pulsar sobre el botn RESET, se lleva un voltaje de 0V al pin MCLR, el microcontrolador se reinicia y la ejecucin de programa comienza desde el principio. Se utiliza una resistencia de 10k para impedir un corto circuito a tierra al presionar este botn. Seal de reloj A pesar de tener un oscilador incorporado, el microcontrolador no puede funcionar sin componentes externos que estabilicen su funcionamiento y determinen su frecuencia (velocidad de operacin del microcontrolador). Dependiendo de los elementos utilizados as como de las frecuencias el oscilador puede funcionar en cuatro modos diferentes: LP - Cristal de bajo consumo; XT - Cristal / Resonador; HS - Cristal/Resonador de alta velocidad; y RC - Resistencia / Condensador.
Como es casi imposible construir un oscilador estable que funcione a un amplio rango de frecuencias, el microcontrolador tiene que saber a qu cristal est conectado, para poder ajustar el funcionamiento de sus componentes internos. sta es la razn por la que todos los programas utilizados para escribir un programa en el chip contienen una opcin para seleccionar el modo de oscilador. Cristal de cuarzo Al utilizar el cristal de cuarzo para estabilizar la frecuencia, un oscilador incorporado funciona a una frecuencia determinada, y no es afectada por los cambios de temperatura y de voltaje de alimentacin. Esta frecuencia se etiqueta normalmente en el encapsulado del cristal. Aparte del cristal, los condensadores C1 y C2 deben estar conectados como se muestra en el siguiente esquema. Su capacitancia no es de gran importancia. Por eso, los valores proporcionados en la siguiente tabla se deben tomar como recomendacin y no como regla estricta.
INTRODUCCIN Resonador cermico Un resonador cermico es ms barato y muy similar a un cuarzo por la funcin y el modo de funcionamiento. Por esto, los esquemas que muestran su conexin al microcontrolador son idnticos. No obstante, los valores de los condensadores difieren un poco debido a las diferentes caractersticas elctricas. Refirase a la tabla que est a continuacin.
Estos resonadores se conectan normalmente a los osciladores en caso de que no sea necesario proporcionar una frecuencia extremadamente precisa. Oscilador RC Si la frecuencia de operacin no es de importancia, entonces no es necesario utilizar los componentes caros y adicionales para la estabilizacin. En vez de eso, basta con utilizar una simple red RC, mostrada en la siguiente figura. Como aqu es utilizada slo la entrada del oscilador local, la seal de reloj con la frecuencia Fosc/4 aparecer en el pin OSC2. sta es la frecuencia de operacin del microcontrolador, o sea la velocidad de ejecucin de instrucciones.
Oscilador externo Si se requiere sincronizar el funcionamiento de varios microcontroladores o si por alguna razn no es posible utilizar ninguno de los esquemas anteriores, una seal de reloj se puede generar por un oscilador externo. Refirase a la siguiente figura.
INTRODUCCIN A pesar del hecho de que el microcontrolador es un producto de la tecnologa moderna, no es tan til sin estar conectado a los componentes adicionales. Dicho de otra manera, el voltaje llevado a los pines del microcontrolador no sirve para nada si no se utiliza para llevar a cabo ciertas operaciones como son encender/apagar, desplazar, visualizar, etc.
Componentes adicionales
Esta parte trata los componentes adicionales utilizados con ms frecuencia en la prctica, tales como resistencias, transistores, diodos LED, visualizadores LED, visualizadores LCD y los circuitos de comunicacin RS-232. Interruptores y botones de presin Los interruptores y los botones de presin son dispositivos simples para proporcionar la forma ms simple de detectar la aparicin de voltaje en un pin de entrada del microcontrolador. No obstante, no es tan simple como parece... Uno de los principales problemas es el rebote de contacto. El rebote de contacto es un problema comn en los interruptores mecnicos.
Al tocarse los contactos, se produce un rebote por su inercia y elasticidad. Por consiguiente, la corriente elctrica es rpidamente pulsada en lugar de tener una clara transicin de cero a la corriente mxima. Por lo general, esto ocurre debido a las vibraciones, los desniveles suaves y la suciedad entre los contactos. Este efecto no se percibe normalmente al utilizar estos componentes en la vida cotidiana porque el rebote ocurre demasiado rpido para afectar a la mayora de los dispositivos elctricos. Sin embargo, pueden surgir problemas en algunos circuitos lgicos que responden lo suficientemente rpido de manera que malinterpreten los pulsos producidos al tocarse los contactos como un flujo de datos. De todos modos, el proceso entero no dura mucho (unos pocos micro o milisegundos), pero dura lo suficiente para que lo detecte el microcontrolador. Al utilizar slo un botn de presin como una fuente de seal de contador, en casi 100% de los casos ocurren los errores. El problema se puede resolver con facilidad al conectar un simple circuito RC (filtro) para suprimir rpidos cambios de voltaje. Como el perodo del rebote no est definido, los valores de los componentes no estn precisamente determinados. En la mayora de los casos es recomendable utilizar los valores que se muestran en la siguiente figura. 4
INTRODUCCIN
Si se necesita una estabilidad completa, entonces hay que tomar medidas radicales. La salida del circuito, mostrado en la siguiente figura (biestable RS, tambin llamado flip flop RS), cambiar de estado lgico despus de detectar el primer pulso producido por un rebote de contacto. Esta solucin es ms cara (interruptor SPDT), pero el problema es resuelto.
Aparte de estas soluciones de hardware, hay tambin una simple solucin de software. Mientras el programa prueba el estado de circuito lgico de un pin de entrada, si detecta un cambio, hay que probarlo una vez ms despus de un cierto tiempo de retardo. Si el programa confirma el cambio, esto significa que un interruptor/botn de presin ha cambiado de posicin. Las ventajas de esta solucin son obvias: es gratuita, se borran los efectos del rebote de contacto y se puede aplicar a los contactos de una calidad ms baja tambin. Rel Un rel es un interruptor elctrico que se abre y se cierra bajo el control de otro circuito electrnico. Por eso est conectado a los pines de salida del microcontrolador y utilizado para encender/apagar los dispositivos de alto consumo tales como: motores, transformadores, calefactores, bombillas, etc. Estos dispositivos se colocan casi siempre lejos de los componentes sensibles de la placa. Hay varios tipos de rels, pero todos funcionan de la misma manera. Al fluir la corriente por la bobina, el rel funciona por medio de un electromagneto, abriendo y cerrando uno o ms conjunto de contactos. Similar a los optoacopladores no hay conexin galvnica (contacto elctrico) entre los circuitos de entrada y salida. Los rels requieren con frecuencia tanto un voltaje ms alto y una corriente ms alta para empezar a funcionar. Tambin hay rels miniatura que se pueden poner en marcha por una corriente baja obtenida directamente de un pin del microcontrolador.
INTRODUCCIN
Para prevenir la aparicin de un alto voltaje de autoinduccin, causada por una parada repentina del flujo de corriente por la bobina, un diodo polarizado invertido se conecta en paralelo con la bobina. El propsito de este diodo es de cortar este pico de voltaje. Diodos LED Probablemente sepa todo lo que necesita saber sobre los diodos LED, pero tambin debe pensar en los jvenes... A ver, cmo destruir un LED? Bueno... muy fcil.
Quemar con rapidez Como cualquier otro diodo, los LED tienen dos puntas -un nodo y un ctodo. Conecte un diodo apropiadamente a la fuente de alimentacin y va a emitir luz sin ningn problema. Ponga al diodo al revs y conctelo a la misma fuente de alimentacin (aunque sea por un momento). No emitir luz - nunca ms!
INTRODUCCIN Quemar lentamente Hay un lmite de corriente nominal, o sea, lmite de corriente mxima especificada para cada LED que no se deber exceder. Si eso sucede, el diodo emitir luz ms intensamente de lo normal, pero slo por un perodo corto de tiempo. Algo para recordar De manera similar, todo lo que tiene que hacer es elegir una resistencia para limitar la corriente mostrada a continuacin. Dependiendo del voltaje de alimentacin, los efectos pueden ser espectaculares.
Display LED Bsicamente, un display LED no es nada ms que varios diodos LED moldeados en la misma caja plstica. Hay varios tipos de display y algunos de ellos estn compuestos por varias docenas de diodos incorporados que pueden mostrar diferentes smbolos. No obstante, el display utilizado con ms frecuencia es el de 7 segmentos. Est compuesto por 8 LED. Los siete segmentos de un dgito estn organizados en forma de un rectngulo para visualizar los smbolos, mientras que el segmento adicional se utiliza para el propsito de visualizar los puntos decimales. Para simplificar la conexin, los nodos y los ctodos de todos los diodos se conectan al pin comn as que tenemos display de nodo comn y display de ctodo comn, respectivamente. Los segmentos estn etiquetados con letras de la a a la g y dp, como se muestra en la siguiente figura. Al conectarlos, cada diodo LED se trata por separado, lo que significa que cada uno dispone de su propia resistencia para limitar la corriente.
Aqu se presentan varias cosas importantes que se deben tener en cuenta al momento de comprar un display LED: 1. Como se ha mencionado, dependiendo de si nodos o ctodos estn conectados al pin comn, tenemos display de nodo comn y display de ctodo comn. Visto de afuera, parece que no hay ninguna diferencia entre estos display, pues se le recomienda comprobar cul se va a utilizar antes de instalarlo. 7
INTRODUCCIN 2. Cada pin del microcontrolador tiene un lmite de corriente mxima que puede recibir o dar. Por eso, si varios visualizadores estn conectados al microcontrolador, es recomendable utilizar as llamados LED de bajo consumo que utilizan solamente 2mA para su funcionamiento. Los segmentos del visualizador estn normalmente etiquetados con letras de la a a la g, pero no hay ninguna regla estricta de cules pines del display estarn conectados. Por eso es muy importante comprobarlo antes de empezar a escribir un programa o disear un dispositivo. Los visualizadores conectados al microcontrolador normalmente ocupan un gran nmero de los pines de E/S valiosos, lo que puede ser un problema sobre todo cuando se necesita visualizar los nmeros compuestos por varios dgitos. El problema se vuelve ms obvio si, por ejemplo, se necesita visualizar dos nmeros de seis dgitos (un simple clculo muestra que en este caso se necesitan 96 pines de salida). La solucin de este problema se denominada multiplexin. Aqu se produce una ilusin ptica basada en el mismo principio de funcionamiento de una cmara de pelcula. Un slo dgito est activo a la vez, pero se tiene la impresin de que todos los dgitos de un nmero estn simultneamente activos por cambiar tan rpidamente de las condiciones de encendido/apagado.
Veamos la figura anterior. Primero se aplica un byte que representa unidades al puerto PORT2 del microcontrolador y se activa el transistor T1 a la vez. Despus de poco tiempo, el transistor T1 se apaga, un byte que representa decenas se aplica al puerto PORT2 y el transistor T2 se activa. Este proceso se est repitiendo cclicamente a alta velocidad en todos los dgitos y transistores correspondientes. Lo decepcionante es que el microcontrolador es slo un tipo de computadora miniatura diseada para interpretar el lenguaje de ceros y unos, lo que se pone de manifiesto al visualizar cualquier dgito. Concretamente, el microcontrolador no conoce cmo son unidades, decenas, centenas, ni 8
INTRODUCCIN diez dgitos a los que estamos acostumbrados. Por esta razn, cada nmero a visualizar debe pasar por el siguiente procedimiento: Antes que nada, un nmero de varios dgitos debe ser dividido en unidades, centenas, etc.; en una subrutina especfica. Luego, cada uno de estos dgitos se debe almacenar en los bytes particulares. Los dgitos se hacen reconocibles al realizar "enmascaramiento". En otras palabras, el formato binario de cada dgito se sustituye por una combinacin diferente de los bits por medio de una subrutina simple. Por ejemplo, el dgito 8 (0000 1000) se sustituye por el nmero binario 0111 1111 para activar todos los LEDs que visualizan el nmero 8. El nico diodo que queda inactivo aqu est reservado para el punto decimal. Si un puerto del microcontrolador est conectado al visualizador de tal manera que el bit 0 active el segmento 'a', el bit 1 active el segmento 'b', el bit 2 active el segmento 'c' y as sucesivamente, entonces la tabla que sigue muestra la "mscara" para cada dgito.
Adems de los dgitos del 0 a 9, hay algunas letras -A, C, E, J, F, U, H, L, b, c, d, o, r, t - que se pueden visualizar al enmascarar. En caso de que se utilicen los display de nodo comn, todos los unos contenidos en la tabla anterior se deben sustituir por ceros y viceversa. Adems, los transistores PNP se deben utilizar como controladores.
INTRODUCCIN Optoacopladores Un optoacoplador es un dispositivo frecuentemente utilizado para aislar galvnicamente el microcontrolador de corriente o voltaje potencialmente peligroso de su entorno. Los optoacopladores normalmente disponen de una, dos o cuatro fuentes de luz (diodos LED) en su entrada mientras que en su salida, frente a los diodos, se encuentra el mismo nmero de los elementos sensibles a la luz (foto-transistores, foto-tiristores, foto-triacs). El punto es que un optoacoplador utiliza una corta ruta de transmisin ptica para transmitir una seal entre los elementos de circuito, que estn aislados elctricamente. Este aislamiento tiene sentido slo si los diodos y los elementos foto-sensitivos se alimentan por separado. As, el microcontrolador y los componentes adicionales y caros estn completamente protegidos de altos voltajes y ruidos que son la causa ms frecuente de destruccin, dao y funcionamiento inestable de los dispositivos electrnicos en la prctica. Los optoacopladores utilizados con ms frecuencia son aqullos con foto-transistores en sus salidas. En los optoacopladores con la base conectada al pin 6 interno (tambin hay optoacopladores sin ella), la base puede quedarse desconectada.
La red RC representada por una lnea quebrada en la figura anterior indica una conexin opcional de la base de transistores dentro del optoacoplador, que reduce los efectos de ruidos al eliminar los pulsos muy cortos. Display LCD Este componente est especficamente fabricado para ser utilizado con los microcontroladores, lo que significa que no se puede activar por los circuitos integrados estndar. Se utiliza para visualizar los diferentes mensajes en un visualizador de cristal lquido miniatura. El modelo descrito aqu es el ms utilizado en la prctica por su bajo precio y grandes capacidades. Est basado en el microcontrolador HD44780 (Hitachi) integrado y puede visualizar mensajes en dos lneas con 16 caracteres cada una. Puede visualizar todas las letras del alfabeto, letras de alfabeto griego, signos de puntuacin, smbolos matemticos, etc. Tambin es posible visualizar smbolos creados por el usuario. Entre otras caractersticas tiles es el desplazamiento automtico de mensajes (a la izquierda y a la derecha), aparicin del cursor, retroiluminacin LED, entre otras.
10
INTRODUCCIN
Pines del display LCD A lo largo de la placa impresa del display LCD se encuentran los pines que le permiten estar conectado al microcontrolador. Hay 14 pines en total marcados con nmeros (16 si hay retroiluminacin). Su funcin se muestra en la tabla que sigue:
Pantalla LCD Una pantalla LCD puede visualizar dos lneas con 16 caracteres cada una. Cada carcter consiste en 5x8 o 5x11 pxeles. En la imagen siguiente se muestra un display de 5x8 pxeles que es el ms comn.
El contraste del visualizador depende del voltaje de alimentacin y de si los mensajes se visualizan en una o dos lneas. Por esta razn, el voltaje variable 0-Vdd se aplica al pin marcado como Vee. Un potencimetro trimer se utiliza con frecuencia para este propsito. Algunos de los display LCD 11
INTRODUCCIN tienen retroiluminacin incorporada (diodos LED azules o verdes). Al utilizarlo durante el funcionamiento, se debe de conectar una resistencia en serie a uno de los pines para limitar la corriente (similar a diodos LED).
Si no hay caracteres visualizados o si todos los caracteres estn oscurecidos al encender el visualizador, lo primero que se debe hacer es comprobar el potencimetro para ajustar el contraste. Est ajustado apropiadamente? Lo mismo se aplica si el modo de funcionamiento ha sido cambiado (escribir en una o en dos lneas). Memoria LCD El display LCD dispone de tres bloques de memoria: DDRAM Display Data RAM (RAM de datos de visualizacin); CGRAM Character Generator RAM (generador de caracteres RAM); y CGROM Character Generator ROM (generador de caracteres ROM)
Memoria DDRAM La memoria DDRAM se utiliza para almacenar los caracteres a visualizar. Tiene una capacidad de almacenamiento de 80 caracteres. Algunas localidades de memoria estn directamente conectadas a los caracteres en el visualizador. Todo funciona muy simple: basta con configurar el display para incrementar direcciones automticamente (desplazamiento a la derecha) y establecer la direccin inicial para el mensaje que se va a visualizar (por ejemplo 00 hex). Luego, todos los caracteres enviados por las lneas D0-D7 se van a visualizar en el formato de mensaje al que nos hemos acostumbrado -de la izquierda a la derecha. En este caso, la visualizacin empieza por el primer campo de la primera lnea ya que la direccin inicial es 00hex. Si se enva ms de 16 caracteres, todos se memorizarn, pero slo los primeros 16 sern visibles. Para visualizar los dems, se debe utilizar el comando shift. Virtualmente, parece como si el visualizador LCD fuera una ventana, desplazndose de la izquierda a la derecha sobre las localidades de memoria con diferentes caracteres. En realidad, as es cmo se cre el efecto de desplazar los mensajes sobre la pantalla. 12
INTRODUCCIN
Si se habilita ver el cursor, aparecer en la localidad actualmente direccionada. En otras palabras, si un carcter aparece en la posicin del cursor, se va a mover automticamente a la siguiente localidad direccionada. Esto es un tipo de memoria RAM as que los datos se pueden escribir en ella y leer de ella, pero su contenido se pierde irrecuperablemente al apagar la fuente de alimentacin. Memoria CGROM La memoria CGROM contiene un mapa estndar de todos los caracteres que se pueden visualizar en la pantalla. A cada carcter se le asigna una localidad de memoria:
13
INTRODUCCIN Las direcciones de las localidades de memoria CGROM corresponden a los caracteres ASCII. Si el programa que se est actualmente ejecutando llega al comando enviar el carcter P al puerto, el valor binario 0101 0000 aparecer en el puerto. Este valor es el equivalente ASCII del carcter P. Al escribir este valor en un LCD, se visualizar el smbolo de la localidad 0101 0000 de la CGROM. En otras palabras, se visualizar el carcter P. Esto se aplica a todas las letras del alfabeto (minsculas y maysculas), pero no se aplica a los nmeros. Como se muestra en el mapa anterior, las direcciones de todos los dgitos se desplazan por 48 en relacin con sus valores (direccin del dgito 0 es 48, direccin del dgito 1 es 49, direccin del dgito 2 es 50 etc.). Por consiguiente, para visualizar los dgitos correctamente es necesario aadir el nmero decimal 48 a cada uno antes de enviarlos en un LCD.
Qu es un cdigo ASCII? Desde su aparicin hasta hoy en da, las computadoras han sido capaces de reconocer solamente nmeros, y no las letras. Esto significa que todos los datos que una computadora intercambia con un perifrico, reconocidos como letras por los humanos, en realidad estn en el formato binario (el teclado es un buen ejemplo). En otras palabras, a cada carcter le corresponde la combinacin nica de ceros y unos. El cdigo ASCII representa una codificacin de caracteres basada en el alfabeto ingls. El ASCII especifica una correspondencia entre los smbolos de caracteres estndar y sus equivalentes numricos. Memoria CGRAM Adems de los caracteres estndar, el visualizador LCD puede visualizar smbolos definidos por el usuario. Esto puede ser cualquier smbolo de 5x8 pxeles. La memoria RAM denominada CGRAM de 64 bytes lo habilita. 14
INTRODUCCIN
Los registros de memoria son de 8 bits de anchura, pero slo se utilizan los 5 bits ms bajos. Un uno lgico (1) en cada registro representa un punto oscurecido, mientras que 8 localidades agrupadas representan un carcter. Esto se muestra en la siguiente figura:
Los smbolos estn normalmente definidos al principio del programa por una simple escritura de ceros y unos en la memoria CGRAM as se crean las formas deseadas. Para visualizarlos basta con especificar su direccin. Preste atencin a la primera columna en el mapa de caracteres CGROM. No contiene direcciones de la memoria RAM, sino los smbolos de los que se est hablando aqu. En este ejemplo visualizar 0 significa visualizar sonrisa, visualizar 1 significa - visualizar ancla, etc. Comandos bsicos del visualizador LCD Todos los datos transmitidos a un display LCD por las salidas D0-D7 sern interpretados como un comando o un dato, lo que depende del estado lgico en el pin RS: RS = 1 - Los bits D0 - D7 son direcciones de los caracteres a visualizar. El procesador LCD direcciona un carcter del mapa de caracteres y lo visualiza. La direccin DDRAM especifica la localidad en la que se va a visualizar el carcter. Esta direccin se define antes de transmitir el carcter o la direccin del carcter anteriormente transmitido ser aumentada automticamente. RS = 0 - Los bits D0 - D7 son los comandos para ajustar el modo del visualizador.
15
INTRODUCCIN En la siguiente tabla se muestra una lista de comandos reconocidos por el LCD:
Qu es una bandera de ocupado (busy flag)? En comparacin al microcontrolador, el LCD es un componente extremadamente lento. Por esta razn, era necesario proporcionar una seal que, al ejecutar un comando, indicara que el display estaba listo para recibir el siguiente dato. Esta seal denominada bandera de ocupado (busy flag) se puede leer de la lnea D7. El visualizador est listo para recibir un nuevo dato cuando el voltaje en esta lnea es de 0V (BF=0). Conectar al visualizador LCD Dependiendo de cuntas lneas se utilizan para conectar un LCD al microcontrolador, hay dos modos de LCD, el de 8 bits y el de 4 bits. El modo apropiado se selecciona en el inicio del funcionamiento en el proceso denominado inicializacin. El modo de LCD de 8 bits utiliza los pines D0-D7 para transmitir los datos, como hemos explicado anteriormente. El propsito principal del modo de LCD de 4 bits es el ahorrar los valiosos pines de E/S del microcontrolador. Slo los 4 bits ms altos (D4-D7) se utilizan para la comunicacin, mientras que los dems pueden quedarse desconectados. Cada dato se enva al LCD en dos pasos -primero se envan 4 bits ms altos (normalmente por las lneas D4 - D7), y luego los 4 bits ms bajos. La inicializacin habilita que el LCD conecte e interprete los bits recibidos correctamente.
16
INTRODUCCIN
Pocas veces se leen los datos del LCD (por lo general se transmiten del microcontrolador al LCD) as que, con frecuencia, es posible guardar un pin de E/S de sobra. Es simple, basta con conectar el pin L/E a Tierra. Este ahorro del pin tiene su precio. Los mensajes se visualizarn normalmente, pero no ser posible leer la bandera de ocupado ya que tampoco es posible leer los datos del display. Afortunadamente, hay una solucin simple. Despus de enviar un carcter o un comando es importante dar al LCD suficiente tiempo para hacer su tarea. Debido al hecho de que la ejecucin de un comando puede durar aproximadamente 1.64ms, el LCD tarda como mximo 2ms en realizar su tarea. Inicializar al visualizador LCD Al encender la fuente de alimentacin, el LCD se inicia automticamente. Esto dura aproximadamente 15ms. Despus de eso, el LCD est listo para funcionar. Asi mismo, el modo de funcionamiento est configurado por defecto de la siguiente manera: Display est borrado. Modo o DL = 1 - Bus de datos de 8 bits o N = 0 - LCD de una lnea o F = 0 - Carcter de 5 x 8 puntos Visualizador/Cursor encendido/apagado o D = 0 - Display apagado o U = 0 - Cursor apagado o B = 0 - Parpadeo del cursor apagado Introduccin de caracteres o ID = 1 Direcciones visualizadas se incrementan automticamente en 1 o S = Desplazamiento del visualizador desactivado
17
18
Actividades P1.1: Explicar el cdigo del programa comentando que hace y/o para que funcione cada lnea, se puede usar el simulador y buscar los comandos en internet. Por ltimo implemente la prctica.
19
UNIDAD I ARQUITECTURA INTERNA DE LOS MICROCONTROLADORES desconecta despus de que el uC ya inicio la ejecucin del programa esto no debe de afectar el funcionamiento del uC de ninguna manera. Cdigo P1.2:
;************************************************ ; Nombre : P1_2.asm ; Fecha : Enero 10,2013 ; Alumno : ; Grupo : IMEC ;************************************************ ; Descripcin : Parpadear leds Puerto B ;************************************************ list p=16f887 #include <p16f887.inc> errorlevel -302 __CONFIG _CONFIG1, _HS_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF __CONFIG _CONFIG2, _BOR40V & _WRT_OFF ;************************************************************************ ;************* DEFINING VARIABLES *************************************** cblock 0x20 ; Bloque de variables inicia en dir. 20h counter1 ; La variable "counter1" en la dir. 20h endc ;************************************************************************ org 0x0000 ; Direccin de la primera instruccin banksel OSCCON bcf bcf bcf bsf OSCCON,6 OSCCON,5 OSCCON,4 OSCCON,0 ; Selecciona el banco de memoria que ; contiene el registro OSCCON ; Selecciona el oscilador interno LFINTOSC ; con la frecuencia de 31KHz ; uC usa el oscilador interno ; Selecciona el banco que contiene a TRISB ; Todos los pines del PORTB configurados ; como salidas ; Selecciona el banco que contiene a PORTB
loop ; etiqueta con el nombre de "loop" movlw B'01010101' ; Numero binario 01010101 se carga en W movwf PORTB ; Numero binario se mueve al PORTB movlw h'FF' ; Numero hFF se carga en W movwf counter1 ; Numero se mueve a la variable "counter1" loop1 ; etiqueta con el nombre de "loop1" decfsz counter1 ; Variable "counter1" se decrementa en 1 goto loop1 ; Si "counter1" es 0, continuar. ; de lo contrario volver a "loop1" movlw B'10101010' ; Numero BIN 10101010 se carga en W movwf PORTB ; Numero se mueve a PORTB movlw h'FF' ; Numero hFF se carga en W movwf counter1 ; Numero se mueve a la variable "counter1" loop2 ; etiqueta con el nombre de "loop2" decfsz counter1 ; Variable "counter1" se decrementa en 1 goto loop2 ; Si "counter1" es 0, continuar. ; de lo contrario volver a "loop2" goto loop ; Volver a la etiqueta "loop" end ; Fin del Programa
20
Circuito P1.2:
Actividades P1.2 Implementar la prctica en el simulador y ver cuales registros son modificados para la configuracin y operacin de la prctica, por ltimo implemente el sistema en fsico.
UNIDAD I ARQUITECTURA INTERNA DE LOS MICROCONTROLADORES ciclos, se realizan 255*255 veces eso equivale: 255 * 255 * 3 = 195075, aproximadamente 196000 instrucciones como se haba comentado antes. Cdigo P1.3:
;************************************************ ; Nombre : P1_3.asm ; Fecha : Enero 10,2013 ; Alumno : ; Grupo : IMEC ;************************************************ ; Descripcion : Parpadear leds Puerto B , Ciclos anidados ;************************************************ list p=16f887 #include <p16f887.inc> errorlevel -302 __CONFIG _CONFIG1, _HS_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF __CONFIG _CONFIG2, _BOR40V & _WRT_OFF ;************* DEFINING VARIABLES ***************************************** cblock 0x20 ; Block of variables starts at address 20h counter1 ; Variable "counter1" at address 20h counter2 ; Variable "counter2" at address 21h endc ;************************************************************************** org 0x0000 ; Address of the first program instruction banksel TRISB ; Selects bank containing register TRISB clrf TRISB ; Clears TRISB banksel loop movlw movwf movlw movwf PORTB ; Selects bank containing register PORTB
B'11110000' ; Binary number 11110000 is moved to W PORTB ; Number is moved to PORTB h'FF' ; Number hFF is moved to W counter2 ; Number is moved to variable "counter2"
loop2 movlw h'FF' ; Number hFF is moved to W movwf counter1 ; Number is moved to "counter1" loop1 decfsz counter1 ; Decrements "counter1" by 1. If result is 0 goto loop1 ; skip next instruction decfsz goto movlw movwf movlw movwf loop4 movlw movwf loop3 decfsz goto decfsz goto goto end counter2 ; Decrements "counter2" by 1. If result is 0 loop2 ; skip next instruction B'00001111' ; Binary number 00001111 is moved to W PORTB ; Number is moved to PORTB h'FF' ; Number hFF is moved to W counter2 ; Number is moved to variable "counter2"
h'FF' ; Number hFF is moved to W counter1 ; Number is moved to variable "counter1" counter1 ; Decrements "counter1" by 1. If result is 0 ; skip next instruction loop3 counter2 ; Decrements "counter2" by 1. If result is 0 loop4 ; skip next instruction loop ; Jump to label loop ; End of program
22
UNIDAD I ARQUITECTURA INTERNA DE LOS MICROCONTROLADORES Circuito P1.3: Igual al de la prctica P1.2 Actividades P1.3 Implementar la prctica en el simulador y ver cuales registros son modificados para la configuracin y operacin de la prctica, por ltimo implemente el sistema en fsico.
Cdigo P1.4:
;************************************************ ; Nombre : P1_4.asm ; Fecha : Enero 10,2013 ; Alumno : ; Grupo : IMEC ;************************************************ ; Descripcion : Temporizador TMR0 e interrupciones ;************************************************ list p=16f887
23
#include <p16f887.inc> errorlevel -302 __CONFIG _CONFIG1, _HS_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF __CONFIG _CONFIG2, _BOR40V & _WRT_OFF ;**************** DEFINING VARIABLES **************************************** cblock 0x20 w_temp pclath_temp status_temp endc ; Block of variables starts at address 20h ; Variable at address 20h ; Variable at address 21h ; Variable at address 22h
;************************ START OF PROGRAM ********************************** org 0x0000 ; Address of the first program instruction goto main ; Go to label "main" ;************************ INTERRUPT ROUTINE ********************************* org 0x0004 ; Interrupt vector movwf w_temp ; Saves value in register W movf STATUS ; Saves value in register STATUS movwf status_temp movf PCLATH ; Saves value in register PCLATH movwf pclath_temp banksel PORTB incf PORTB ; Selects bank containing PORTB ; Increments register PORTB by 1
banksel INTCON ; Selects bank containing INTCON bcf INTCON,TMR0IF ; Clears interrupt flag TMR0IF movf movwf movf movwf swapf swapf bsf retfie pclath_temp,w ; PCLATH is given its original content PCLATH status_temp,w ; STATUS is given its original content STATUS w_temp,f ; W is given its original content w_temp,w INTCON,GIE ; Global interrupt enabled ; Return from interrupt routine
;************************ MAIN PROGRAM ************************************** main ; Start of the main program banksel ANSEL clrf ANSEL clrf ANSELH banksel TRISB clrf TRISB ; Bank containing register ANSEL ; Clears registers ANSEL and ANSELH ; All pins are digital ; Selects bank containing register TRISB ; All port B pins are configured as outputs
banksel OPTION_REG ; Bank containing register OPTION_REG bcf OPTION_REG,T0CS ; TMR0 counts pulses from oscillator bcf OPTION_REG,PSA ; Prescaler is assign to timer TMR0 bsf bsf bsf OPTION_REG,PS0 ; Prescaler rate is 1:256 OPTION_REG,PS1 OPTION_REG,PS2
banksel INTCON ; Bank containing register INTCON bsf INTCON,TMR0IE ; TMR0 interrupt overflow enabled
24
banksel PORTB ; Bank containing register PORTB clrf PORTB ; Clears port B loop goto loop ; Remain here end ; End of program
Circuito P1.4:
Actividades P1.4 Implementar la prctica en el simulador y ver cuales registros son modificados para la configuracin y operacin de la prctica, de preferencia con la hoja de datos del microcontrolador para identificar que hace cada registro, por ltimo implemente el sistema en fsico.
25
UNIDAD I ARQUITECTURA INTERNA DE LOS MICROCONTROLADORES El programa inicia activando un bit del PORTB y luego el contenido de este registro es constantemente desplazados un lugar hacia la izquierda (utilizando la instruccin RLF, Rotate Left f through Carry). Esto produce la impresin de que el diodo led encendido se mueve. Presionando el botn STOP detiene el movimiento y el programa se mantiene en el loop3. El retardo de tiempo en esta ocasin es realizado en una subrutina llamada DELAY. Cdigo P1.5:
;************************************************ ; Nombre : P1_5.asm ; Fecha : Enero 10,2013 ; Alumno : ; Grupo : IMEC ;************************************************ ; Descripcion : Uso de botones y subrutinas ;************************************************ list p=16f887 #include <p16f887.inc> errorlevel -302 __CONFIG _CONFIG1, _HS_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF __CONFIG _CONFIG2, _BOR40V & _WRT_OFF ;************* DEFINING VARIABLES ******************************************* cblock 0x20 counter1 counter2 endc ; Block of variables starts at address 20h ; Variable "counter1" at address 20h ; Variable "counter2" at address 21h ; Block of variables ends
;************************ MAIN PROGRAM ************************************** org 0x0000 banksel ANSEL clrf ANSEL clrf ANSELH ; Address of the first program instruction ; Selects bank containing register ANSEL ; Clears registers ANSEL and ANSELH to ; configure all inputs as digital
banksel TRISB ; Selects bank containing register TRISB clrf TRISB ; All port B pins are configured as outputs movlw B'00000010' movwf TRISA ; Pin RA1 is input banksel PORTB ; Selects bank containing register TRISB movlw B'00000001' ; Writes 1 to register W movwf PORTB ; Number is moved to PORTB loop rlf PORTB ; Port B bits rotates by one place left call DELAY ; Calls subroutine "DELAY" loop3 btfss PORTA,1 ; Tests the first port A bit goto loop3 ; "0" is applied to pin.Go to label "loop3" goto loop ; "1" is applied to pin.Go to label "loop" ;************************ SUBROUTINES *************************************** DELAY clrf counter2 ; Clears variable "counter2" loop1 clrf counter1 ; Clears variable "counter1" loop2 decfsz counter1 ; Decrements variable "counter1" by 1
26
Circuito P1.5:
Actividades P1.5 Implementar la prctica en el simulador y vea cuales registros son modificados para la configuracin y operacin de la prctica, por ltimo implemente el sistema en fsico.
27
clrf TMR0 ; Clears timer register bcf PORTD,3 ; Pin PORTD,3 = 0 loop movfw TMR0 ; Timer register is moved to W register movwf PORTB ; W register is moved to PORTB xorlw TEST ; Operation exclusive OR between ; W register and number TEST (00000101) btfsc STATUS,Z ; If numbers are equal, result is 0 and bsf PORTD,3 ; bit STATUS,Z = 1. Bit PORTD,3 is set goto loop ; and jump to label loop is executed end ; End of program
28
Actividades P1.6 Implementar la prctica en el simulador y ver cuales registros son modificados para la configuracin y operacin de la prctica, por ltimo implemente el sistema en fsico.
29
El programa principal es relativamente simple y permite que la variable "CNT", se incremente y decremente mediante dos pulsadores (push-bottons). Esta variable se copian al puerto B y afecta el LED (El 1 lgico enciende el LED, mientras que el 0 lgico lo apaga). Cdigo P1.7:
;************************************************ ; Nombre : P1_7.asm ; Fecha : Enero 10,2013 ; Alumno : ; Grupo : IMEC ;************************************************ ; Descripcion : Macros y rutinas para evitar el rebote de botones ;************************************************ ;************* DEFINING VARIABLES ************************* cblock 0x20 ; Block of variables starts at address 20hex
HIcnt LOcnt LOOPcnt cnt endc ; End of block of variables ;********************************************************************** ORG 0x000 ; Reset vector nop goto main ; Go to program start (label "main") ;********************************************************************** include "pause.inc" include "button.inc" ;********************************************************************** main banksel ANSEL ; Selects bank containing ANSEL clrf ANSEL ; All pins are digital clrf ANSELH banksel TRISB bsf TRISA, 0 bsf TRISA, 1 clrf TRISB banksel PORTB clrf cnt Loop button PORT,0,0,Increment button PORT,1,0,Decrement goto Loop Increment incf cnt, f movf cnt, w movwf PORTB goto Loop Decrement decf cnt, f movf cnt, w movwf PORTB goto Loop end ; End of program
30
31
IF (hilo == 0) ; If pull-up used btfsc port, pin ; If "1", push-button is pressed goto Exit1 pausems debouncedelay ; Wait for 10ms debounce Pressed1 btfss port, pin goto Pressed1 pausems debouncedelay ; Wait until released and goto label ; jump to specified address Exit1 ELSE ; If pull-down used btfss port, pin goto Exit2 ; If "0", push-button is released pausems debouncedelay ; Wait for 10ms debounce Pressed2 btfsc port, pin goto Pressed2 pausems debouncedelay ; Wait until released and goto label ; jump to specified address Exit2 ENDIF ENDM ;**********************************************************************
Circuito P1.7:
Actividades P1.7 Implementar la prctica en el simulador y ver cuales registros son modificados para la configuracin y operacin de la prctica, por ltimo implemente el sistema en fsico.
32
;************************ PROGRAM START ************************ org 0x0000 ; Address of the first program instruction goto main ; Jump to label "main" ;************************ INTERRUPT ROUTINE ********************************** org 0x0004 ; Interrupt vector movwf w_temp ; Save register W movf movwf movf movwf STATUS ; Save register STATUS status_temp PCLATH ; Save register PCLATH pclath_temp ; Selects bank containing PORTB ; Register PORTB is incremented by 1
banksel PORTB incf PORTB movf movwf movf movwf swapf swapf
pclath_temp,w ; PCLATH is given its original content PCLATH status_temp,w ; STATUS is given its original content STATUS w_temp,f ; W is given its original content w_temp,w
banksel PIR1 ; Selects bank containing PIR1 bcf PIR1,TMR1IF ; Clears interrupt flag TMR1IF bsf retfie INTCON,GIE ; Global interrupt enabled ; Return from interrupt routine
;************************ MAIN PROGRAM *************************************** main ; Start of main program banksel ANSEL ; Selects bank containing register ANSEL clrf ANSEL ; Clears registers ANSEL and ANSELH
33
banksel T1CON ; Selects bank containing register T1CON bcf T1CON,TMR1CS ; TMR1 counts pulses generated by oscillator bsf bsf bsf T1CON,T1CKPS0 ; Prescaler rate is 1:8 T1CON,T1CKPS1 T1CON,TMR1ON ; Turns on timer TMR1
banksel PIE1 ; Selects bank containing register PIE1 bsf PIE1,TMR1IE ; TMR1 interrupt overflow enabled bsf INTCON,PEIE ; Peripheral modules interrupt enabled Timer TMR1 belongs to peripheral modules bsf INTCON,GIE ; Global interrupt enabled banksel PORTB ; Selects bank containing register PORTB clrf PORTB ; Clears port B loop goto loop ; Remain here end ; End of program
Circuito P1.8:
Actividades P1.8 Implementar la prctica en el simulador y ver cuales registros son modificados para la configuracin y operacin de la prctica, por ltimo implemente el sistema en fsico.
UNIDAD I ARQUITECTURA INTERNA DE LOS MICROCONTROLADORES lo cual produce una interrupcin. La rutina de la interrupcin decrementa el contenido del registro PR y simultneamente incrementa el contenido del puerto B. Puesto que el nmero en el registro PR, el cual determina cuando se producen las interrupciones, est constantemente decrementando su valor, las interrupciones se producirn cada vez durante perodos ms cortos de tiempo. En otras palabras, la cuenta se lleva a cabo cada vez ms rpido. Un nuevo ciclo de conteo ms corto comienza despus de cada desbordamiento del registro PR. Cdigo P1.9:
;************************************************ ; Nombre : P1_9.asm ; Fecha : Enero 10,2013 ; Alumno : ; Grupo : IMEC ;************************************************ ; Descripcion : Temporizador TMR2 y configuracin del oscilador ;************************************************ ;************* DEFINING VARIABLES ************************************************ cblock 0x20 w_temp pclath_temp status_temp endc ; Block of variables starts at address 20h ; Variable at address 20h ; Variable at address 21h ; Variable at address 22h
;************************ PROGRAM START ****************************************** org 0x0000 ; Address of the first program instruction goto main ; Jump to label "main" ;************************ INTERRUPT ROUTINE ************************************** org 0x0004 ; Interrupt vector movwf w_temp ; Save register W movf movwf movf movwf STATUS ; Save register STATUS status_temp PCLATH ; Save register PCLATH pclath_temp
banksel PORTB ; Selects bank containing PORTB incf PORTB ; Increments PORTB register by 1 banksel PR2 ; Selects bank containing PR2 decf PR2 ; PR2 is decremented by 1 movf pclath_temp,w ; PCLATH is given its original state movwf PCLATH movf status_temp,w ; STATUS is given its original state movwf STATUS swapf w_temp,f ; W is given its original state swapf w_temp,w banksel PIR1 ; Selects bank containing PIR1 bcf PIR1,TMR2IF ; Clears interrupt flag TMR2IF bsf retfie INTCON,GIE ; Global interrupt enabled ; Return from interrupt routine
;************************ MAIN PROGRAM ******************************************* main ; Start of the main program banksel OSCCON ; Selects bank containing register OSCCON bcf OSCCON,6 ; Selects internal oscillator HFINTOSC with bsf OSCCON,5 ; frequency of 500KHz bsf OSCCON,4
35
banksel ANSEL clrf ANSEL clrf ANSELH banksel TRISB clrf TRISB clrf PR2 banksel T2CON movlw H'FF' movwf T2CON clrf PORTB
; Selects bank containing register T2CON ; Sets all control register bits ; prescaler=1:16, postscaler=1:16 TMR2=ON
banksel PIE1 ; Selects bank containing register PIE1 bsf PIE1,TMR2IE ; TMR2 interrupt enabled bsf NTCON,PEIE ; Peripheral modules interrupt enabled ; Timer TMR2 belongs to peripheral modules bsf INTCON,GIE ; Global interrupt enabled loop goto loop ; Remain here end ; End of program
Circuito P1.9:
Actividades P1.9 Implementar la prctica en el simulador y ver cuales registros son modificados para la configuracin y operacin de la prctica, por ltimo implemente el sistema en fsico.
UNIDAD I ARQUITECTURA INTERNA DE LOS MICROCONTROLADORES del registro CCP1CON determinan que el mdulo funciona como un PWM de salida nica. Los mismos bits determinan la frecuencia PWM para ser de 4.88 kHz. Para hacer las cosas ms interesantes, la duracin de los pulsos en la salida P1A (PORTC, 2) se puede cambiar por medio de push-buttons simblicamente llamado "OSCURO" y "BRILLO". Los push-buttons son probados en una rutina de interrupcin iniciada por el temporizador TMR1. Cualquier cambio afecta el diodo LED para que la intensidad de la luz de este cambie. Es importante tener en cuentan que el puerto B no utiliza resistencias externas, porque utiliza las resistencias internas pull-up. Todo el proceso de generacin de la seal PWM se lleva a cabo "detrs de bambalinas", lo cual permite que el microcontrolador haga otras cosas. Cdigo P1.10:
;************************************************ ; Nombre : P1_10.asm ; Fecha : Enero 10,2013 ; Alumno : ; Grupo : IMEC ;************************************************ ; Descripcion : Modulo CCP 1 como generador de seales tipo PWM ;************************************************ ;************* DEFINING VARIABLES ******************************************* cblock 0x20 ; Block of variables starts at address 20h w_temp ; Variable at address 20h pclath_temp ; Variable at address 21h status_temp ; Variable at address 22h endc #define DARK PORTB,0 ; Push-button "DARK" is connected to PORTB,0 pin #define BRIGHT PORTB,1 ; Push-button "BRIGHT" is connected to PORTB,1 pin ;************************ PROGRAM START ************************************* org goto 0x0000 main ; First program instruction address ; Jump to label "main"
;************************ INTERRUPT ROUTINE ********************************* org movwf movf movwf movf movwf banksel btfss decf btfss incf movf movwf movf movwf swapf swapf 0x0004 w_temp ; Interrupt vector ; Save register W
STATUS ; Save register STATUS status_temp PCLATH ; Save register PCLATH pclath_temp CCPR1L DARK CCPR1L BRIGHT CCPR1L
; Tests push-button "DARK" ; Push-button is pressed - decrement CCP1L by 1 ; Testing push-button "BRIGHT" ; Push-button is pressed - increment CCP1L by 1
pclath_temp,w ; PCLATH is given its original content PCLATH status_temp,w ; STATUS is given its original content STATUS w_temp,f ; W is given its original content w_temp,w
banksel PIR1 ; Selects bank containing PIR1 bcf PIR1,TMR1IF ; Clears interrupt flag TMR1IF
37
TMR1H,7 ; Accelerates timer TMR0 counting TMR1H,6 ; INTCON,GIE ; Global interrupt enabled ; Return from interrupt routine
;************************ MAIN PROGRAM ************************************** main ; Start of the main program banksel ANSEL ; Selects bank containing register ANSEL clrf ANSEL ; Clears registers ANSEL and ANSELH clrf ANSELH ; All pins are digital banksel OPTION_REG ; Selects bank containing register ANSEL bcf OPTION_REG,7 ; Pull-up resistors enabled bsf WPUB,0 ; Pull-up resistors enabled bsf WPUB,1 ; on port B pins 0 and 1 banksel TRISC clrf TRISC banksel bcf bcf bcf bsf ; Selects bank containing register TRISC ; All port C pins are configured as outputs
T1CON ; Selects bank containing register T1CON T1CON,TMR1CS ; TMR1 operates as a timer T1CON,T1CKPS0 ; Prescaler rate is 1:8 T1CON,T1CKPS1 T1CON,TMR1ON ; Activates timer TMR1
banksel PIE1 ; Selects bank containing register PIE1 bsf PIE1,TMR1IE ; Interrupt TMR1 is enabled bsf INTCON,PEIE ; Peripheral modules interrupts are enabled bsf INTCON,GIE ; Global interrupt enabled movlw banksel movwf movlw banksel movwf banksel movlw movwf loop goto end B'11111101' ; Prescaler TMR2 = 1:4 T2CON T2CON B'11111111' ; Number in register PR2 PR2 PR2 CCP1CON B'00001100' ; Bits to configure CCP1 module CCP1CON loop ; Remain here ; End of program
38
Actividades P1.10 Implementar la prctica en el simulador y ver cuales registros son modificados para la configuracin y operacin de la prctica, por ltimo implemente el sistema en fsico.
Cdigo P1.11:
;************************************************ ; Nombre : P1_11.asm ; Fecha : Enero 10,2013 ; Alumno : ; Grupo : IMEC ;************************************************ ; Descripcion : Uso del convertidor analgico-digital (ADC) ;************************************* ;************************ PROGRAM START ************************************* org 0x0000 ; Address of the first program instruction
banksel TRISB ; Selects bank containing register TRISB clrf TRISB ; All port B pins are configured as outputs movlw B'00001100' movwf TRISA ; Pins RA2 and RA3 are configured as inputs banksel ANSEL ; Selects bank containing register ANSEL movlw B'00001100' ; Inputs AN2 and AN3 are analog while movwf ANSEL ; all other pins are digital clrf ANSELH banksel ADCON1 ; Selects bank including register ADCON1 bsf ADCON1,ADFM ; Right justification of result bcf ADCON1,VCFG1 ; Voltage Vss is used as Vref bsf ADCON1,VCFG0 ; RA3 pin voltage is used as Vref+ banksel ADCON0 ; Selects bank containing register ADCON0 movlw B'00001001' ; AD converter uses clock Fosc/2, AD channel movwf ADCON0 ; on RA2 pin is used for conversion and AD converter is enabled loop banksel ADCON0 btfsc ADCON0,1 ; Tests bit GO/DONE goto loop ; Conversion in progress, remain in loop banksel ADRESL movf ADRESL,w ; Lower byte of conversion result is copied to W banksel PORTB movwf PORTB ; Byte is copied to PORTB bsf ADCON0,1 ; Starts new conversion goto loop ; Jump to label "loop" end ; End of program
Circuito P1.11:
40
UNIDAD I ARQUITECTURA INTERNA DE LOS MICROCONTROLADORES Actividades P1.11 Implementar la prctica en el simulador y ver cuales registros son modificados para la configuracin y operacin de la prctica, por ltimo implemente el sistema en fsico.
; End of block
;**************************************************************************** ORG 0x000 ; Reset vector nop goto main ; Go to start of the program (label "main") ;**************************************************************************** include "pause.inc" include "button.inc" ;**************************************************************************** main banksel ANSEL ; Selects bank containing ANSEL clrf ANSEL clrf ANSELH ; All pins are digital banksel TRISB bsf TRISA, 0 bsf TRISA, 1 bsf TRISA, 2 clrf TRISB clrf TRISD banksel PORTB clrf PORTB
; Input pin ; Input pin ; Input pin ; All port B pins are outputs ; All port D pins are outputs ; PORTB=0
41
movlw 55h movwf EECON2 movlw H'AA' movwf EECON2 bsf EECON1,WR btfsc goto bsf bcf goto end EECON1,WR $-1 ; Wait for write to complete
INTCON,GIE ; Interrupt enabled EECON1,WREN Loop ; Tests push-buttons again ; End of program
42
Actividades P1.12 Implementar la prctica en el simulador y ver cuales registros son modificados para la configuracin y operacin de la prctica, por ltimo implemente el sistema en fsico.
UNIDAD I ARQUITECTURA INTERNA DE LOS MICROCONTROLADORES El contador puede ponerse en su valor inicial (99) en cualquier momento pulsando el botn "RESET COUNTER". Cdigo P1.13:
;************************************************ ; Nombre : P1_13.asm ; Fecha : Enero 10,2013 ; Alumno : ; Grupo : IMEC ;************************************************ ; Descripcion : Contador de dos dgitos multiplexado ;************************************* ;**************************************************************************** ; DEFINING VARIABLES IN PROGRAM w_temp EQU 0x7D ; Variable for saving W register status_temp EQU 0x7E pclath_temp EQU 0x7F CBLOCK Digtemp Dig0 Dig1 Dig2 Dig3 Dval One ENDC poc_vr include EQU .99 "Digbyte.inc" 0x20 ; Variable for saving STATUS register ; Variable for saving PCLATH register
; Variables for displaying digits - MSB ; Counter value ; Auxiliary variable which determines which display is to be switched on ; End of block of variables ; Initial counter value is 99
;**************************************************************************** ORG 0x0000 ; First instruction address goto main ; Jump to label "main" ;**************************************************************************** ORG 0x0004 ; Interrupt vector address movwf movf movwf movf movwf w_temp ; Move w register to w_temp register STATUS,w ; Move STATUS register to status_temp status_temp ; register PCLATH,w ; Move PCLATH register to pclath_temp pclath_temp ; register
; Start of interrupt routine... BANKSEL TMR0 movlw .100 movwf TMR0 bcf INTCON, T0IF bcf bcf btfsc goto goto Lsdon incf PORTA, 0 PORTA, 1 One, 0 Lsdon Msdon
One, f
44
pclath_temp,w ; PCLATH register is given its original PCLATH ; state status_temp,w ; STATUS register is given its original STATUS ; state w_temp,f ; W register is given its original ; state w_temp,w ; Return from interrupt routine ; Selects bank containing ANSEL ; All pins are digital
; RA0 and RA1 are configured as outputs and used for 7-segment display multiplexing RA2 is input ;push-button for initialization
movwf TRISA clrf TRISD BANKSEL OPTION_REG movlw b'10000110' ; TMR0 is incremented each 32us (Fclk=8MHz) movwf OPTION_REG BANKSEL PORTA movlw poc_vr movwf Dval ; Dval contains counter value movlw b'00000001' ; Initializes variable specifying display movwf One ; to switch on movwf PORTA movlw .100 movwf TMR0 ; TMR0 interrupt appr.every 10ms bsf INTCON, GIE ; Global interrupt enabled bsf INTCON, T0IE ; Timer TMR0 interrupt enabled bcf INTCON, T0IF Loop btfss One, 3 ; Falling edge encountered? goto Dec ; Yes! Go to Dec btfss PORTA, 2 ; Counter reset button pressed? goto Reset ; Yes! Go to Reset goto Loop ; Decrement Dval counter by 1
45
46
Actividades P1.13 Implementar la prctica en el simulador y ver cuales registros son modificados para la configuracin y operacin de la prctica, por ltimo implemente el sistema en fsico.
47
Play2 ; Second tone BEEP 0xBB, 0x02 BEEP 0x87, 0x05 BEEP 0xA2, 0x03 BEEP 0x98, 0x03 goto Loop ;********************************************************************** END ; End of program
48
Circuito P1.14:
49
UNIDAD I ARQUITECTURA INTERNA DE LOS MICROCONTROLADORES Actividades P1.14 Implementar la prctica en el simulador y ver cuales registros son modificados para la configuracin y operacin de la prctica, por ltimo implemente el sistema en fsico.
; End of block
LCDport EQU PORTB ; LCD is on PORTB (4 data lines on RB0-RB3) RS EQU 4 ; RS line connected to RB4 EN EQU 5 ; EN line connected to RB5 ;********************************************************************** ORG 0x0000 ; Reset vector address nop goto main ; Go to beginning of the program (label "main") ;********************************************************************** include "LCD.inc" include "digbyte.inc" include "pause.inc" ;********************************************************************** main banksel ANSEL ; Selects bank containing ANSEL
50
bcf STATUS,RP0 ; Bank0 active only bcf STATUS,RP1 movlw .23 movwf temp ; Move arbitrary value to variable is to be displayed on LCD lcdinit ; LCD initialization Loop lcdcmd 0x01 ; Instruction to clear LCD lcdtext 1, "UTCH" ; Write text from the beginning of the first line lcdtext 2, "CAZADORES" ; Write text from the beginning of the second line pausems .2000 ; 2 sec. delay lcdcmd 0x01 ; Instruction to clear LCD lcdtext 1, "Temperatura1" ; Write text from the beginning of the first line lcdtext 2, "temp=" ; Write text from the beginning of the second line lcdbyte temp ; Write variable (dec.) lcdtext 0, " C" ; Write text after cursor pausems .2000 ; 2 sec. delay goto Loop ;********************************************************************** end ; End of program
Archivo LCD.inc
; Esto va en un archivo que lleva el nombre de LCD.inc ;********************************************************************** ; Initialization must be done by using macro lcdinit before accessing LCD ;********************************************************************** lcdinit MACRO bcf STATUS, RP0 ; Bank0 bcf STATUS, RP1 clrf LCDportBuf movf LCDportBuf, w movwf LCDport bsf STATUS, RP0 ; Bank1 bcf STATUS, RP1 clrf TRISB ; LCDport with output LCD bcf STATUS, RP0 ; Bank0 bcf STATUS, RP1 ; Function set (4-bit mode change) movlw b'00100000' movwf LCDbuf swapf LCDbuf, w movwf LCDportBuf bcf LCDportBuf, RS movf LCDportBuf, w movwf LCDport bsf LCDportBuf, EN movf LCDportBuf, w movwf LCDport bcf LCDportBuf, EN movf LCDportBuf, w movwf LCDport call Delay1ms ; 1 ms delay ; Function set (display mode set) lcdcmd b'00101100' call Delay1ms ; 1 ms delay ; Display ON/OFF Control lcdcmd b'00001100'
51
; Entry Mode Set lcdcmd b'00000110' call Delay1ms ; 1 ms delay ; Display Clear lcdcmd b'00000001' pausems .40 ; 40 ms delay ; Function set (4-bit mode change) movlw b'00100000' movwf LCDbuf swapf LCDbuf, w movwf LCDportBuf bcf LCDportBuf, RS movf LCDportBuf, w movwf LCDport bsf LCDportBuf, EN movf LCDportBuf, w movwf LCDport bcf LCDportBuf, EN movf LCDportBuf, w movwf LCDport call Delay1ms ; 1 ms delay ; Function set (display mode set) lcdcmd b'00101100' call Delay1ms ; 1 ms delay ; Display ON/OFF Control lcdcmd b'00001100' call Delay1ms ; 1 ms delay ; Entry Mode Set lcdcmd b'00000110' call Delay1ms ; 1 ms delay ; Display Clear lcdcmd b'00000001' pausems .40 ; 40 ms delay ENDM ;********************************************************************** ; lcdcmd sends command to LCD (see the table on the previous page) ; lcdclr is the same as lcdcmd 0x01 ;********************************************************************** lcdcmd MACRO LCDcommand ; Send command to LCD movlw LCDcommand call LCDcomd ENDM LCDcomd movwf bcf movf movwf goto LCDdata movwf bsf movf movwf goto LCDwr swapf
LCDbuf LCDportBuf, RS LCDportBuf, w LCDport LCDwr LCDbuf LCDportBuf, RS LCDportBuf, w LCDport LCDwr LCDbuf, w
52
;********************************************************************** ; lcdtext writes text containing 16 characters which represents a ; macro argument. The first argument select selects the line in which ; text writing is to start. If select is 0, text writing starts from ; cursor current position. ;********************************************************************** lcdtext MACRO select, text ; This macro writes text from cursor current position. Text is specified in argument consisting ;of 16 characters local Message local Start local Exit local i=0 goto Start Message DT text ; Create lookup table from arguments DT 0 Start IF (select == 1) lcdcmd b'10000000' ELSE IF (select == 2) lcdcmd b'11000000' ENDIF ENDIF WHILE (i<16) call Message+i addlw 0 bz Exit call LCDdata i=i+1 ENDW Exit ENDM ;********************************************************************** ; This macro writes value in size of 1 byte on LCD excluding leading zeros ;********************************************************************** lcdbyte MACRO arg0 digbyte arg0 ; A hundred is in Dig2, A ten is in Dig1 and one in Dig0 movf Dig2, w addlw 0x30 call LCDdata ; Repeat conditional program compiling 16 times ; Read lookup table and place value in W ; until 0 is read ; Call routine displaying W on LCD
53
Circuito P1.15:
Actividades P1.15 Implementar la prctica en el simulador y ver cuales registros son modificados para la configuracin y operacin de la prctica, por ltimo implemente el sistema en fsico.
UNIDAD I ARQUITECTURA INTERNA DE LOS MICROCONTROLADORES funcionamiento del dispositivo en la prctica es utilizar el programa estndar de Windows llamado Hyper Terminal. Cdigo P1.16:
;************************************************ ; Nombre : P1_16.asm ; Fecha : Enero 10,2013 ; Alumno : ; Grupo : IMEC ;************************************************ ; Descripcion : Comunicacin serial RS232 ;************************************* ; DEFINING VARIABLES IN PROGRAM w_temp EQU 0x7D status_temp EQU 0x7E pclath_temp EQU 0x7F ; Variable for saving W register ; Variable for saving STATUS register ; Variable for saving PCLATH w register
cblock 0x20 ; Block of variables starts at address 20 h Port_A ; Variable at address 20 h Port_B ; Variable at address 21 h RS232temp ; Variable at address 22 h RXchr ; Variable at address 23 h endc ; End of block of variables ;********************************************************************** ORG 0x0000 ; Reset vector nop goto main ; Go to beginning of program (label "main") ;********************************************************************** ORG 0x0004 ; Interrupt vector address movwf w_temp ; Save value of W register movf STATUS,w ; Save value of STATUS register movwf status_temp movf PCLATH,w ; Save value of PCLATH register movwf pclath_temp ;********************************************************************** ; This part of the program is executed in interrupt routine banksel PIE1 btfss PIE1, RCIE goto ISR_Not_RX232int banksel PIE1 btfsc PIR1, RCIF call RX232_int_proc ISR_Not_RX232int movf pclath_temp,w movwf PCLATH ; PCLATH is given its original value movf movwf swapf swapf status_temp,w STATUS ; STATUS is given its original value w_temp,f w_temp,w ; W is given its original value
retfie ; Return from interrupt routine ;********************************************************************** RX232_int_proc ; Check if error has occurred banksel RCSTA movf RCSTA, w movwf RS232temp btfsc RS232temp, FERR goto RX232_int_proc_FERR btfsc RS232temp, OERR goto RX232_int_proc_OERR
55
RX232_int_proc_FERR bcf RCSTA, CREN ; To clear FERR bit, receiver is first ; switched off and on afterwards nop ; Delay ... nop bsf RCSTA, CREN movf RCREG, w ; Reads receive register and clears FERR bit bsf Port_A, 0 ; Switches LED on ( UART error indicator) movf Port_A, w movwf PORTA goto RS232_exit RX232_int_proc_OERR bcf RCSTA, CREN ; Clears OERR bit nop ; Delay ... nop bsf RCSTA, CREN movf RCREG, w ; Reads receive register and clears FERR bit bsf Port_A, 1 ; Switches LED on ( UART error indicator) movf Port_A, w movwf PORTA goto RS232_exit RX232_int_proc_Cont movf RCREG, W movwf RXchr movwf PORTB movwf TXREG
RS232_exit return ; Return from interrupt routine ;********************************************************************** ; Main program main banksel ANSEL clrf ANSEL clrf ANSELH
;--------------------------------------; Port configuration ;--------------------------------------banksel TRISA movlw b'11111100' movwf TRISA movlw b'00000000' movwf TRISB ;--------------------------------------; Setting initial values ;--------------------------------------banksel PORTA movlw b'11111100' movwf PORTA movwf Port_A movlw b'00000000' movwf PORTB movwf Port_B ;--------------------------------------; USART - setting for 38400 bps ;--------------------------------------banksel TRISC bcf TRISC, 6 ; RC6/TX/CK = output bsf TRISC, 7 ; RC7/RX/DT = input
56
Circuito P1.16:
57
UNIDAD I ARQUITECTURA INTERNA DE LOS MICROCONTROLADORES Actividades P1.16 Implementar la prctica en el simulador y ver cuales registros son modificados para la configuracin y operacin de la prctica, por ltimo implemente el sistema en fsico.
58
DE
MICROCONTROLADORES
CON
Al encender la fuente de alimentacin, los diodos LED en el puerto B emiten luz y se apagan contantemente (11 veces), luego encienden de forma intercalada (efecto serie navidea), lo que indica que el microcontrolador est conectado correctamente y que funciona normalmente. En este ejemplo se muestra cmo escribir una cabecera correctamente. Lo mismo se aplica a todos los programas descritos en esta seccin. Para no repetir, en los siguientes ejemplos no vamos a escribir la cabecera. Se considera estar en el principio de cada programa, marcada como "Cabecera". Cdigo P2.1:
/* * Este es el Header * Nombre del programa : p2_1.c * Grupo: IMEC81N * Descripcion: Programa simple para demostrar el funcionamiento de un uC encendiendo y apagando leds conectados al puerto B. * Configuracion:
59
60
UNIDAD II PROGRAMACIN DE MICROCONTROLADORES CON ELEMENTOS DE LENGUAJE C aunque el programa ejecuta el mismo bucle do-while con un tiempo de retardo 10 veces ms corto. Con el propsito de hacer evidentes algunas situaciones potencialmente peligrosas, se activan los bits de control por medio de las instrucciones en ensamblador. Dicho de manera sencilla, al entrar o salir una instruccin en ensamblador en el programa, el compilador no almacena los datos en un banco actualmente activo de la RAM, lo que significa que en esta seccin de programa, la seleccin de bancos depende del registro SFR utilizado. Al volver a la seccin de programa escrito en C, los bits de control RP0 y RP1 deben recuperar el estado que tenan antes de la aventura en ensamblador. En este programa, el problema se resuelve utilizando la variable auxiliar saveBank, lo que guarda el estado de estos dos bits. Circuito P2.2:
Cdigo P2.2:
/* ***Header *********************************************/ int k = 0; char saveBank; void main() { ANSEL = 0; ANSELH = 0; TRISB = 0; PORTB = 0; do { PORTB = ~PORTB; Delay_ms(100); k++; } while(k<20);
// Todos los pines I/O configurados como digitales //Analog select register/high register // Todo el Puerto B se configura como salida // Todo el Puerto B se inicializa en 0
// Se invierte el estado lgico del puerto B // Retardo de 100ms // Se incrementa el contador k // Se repite el ciclo mientras k<20
61
STATUS &= 0b10011111; // Los bits RP0 y RP1 regresan a su estado original STATUS |= saveBank; do { PORTB = ~PORTB; // Invierte el estado lgico del puerto Delay_ms(10); // Retardo de 10 ms k++; // Se incrementa k } while(k<20); // Se repite mientras que k<20 }
62
do { if (TMR0 == TEST) // Es igual el nmero del timer con la constante TEST? (PORTD.RELAY = 1); // Si es as. Activa la salida del Relay } while (1); // Ciclo infinito }
Slo una constante de enumeracin REL se utiliza en este ejemplo. Se le asigna un valor mediante la declaracin.
enum salidas {REL = 3}; // Constante REL = 3
Si varios pines del puerto PORTD estn conectados a los rels, la expresin anterior se puede escribir de la siguiente manera tambin:
enum salidas {REL=3, CALENTADOR, MOTOR=6, SURTIDOR};
A todas las constantes, precedidas por las constantes con valores asignados (REL=3 y MOTOR=6), se les asignan automticamente los valores de las constantes precedentes, incrementados en 1. En este ejemplo, a las constantes CALENTADOR y SURTIDOR se les asignan los valores 4 y 7, es decir (CALENTADOR=4 y SURTIDOR=7), respectivamente.
UNIDAD II PROGRAMACIN DE MICROCONTROLADORES CON ELEMENTOS DE LENGUAJE C proporcionar un tiempo de retardo suficiente largo para darse cuenta de los cambios en el puerto. Para este propsito se utiliza el temporizador Timer0 con el pre-escalador asignado. Siempre que se genere una interrupcin con cada desbordamiento en el registro del temporizador, la variable cnt se aumenta automticamente en 1 al ejecutarse cada rutina de interrupcin. Cuando la variable llega al valor 400, el puerto PORTB se incrementa en 1. Todo el procedimiento se lleva a cabo entre bastidores, lo que habilita al microcontrolador para hacer otra tarea. Circuito P2.4:
Cdigo P2.4:
void interrupt() { cnt++; // Con una interrupcin la cnt se incrementa en 1 TMR0 = 96; // El valor inicial se devuelve en el temporizador TMR0 INTCON = 0x20; // Bit T0IE se pone a 1, el bit T0IF se pone a 0 } void main(){ OPTION_REG = 0x84; // Pre-escalador se le asigna al temporizador TMR0 ANSEL = 0; // Todos los pines de E/S se configuran como digitales ANSELH = 0; TRISB = 0; // Todos los pines de puerto PORTB se configuran como salidas PORTB = 0x0; // Reiniciar el puerto PORTB TMR0 = 96; // Temporizador T0 cuenta de 96 a 255 INTCON = 0xA0; // Habilitada interrupcin TMR0 cnt = 0; // A la variable cnt se le asigna un 0 do { // Bucle infinito if (cnt == 400) { // Incrementar el puerto PORTB despus 400 interrupciones
64
Siempre que se produzca un desbordamiento en el registro del temporizador TRM0, ocurre una interrupcin.
/*Cabecera******************************************************/ unsigned short cnt; // Definir la variable cnt void interrupt() { cnt++ ; // Con una interrupcin la cnt se incrementa en 1 PIR1.TMR1IF = 0; // Reiniciar el bit TMR1IF TMR1H = 0x80; // El valor inicial se devuelve en los registros TMR1L = 0x00; // del temporizador TMR1H y TMR1L } void main() { ANSEL = 0; // Todos los pines de E/S se configuran como digitales ANSELH = 0; TRISB = 0; // Pines del puerto PORTB se configuran como salidas PORTB = 0xF0; // Valor inicial de los bits del puerto PORTB T1CON = 1; // Configurar el temporizador TMR1 PIR1.TMR1IF = 0; // Reiniciar el bit TMR1IF TMR1H = 0x80; // Ajustar el valor inicial del temporizador TMR1 TMR1L = 0x00; PIE1.TMR1IE = 1; // Habilitar la interrupcin al producirse un desbordamiento cnt = 0; // Reiniciar la variable cnt INTCON = 0xC0; // Interrupcin habilitada (bits GIE y PEIE) do { // Bucle infinito if (cnt == 76) { // Cambiar el estado del puerto PORTB despus de 76 interrupciones PORTB = ~PORTB; // Nmero en el puerto PORTB est invertido cnt = 0; // Reiniciar la variable cnt } } while (1); }
65
UNIDAD II PROGRAMACIN DE MICROCONTROLADORES CON ELEMENTOS DE LENGUAJE C En este caso, una interrupcin se habilita despus de que se produce un desbordamiento en el registro del temporizador TMR1 (TMR1H, TMR1L). Adems, la combinacin de los bits que vara en el puerto POTRB difiere del ejemplo anterior.
/*Cabecera******************************************************/ unsigned short cnt; // Definir la variable cnt void Reemplazar() { PORTB = ~PORTB; // Definir nueva funcin Reemplazar } // Funcin invierte el estado del puerto void interrupt() { if (PIR1.TMR2IF) { // Si el bit TMR2IF = 1, cnt++ ; // Incrementar variable la cnt en 1 PIR1.TMR2IF = 0; // Reiniciar el bit y TMR2 = 0; // Reiniciar el registro TMR2 } } void main() { // main cnt = 0; // Reiniciar la variable cnt ANSEL = 0; // Todos los pines de E/S se configuran como digitales ANSELH = 0; TRISB = 0; // Todos los pines del puerto PORTB se configuran como salidas PORTB = 0b10101010; // Estado lgico en los pines del puerto PORTB T2CON = 0xFF; // Configurar el temporizador T2 TMR2 = 0; // Valor inicial del registro del temporizador TMR2 PIE1.TMR2IE = 1; // Interrupcin habilitada INTCON = 0xC0; // Bits GIE y PEIE se ponen a 1 while (1) { // Bucle infinito if (cnt > 30) { // Cambiar el estado del puerto PORTB despus de ms de 30 interrupciones Reemplazar(); // Funcin Reemplazar invierte el estado del puerto PORTB cnt = 0; // Reiniciar la variable cnt } } }
En este ejemplo, una interrupcin ocurre despus de que se produce un desbordamiento en el registro del temporizador TMR2. Para invertir el estado lgico de los pines del puerto se utiliza la funcin Reemplazar.
66
Cdigo P2.5:
/*Cabecera******************************************************/ void main() { OPTION_REG = 0x0E; // Pre-escalador se le asigna al temporizador WDT (1:64) asm CLRWDT; // Comando en ensamblador para reiniciar el temporizador WDT TRISB = 0; // Todos los pines del puerto PORTB se configuran como salidas PORTB = 0x0F; // Valor inicial del registro PORTB Delay_ms(300); // Tiempo de retardo de 30mS PORTB = 0xF0; // Valor del puerto PORTB diferente del inicial while (1); } // Bucle infinito. El programa se queda aqu hasta que el temporizador WDT reinicie al microcontrolador
Para que este ejemplo funcione apropiadamente, es necesario habilitar al temporizador perroguardin al seleccionar la opcin Tools/mE Programmer/Watchdog Timer - Enabled.
67
68
Para que este ejemplo funcione apropiadamente, es necesario marcar las siguientes libreras en la ventana Library Manager antes de compilar el programa: PWM Button
69
UNIDAD II PROGRAMACIN DE MICROCONTROLADORES CON ELEMENTOS DE LENGUAJE C se utiliza como voltaje de referencia bajo Vref-, mientras que el voltaje de referencia alto se aplica al pin AN3. Esto habilita que la escala de medicin se estire y encoja. En otras palabras, el convertidor A/D siempre genera un resultado binario de 10 bits, lo que significa que reconoce 1024 niveles de voltaje en total (210=1024). La diferencia entre dos niveles de voltaje no es siempre la misma. Cuanto menor sea la diferencia entre Vref+ y Vref-, tanto menor ser la diferencia entre dos de los 1024 niveles. Como hemos visto, el convertidor A/D es capaz de detectar pequeos cambios de voltaje (investigue cual es el mnimo). Circuito P2.7:
Cdigo P2.7:
/*Cabecera******************************************************/ unsigned int temp_res; void main() { ANSEL = 0x0C; // Pines AN2 y AN3 se configuran como analgicos TRISA = 0xFF; // Todos los pines del puerto PORTA se configuran como entradas ANSELH = 0; // Los dems pines se configuran como digitales TRISB = 0x3F; // Pines del puerto PORTB, RB7 y RB6 se configuran como salidas TRISD = 0; // Todos los pines del PORTD se configuran como salidas ADCON1.F4 = 1 ; // Voltaje de referencia es llevado al pin RA3. do { temp_res = ADC_Read(2); // Resultado de la conversin A/D es copiado a temp_res PORTD = temp_res; // 8 bits menos significativos se mueven al puerto PORTD PORTB = temp_res >> 2; // 2 bits ms significativos se mueven a los bits RB6 y RB7 } while(1); // Bucle infinito }
70
UNIDAD II PROGRAMACIN DE MICROCONTROLADORES CON ELEMENTOS DE LENGUAJE C Para que este ejemplo funcione apropiadamente, es necesario marcar la librera ADC en la ventana Library Manager antes de compilar el programa: ADC
71
if (PORTA.F2) EEPROM_Write(5,PORTB); // Si se pulsa el botn MEMO, guardar el puerto PORTB PORTD = EEPROM_Read(5); // Leer el dato escrito do { while (PORTA.F2); } } while(1); }
// Bucle infinito
Para comprobar el funcionamiento de este circuito, basta con pulsar el botn MEMO y apagar el dispositivo. Despus de reiniciar el dispositivo, el programa visualizar el valor guardado en el puerto PORTD. Acurdese de que en el momento de escribir, el valor fue visualizado en el puerto PORTB. Para que este ejemplo funcione apropiadamente, es necesario marcar la librera EEPROM en la ventana Library Manager antes de compilar el programa: EEPROM
72
Cdigo P2.9:
/*Cabecera******************************************************/ unsigned short mask(unsigned short num); unsigned short digit_no, digit10, digit1, digit, i; void interrupt() { if (digit_no == 0) { PORTA = 0; // Apagar ambos visualizadores PORTD = digit1; // Colocar mscara para visualizar unidades en el puerto PORTD PORTA = 1; // Encender el visualizador para las unidades (LSD) digit_no = 1; }else{ PORTA = 0; // Apagar ambos visualizadores PORTD = digit10; // Colocar mscara para visualizar decenas en el puerto PORTD PORTA = 2; // Encender el visualizador para las decenas (MSD) digit_no = 0; } TMR0 = 0; // Reiniciar el contador TMRO INTCON = 0x20; // Bit T0IF=0, T0IE=1 } void main() { OPTION_REG = 0x80; // Ajustar el temporizador TMR0 TMR0 = 0; INTCON = 0xA0; // Deshabilitar las interrupciones PEIE,INTE,RBIE,T0IE PORTA = 0; // Apagar ambos visualizadores TRISA = 0; // Todos los pines del puerto PORTA se configuran como salidas PORTD = 0; // Apagar todos los segmentos del visualizador TRISD = 0; // Todos los pines del puerto PORTD se configuran como salidas do { for (i = 0; i<=99; i++) { // Contar de 0 a 99 digit = i % 10u; digit1 = mask(digit); // Preparar la mscara para visualizar unidades digit = (char)(i / 10u) % 10u; digit10 = mask(digit); // Preparar la mscara para visualizar decenas delay_ms(1000); } } while (1); // Bucle infinito }
73
Para que este ejemplo funcione apropiadamente, es necesario incluir el archivo mask.c en el proyecto (aparte del archivo example9.c) en la ventana Project Manager antes de compilar el programa: Example9.mcppi - Sources - Add File To Project mask.c example9.c
UNIDAD II PROGRAMACIN DE MICROCONTROLADORES CON ELEMENTOS DE LENGUAJE C Dos segundos ms tarde, el mensaje en la segunda lnea cambia, y se visualiza el voltaje presente en la entrada del convertidor A/D (el pin RA2). Por ejemplo: UTCH Optativa I voltage:3.141V
En un dispositivo real se puede visualizar temperatura actual o algn otro valor medido en vez de voltaje. Circuito P2.10:
Cdigo P2.10:
/*Cabecera*****************************************************/ sbit LCD_RS at RB4_bit; // Conexiones del mdulo LCD sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; // Final de las conexiones del mdulo LCD unsigned char ch; // Declarar variables unsigned int adc_rd; char *text; long tlong; void main() { INTCON = 0; ANSEL = 0x04; TRISA = 0x04; ANSELH = 0;
// Todas las interrupciones deshabilitadas // Pin RA2 se configura como una entrada analgica // Los dems pines se configuran como digitales
Lcd_Init(); // Inicializacin del visualizador LCD Lcd_Cmd(_LCD_CURSOR_OFF); // Comando LCD (apagar el cursor)
75
text = "UTCH Optativa I"; // Definir el primer mensaje Lcd_Out(1,1,text); // Escribir el primer mensaje en la primera lnea text = "Ejemplo LCD"; Lcd_Out(2,1,text); ADCON1 = 0x82; TRISA = 0xFF; delay_ms(2000); text = "voltaje:"; // Definir el segundo mensaje // Escribir el segundo mensaje en la segunda lnea // Voltaje de referencia para la conversin A/D es VCC // Todos los pines del puerto PORTA se configuran como entradas
while (1) { adc_rd = ADC_Read(2); // Conversin A/D. Pin RA2 es una entrada. Lcd_Out(2,1,text); // Escribir el resultado en la segunda lnea tlong = (long)adc_rd * 5000; // Convertir el resultado en milivoltios tlong = tlong / 1023; // 0..1023 -> 0-5000mV ch = tlong / 1000; // Extraer voltios (miles de milivoltios) del resultado Lcd_Chr(2,9,48+ch); // Escribir resultado en formato ASCII Lcd_Chr_CP('.'); ch = (tlong / 100) % 10; // Extraer centenas de milivoltios Lcd_Chr_CP(48+ch); // Escribir resultado en formato ASCII ch = (tlong / 10) % 10; // Extraer decenas de milivoltios Lcd_Chr_CP(48+ch); // Escribir resultado en formato ASCII ch = tlong % 10; // Extraer unidades de milivoltios Lcd_Chr_CP(48+ch); // Escribir resultado en formato ASCII Lcd_Chr_CP('V'); delay_ms(1); } }
Para que este ejemplo funcione apropiadamente, es necesario marcar las siguientes libreras en la ventana Library Manager antes de compilar el programa: ADC LCD
76
Cdigo P2.11:
/*Cabecera******************************************************/ unsigned short i; void main() { UART1_Init(19200); // Inicializar el mdulo USART (8 bits, tasa de baudios 19200, no hay bit de paridad) while (1) { if (UART1_Data_Ready()) { // si se ha recibido un dato i = UART1_Read(); // leerlo UART1_Write(i); // enviarlo atrs } } }
Para que este ejemplo funcione apropiadamente, es necesario marcar la librera UART en la ventana Library Manager antes de compilar el programa:
UART
77
Cdigo P2.12:
/*Cabecera******************************************************/ void Tone1() { Sound_Play(659, 250); // Frecuencia = 659Hz, duracin = 250ms } void Tone2() { Sound_Play(698, 250); // Frecuencia = 698Hz, duracin = 250ms } void Tone3() { Sound_Play(784, 250); // Frecuencia = 784Hz, duracin = 250ms } void Melody1() { // Componer una meloda divertida 1 Tone1(); Tone2(); Tone3(); Tone3(); Tone1(); Tone2(); Tone3(); Tone3(); Tone1(); Tone2(); Tone3();
78
// Todos los pines de E/S son digitales // Pines RB7-RB4 se configuran como entradas
Sound_Init(&PORTB, 3); // RB3 se configura como salida Sound_Play(1000, 500); while (1) { if (Button(&PORTB,7,1,1)) // RB7 genera Tono1 Tone1(); while (PORTB & 0x80) ; // Esperar que se suelte el botn if (Button(&PORTB,6,1,1)) // RB6 genera Tono2 Tone2(); while (PORTB & 0x40) ; // Esperar que se suelte el botn if (Button(&PORTB,5,1,1)) // RB5 genera meloda 2 Melody2(); while (PORTB & 0x20) ; // Esperar que se suelte el botn if (Button(&PORTB,4,1,1)) // RB4 genera meloda 1 Melody1(); while (PORTB & 0x10) ; // Esperar que se suelte el botn } }
Para que este ejemplo funcione apropiadamente, es necesario marcar las siguientes libreras en la ventana Library Manager antes de compilar el programa: Button Sound
79
Control remoto por medio del puerto series (protocolo RS232), por medio de las siguientes secuencias de bytes: ATINT, arrancar motor ATSTx , detener motor, donde si x=0 detener suavemente, x=1 detener inmediatamente. ATDCW, direccin del motor CW ATDCC, direccin del motor CCW ATSxyz, La velocidad se fija al xyz%, donde xyz es un nmero en el rango del 000 al 100.
Circuito P3.1: [Dibuje aqu el circuito esquemtico. El circuito debe de estar completo]
80
Driver: 4011 CMOS Quad NAND Gate IC, alimentado con +12 V DC. 4049 CMOS Hex Inverting Buffer IC. NOTA: Los transistores MOSFET canal N se activa con un voltaje positivo en la terminal de Gate. Cdigo P3.1: [Escriba aqu el cdigo que implemento]
Control remoto por medio del puerto series (protocolo RS232), por medio de las siguientes secuencias de bytes: ATCMx, modo continuo, donde si x=0 avanzar CW, x=1 avanzad CCW. ATSTP, detener motor. ATMxyz, El motor se mueve en la direccin (x=0 CW, x=1 CCW) un nmero de pasos yz, donde yz es un nmero en el rango de 0-99.
81
UNIDAD III CONTROL Y MONITOREO DE SISTEMAS AUTOMTICOS Circuito P3.2: [Dibuje aqu el circuito esquemtico. El circuito debe de estar completo]
Step 1 2 3 4
82
Step 1 2 3 4
Control remoto por medio del puerto series (protocolo RS232), por medio de las siguientes secuencias de bytes: ATSIP, el servo motor regresa a su posicin central o neutral. ATMxyz, El motor se mueve en la direccin (x=0 CW, x=1 CCW) un numero de grados yz, donde yz es un numero en el rango de 0-90 (0-60 segn sea el caso).
El siguiente diagrama de tiempos de una seal tipo PWM para el control de un servo motor es solo ilustrativa. Las seales de control de los servos motores no siguen un estndar verdadero. Lo nico 83
UNIDAD III CONTROL Y MONITOREO DE SISTEMAS AUTOMTICOS estandarizado es que el circuito de control del servo motor espera recibir un pulso cada 20 ms (periodo). La duracin del pulso debe de ser entre 0.7 ms y 2.0 ms. Si la duracin del pulso est entre 0.7 y 1.0 ms el servo se mover hacia la derecha (CW). Si la duracin del pulso est entre 1.7 y 2.0 ms el servo se mover hacia la izquierda (CCW). Si la duracin del pulso est entre 1.3 y 1.5 ms el servo se mover a su posicin central o neutral.
Para ms informacin consultar: http://www.ermicro.com/blog/?p=771 Circuito P3.3: [Dibuje aqu el circuito esquemtico. El circuito debe de estar completo] Cdigo P3.3: [Escriba aqu el cdigo que implemento]
84
Se debe de usar un sensor de temperatura (sugerencia LM35) para realizar las mediciones, un foco incandescente (pudiera ser una resistencia) como fuente de calor y un ventilador que sirva para disminuir la temperatura de la caja. El control debe comparar la temperatura medida en el interior de la caja, en caso de que la temperatura sea mayor THigh se debe encender el ventilador, este debe estar encendido hasta que la temperatura sea menor a TLow, y as sucesivamente. Circuito P3.4: [Dibuje aqu el circuito esquemtico. El circuito debe de estar completo] Cdigo P3.4: [Escriba aqu el cdigo implementado]
Prctica 3.5 Modulo remoto de medicin y control. 3 sensores, 2 actuadores, comunicacin mediante RS232, modo de control remoto mediante PC, modo de control local mediante botones.
Descripcin P3.5: Se debe de realizar un circuito y programa que permita realizar la medicin remota de 3 variables o sensores (pueden ser cualquier tipo de sensores pero cada uno de diferente variable, preprense para justificar la seleccin de estos sensores). La medicin de estos tres sensores permitir realizar el control de algn tipo de proceso (el proceso ustedes lo pueden idear, pero de igual manera hay que preparar una justificacin de este) mediante dos actuadores. Los actuadores deben de ser de tipos diferentes, es decir, elctricos, electroneumticos, electrohidrulicos, o electromecnicos. El control de los dos actuadores puede realizarse de manera remota mediante la comunicacin con una PC utilizando el protocolo RS232, o localmente mediante el uso de botones.
85
UNIDAD III CONTROL Y MONITOREO DE SISTEMAS AUTOMTICOS Las mediciones de los sensores de deben de mostrar localmente utilizando un display tipo LCD o display tipo 7 segmentos. Circuito P3.5: [Dibuje aqu el circuito esquemtico. El circuito debe de estar completo] Cdigo P3.5: [Escriba aqu el cdigo que implemento]
86
REPORTE Y EVALUACIN
Formato de reportes
Todas las prcticas deben de ir acompaadas de un reporte. El reporte debe de entregarse escrito a mano (diagramas y cdigo fuente tambin). Cada reporte debe de contener los siguientes componentes:
El reporte tambin lleva su contraparte electrnica. Esta es una carpeta comprimida, en formato ZIP, que contenga las siguientes subcarpetas: SourceCode, aqu va la carpeta del proyecto generado por la IDE y el compilador utilizados. Schematics, aqu van los diagramas esquemticos de los circuitos realizados. Deben de estar en formato PDF.
87
REPORTE Y EVALUACIN
Unidad II
Calificacin = ((Calif. Examen) * (Prcticas_Realizadas /12) * 0.5) + ((Reportes_Revisados/12) * 0.5)
Unidad III
Calificacin = ((Calif. Examen) * (Prcticas_Realizadas /5) * 0.5) + ((Reportes_Revisados/5) * 0.5)
88