MICRONTROLADORES

Ahora un poco de electrónica:

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 A

PUERTO B

Modo Sumidero

80 mA

150 mA

Modo Fuente

50 mA

100 mA

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

El oscilador externo

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» o FUSES.

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.

Reset

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.

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

EN INTERIOR DEL PIC.

Estructura interna del Microcontrolador:

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).

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.

 

El procesador o UCP:

Es el elemento más importante del microcontrolador. Se encarga de direccionar la memoria de instrucciones, recibir el código OP de la instrucción en curso, decodificarlo y ejecutarlo, también realiza la búsqueda de los operandos y almacena el resultado.

Memoria de programa:

Esta vendría a ser la memoria de instrucciones, aquí es donde almacenaremos nuestro programa o código que el micro debe ejecutar. No hay posibilidad de utilizar memorias externas de ampliación. Son 5 los tipos de memoria. Pero sólo describiré dos:

Memorias EEPROM. (Electrical Erasable Programmable Read Only Memory – Memoria de sólo lectura Programable y borrable eléctricamente)

Común en el PIC 16C84. Ésta tarea se hace a través de un circuito grabador y bajo el control de un PC. El número de veces que puede grabarse y borrarse una memoria EEPROM es finito aproximadamente 1000 veces. Este tipo de memoria es relativamente lenta.

Memorias FLASH.

Disponible en el PIC16F84. Posee las mismas características que la EEPROM, pero ésta tiene menor consumo de energía y mayor capacidad de almacenamiento, por ello está sustituyendo a la memoria EEPROM.

La memoria de programa se divide en páginas de 2,048 posiciones. El PIC16F84A sólo tiene implementadas 1K posiciones es decir de 0000h a 03FFh y el resto no está implementado. (es aquello que se ve en gris)

Cuando ocurre un Reset, el contador de programa (PC) apunta a la dirección 0000h, y el micro se inicia nuevamente. Por esta razón , en la primera dirección del programa se debe escribir todo lo relacionado con la iniciación del mismo (por ejemplo, la configuración de los puertos).

Ahora, si ocurre una interrupción el contador de programa (PC) apunta a la dirección 0004h, entonces ahí escribiremos la programación necesaria para atender dicha interrupción.

Algo que se debe tener en cuenta es la pila o Stack, que consta de 8 posiciones (o niveles), esto es como una pila de 8 platos el último en poner es el primero en sacar, si seguimos con este ejemplo, cada plato contiene la dirección y los datos de la instrucción que se está ejecutando, así cuando se efectúa una llamada (CALL) o una interrupción, el PC sabe donde debe regresar (mediante la instrucción RETURN, RETLW o RETFIE, según el caso) para continuar con la ejecución del programa.

Recuerda, sólo 8 llamadas «CALL», ten en cuenta las «INTERRUPCIONES».

Memoria de datos:

Tiene dos zonas diferentes:

1. RAM estática ó SRAM:

donde residen los Registros Específicos (SFR) con 24 posiciones de tamaño byte, aunque dos de ellas no son operativas y los Registros de Propósito General (GPR) con 68 posiciones. La RAM del PIC16F84A se halla dividida en dos bancos (banco 0 y banco 1) de 128 bytes cada uno (7Fh)

http://r-luis.xbot.es/pic1/imagen/memdatos.gif

2. EEPROM: de 64 bytes donde, opcionalmente, se pueden almacenar datos que no se pierden al desconectar la alimentación.

EL COMIENZO.

Configuración de los puertos del PIC:

Llegó el momento de ver como configurar los puertos del PIC. Para poder hacerlo es necesario conocer la tabla de registros de la memoria de datos, la cual como dijimos, está dividida en el BANCO 0 y BANCO 1.

Los registros importantes en la configuración de los puertos son:

STATUS   dirección 0x3
PORTA    dirección 0x5
PORTB    dirección 0x6
TRISA      dirección 0x5
TRISB      dirección 0x6

Por defecto el PIC tendrá todos los I/O port’s (es decir los puertos RA y RB), colocados como entrada de datos, y si queremos cambiarlos habrá que configurarlos.

Al configurar los puertos deberás tener en cuenta que:

Si asignas un CERO (0) a un pin, éste quedará como salida y…
Si le asignas un UNO (1), quedará como entrada

