Visita mi canal de youtube

jueves, 11 de agosto de 2016

El microcontrolador PIC16F877


   El PIC16F877 es un microcontrolador con memoria de programa tipo FLASH, lo que representa gran facilidad en el desarrollo de prototipos y en su aprendizaje ya que no se requiere borrarlo con luz ultravioleta como las versiones EPROM, sino que permite reprogramarlo nuevamente sin ser borrado con anterioridad.

   El PIC16F877 es un microcontrolador de Microchip Technology fabricado en tecnología CMOS, su consumo de potencia es muy bajo y además es completamente estático, esto quiere decir que el reloj puede detenerse y los datos de la memoria no se pierden. El encapsulado más común para este microcontrolador es el DIP (Dual In-line Pin) de 40 pines, propio para usarlo en experimentación. La referencia completa es PIC16F877-04 para el dispositivo que utiliza cristal oscilador de hasta 4 MHz, PIC16F877-20 para el dispositivo que utiliza cristal oscilador de hasta 20 MHz o PIC16F877A-I para el dispositivo tipo industrial que puede trabajar hasta a 20 MHz.

 Sin embargo, hay otros tipos de encapsulado que se pueden utilizar según el diseño y la aplicación que se quiere realizar. Por ejemplo, el encapsulado tipo surface mount (montaje superficial) tiene un reducido tamaño y bajo costo, que lo hace propio para producciones en serie o para utilizarlo en lugares de espacio muy reducido.

Configuracion de pines del PIC16f877:

  Los pines de entrada/salida de este microcontrolador están organizados en cinco puertos, el puerto A con 6 líneas, el puerto B con 8 líneas, el puerto C con 8 líneas, el puerto D con 8 líneas y el puerto E con 3 líneas. Cada pin de esos puertos se puede configurar como entrada o como salida independiente programando un par de registros diseñados para tal fin. En ese registro un bit en "0" configura el pin del puerto correspondiente como salida y un bit en "1" lo configura como entrada. Dichos pines del microcontrolador también pueden cumplir otras funciones especiales, siempre y cuando se configuren para ello, según se verá más adelante.

   Los pines del puerto A y del puerto E pueden trabajar como entradas para el convertidor Análogo a Digital interno, es decir, allí se podría conectar una señal proveniente de un sensor o de un circuito analógico para que el microcontrolador la convierta en su equivalente digital y pueda realizar algún proceso de control o de
instrumentación digital. El pin RB0/INT se puede configurar por software para que funcione como interrupción externa, para configurarlo se utilizan unos bits de los registros que controlan las interrupciones.

   El pin RA4/TOCKI del puerto A puede ser configurado como un pin de entrada/salida o como entrada del temporizador/contador. Cuando este pin se programa como entrada digital,funciona como un disparador de Schmitt (Schmitt trigger), puede reconocer señales un poco distorsionadas y llevarlas a niveles lógicos (cero y cinco voltios). Cuando se usa como salida digital se comporta como colector abierto (open collector), por lo tanto, se debe poner una resistencia de pull-up (resistencia externa conectada a un nivel de cinco voltios). Como salida, la lógica es inversa: un "0" escrito al pin del puerto entrega en el pin un "1" lógico.  Además, como salida no puede manejar cargas como fuente, sólo en el modo sumidero.

  El puerto E puede controlar la conexión en modo microprocesador con otros dispositivos utilizando las líneas RD (read), WR (write) y CS (chip select). En este modo el puerto D funciona como un bus de datos de 8 bits (pines PSP).

               
   El consumo de corriente del microcontrolador para su funcionamiento depende del voltaje de operación, la frecuencia y de las cargas que tengan sus pines. Para un oscilador de 4 MHz el consumo es de aproximadamente 2 mA; aunque este se puede reducir a 40 microamperios cuando se está en el modo sleep (en este modo el micro se detiene y disminuye el consumo de potencia). Se sale de ese estado cuando se produce alguna condición especial que veremos más adelante.


Descripción de los pines del microcontrolador:


