USO PRACTICO DEL PIC12F675 (II) - PICKEY ELECTRÓNICA

Vaya al Contenido

Menu Principal:

USO PRACTICO DEL PIC12F675 (II)

Uso practico del Pic12F675 (II)


PROYECTO: Minientrenadora MnEBasic.


Seguidamente podremos construir y practicar con una minientrenadora de muy bajo coste, basada en el PIC12F675 o similares. Será una excelente herramienta, para comenzar a experimentar con estas pequeñas maravillas de la técnica moderna.

.Descripción del circuito:

En el capitulo anterior pudimos ver una utilidad practica para el PIC12F675 y, en este otro circuito podremos hacer prácticas con una mini-entrenadora de reducidas dimensiones y de muy bajo coste, pero esto no restara interés a sus posibilidades. Con ella podemos practicar sobre I/O, ADC, RS232, PWM, servomotores, etc.

La placa está compuesta de varios puertos de entrada salida: El CN2 que nos permite descargar nuestros programas al micro directamente, sin necesidad de extraerlo de su zócalo (ICSP, In Circuit Serial Programming), esto nos aportara comodidad y un gran ahorro de tiempo. Por otro lado tenemos que podemos conectar un servomotor Futaba S3003 en CN1 y, de esta forma aprenderemos a controlarlo por modulación de ancho de pulso PWM (pulse-width modulation en inglés), también se puede añadir sensores, como por ejemplo de temperatura el popular LM35, entre otros dispositivos. El puerto serie RS232 trabaja en modo Tx, de esta forma se puede enviar información serial al PC; que nos facilita la tarea de depurado del programa u otros usos, como puede ser enviar datos que podran ser procesados por nuestro ordenador y convertidos en una grafica de temperatura. La entrenadora tiene incorporado un diodo led que junto con la tecla miniatura alojada en la placa, nos permitirá hacer practicas con el modulo de entradas y salidas digitales (I/O) del Pic. Tambien contiene una resistencia ajustable que permite interactuar con el convertidor analógico digital, este es un modulo interno del PIC y lo llamaremos ADC (analogic to digital converter).

.Fundamentos, breve introducción antes de continuar:

Memoria:
Antes de seguir haremos un pequeño recordatorio a la memoria de programa (flash) del PIC, este PIC tiene una capacidad de flash de 1024 posiciones con una longitud cada una de 14Bit, cada posición de memoria podra contener una instrucción completa en código máquina, y esta instrucción necesita cuatro ciclos de reloj para poder ser procesada, exceptuando la de salto que necesita el doble. Pasando esto a números obtenemos lo siguiente: OSC/4, siendo OSC la velocidad del oscilador principal en este caso el interno trabajando a 4Mhz, 4.000.000Hz/4=1.000.000Hz y, pasando a tiempo la frecuencia obtenida nos queda que : 1/1.000.000Hz=0.000001Seg. = 1uSeg. Y esto significa que nuestro microcontrolador ejecutara 1 instrucción maquina por cada uSeg. Para terminar con la memoria indicaremos que el Pic12F675 es un microprocesador de 8bit, porque generalmente se clasifican según la longitud de dato que maneja su juego de instrucciones maquina.

Lenguajes de programación:

Para que nuestro hardware basado en el PIC12F675 pueda hacer alguna función predefinida por nosotros, tendremos que utilizar un lenguaje de programación en el que confeccionaremos una lista de instrucciones. La lista indica paso por paso al procesador interno de nuestro Pic lo que tiene que hacer en cada momento. Posteriormente después de someterla a un proceso de compilado (traducida al lenguaje del microcontrolador), la volcaremos en su memoria flash quedando residente en ella incluso después de desconectar la alimentación a nuestro circuito, en este caso nuestra placa entrenadora. Así que generalizando dividiremos los lenguajes de programación en dos grupos:

