Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Guia 1 microcontroladores grado 11

676 views

Published on

  • Be the first to comment

  • Be the first to like this

Guia 1 microcontroladores grado 11

  1. 1. 1. IDENTIFICACIÓN DE LA GUÍA DE APRENDIZAJE <br />Nombre del Proyecto: MEJORAMIENTO DE INSTALACIONES Y MAQUINARIA ELÉCTRICA DEL COLEGIO APLICANDO LA NORMATIVIDAD VIGENTE.(Duración en horas)Número de horas3960Fase del Proyecto: PLANEACIÓN(Duración en horas)264Código de la Guía290201083Nombre de la Actividad:Mejorar el funcionamiento de máquinas y procesosbuscando su eficiencia y productividad(Lógica cableada y programable)Equipo EjecutorMAURICIO DIAZ GARCIAResultados de Aprendizaje29020108301Esquematizar e implementar a su alcance el problema planteado.29020108302Recopilar la información de acuerdo a la solución adoptada delautomatismo requerido como análisis de componentes: mecánicos,eléctricos, de control, proveedores y costos29020108303Presentar alternativas de solución que respondan en su totalidad concada una de las funciones del automatismo29020108304Valorar alternativas económicas del estudio preliminar de acuerdo a lasolución adoptada29020108305Definir detalladamente la estructura del automatismo de acuerdo a lametodología establecida29020108306Seleccionar los sensores, actuadores y controladores requeridos para lasolución del problema.29020108307Aplicar normas de seguridad vigentes para la alternativa de soluciónCódigo del resultado + consecutivo 1083-01<br />2. INTRODUCCIÓN<br />La guía de aprendizaje contiene la información necesaria para programar un Microcontrolador, las herramientas requeridas de hardware y software. Y la implementación de sistemas de control basado en microcontroladores. Se abordan los siguientes temas:Descripción de un Microcontrolador.Manejo del software Mplab para generar código Asembler y lenguaje de máquina.El ejercicio propuesto genera destrezas en la programación de procesos de control, donde los pequeños microswich pueden ser reemplazados por diversos tipos de sensores, y las salidas por sistemas de potencia. De esta forma tenemos un Control Lógico Programable (PLC) construido y programado con bajo presupuesto, y alto contenido didáctico.<br />3. CONOCIMIENTOS PREVIOS<br />c-108301Normatividad técnica y legalc-108302Interpretación de planos y catálogosc-108303Conocimientos de inglésc-108304Usos de medios de información, internetc-108305Manejo de manuales técnicosc-108306Sistemas informáticosc-108307Fundamentos de mecánica, electrotecniac-108308Neumática, hidráulica, electrónica y sensoresc-108309Equipos y programas para control de procesosc-108310Principios de sistemas automáticos de controlc-108311Elaboración de planos.c-108312Controles lógicos programables.c-108313Normalización: simbología estandarizadac-108314Normas de seguridad industrial.<br />4. MATERIAL DE CONSULTA<br />Estructura curricular cód.: 832223<br />Internet: www.cdachiaindustrial.blogspot.com<br /> http://micropic.galeon.com http://www.ithinkweb.com.mx/capacita/algoritmo.html http://www.ate.uniovi.es/fernando/Doc2006/Sed_06/Presentaciones/Programacion%20en%20ensamblador.pdf<br />Tutorial Microcontrolador PIC.<br />Referencia PIC 16f84, por ser de uso más común entre los estudiantes. <br />El primer paso importante es ver el diagrama de pines del PIC16F84, en el cual se observa cómo están distribuidos sus pines. Este circuito integrado cuenta con 2 puertos configurables como entradas o salidas según sea el caso y consta de 18 pines los cuales se encuentran asignados de la siguiente manera:<br />   <br />Pin 1: -----------RA2  Pin 2: -----------RA3  Pin 3: -----------RA4/TOCKI  Pin 4:------------Reset   Pin 5:------------Tierra (GND)   Pin 6:------------RB0/INT   Pin 7:------------RB1   Pin 8:-------------RB2   Pin 9:------------RB3   Pin 10:----------RB4   Pin 11:----------RB5   Pin 12:----------RB6   Pin 13:----------RB7  Pin 14:----------Vcc  Pin 15:----------Osc2   Pin 16:----------Osc1  Pin 17:----------RA0   Pin18:-----------RA1      <br />           El puerto A está denotado por el color Azul oscuro, el cual tiene sólo cinco pines que puedes configurar como entrada o salida. La pata 3, o sea, RA4/TOCKI puede ser configurado a su vez como entrada/salida o como temporizador/contador. Cuando es salida se comporta como colector abierto, por lo tanto debemos poner una resistencia Pull-up a Vcc de 1 Kohm. Cuando es configurada como entrada, funciona como disparador Schmitt Trigger por lo que puede reconocer señales con un poco de distorsión.<br />  <br />    El puerto B está denotado por el color anaranjado, y tiene ocho pines que igualmente se pueden configurar como entrada o salida. Los pines 15 y 16 son únicamente para el oscilador externo el cual estudiaremos con más detalle más adelante. El pin 4, o sea, el Reset se debe conectar con una resistencia de 10 Kohm a Vcc para que el Pic funcione, si lo queremos resetear entonces pondremos un micropulsador con una resistencia de 100 Ohm a tierra.<br />   <br />    La máxima capacidad de corriente para los puertos se muestra en la siguiente tabla:   <br /> PUERTO APUERTO BMODO SUMIDERO 80 mA 150 mA MODO FUENTE 50 mA 100 mA <br />      Por último tenemos los pines 14 y 5 que son la alimentación la cual no debe sobrepasar los 5 Voltios. <br />        Oscilador Externo: <br />    Es necesario para que nuestro PIC pueda funcionar, puede ser conectado de cuatro maneras diferentes. En la siguiente tabla encontraras los diagramas necesarios para su conexión y una breve descripción de cada uno.   <br />XT  Oscilador compuesto por un cristal y dos condensadores.    RC    Oscilador compuesto por una resistencia y un condensador.      HS Oscilador compuesto por un cristal de alta velocidad.LPOscilador compuesto por un cristal de baja frecuencia y bajo consumo de potencia. <br />      El siguiente paso importante para tener claro como debemos empezar a programar es conocer la tabla de registros. Esta tabla está dividida en dos partes llamadas BANCO 0 y Banco 1. Nos debemos interesar momentáneamente en: STATUS, PORTA, PORTB, TRISA y TRISB. <br />    Para que nuestro PIC pueda trabajar debemos configurar sus puertos como entrada o como salida según sea el caso,  si le asignamos un CERO(0) a un pin éste será SALIDA y si asignamos un UNO (1) éste será ENTRADA. <br />    Esta asignación de pines se hace programando los registros TRISA y TRIS B. <br />    TRISA es el registro donde se almacenan los bits que asignan un pin como entrada o salida del PUERTO A. Recordemos que el puerto A sólo tiene 5 pines, por lo tanto un ejemplo de esto sería: <br />    Si TRISA (puerto A) es igual a  19 (11001) entonces esto se leería,<br />TRISA ASIGNACIÓN ESTADO RA01ENTRADA RA10SALIDA RA20SALIDA RA31ENTRADA RA41ENTRADA <br />      El bit menos significativo se asigna desde RA0. <br />    Si TRISB (puerto B) es igual a 32 (00110010), entonces esto se leería,   <br />TRISA ASIGNACIÓN ESTADO RA00SALIDARA11ENTRADA RA20SALIDARA30SALIDA RA41ENTRADA RA51ENTRADA RA60SALIDA RA70SALIDA <br />    NOTA: Todos los valores mencionados y que se mencionarán, están expresados en valores hexagesimales. <br />            En la siguiente parte, comenzaremos a programar el PIC y sabremos como ingresar estos valores en el TRIS A o TRIS B según sea el caso. <br />Tutorial Microcontrolador PIC.<br />Segunda parte.<br /> <br />         Para comenzar a trabajar con el programa MPLAB debemos simplemente abrir un nuevo archivo en la ventana File opción New como muestra la imagen 1. <br />                Nota: El MPlab es un programa, no es inteligente y no sabe que hacer por si solo. Es mas, les debemos dar las ordenes una a una y muy bien explicadas para que este las entienda. Estas ordenes estarán acompañadas por parámetros que le dirán a la máquina como se realizará esa tarea. De otra manera, esta no se ejecutará. <br />Fig. 1. Iniciando un nuevo programa.<br />        A continuación analizaremos las siguientes líneas:   list    p=16f84  #include     p16f84.inc <br />port_a         equ     5 port_b         equ     6 trisb             equ     86 trisa             equ     85 estado         equ     3 <br />valor1         equ        0C valor2        equ         0D <br /> clrf             estado  clrf             port_a  bsf             estado,5             ;selección del banco 1  movlw       0x19  movwf       port_a  clrf            port_b  movlw       0x32  movwf       port_b  bcf            estado,5            ;selecciona el banco 0  clrf            port_a  clrf            port_b <br />Antes de analizar estas líneas debemos tener en claro los siguiente: <br /> para mantener un orden, se presionar la tecla TAB entre la instrucción y el parametro <br />  <br />        El símbolo de Punto y Coma " ; " indica el comienzo de un comentario, sirve para ubicarse mejor en el avance del programa y luego encontrar mas rápidamente una línea o bloque determinado.   Todo lo que siga a un " ; " no generará código hexagesimal en nuestro proyecto.    En pocas palabras, lo que siga al " ; " no influye en el programa.<br />Primero debemos especificar con que microcontrolador estamos trabajando, en las dos primeras líneas especificamos que vamos a trabajar con el PIC 16F84. <br />Luego definimos la posición en memoria de nuestros registros, el mapa de memoria lo presento en la figura 2: <br />Figura 2: Mapa de memoria del PIC 16f84.<br /> Para comenzar destacaremos los registros: <br />PORTA           posición 05hPORTB           posición 06hTRISA             posición 85hTRISB             posición 86hSTATUS         posición 03h<br />El registro STATUS que en este caso le hemos llamado "estado" se compone de la siguiente forma:<br />  <br />76543210IRP RP1 RP0 TO PD Z DC C <br />            Si en la casilla 5 (RP0) del registro STATUS hay un CERO entonces estamos en el BANCO 0. <br />            Si en la casilla 5 (RP0) del registro STATUS hay un UNO entonces estamos en el BANCO 1.        Desde la tercera a la séptima línea definimos los nombres de nuestros registros, en el caso del Puerto A lo llamamos port_a - es importante que siempre que nos queramos referir al Puerto A lo hagamos en minúsculas, ya que aquí lo definimos así (PORT_A port_a) si en un principio se define con mayúsculas, siempre nos tendremos que referir a este con mayúsculas - <br />    Otro ejemplo, si en la tercera línea en lugar de "port_a equ 5" colocamos "hola equ 5" cada vez que queramos referirnos al Puerto A debemos hacerlo como "hola". <br />        En la octava y novena línea, definimos nuestro registros personales, los que vamos a ocupar en nuetro programa, según el mapa de memoria este comienza en la posición 0Ch. <br />    NOTA: Recuerden que todos los valores mencionados y que se mencionarán, están expresados en valores hexagesimales. <br />            El siguiente paso es definir los pines de entrada y salida, recordemos el último bloque de nuestro programa: <br />clrf             estado                ; limpiar el registro estado clrf             port_a                ; limpiar el puerto a bsf             estado,5             ; selección del banco 1<br />Nota: La instrucción BSF (Bit Set f) carga un 1 en el registro (en este caso el registro estado) en el bit (en este caso el 5), como vimos anteriormente el registro estado al tener un 1 en el 5to bit, entonces estamos trabajando en el banco 1, esto para poder definir los pines de entrada o salida del micro. <br />movlw       0x19                   ;cargo un 11001 en el acumulador movwf       port_a                ; muevo el contenido del acumulador                                            ;al puerto a, defino los pines 0, 1 y 4                                            ;como entrada y 2 y 3 como salida<br />Nota: El método para definir los pines del puerto b es exactamente el mismo <br />clrf            port_b                ;limpiar el puerto b movlw       0x32                  ;cargo un 00110010 al acumulador movwf       port_b               ;defino los pines 1, 4 y 5 como entrada y                                            ;los 0, 2, 3, 6 y 7 como salida bcf            estado,5             ;selecciona el banco 0 clrf            port_a                ; limpiar el puerto a clrf            port_b               ;limpiar el puerto b<br />             En la siguiente parte, haremos un pequeño programa demostrativo y veremos cómo detectar errores y simularlo.<br />Tutorial Microcontrolador PIC.<br />Tercera parte.<br />       En la parte anterior vimos como inicializar un PIC, ahora, usando esa información haremos un pequeño programa el cual solo encenderá un LED según el interruptor que se presione. <br />        Lo primero es visualizar lo que queremos,  (ordenar nuestro pines de entrada y salida por ejemplo) y según eso empezar a trabajar. <br />Figura 3: Circuito a implementar.<br />Según el circuito anterior, vemos que el puerto A lo usaremos como entrada y el puerto B como salida, a los cuales hemos conectado LED'S para poder ver los resultados. <br />El puerto A está conectado directamente a la alimentación con lo cual sabemos que normalmente tiene una entrada de +5 V ( 1 lógico) y al activarse el interruptor tendremos un 0 lógico. <br />Nota: Es muy importante que todos los pines de entrada queden bien definidos si están en un nivel alto o bajo por que de lo contrario el PIC entrará en un estado de incertidumbre y no trabajará de manera correcta.   Los pines de salida, no es necesario que se conecten si no los vamos a usar.   <br />Comenzando con el programa.<br />Como vimos anteriormente, para abrir una nueva ventana de programación pinchamos en la ventana FILE y le damos a la opción NEW, luego debemos inicializar nuestro PIC, en este caso será:   <br />; ****************************************   ; *   Ejemplo tutorial PIC                                     *    ; *  Este programa enciende un led dependiendo *    ; *  de que interruptor sea activado                      *    ; ****************************************         list                   p=16f84         #include p16f84.incport_a               equ 5    port_b              equ 6    trisb                  equ 86    trisa                  equ 85    retard               equ 11              ;RETARDO    estado              equ 3     clrf                  estado     clrf                  port_a     bsf                  estado,5             ;selección del banco 1     movlw             0x1f     movwf             port_a               ;define RA0 como entrada     clrf                  port_b     movlw             0x00     movwf            port_b               ;define puerto B como salida     bcf                  estado,5     clrf                  port_a     clrf                  port_b     <br />  Luego podemos hacer que vaya preguntando a cada pin de entrada, recordemos que según nuestro circuito los pines están normalmente en un nivel alto, y en nuestro caso si este esta en un nivel alto hacemos que testee el siguiente, de lo contrario lo mandamos a un subrutina donde encendemos el LED correspondiente. <br />Para esto usamos la instrucción btfss (Bit Test F, Skip if Set), es decir, testea el bit f y salta (skip) si esta en un nivel alto (set), el salto se refiere a que la siguiente instrucción no la considera y salta hasta la subsiguiente. <br />Al empezar un programa, marcamos el inicio de un bloque, en este caso lo llamaremos "inicio". <br />  inicio   btfss     port_a,0 ;si el bit 0 del puerto a esta en nivel alto se salta una instrucción                call        enci0                call        retardo                btfss     port_a,1 ;si el bit 1 del puerto a esta en nivel alto se salta una instrucción                call        enci1                call        retardo                btfss     port_a,2 ;si el bit 2 del puerto a esta en nivel alto se salta una instrucción                call        enci2                call        retardo                btfss      port_a,3 ;si el bit 3 del puerto a esta en nivel alto se salta una instrucción                call        enci3                call        retardo                btfss      port_a,4 ;si el bit 4 del puerto a esta en nivel alto se salta una instrucción                call        enci4                call        retardo                goto      inicio<br />En la primera línea, como dice el comentario adjunto, testea el bit 0 del puerto a, si este esta en un nivel alto entonces el programa se salta una instrucción llegando a la instrucción call (llamar) la cual llama  a una subrrutina llamada retardo, de lo contrario, si está en un nivel bajo el programa considera la siguiente instrucción y ejecuta la instrucción call    enci0, en la cual se activa el pin 0 del puerto b que es el puerto se salida.  El resto del programa:<br />enci0    movlw    0x00                movwf    port_b                call         retar2                movlw    B'01'                movwf    port_b                return    enci1    movlw     0x00                movwf    port_b                call         retar2                movlw    B'10'                movwf    port_b                return    enci2    movlw    0x00                movwf   port_b                call         retar2                movlw   B'100'                movwf   port_b                return    enci3    movlw     0x00                movwf    port_b                call         retar2                movlw    B'1000'                movwf   port_b                return    enci4    movlw   0x00                movwf   port_b                call         retar2                movlw    B'10000'                movwf    port_b                return   retardo movlw    0x96                movwf    retard    reta3   decfsz      retard,1                goto       reta3                return     endEn la primera línea lo que hacemos es cargar un cero en el acumulador: movlw 0x00 (MOVe Literal to W) y luego la información que tiene el acumulador (W) la movemos la puerto b: movwf port_b (MOVe W to F), con esto nos aseguramos que todos los LED's del puerto b están apagados.En la tercera línea llamamos un retardo, lo cual siempre es bueno hacer para evitar que el pic colapse, este retardo esta casi al final del programa y el mecanismo de trabajo es muy parecido al anterior:<br />Mover el literal 96 (Hexadecimal) en el acumulador,  es cargar un 96 en el acumulador. <br />Mover el contenido del acumulador al registro retard, el cual fue definido al comienzo de programa y ubicado en la posición 11 en la memoria del pic, ahora el registro retard tiene cargado un 96. <br />Decrementar en una unidad el registro retard y el valor resultante se guarda en el mismo registro y cuando el valor de este sea cero, saltar una línea en el programa, con lo cual caerá en la instrucción return con lo cual vuelve a la posición desde donde se llamo a la subrutina.   decfsz      f,d (DECrement F, Skip if Zero) (decrementa el registro indicado y salta si es cero) si el valor de "d" es cero entonces el resultado se guarda en el acumulador, si este valor en cambio es uno entonces el valor se almacena en el mismo registro. <br />Luego va al bloque de nombre "reta 3" con lo cual se volverá a decrementar el registro, esto lo hará durante 96 veces hexadecimales, es decir, 150 veces.  <br />Al volver a la  4ta línea de este bloque movlw  B'01' hacemos algo muy parecido al paso anterior, sólo que ahora cargo un 1 binario en el acumulador y luego movemos esta información al puerto b, con lo cual tendremos en la salida del puerto b un 00001 considerando que se cuenta desde RB4 hasta RB0 por lo tanto se enciende el LED correspondiente al pin 0 del puerto b.<br />        De esto deducimos que si queremos encender por ejemplo el pin 3 del puerto b, debemos cargar el acumulador con un B'1000' para luego pasar esta información al puerto b. <br />        Otra alternativa seria: movlw   0x08 ya que 08h = 1000b. <br />Finalmente debemos guardar este programa, para esto pinchamos en la opcion File y luego en Save As y elegimos el directorio y un nombre, en este caso le pondremos ejemplo.asm <br />                                                              Figura 4 <br />        En la siguiente parte veremos como compilar este programa y detectar los errores de programación.   <br />Tutorial Microcontrolador PIC.<br />Cuarta parte.<br />En la parte anterior hicimos un programa el cual prende un LED según el interruptor que se activa.  Ahora vamos a compilar este programa en lengua hexa el que finalmente cargaremos en el PIC. <br />Lo primero es pinchar en el menú en la opción project y luego en new project, como indica la img: <br /> El siguiente paso es darle un nombre al proyecto, se recomienda darle el mismo nombre que al archivo en assembler, en este caso ejemplo.pjt. <br />Una vez echo esto, aparece la siguiente ventana: <br />En la parte de abajo, donde dice Project Files pinchamos la opción ejemplo [.hex] al hacer esto se activa la opción Node Properties que esta abajo a la derecha, debemos pinchar esta y se abre la siguiente ventana: <br />  En esta sección, debemos dejar las cosas por defecto (es lo mejor) y simplemente pinchar en OK. Luego volveremos a la ventana anterior solo que ahora se activó la opción Add Node algunas>opciones mas arriba de la ultima que pinchamos, por supuesto elegimos esta y>abre <br />Pinchamos en la opción Browse que esta a la derecha y buscamos en el directorio el programa original, en este caso ejemplo.asm y luego en OK, con esto estamos relacionando un archivo de assembler con el proyecto en hexa. Y finalmente volvemos a la primera pantalla y le damos al OK que esta en la parte superior. A continuación debemos verificar que no haya errores para eso vamos nuevamente a la opción project y veremos que hay nuevas opción que antes no estaban disponibles, elegimos Build All, y si todo esta correcto aparecerá una pantalla como esta: <br />Donde en la parte final podemos leer: Build completed successfully. <br />En caso de haber algún error, podemos hacer doble clic en el mensaje de error y este nos enviará directamente a esta línea. <br />5. EVIDENCIAS Y EVALUACION<br />EVIDENCIA:Tipo de Evidencia:DesempeñoxConocimientoxProductoxResultados de aprendizaje asociados a la evidencia:FECHA:____________________________________, INSTRUCTOR: MAURICIO DIAZ GARCIAMATERIAL DE CONSULTA: http://micropic.galeon.com http://www.ithinkweb.com.mx/capacita/algoritmo.htmlhttp://www.ate.uniovi.es/fernando/Doc2006/Sed_06/Presentaciones/Programacion%20en%20ensamblador.pdfPIC 16F84A COMO INTERRUPTORESQUEMA DEL CIRCUITO APRENDICES: GRUPO _______________________________________________________________________________________________________________________________________________________________________MATERIALES:HERRAMIENTAS:DESCRIPCION FUNCIONAL DEL CIRCUITO:PSEUDOCODIGODIAGRAMA DE FLUJOCODIGO FUENTEDescripción:Programación de un MicrocontroladorProducto entregable:Circuito funcional, Pseudocódigo, Diagrama de flujo y Código fuenteForma de entrega:Formato informe indicado.Criterios de Evaluación:• Esquematiza e implementa a su alcance el problema planteado.• Recopila la información de acuerdo a la solución adoptada del automatismo requerido como análisis de componentes: mecánicos, eléctricos, de control, proveedores y costos.• Presenta alternativas de solución que respondan en su totalidad con cada una de lasfunciones del automatismo• Valora alternativas económicas del estudio preliminar de acuerdo a la solución adoptada• Define detalladamente la estructura del automatismo de acuerdo a la metodología establecida.• Selecciona los sensores, actuadores y controladores requeridos para la solución del problema.• Aplica normas de seguridad vigentes para la alternativa de solución. Instrumento de Evaluación:TipoCódigoCuestionarioxLista ChequeoxLista de VerificaciónOtro:<br />

×