Esta asignación se hace en:

TRISA para los pines del PUERTO A (5 bits)
TRISB para los pines del PUERTO B (8 bits)

Por Ejemplo:

Si TRISA es igual a 11110 todos sus pines serán entradas salvo RA0 que esta como salida

Si TRISB es igual a 00000001 todos sus pines serán salidas salvo RB0 que esta como entrada

Cuando el PIC arranca se encuentra en el BANCO 0, como TRISA y TRISB están en el BANCO 1 no queda otra, deberemos cambiar de banco. Esto se logra a través del Registro STATUS

STATUS es un Registro de 8 bits u 8 casillas, en el cual la Nº 5 (RP0) define la posición del banco en donde nos encontramos

Si pones un CERO (0) a RP0 estaremos en el BANCO 0
Si le pones un UNO (1) ya ves, estaremos en el BANCO 1

REGISTRO STATUS

7

6

5

4

3

2

1

0

IRP

RP1

RP0

TO

PD

Z

DC

C

Listo, ahora ya sabemos como configurar los puertos, pero lo aclararemos con un ejemplo completo.

Vamos a escribir un código que configure todos los pines del puerto A como entrada y todos los del puerto B como salida.

;—————Encabezado————-

                list          p=16f84                    ; usaremos el PIC 16f84

                radix      hex             ; y la numeración hexadecimal

;————mapa de memoria———

estado  equ        0x03           ; Aquí le asignamos nombres a los

trisa       equ        0x05           ; registros indicando la posición

trisb       equ        0x06           ; en la que se encuentran

;——-Configuración de puertos——-

reset     org         0x00           ; origen del programa, aquí comenzaré

                                                    ; siempre que ocurra un reset

                goto      inicio          ; salto a «inicio»

                org         0x05           ; origen del código de programa

inicio     bsf         estado,5                   ; pongo rp0 a 1 y paso al banco1

                movlw  b’11111′                    ; cargo W con 11111

                movwftrisa            ; y paso el valor a trisa

                movlw  b’00000000′    ; cargo W con 00000000

                movwftrisb            ; y paso el valor a trisb

                bcf         estado,5                   ; pongo rp0 a 0 y regreso al banco0

;——————————————

                end                            ; se acabó

;——————————————

Descripción del código:

Todo lo que escribas luego de un «;» (punto y coma) será ignorado por el ensamblador, estos son los famosos comentarios, y sirve para saber que hace cada línea de código.

Dicho esto no queda más que describir el código, así que vamos por partes.

;—————Encabezado————-

                list          p=16f84                    ; usaremos el PIC 16f84

                radix      hex             ; y la numeración hexadecimal

Aquí le indicas al ensamblador para que micro controlador estas codificando (PIC16F84). y cual será el sistema de numeración que utilizarás (hexadecimal).

Nota que hay tres columnas, en este caso la primera está vacía. Respeta las tabulaciones para no confundir al ensamblador.

;————mapa de memoria———

estado  equ        0x03           ; Aquí le asignamos nombres a los

trisa       equ        0x05           ; registros indicando la posición

trisb       equ        0x06           ; en la que se encuentran

Recuerdas lo de la memoria de datos? Bien, al registro STATUS, que está en la posición 0x03 de la memoria de datos le puse la etiqueta «estado».  equ es algo así como igual . (Es decir, estamos  asignando el nombre estado al registro que está en la posición 0x03 de la memoria de datos).

Luego hacemos lo mismo con trisa y trisb. Ahora sigamos…

;——-Configuración de puertos——-

reset     org         0x00           ; origen del programa, aquí comenzaré

                                                    ; siempre que ocurra un reset

                goto      inicio          ; salto a «inicio»

                org         0x05           ; origen del código de programa

inicio     bsf         estado,5                   ; pongo rp0 a 1 y paso al banco1

                movlw  b’11111′                    ; cargo W con 11111

                movwftrisa            ; y paso el valor a trisa

                movlw  b’00000000′    ; cargo W con 00000000

                movwftrisb            ; y paso el valor a trisb

                bcf         estado,5                   ; pongo rp0 a 0 y regreso al banco0