El oscilador externo
   Todo microcontrolador requiere un circuito externo que le indique la velocidad a la que debe trabajar. Este circuito, que se conoce como oscilador o reloj, es muy simple pero de vital importancia para el buen funcionamiento del sistema. El PIC16F877 puede utilizar cuatro tipos de oscilador diferentes. Estos tipos son:
• RC. Oscilador con resistencia y condensador.
• XT. Cristal (por ejemplo de 1 a 4 MHz).
• HS. Cristal de alta frecuencia (por ejemplo 10 a 20 MHz).
• LP. Cristal para baja frecuencia y bajo consumo de potencia.

    En el momento de programar o “quemar” el microcontrolador se debe especificar que tipo de oscilador se usa. Esto se hace a través de unos fusibles llamados “fusibles de configuración”.
El tipo de oscilador que se sugiere para las prácticas es el XT con un cristal de 4 MHz, porque garantiza precisión y es muy comercial. Internamente esta frecuencia es dividida por cuatro, lo que hace que la frecuencia efectiva de trabajo sea de 1 MHz en este caso, por lo que cada instrucción se ejecuta en un microsegundo. El cristal debe ir acompañado de dos condensadores


Si no se requiere mucha precisión en el oscilador y se quiere economizar dinero, se puede utilizar una resistencia y un condensador


Reset
En los microcontroladores se requiere un pin de reset para reiniciar el funcionamiento del sistema cuando sea necesario, ya sea por una falla que se presente o porque así se haya diseñado el sistema. El pin de reset en los PIC es llamado MCLR (master clear).

Existen varias formas de resetear o reiniciar el sistema:
• Al encendido (Power On Reset)
• Pulso en el pin MCLR durante operación normal
• Pulso en el pin MCLR durante el modo de bajo consumo (modo sleep)
• El rebase del conteo del circuito de vigilancia (watchdog) durante operación normal
• El rebase del conteo del circuito de vigilancia (watchdog) durante el modo de bajo consumo (sleep)
El reset al encendido se consigue gracias a dos temporizadores. El primero de ellos es el OST (Oscillator Start-Up Timer: Temporizador de encendido del oscilador), orientado a mantener el microcontrolador en reset hasta que el oscilador del cristal es estable. 

   El segundo es el PWRT (Power-Up Timer: Temporizador de encendido), que provee un retardo fijo de 72 ms (nominal) en el encendido únicamente, diseñado para mantener el dispositivo en reset mientras la fuente se estabiliza. Para utilizar estos temporizadores, sólo basta con conectar el pin MCLR a la fuente de alimentación, evitándose utilizar las tradicionales redes de resistencias externas en el pin de reset.

   El reset por MCLR se consigue llevando momentáneamente este pin a un estado lógico bajo, mientras que el watchdog WDT produce el reset cuando su temporizador rebasa la cuenta, o sea que pasa de 0FFh a 00h. Cuando se quiere tener control sobre el reset del sistema se puede conectar un botón como se muestra en la figura.



Arquitectura interna del microcontrolador:
Este término se refiere a los bloques funcionales internos que conforman el microcontrolador y la forma en que están conectados, por ejemplo la memoria FLASH (de programa), la memoria RAM (de datos), los puertos, la lógica de control que
permite que todo el conjunto funcione, etc.


   Todos los elementos se conectan entre sí por medio de buses. Un bus es un conjunto de líneas que transportan información entre dos o más módulos. Vale la pena destacar que el PIC16F877 tiene un bloque especial de memoria de datos de 256 bytes del tipo EEPROM, además de los dos bloques de memoria principales que son el de programa y el de datos o registros.

   El PIC16F877 se basa en la arquitectura Harvard, en la cual el programa y los datos se pueden trabajar con buses y memorias separadas, lo que posibilita que las instrucciones y los datos posean longitudes diferentes. Esta misma estructura es la que permite la superposición de los ciclos de búsqueda y ejecución de las instrucciones, lo cual se ve reflejado en una mayor velocidad del microcontrolador.

