martes, 4 de agosto de 2015

Practica 2: Encender Leds en secuencia

Muy bien ahora esta semana aprenderemos a encender y apagar Leds en secuencia, para lo cual continuaremos usando el PIC16F84A.

Materiales

Software Proteus 7 o superior
Software PIC C Compiler
Software WinPic800_V3_64 o Superior 
Grabador para PIC

--------------------------------------------
PIC16F84A de Microchips
2 resistencias de 10 Kohm
2 condensadores ceramicos de 27 pF
1 Cristal XT de 4.000 MHz
1 boton Pulsador
--------------------------------------------
1 Diodos led blancos o amarillos o del color q prefieran
las resistencias son de 1/2
1 resistencias de 220 Ohm o 1 resistencias de 180 Ohm

--------------------------------------------
Fuente de Poder DC de 0 a 20 V


debemos hacer es el algoritmo o pseudocodigo de nuestro ejemplo

Esto indicaría que en un lenguaje común sepamos que queremos que haga el PIC:

  1. Llamar al PIC16F84A
  2. Para el pin B0 encender LED
  3. esperar 200 ms
  4. Para el pin B1 encender LED
  5. esperar 200 ms
  6. Para el pin B2 encender LED
  7. esperar 200 ms
  8. Para el pin B3 encender LED
  9. esperar 200 ms
  10. Para el pin B4 encender LED
  11. esperar 200 ms
  12. Para el pin B0 apagar el LED
  13. esperar 200 ms
  14. Para el pin B1 apagar el LED
  15. esperar 200 ms
  16. Para el pin B2 apagar el LED
  17. esperar 200 ms
  18. Para el pin B3 apagar el LED
  19. esperar 200 ms
  20. Para el pin B4 apagar el LED
  21. esperar 200 ms
  22. Repetir todo desde la orden 2.


Ahora lo llevamos a Lenguaje C. para lo cual lo haremos de forma simple, aunque existen ordenes que simplificarían el programa, las cuales veremos mas adelante.


1: #include < 16F84A . h >
2: #use delay ( clock = 4000000 )
3: #fuses XT , NOWDT
4: #use standard_io ( B )
5:
6: void main ( void )
7:
8:
9: {
10: Do {
11:
12: OUTPUT_HIGH ( PIN_B0 );
13: delay_ms ( 200 );
14:
15: OUTPUT_HIGH ( PIN_B1 );
16: delay_ms ( 200 );
17:
18: OUTPUT_HIGH ( PIN_B2 );
19: delay_ms ( 200 );
20:
21: OUTPUT_HIGH ( PIN_B3 );
22: delay_ms ( 200 );
23:
24: OUTPUT_HIGH ( PIN_B4 );
25: delay_ms ( 200 );
26:
27: OUTPUT_LOW ( PIN_B0 );
28: delay_ms ( 200 );
29:
30: OUTPUT_LOW ( PIN_B1 );
31: delay_ms ( 200 );
32:
33: OUTPUT_LOW ( PIN_B2 );
34: delay_ms ( 200 );
35:
36: OUTPUT_LOW ( PIN_B3 );
37: delay_ms ( 200 );
38:
39: OUTPUT_LOW ( PIN_B4 );
40: delay_ms ( 200 );
41:
42: }
43:
44: WHILE ( TRUE );
45:
46: }

Ahora esta listo para ser probado


Compilamos el programa y verificamos que no haya errores




Ahora cargamos el programa en proteus y listo


ahora armamos el circuito en un protoboard y probamos si funciona


En el vídeo uso el PIC16F877A y en el programa solo se hace el cambio en la linea 1 por 1: #include < 16F877A . h > con un retraso de 2 s osea delay_ms(2000) encendiendo y apagando cada led en orden asi:

12: OUTPUT_HIGH ( PIN_B0 );
13: delay_ms ( 2000 );
14: OUTPUT_LOW ( PIN_B0 );
15: delay_ms ( 2000 );
16: OUTPUT_HIGH ( PIN_B1 );
17: delay_ms ( 2000 );
18: OUTPUT_LOW ( PIN_B1 );
19: delay_ms ( 2000 );

Espero le haya servido este ejemplo, la próxima semana continuamos con encender leds usando pulsadores.


lunes, 20 de julio de 2015

Practica 1: Encender y apagar un LED

Ahora les mostrare de manera sencilla como hacer un programa en C y simularlo en proteus de encender y apagar un led, luego montaremos el circuito en un protoboard y veremos si funciona.

Materiales