La directiva org indica el sitio de la memoria en donde se escribe una parte del programa. En este caso el contador de programa apuntará a la dirección 0x00 (reset) entonces ejecutará la instrucción que sigue a continuación, (saltar a la etiqueta inicio) y nuestro código de programa comienza en la dirección de memoria 0x05 (aquí salto por encima de la interrupción 0x04)

BSF (SET FILE REGISTER), es la instrucción que pone un uno en el bit del registro especificado, en este caso pone a uno el bit 5 del registro STATUS (el rp0), para pasar al banco 1.

movlw es algo así como… mueve el siguiente literal al Registro W.

W es el Registro de Trabajo, y lo usamos para almacenar momentáneamente los datos que queremos mover. una vez hecho esto pasamos el dato a trisa, o a trisb, según el caso.

movwf es algo así como… mueve el contenido del registro W al registro f, en este caso f sería trisa o trisb.

BCF (BIT CLEAR FILE REGISTER), ésta instrucción limpia el bit del registro especificado, o lo pone a cero, en este caso pone a cero el bit 5 del registro STATUS para regresar al banco 0.

;——————————————

                end                            ; se acabó

;——————————————

EL INICIO.

Programando en serio:

El programa anterior, lo utilizaremos de tiempo completo, y lo único que cambiaremos serán los pines de entrada y salida.

Te recuerdo que lo que hicimos hasta ahora, solo fue configurar los puertos, pero no genera ninguna señal ni nada por el estilo.

Ahora si programaremos en serio. Encenderemos un LED, lo mantendremos encendido por un tiempo, luego lo apagaremos y haremos que se repita todo de nuevo. Recuerda ponerle un nombre, aquí lo llamaré LED1.asm (no olvides el .asm)

Comencemos

;—————Encabezado————-

                LIST        p=16f84

                radix      hex

;————mapa de memoria———

estado  equ        0x03           ; Haciendo asignaciones

TRISB    equ        0x06

ptob      equ        0x06

reg1       equ        0x0C           ; Estos 3 registros los utilizaré

reg2       equ        0x0D           ; para hacer el retardo

reg3       equ        0x0E

;——-Configuración de puertos——-

reset     org         0x00           ; origen del programa, aquí comenzará

                                                    ; siempre que ocurra un reset

                goto      inicio          ; salta a «inicio»

inicio     bsf         estado,5                   ; pone rp0 a 1 y pasa al banco1

                movlw  b’00000000′    ; carga W con 00000000

                movwfTRISB         ; y pasa el valor a trisb

                bcf         estado,5                   ; pone rp0 a 0 y regresa al banco0

;—-Aquí enciende y apaga el LED—–

 

ahora    bsf         ptob,0       ; pone un 1 en RB0 (enciende el LED)

                call         retardo                     ; llama al retardo

 

                bcf         ptob,0       ; pone a 0 RB0 (apaga el LED)

                call         retardo                     ; llama al retardo

                goto      ahora         ; repite todo de nuevo

 

;———–Rutina de Retardo———–

 

retardo                movlw  10                ; Aquí se cargan los registros

                movwfreg1            ; reg1, reg2 y reg3

                                                    ; con los valores 10, 20 y 30

tres        movlw  20                ; respectivamente

                movwfreg2

 

dos        movlw  30

                movwfreg3

 

uno        decfsz   reg3,1        ; Aquí se comienza a decrementar

                goto      uno             ; Cuando reg3 llegue a 0

                decfsz   reg2,1        ; le quitare 1 a reg2

                goto      dos             ; cuando reg2 llegue a 0         

                decfsz   reg1,1        ; le quitare 1 a reg1

                goto      tres             ; cuando reg1 llegue a 0

                retlw     00                ; regresare al lugar

                                                    ; de donde se hizo la llamada

;——————————————

                end                            ; se acabó

;——————————————

Descripción del código:

No te asustes por el tamaño del código, que aunque parezca difícil todo está igual que el código anterior, por lo que sólo describiré los cambios… (lo que está en rojo)

Se agregaron 3 registros mas (reg1, reg2 y reg3), éstos vendrían a ser como variables ubicadas en sus respectivas posiciones (0x0C, 0x0D, 0x0E,) y son registros de propósito general (recuerda que para el PIC16F84 son 68, puedes elegir cualquiera).