Lenguajes de bajo nivel
o código maquina llamado "Assembler" (assembly language), que es el lenguaje natural del microcontrolador, es el lenguaje más rápido y los programas ocupan menos memoria. La opinión general le considera el más difícil de aprender. Con el tiempo se crean bloques de rutinas especializadas para insertar en los programas y, facilitar el trabajo. El tiempo de programación y depuración a ciertas longitudes de programa lo hacen solo factible para verdaderos expertos en el. Como opinión personal recomiendo que todo aquel que este interesado en el desarrollo de hardware basado en microcontroladores, lo estudie, sino a nivel experto, si por lo menos a nivel básico, esto implica comprender el modo de funcionamiento del micro y sus módulos internos, de una forma muy eficaz y que luego se podrá reflejar en nuestros diseños.

Lenguaje de alto nivel
, que al contrario del lenguaje assembler, se aleja del lenguaje nativo del procesador y se acerca más al nuestro, así que cuanto más se parece su sintaxis al lenguaje humano de más alto nivel es. En general el lenguaje aceptado por los programadores para los microcontroladores es el "C", es un lenguaje cuyo compilador genera un código rápido y compacto, tiene librerías prácticamente para cualquier aplicación, y su código es transportable de un microcontrolador a otro con muy pocas modificaciones, en una segunda etapa de esta web se verá con detalle. Su estructura puede crear alguna dificultad al principio. Es aceptado por la mayoría de los programadores para uso profesional, también hay otros lenguajes no menos importantes. Y por ultimo llegamos al siempre polémico lenguaje Basic, aunque La mayoría de los modernos lenguajes Basic (hay muchos dialectos) no tienen nada que ver con sus antiguas versiones de apenas media década, ha quedado clasificado como lenguaje de segundo orden. La característica principal del lenguaje Basic es que tiene una sintaxis muy similar a la nuestra, por lo que es rápido de aprender y de depurar su código, esta relativa ventaja se paga con unos programas algo más lentos y de algo más de longitud al ser compilados.

En este caso se usará el Basic del PIC Simulator IDE que nombrare como Basic PSI, el PSI es un entorno de trabajo que nos permite trabajar tanto en Basic como Assembler, y además contiene una serie de herramientas y componentes permitiendo simular la mayoría de los programas generados con sus dos lenguajes, también permite simular cualquier archivo .hex generado con un compilador de otro lenguaje. Una característica que lo hace interesante es que genera un código bastante compacto para ser lenguaje Basic, por lo que permite trabajar con cierta libertad con micros de menos de 1024 Word de memoria de programa. Todos los códigos para los proyectos de esta primera etapa de la web han sido compilados con el, corriendo correctamente el código tanto a corto como largo plazo, por ultimo, la más importante en este caso para el carácter didáctico de la Web, tiene un carácter universal que lo hace comprensible por aficionados y profesionales no importando el lenguaje usado habitualmente, por lo que se puede trasladar el concepto a cualquier otro lenguaje.

Programadores:

Para poder continuar necesitamos unos conocimientos básicos sobre programadores de PIC, porque necesitamos de hacernos de uno de ellos, para poder volcar nuestros programas desde el PC a nuestra placa entrenadora. El programador o también conocido como "quemador", está compuesto generalmente de dos partes, de un hardware que contiene la circuiteria necesaria para poder conectarse a nuestro PIC y poder transferir nuestro programa a el, el "hard" del programador se complementa con un software que se ejecuta en nuestro ordenador, este software, nos transfiere el archivo (.hex) generado por el compilador de nuestro lenguaje respetando un protocolo determinado, este archivo pasa por el "hard" del programador que lo convierte a señales comprensibles por nuestro PIC.
Así que para transferir el programa tenemos que conectar el programador físicamente al PIC, esto se puede hacer de varias formas, ya sea que el programador tenga un zócalo en su circuito impreso para poder insertar el PIC, hasta ser programado y vuelto a colocar en nuestro circuito, o por ejemplo, como la entrenadora que tratamos en este capitulo, en el que conectamos el programador mediante un cable de cinta plana con unos conectores a ella, y de esta manera no tenemos que extraer el micro de nuestra placa. El "soft" del programador tiene que ser configurado como mínimo para indicarle que modelo de PIC estamos utilizando. Hay muchos programadores completos de uso libre que circulan por la red,  por lo que no suele ser un grave problema de fabricar o comprar alguno.
Por comodidad utilizo una versión adaptada por mí de uno de los varios que se pueden obtener en la pagina del PSI (www.oshonsoft.com)
. Desde el software del programador puedo activar o desactivar la alimentación del micro de la entrenadora así como enviarle un Reset. Por supuesto, hay que tener en cuenta, que hay muchos tipos de programadores, ya estén integrados en la misma placa de nuestro proyecto o ya sean programadores de un nivel mas profesional, que suelen llevar un gran numero de funciones porque están gobernados por un microcontrolador ellos mismos, de todas formas a saber que, ya usemos un tipo u otro ambos nos programaran nuestro PIC.
Nuestra placa entrenadora se conecta al "hard" de nuestro programador mediante 5 hilos, dicha conexión se realiza mediante CN2 que corresponde: Vdd (5Vdc) esta tensión de alimentación la controla el programador, y para esto cambiaremos de posición JP2 (uniones 2 y 3) en la placa, tenemos Vss que corresponde a GND del circuito, Data por donde se transfieren los datos al PIC, Clock que sincroniza la información que fluye entre programador y PIC, por ultimo Vpp que es de un relativo alto voltaje (en este caso superior a 13V, en otros programadores puede ser inferior, a partir de 11V) que le indica a nuestro micro que entre en modo programación, y siendo controlándola por nosotros desde el PC provoca un bloqueo del PIC y Reset.



< Recreación 3D de un programador



MiniEntrenadora terminada >