Memoria de programa (FLASH)
Es una memoria de 8K de longitud con datos de 14 bits en cada posición. Como es del tipo FLASH se puede programar y borrar eléctricamente, lo que facilita el desarrollo de los programas y la experimentación. En ella se graba o almacena el programa o códigos que el microcontrolador debe ejecutar. En la figura 3.8 se muestra el mapa de la memoria de programa.

  La memoria de programa está dividida en cuatro bancos o páginas de 2K cada uno. El primero va de la posición de memoria 0000h a la 07FFh, el segundo va de la 0800h a la 0FFFh, el tercero de la 1000h a la 17FFh y el cuarto de la 1800h a la 1FFFh.

Vector de reset. Cuando ocurre un reset al microcontrolador, el contador de programa se pone en ceros (0000H). Por esta razón, en la primera dirección del programa se debe escribir todo lo relacionado con la iniciación del mismo.

Vector de interrupción. Cuando el microcontrolador recibe una señal de interrupción, el contador de programa apunta a la dirección 04H de la memoria de programa, por eso, allí se debe escribir toda la programación necesaria para atender dicha interrupción.

Pila (Stack)
Estos registros no forman parte de ningún banco de memoria y no permiten el acceso por parte del usuario. Se usan para guardar el valor del contador de programa cuando se hace un llamado a una subrutina o cuando se atiende una interrupción; luego, cuando el micro regresa a seguir ejecutando su tarea normal, el contador de
programa recupera su valor leyéndolo nuevamente desde la pila. El PIC16F877 tiene una pila de 8 niveles, esto significa que se pueden anidar 8 llamados a subrutina sin tener problemas.


Memoria de datos (RAM)
   El PIC16F877 posee cuatro bancos de memoria RAM, cada banco posee 128 bytes. De estos 128 los primeros 32 (hasta el 1Fh) son registros que cumplen un propósito especial en el control del microcontrolador y en su configuración. Los 96 siguientes son registros de uso general que se pueden usar para guardar los datos temporales de la tarea que se está ejecutando.

   Todas las posiciones o registros de memoria se pueden acceder directa o indirectamente (esta última forma a través del registro selector FSR). Para seleccionar que página o banco de memoria se trabaja en un momento determinado se utilizan los bits RP0 y RP1
del registro STATUS.

Resumen de Características principales del PIC16F877:
• Memoria de programa : FLASH, 8 K de instrucciones de 14 bits c/u.
• Memoria de datos : 368 bytes RAM, 256 bytes EEPROM.
• Pila (Stack) : 8 niveles (14 bits).
• Fuentes de interrupción : 13
• Instrucciones : 35
• Encapsulado : DIP de 40 pines.
• Frecuencia oscilador : 20 MHz (máxima)
• Temporizadores/Contadores: 1 de 8 bits (Timer 0); 1 de 16 bits (Timer 1); 1 de 8 bits (Timer 2) con pre y post escalador. Un perro guardián (WDT)
• Líneas de E/S : 6 del puerto A, 8 del puerto B, 8 del puerto C, 8 del puerto D y 3 del puerto E, además de 8 entradas análogas.
• Dos módulos de Captura, Comparación y PWM:
- Captura: 16 bits. Resolución máx. = 12.5 nseg.
- Comparación: 16 bits. Resolución máx. = 200 nseg.
- PWM: Resolución máx. = 10 bits.
• Convertidor Análogo/Digital de 10 bits multicanal (8 canales de entrada).
• Puerto serial síncrono (SSP) con bus SPI (modo maestro) y bus I²C (maestro/esclavo).
• USART (Universal Synchronous Asynchronous Receiver Transmitter) con dirección de detección de 9 bits.
• Corriente máxima absorbida/suministrada (sink/source) por línea (pin): 25 mA
• Oscilador : Soporta 4 configuraciones diferentes: XT, RC, HS, LP.
• Tecnología de Fabricación: CMOS
• Voltaje de alimentación: 3.0 a 5.5 V DC
• Puede operar en modo microprocesador


0 comentarios:

Publicar un comentario