A demás se agregó ptob, etiqueta que corresponde a la dirección del puerto B

Analicemos lo que sigue…, que éste es el programa en sí:

;—-Aquí enciende y apaga el LED—–

ahora    bsf         ptob,0       ; pone un 1 en RB0 (enciende el LED)

                call         retardo                     ; llama al retardo

                bcf         ptob,0       ; pone a 0 RB0 (apaga el LED)

                call         retardo                     ; llama al retardo

                goto      ahora         ; repite todo de nuevo

La etiqueta «ahora» es el nombre de todo este procedimiento o rutina, de tal modo que cuando quiera repetir el procedimiento solo saltare a «ahora».

bsf es poner a uno un bit, en este caso al primer bit (el bit 0) del puerto B (ptob).

call es una llamada, en este caso llama a la rutina de retardo, cuando regrese, continuará con el código.

bcf es poner a cero un bit, en este caso al primer bit (bit 0) del puerto B (ptob). y luego llama al retardo, cuando regrese se encontrará con la instrucción goto obligándolo a saltar a la etiqueta ahora para que se repita todo de nuevo. Eso es todo…!!!.

.: Rutina de retardo

Esta es la parte más difícil, pero trataré de hacerlo sencillo así puedes continuar con lo que sigue y no te trabas en esta parte. Primero veremos como se cargan los registros para el retardo. Veamos el código…

;———–Rutina de Retardo———–

retardo                movlw  10                ; Aquí se cargan los registros

                movwfreg1            ; reg1, reg2 y reg3

                                                    ; con los valores 10, 20 y 30

tres        movlw  20                ; respectivamente

                movwfreg2

dos        movlw  30

                movwfreg3

Recordemos que en el mapa de memoria los registros 0x0C, 0x0D y 0x0E fueron nombrados como reg1, reg2 y reg3 respectivamente. Ahora simularemos los tres registros para ver como se cargan mediante el registro de trabajo W, (utilizamos W por que los valores 10, 20 y 30 son valores constantes). Repito, esto es una simulación bien a lo bruto, así que vamos a suponer que en vez de 10 cargo 1, en lugar de 20 cargo 2 y en lugar de 30 cargo 3, hago esto, solo con fines didácticos así podrás comprenderlo mejor.

http://r-luis.xbot.es/pic1/imagen/regcarg.gif

Lo que acabas de ver, fue la carga de los registros reg1, reg2 y reg3. Ahora verás como se comienza a decrementar cada uno de esos registros, primero reg3, luego reg2 y finalmente reg1.

tres        movlw  20                ; respectivamente

                movwfreg2

dos        movlw  30

                movwfreg3

uno        decfsz   reg3,1        ; Aquí se comienza a decrementar

                goto      uno             ; Cuando reg3 llegue a 0

                decfsz   reg2,1        ; le quitare 1 a reg2

                goto      dos             ; cuando reg2 llegue a 0

                decfsz   reg1,1        ; le quitare 1 a reg1

                goto      tres             ; cuando reg1 llegue a 0

                retlw     00                ; regresare al lugar

                                                    ; de donde se hizo la llamada

Veamos, decfsz reg3,1 esto es, decrementa reg3, si al decrementar te da cero saltéate una línea. El 1 que sigue a reg3, indica que guarde el valor de reg3 decrementado en el mismo reg3, es comoooo…. contador=contador-1

goto, es saltar y goto uno es saltar a la etiqueta uno. En esta pequeña vuelta estoy decrementando reg3 hasta que se haga cero.

Cuando reg3 llegue a 0 decrementaré reg2 en una unidad, volveré a cargar reg3 y lo decrementaré nuevamente para recién restarle otra unidad a reg2, y así… hasta que reg2 se haga cero. Cuando eso ocurra decrementaré reg1 en una unidad, cargaré nuevamente reg2 y reg3, para luego decrementarlos de nuevo, todo esto ocurrirá hasta que reg1 se haga igual a cero.

http://r-luis.xbot.es/pic1/imagen/regdec.gif

Esta rutina de retardo, aunque parezca absurda y larga nos permite ver como se enciende y se apaga el LED, de lo contrario no podríamos notar la diferencia, o lo veríamos apagado o encendido, ya que la velocidad es demasiado alta si estamos trabajando con un XT de 4 MHz. Finalmente nos queda la última instrucción:

;——————————————

                end                            ; se acabó

;——————————————

Una vez cargado el programa en el PIC, necesitarás ver el programa funcionando, por lo que deberás armar este circuito.

El pin 4 (MCLR) está conectado por lo del Reset, para que se estabilicen los niveles de tensión.

LAS HERRAMIENTAS:

PROGRAMADOR DE PIC:

Buen usaremos el programador de Pablin I &  Pablin II, yo en mi caso use en programador Pablin I, para hacer estos ejercicios.

Programador PIC Pablin

Si bien son muchos los circuitos disponibles en la Web que permiten programar microcontroladores PIC decidimos tomar lo mejor de cada uno de ellos y elaborar uno propio con las características que lo hacen propio para nuestro país (componentes económicos y fáciles de conseguir, software fácil de usar y en español).

El programador PIC Pablin permite leer y grabar PICmicros de 8 y 18 pines así como memorias EEPROM seriales.

Dispone de un zócalo de 18 pines el cual permite conectar, tal como se ve en la plantilla, tanto PIC’s como memorias EEPROM seriales. Los PIC’s de 18 pines se colocan ocupando la totalidad del zócalo mientras que los PIC’s de 8 pines se colocan ocupando la parte superior del zócalo. En tanto las memorias seriales se colocan una hilera anterior al fin del zócalo (el pin 1 de la memoria debe coincidir con el 5 del zócalo).

El LED marcado como «Enc.» permite observar que el sistema se encuentra alimentado mientras que el LED marcado como «PIC» se enciende indicando que es seguro insertar o quitar un chip (PIC o memoria) y se apaga por instantes breves cuando una lectura o programación de un PIC está en curso. Mientras este último LED este apagado no se debe quitar o insertar ningún integrado del zócalo.

El funcionamiento del circuito es muy simple: los pines del puerto paralelo 2, 3, 5 y 10 permiten interconectar el circuito con la PC. El pin 2 es el encargado de traer los datos (desde la PC hacia el integrado). El pin 3 es el envío de los pulsos de reloj (desde la PC hacia el integrado). En tanto el pin 10 permite a la PC leer los datos desde el programador. El pin 5, por último, es el encargado de controlar la tensión de programación (Vpp) necesaria para cuando queremos leer o escribir en un PIC.

Los microcontroladores PIC se programan utilizando el mismo protocolo que las memorias EEPROM seriales, por consiguiente el programador sirva tanto para PIC’s como para memorias. La tensión de programación VPP es necesaria para indicarle al PIC que deseamos leerlo o programarlo. Si en este pin (que es compartido con la entrada de RESET del micro) ponemos masa el PIC sufre un reset, si ponemos el pin en alto (5v) el PIC trabaja normalmente mientras que si ponemos el pin a 12v el PIC se inicializa en modo programación, quedando dos de los pines de E/S destinados a datos (SDA) y reloj (SCL).

El integrado 74LS04 está formado internamente por seis buffers inversores. Estos nos permiten por un lado obtener niveles TTL a su salida y por el otro no cargar de forma excesiva al puerto. Algunos programadores, como el NOPPP utilizan diodos y resistencias para conectar el PIC directamente el puerto paralelo. Esto funciona en muchas computadoras de escritorio con fuentes poderosas pero en la mayoría de las portátiles que no disponen de tanta corriente el funcionamiento es errático o directamente no funciona. Gracias a la utilización de este buffer podremos utilizar el circuito en cualquier puerto paralelo ya sea de una computadora de escritorio o en un portátil. Se colocan las compuertas en serie para obtener a la salida el mismo nivel de entrada, sin invertir. Las resistencias de 1K dan seguridad al sistema para evitar que circule corriente excesiva.

El control de la tensión de programación lo efectúa el transistor NPN. Estando el pin 5 del puerto paralelo a masa (en 0) tendremos al transistor abierto por lo que la corriente proveniente de +V (12v) pasará por el diodo LED el cual no encenderá y se portará como un diodo común polarizado en directa, pasará por la resistencia limitadora de corriente del LED la cual no ofrecerá mucha resistencia y será inyectada al PIC en su terminal MCLR/VPP. Poniendo en 1 el bit que controla el pin 5 del puerto paralelo, en cambio, el transistor se cierra y hace circular masa hacia el PIC haciendo, además, encender el LED al quedar a masa el otro extremo de la resistencia limitadora de corriente.