Software Proteus 7 o superior
Software PIC C Compiler
Software WinPic800_V3_64 o Superior
--------------------------------------------
PIC16F84A de Microchips
2 resistencias de 10 Kohm
2 condensadores ceramicos de 27 pF
1 Cristal XT de 4.000 MHz
1 boton Pulsador
--------------------------------------------
1 Diodos led blancos o amarillos o del color q prefieran
las resistencias son de 1/2
1 resistencias de 220 Ohm o 1 resistencias de 180 Ohm

--------------------------------------------
Fuente de Poder DC de 0 a 20 V

Lo primero que debemos hacer es el algoritmo de nuestro ejemplo

Esto indicaría que en un lenguaje comun sepamos que queremos que haga el PIC:

1. Llamar al PIC16F84A
2. Para el pin B0 encender LED
3. esperar 200 ms
4. Para el pin B0 apagar el LED
5. esperar 200 ms
6. Repetir todo desde la orden 2.


Ahora lo llevamos a Lenguaje C.


1                       #include <16F84A.h> // Llama al PIC y carga su librería
2                       #use delay(clock=4000000) // Define la velocidad de reloj de 4Mhz
3                       #fuses XT, NOWDT // Define el tipo Reloj(Cristal XT) y desactivo al perro                                                  guardián
4                       #use standard_io (B) // activo como entrada y salidas al puerto B
5                        
6                       void main (void) // Inicia el Programa
7                        
8                        
9                        {
10                   Do {                                          // Inicia un Bucle
11                   OUTPUT_HIGH(PIN_B0);      // Activo una salida al Puerto B0 (5V)
12                   delay_ms(200);                          // Espera 200ms
13                    
14                   OUTPUT_LOW(PIN_B0); // Desactivo la Salida del Puerto B0 (0V)
15                   delay_ms(200);                       // Espera 200ms
16                  
17                    
18                   WHILE(TRUE);                 // Reinicia desde la orden 10.
19                    

20                   }


Armamos  el circuito en Proteus y cargamos el programa y simulamos






y Listo ahora  quedara asi




   



viernes, 17 de julio de 2015

Montaje Electrónico del PIC


Esto comienza a ponerse interesante, no crees...?, ok sigamos... Como estos dispositivos son de tecnología CMOS, todos los pines deben estar conectados a alguna parte, nunca dejarlos al aire porque se puede dañar el integrado. Los pines que no se estén usando se deben conectar a la fuente de alimentación de +5V, como se muestra en la siguiente figura...


Capacidad de corriente en los puertos
La máxima capacidad de corriente de cada uno de los pines de los puertos en modo sumidero (sink) es de 25 mA y en modo fuente (source) es de 20 mA. La máxima capacidad de corriente total de los puertos es:
PUERTO APUERTO B
Modo Sumidero80 mA150 mA
Modo Fuente50 mA100 mA


Así se vería la conexión para ambos modos de funcionamiento.



Es un circuito externo que le indica al micro 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 P1C16C84/F84 puede utilizar cuatro tipos de reloj diferentes. Estos tipos son:
  • RC. Oscilador con resistencia y condensador.
  • XT. Cristal.
  • HS. Cristal de alta velocidad.
  • 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" ofuses.

Aquí utilizaremos el cristal de 4 MHz, porque garantiza mayor precisión y un buen arranque del microcontrolador. Internamente esta frecuencia es dividida por cuatro, lo que hace que la frecuencia efectiva de trabajo sea de 1 MHz, por lo que cada instrucción se ejecuta en un microsegundo. El cristal debe ir acompañado de dos condensadores y el modo de conexión es el siguiente...


Si no requieres mucha precisión en el oscilador, puedes utilizar una resistencia y un condensador, como se muestra en la figura. donde OSC2 queda libre entregando una señal cuya frecuencia es la del OSC/4.


Según las recomendaciones de Microchip R puede tomar valores entre 5k y 100k, y C superior a 20pf.

El PIC 16C84/F84 posee internamente un circuito temporizador conectado al pin de reset que funciona cuando se da alimentación al micro, se puede entonces conectar el pin de MCLR a la fuente de alimentación. Esto hace que al encender el sistema el microcontrolador quede en estado de reset por un tiempo mientras se estabilizan todas las señales del circuito (lo cual es bastante bueno, por eso siempre la usaremos...).



Este último circuito, es por si deseas tener control sobre el reset del sistema, sólo le conectas un botón y listo...

FUENTE:

http://perso.wanadoo.es/luis_ju/pic/pic02.html

martes, 14 de julio de 2015

MICROCONTROLADOR PIC

Microcontroladores de Microchip



Estos micros pertenecen a la gama media y disponen de un conjunto de 35 instrucciones, por eso lo llaman de tipo RISC (Reduced Instruction Set Computer) mas claro sería "Computador con un conjunto de Instrucciones Reducido" pocas instrucciones pero muy poderosas, otras son de tipo CISC (Complex Instruction Set Computer) es decir “Computador con un conjunto de Instrucciones Complejo”, demasiadas instrucciones, difíciles de recordar.

las funciones especiales de las que disponen los micros son:

Conversores análogo a digital (A/D) en caso de que se requiera medir señales analógicas, por ejemplo temperatura, voltaje, luminosidad, etc.

Temporizadores programables (Timer's) Si se requiere medir períodos de tiempo entre eventos, generar temporizaciones o salidas con frecuencia específica, etc.

Interfaz serial RS-232. Cuando se necesita establecer comunicación con otro microcontrolador o con un computador.

Memoria EEPROM Para desarrollar una aplicación donde los datos no se alteren a pesar de quitar la alimentación, que es un tipo de memoria ROM que se puede programar o borrar eléctricamente sin necesidad de circuitos especiales.

Salidas PWM (modulación por ancho de pulso) Para quienes requieren el control de motores DC o cargas resistivas, existen microcontroladores que pueden ofrecer varias de ellas.

Técnica llamada de "Interrupciones",   Cuando una señal externa activa una línea de interrupción, el microcontrolador deja de lado la tarea que está ejecutando, atiende dicha interrupción, y luego continúa con lo que estaba haciendo. 



Arquitectura interna del PIC


Hay dos arquitecturas conocidas; la clásica de Von Neumann, y la arquitectura Harvard, veamos como son:
Arquitectura Von Neumann Dispone de una sola memoria principal donde se almacenan datos e instrucciones de forma indistinta. A dicha memoria se accede a través de un sistema de buses único (direcciones, datos y control.


Figura 1: Arquitectura Von Neumann

Arquitectura Harvard Dispone de dos memorias independientes, una que contiene sólo instrucciones, y otra que contiene sólo datos. Ambas disponen de sus respectivos sistemas de buses de acceso y es posible realizar operaciones de acceso (lectura o escritura) simultáneamente en ambas memorias, ésta es la estructura para los PIC's. 


Figura 2: Arquitectura Harvard
PIC16F84A

Se trata de un microcontrolador de 8 bits. Es un PIC de gama baja, cuyas características podemos resumir en:
- Memoria de 1K x 14 de tipo Flash

- Memoria de datos EEPROM de 64 bytes
- 13 líneas de E/S con control individual
- Frecuencia de funcionamiento máxima de 10 Mhz.
- Cuatro fuentes de interrupción
* Activación de la patita RB0/INT
* Desbordamiento del TMR0
Cambio de estado en alguna patia RB4-RB7
* Fin de la escritura de la EEPROM de datos
Temporizador/contador TMR0 programable de 8 bits
- Perro Guardián o WatchDog

Generalmente se encuentra encapsulado en formato DIP18. A continuación puede apreciarse dicho encapsulado y una breve descripción de cada una de las patitas: imagen:





Descripción de patillas


NombreTipoDescripción
OSC1/CLKIN16IEntrada del oscilador a cristal/Entrada de la fuente de reloj externa
OSC2/CLKOUT15OSalida del oscilador a cristal. En el modo RC, es una salida con una frecuencia de ¼ OSC1
MCLR4I/PReset/Entrada del voltaje de programación.
RA017I/OPuerto A bidireccional, bit 0
RA118I/OPuerto A bidireccional, bit 1
RA21I/OPuerto A bidireccional, bit 2
RA32I/OPuerto A bidireccional, bit 3
RA4/T0CKI3I/OTambién se utiliza para la entra de reloj para el TMR0
RB0/INT6I/OPuerto B bidireccional, bit 0
Puede seleccionarse para entrada de interrupción externa
RB17I/OPuerto B bidireccional, bit 1
RB28I/OPuerto B bidireccional, bit 2
RB39I/OPuerto B bidireccional, bit 3
RB410I/OPuerto B bidireccional, bit 4
Interrupción por cambio de estado
RB511I/OPuerto B bidireccional, bit 5
Interrupción por cambio de estado
RB612I/OPuerto B bidireccional, bit 6
Interrupción por cambio de estado
RB713I/OPuerto B bidireccional, bit 7
Interrupción por cambio de estado
Vss5PTierra de referencia
Vdd14PAlimentación


PIC16F877A.

DESCRIPCIÓN DEL PIC16F877A: Este microcontrolador versátil  y económico dentro del mercado de los microcontroladores, su popularidad se debe sobre todo a la abundante información que del se encuentra en la red (proyectos, diseños, foros etc.) y a que las herramientas de software necesarios para trabajar con estos microcontroladores es proporcionada gratuitamente por su fabricante (MICROCHIP). Este microcontrolador es la parte más importante del presente proyecto.
Este microcontrolador se basa en la arquitectura Harvard en la cual el programa y los datos se pueden trabajar desde 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 de trabajo y precisión a diferencia de otros microcontroladores.

MEMORIA DEL PROGRAMA. La memoria estos microcontroladores es para el PIC16F877A(8) es de 8Kbyte de longitud (8192 líneas para código) con palabras de 14 bits, como es del tipo flash ROM se puede programar y borrar la cantidad de veces que indica la hoja de datos de este microcontrolador.
                


Terminales del Microcontrolador y sus respectivas funciones:

 

 

 

 

 

 

 

 

 





Figura 4: Diagrama del PIC16F877A

Pata 1(MCLR): Es una pata de múltiples aplicaciones, es la entrada de Reset (master clear) si está a nivel bajo y también es la habilitación de la tensión de programación cuando se está programando el dispositivo. Cuando su tensión es la de VDD el PIC funciona normalmente.

Patas  2, 3, 4, 5, 6 y 7 (RA0-RA5): Es el PORT A. Corresponden a 6 líneas bidireccionales de E/S (definidas por programación). Es capaz de entregar niveles TTL cuando la alimentación aplicada en VDD es de 5V ± 5%.

Patas 13 y 14 (OSC1/CLKIN y OSC2/CLKOUT): Corresponden a los pines de la entrada externa de reloj y salida de oscilador a cristal respectivamente.

Patas 11 12  y 31 32 (Vss y VDD): Son respectivamente las patas de masa y alimentación. La tensión de alimentación de un PIC está comprendida entre 2V y 6V aunque se recomienda no sobrepasar los 5.5V.

Patas 33, 34, 35, 36, 37, 38, 39 y 40 (RB0-RB7): Es el PORT B. Corresponden a ocho líneas bidireccionales de E/S (definidas por programación). Pueden manejar niveles TTL cuando la tensión de alimentación aplicada en VDD es de 5V ± 5%. RB0 puede programarse además como entrada de interrupciones externas INT. Los pines RB4 a RB7 pueden programarse para responder a interrupciones por cambio de estado. Las patas RB6 y RB7 se corresponden con las líneas de entrada de reloj y entrada de datos respectivamente, cuando está en modo programación del integrado.

Patas 15, 16, 17, 18, 23, 24, 25 y 26 (RC0-RC7): Es el PORT C. Corresponden a ocho líneas bidireccionales de E/S (definidas por programación). Pueden manejar niveles TTL cuando la tensión de alimentación aplicada en VDD es de 5V ± 5%.


Patas 19, 20, 21, 22, 27, 28, 29 y 30 (RD0-RD7): Es el PORT D. Corresponden a ocho líneas bidireccionales de E/S (definidas por programación). Pueden manejar niveles TTL cuando la tensión de alimentación aplicada en VDD es de 5V ± 5%. Generalmente los periféricos como LCD y KeyPAD se conectan en estas E/S.


Fuentes:
         Enrique Palacios, Fernando Remiro, Lucas J López,  “Microcontrolador PIC16F84 -  Desarrollo de Proyectos”. - AlfaOmega Grupo Editor, S.A de CV. México, 2006 - 2da Ed.  pp. xxi – xxiii , pp 1 - 2.

      José María, Angulo Usategui, Ignacio Angulo Martínez,  “Microcontroladores PIC - Diseño práctico de aplicaciones PIC16F84”,  McGraw Hill España, 2003, 3ra Ed. pp. 1  3.

        http://www.ni.com
        http://www.microchip.com/
                     http://ww1.microchip.com/downloads/en/devicedoc/39582b.pdf

              http://www.unicrom.com/Tut_PICs3.asp

              http://perso.wanadoo.es/pictob/micropic16f84.htm

              http://www.alselectro.com/images/pic1_thumb.jpg

              http://www.microcontrollerboard.com/images/PIN_DIAGRAM_PIC16F877A.jpg

   




INTRODUCCION

Conociendo las ventajas que brindan los microcontroladores (circuitos integrados programables y de control) como son sus recursos, confiabilidad, versatilidad, velocidad de trabajo, precio etc. es posible realizar diseños electrónicos, construirlos y ponerlos en marcha a un bajo precio y buena calidad.

La finalidad de este blog es poder compartir mis conocimientos en electrónica y programación en PIC en lenguaje C, para lo cual principalmente utilizaremos los PICs PIC16F84A y el PIC16F877A, en los cuales les mostrare paso a paso como diseñar circuitos y controlar diversos elementos y sensores. 

Cada semana actualizare el blog con un tema que espero sea desde su interés, de esta manera les doy la bienvenida a este facinante mundo de los PICs.