.Descripción general del circuito:
Comenzado con la descripción del circuito desde la fuente de alimentación; que esta compuesta por un jack de alimentación para circuito impreso J1, por donde entra la alimentación de 9Vdc a nuestro circuito, pasando en serie por el puente JP1 y D1, JP1 hace de interruptor y D1 nos protege de una posible inversión de polaridad de la misma, los condensadores C2 y C3 ayudan al filtrado de la alimentación, R8 es la resistencia limitadora del LED1  de color verde 3mm trabajando como testigo de la alimentación, seguidamente pasamos al popular estabilizador lineal de 1Amp, LM7805CV (U2) que nos reduce y estabiliza la tensión de entrada a 5Vdc; estando su salida filtrada por C4 y C5, además, C5 igual que C3 ayuda a la demanda de corriente instantánea de nuestra placa. El resto de componentes van asociados directamente al microcontrolador PIC12F675, siendo D1 la protección contra inversión de polaridad proveniente del conector CN2, que es el encargado de dar conexión a nuestro micro con el programador, JP2 permite seleccionar si la alimentación de nuestro circuito será suministrado por el programador o por la fuente interna de nuestra placa, la R3 y R2 polarizan las líneas de Datos y Clock del PIC, podrían eliminarse del esquema, siempre y cuando programásemos como salidas sus respectivos pin del micro en nuestros programas, sin embargo R1 no puede ser eliminada del circuito porque el pin del Pic asociado a Vpp, no puede ser programado como salida digital, y con este pin, estamos obligados a aplicar la norma de no dejar sin conexión o al aire ninguna entrada CMOS. C1 es el condensador de desacople de la alimentación del PIC. Para trabajar con el ADC usaremos el RAJ2 que permite variar la tensión en el pin asociado, mediante R11, R4 y C7 constituimos un circuito atenuador de las pequeñas variaciones de resistencia inherentes a la película de carbón de RAJ2. Hay que tener en cuenta que, otra función importante de R4 y R11 es la de proteger al micro, en el caso que olvidemos de configurar este pin (GP4) como entrada, porque si lo configuramos como salida esta tendrá que estar en uno de los dos estados posibles, en estado alto (+5V) o bajo (0V) y, teniendo en cuenta que el cursor de RAJ2 puede llegar también a estar en uno de estos dos estados, dándose la coincidencia de que el cursor quedara en un estado contrario, se produce una lucha de niveles entre RAJ2 y el Pic, llegando con toda seguridad al deterioro de uno de los dos componentes; R11 y R4 se encargan de impedir el problema descrito y R11 especialmente impide que se descarge el condensador C7 de forma peligrosa por el mismo pin. S1 es una tecla miniatura para soldar directamente en circuito impreso, que tiene enseriada su maniobra con R10 y que esta a su vez comparte pin con R11, R4 y C7, en este caso la función de R10 es similar a la de R11 y R4 tanto para atenuar la lucha de niveles entre GP4 (en caso de ser programada como salida en estado alto y al mismo tiempo S1 estando pulsada) y, además, otra función añadida, la de atenuar la descarga de C7 a través de S1. Otra utilidad de RAJ2 es la de polarizar a estado alto el micropulsador S1, llevando su cursor a positivo para que de esta forma al ser pulsado, S1 pueda variar el estado del pin del micro a travez de la ya conocida R10, en este caso concreto este pin tiene que estar programado como entrada. Pasando a otra parte del circuito tenemos R9, que es la resistencia limitadora del LED2 de color rojo 3mm al que podremos encender o apagar a voluntad en nuestros experimentos (JP3 desconecta el led del circuito), el pin que lo controla esta compartido con CN1 donde podremos conectar directamente un servomotor Futaba 3003 entre otros dispositivos, C6 nos permitirá atender las demandas instantáneas de corriente del servomotor. Pasando finalmente a la descripción de nuestro adaptador optoacoplado de señal TTL a niveles de RS232 funcionando solo como Tx, R5 es la resistencia limitadora del led interno de U3, que mediante GP5 controla el transistor también interno a U3, encargado de acoplar Pic y puerto serie RS232 de nuestro ordenador, R7 suministra el estado alto RS232 desde el mismo puerto serie (DTR) del ordenador y, R6 suministra el estado bajo RS232 desde GND_RS del ordenador, quedando el puerto total mente aislado de nuestro circuito.

.Montaje de la placa:

En general no soy partidario de seguir ninguna regla en particular, porque esto varia según la experiencia del usuario y herramientas disponibles, pero recomiendo comenzar una vez terminado el taladrado de la placa, con la inserción de los puentes que sustituyen a las pistas de la cara superior. Posteriormente revisar la integridad de todas las pistas del circuito con un polímetro configurado en modo conductividad. Seguidamente comenzar con inserción y soldado de componentes, en primer lugar todos los pequeños componentes por familias como son resistencias, diodos, led, etc, pasando a los condensadores de pequeño tamaño, transistores, jumper, zócalos, y terminado por los componentes de gran tamaño como pueden ser condensadores electrolitos, conectores, etc; ojo con la polaridad de algunos componentes
. El poner unos buenos separadores suficientemente largos a ambos lados de la placa facilita mucho el montaje de nuestro circuito. Como paso final antes de colocar los circuitos integrados exceptuando el de alimentación U2, conectamos alimentación al circuito y verificamos que las tensión 5V llega correctamente a los correspondientes pin de alimentación de los zócalos y conectores, sin olvidar comprobar que la tensión en el pin GP4 varia según movemos el cursor de RAJ2, una vez terminada esta prueba dejaremos ajustada la resistencia para que se pueda leer el valor más próximo a la tensión de alineación (+5Vdc), acto seguido pulsando S1 comprobando que dicho pin cambia de estado lógico. Una costumbre que da un toque especial a nuestro circuito es dar la misma orientación a todos los componentes siempre que se pueda, como son resistencias y componentes con leyendas en general.

 
Copyright 2016. All rights reserved.
Regreso al contenido | Regreso al menu principal