El circuito requiere como única alimentación 12V de continua con una corriente de 200mA. Puede usarse cualquier fuente universal siempre que se respete la polaridad. De tener una fuente de mas tensión (13.5v como mucho) no hay problema, se la puede utilizar sin inconvenientes. No es necesario que la fuente sea regulada. Si se tiene una fuente de 12V con mas corriente 1A o incluso mayor se la puede utilizar también sin inconvenientes.

Para conectarlo a la PC se puede utilizar un conector hembra centronics para circuito impreso (igual al que tienen las impresoras) o un cable directo hacia el macho DB25.

HAGO RECORDAR QUE YO USE LA DB25 MACHO NO LA QUE DICE AQUÍ ES LO MISMO Y FUNCIONA IGUAL. Y MAS ECONÓMICO A LA LARGA. COMO TODO CIRCUITO PRUEBA EN LA TABLAS DE PRUEBA O PROTOBOARD.

Vemos la foto del prototipo terminado, en nuestro caso optamos por poner un segundo zócalo para las memorias seriales y dejar el zócalo grande para los PIC’s. La resistencia de 1K demás junto al integrado quedó de la etapa de práctica pero no tiene conexión a ninguna parte.

El programa

El programa que recomendamos para este programador es el IC-Prog dado que reúne varias características mas que interesantes:

·         Es muy fácil de usar

·         Interface con botones de acceso rápido a las principales funciones

·         Permite ver el ASM del programa que se esta por cargar en el PIC (si ! lo obtiene desde el HEX)

·         Tiene varios idiomas, entre ellos español

·         Dispone de cinco espacios de memoria (Buffers) para poder tener hasta cinco programas simultáneos.

·         Dentro de una única ventana reúne memoria de programa, memoria EEPROM y bits de configuración.

·         Hay actualizaciones periódicas con funciones nuevas y problemas resueltos.

·         Funciona tanto bajo Windows95 como Windows XP así como en versiones intermedias.

Vemos a continuación una captura de pantalla del programa, haciendo click sobre ella se lo puede descargar.

Para configurarlo sólo es necesario:

1.    Descargar el icprog.

2.    En esa misma pagina descargue IC-Prog NT/2000 driver (mas conocido como el driver)

3.    Ahora descomprime el icprog en (c:icprog) a mismo descomprime el driver.

4.    Ahora procesamos a abrirlo, te saldrá un ventana solo dale aceptar.

5.     Ahora te saldrá la configuración del programador-pablin.

6.    Donde dice PROGRAMMER seleccionamos Propic2Programmer.

7.      Ahora donde dice INTERFACE ponemos WINDOWS API(ESTO ES PARA XP) y si tuviéramos win 95-98-me lo dejamos tal como estaba.

8.      Ahora donde dice COMMUNICATION damos clic en INVERT MCLR. (invertir master clear)

9.      Ahora donde dice I/O delay, se puede ir reduciendo pero recomiendo no bajarse hasta la numero 5. Debes bajarlo si te tira error en la verificación del programa.

10.  Ahora le damos aceptar.

11.  Nos tirara varios mensajes de erro aceptemos(en todo el proceso de configuración)

12.  Ahora en el menú nos vamos donde dice SETTINGS ahora  donde dice OPTIONS.

13.  Ahora miremos en las pestañas donde dice MISC hacemos clic

14.  Ahora miremos donde dice ENABLE NT/2000/XP DRIVER, hacemos clic y nos saldrá otro mensaje y le damos donde dice YES. Y ahora nos saldrá otro mensaje y nos pregunta si queremos instalar el driver, le damos en YES.

15.  Ahora si ya nos saldrá los erros, ahora si ya tenemos el  ICPROG, configurado.

16.  Ahora si queremos que el ICPROG este en español nos vamos SETTINGS, buscamos al pestaña donde dice LANGUAGE y seleccionaos el español y listo.

17.  Ahora si cerremos el programa, conectemos nuestro programador y abrimos el programa.

Pagina:  www.ic-prog.com

Aclaración:


Nosotros utilizamos un regulador de tensión 7805 de 1A dado que es lo que teníamos a mano, pero puede utilizarse un regulador 78L05 (los de 300mA que tienen forma de transistor) sin problemas y con la ventaja de ocupar mucho menos espacio
(bueno yo probé con el transistor y no me función no muy bien., recomiendo conservar lo que 7005, recuerden que hay caídas de tensión.)

NOTA:

¿COMO VERIFICAR SI MI PROGRAMADOR ES BUENO?

–          Nos vamos en AJUSTES luego PRUEBA HARDWARE.

–          Ahora donde dice HABILITAR MCLR, damos clic y debe apagarse un led, y funciona  bien nuestro programador esta bien, y ya podemos poner nuestro PIC. Y a programar.

PRECUACION:

–          DEBEN ESTAR ENCENDIDO LOS DOS LED (DEBE TENER EL PROGRAMA ABIERTO)

–          SI ALGÚN LED ESTA APAGADO NO PONGA EL PIC YA QUE SE QUEMARA IRREMEDIABLEMTE, Y SI TIENE EL PIC Y SI NO ESTA ENCENTIDO LOS DOS LED NO SAQUE EL PIC. HASTA QUE PRENDA LOS DOS LED.

–          Si te tira error en la verificación del hex cargado en el pic,  verifica si tu fuente tiene 12 voltios. Recuerda que yo preferí usar 12 voltios y poco mas por que siempre hay caída de tensión.


 

¿COMO SE USA EL PROGRAMA ICPROG?

Bueno la respuesta es muy simple baje la ayuda en la pagina la ayuda esta en español o sea no hay escusa para leerlo.

Pagina:  www.ic-prog.com

¿QUE PROGRAMA USO PARA HACER PARA HACER EN ASM?

Primera opción (la que yo uso):

Eso me pregunte yo también, entonces  recurrí a san google, y me encostre varios programas, pero no me gusto ya que era software comprado, entonces recordé que tenia un programa llamado de software libre llamado NOTEPAD++.

Link:  http://sourceforge.net/project/showfiles.php?group_id=95717&package_id=102072

http://notepad-plus.sourceforge.net/

Pasos para usar el programa:

Bueno es muy sencillo, creo que la mayoría ha usado el blok de notas de Windows, es parecido solo que esta lleva una pequeña diferencia.

Que esta se ejecuta DOSWINDOWS  Y ANSI.  Que es lo que queremos. Y además es compatible con unos 30 lenguajes de programación y dentro de ellos esta lo que queremos el ASSEMBLY para crear nuestro asm.

Ahora como usarlo es muy fácil.

–          Primero nos vamos donde dice lenguaje y hacemos clic y buscamos seleccionamos,  ASSEMBLY.

–          Ahora deberías poner las instrucciones del primer ejerció adjunto a este tutorial, el encendió y apagado de un led. Y debería cambiar de color cada uno de las instrucciones.

–          Para guardar el asm simplemente  nos vamos en archivo, luego en guarda como y buscamos donde dice TIPO = Luego buscamos donde dice ASSEMBLY (*.ASM), damos clic y ponemos el nombre del archivo y ya tendríamos nuestro asm.

–          Eso es todo

Algunas capturas.

 Segunda opción:

Pero si prefieres puedes usar el edit de Windows.

–          Hacemos clic en inicio luego en ejecutar

–          Luego en ejecutar ponemos EDIt y presionamos enter.

–          Y se abrirá una ventana, para los que ya ha  usado Windows 95 – 98 – 2000 , le parecerá familiar ya que es simplemente todo lo mismo explicado anteriormente solo que esto a veces consume todo el recurso de la PC, mas creo yo que tiene un BUG.

–          La misma forma de guarda,  e hace como la anterior solo que esto no me gusta su interfaz.

Capturas:

Una vez ahí puedes escribir tu código…, por último lo guardamos seleccionando el menú Archivo –> Guardar como –> led1.asm No olvides el .asm


Esta entrada fue publicada en INTRODUCCION A LOS MICROCONTROLADORES. Guarda el enlace permanente.