Redes sociales

siguenos en facebook

sábado, 14 de febrero de 2015

ENTRENADOR PARA MICROCONTROLADORES PIC



Este equipo tiene como principal objetivo servir como elemento de soporte a las personas que trabajan con los microcontroladores PIC de MICROCHIP. En él se pueden montar diferentes prácticas, poseen bloques separados que soportan proyectos interesantes donde se utilizan herramientas como teclado matricial LCD, Display de siete segmentos, comunicación serial, conversión A/D, motores paso a paso, relé, pulsadores y suiches.
El equipo permite practicar con microcontroladores de 8 pines como los 12F629 y 12F675, de 14 pines como el 16F676, de 18 pines como el 16F84A, 16F88, 16F627/628 y el 16F819 y de 28 y 40 pines como la familia 16F87X. A demás de la serie 18F.

Cada PIC tiene una base diferente para su instalación luego de ser programado y unos conectores que hacen muy fácil relacionar cada pin configurado como entrada o salida con  la aplicación que se desea a través de alambre telefónico.



También se cuenta con un conector RJ-22 para quien desee programar y simular a través de un programador serial en circuito (in circuit) como el ICD-2  de MICROCHIP o el ICD-U40 de CCS. Quien tenga una de estas herramientas solo debe conectarse y desde el Pc puede realizar programación y simulación sin necesidad de quitar el PIC del socket del entrenador.


Todas las prácticas que se describen en adelante, fueron programadas y simuladas en circuito en este entrenador, tanto en lenguaje  C como en lenguaje ensamblador, con las herramientas mencionadas en el párrafo anterior.


RUTINA DE INICIALIZACIÓN DE LOS PUERTOS



El microcontrolador 16F88 posee características como los comparados y conversores análogo, por defecto este PIC inicia con estos pines configurados como entradas análogas, debido a esto se hace necesaria una rutina de inicialización de los puertos cuando se quieren trabajar sus pines como entradas o salidas digitales.



La rutina de inicialización de los puertos para trabajar sus pines como I/O digitales será la siguiente:

BANKSEL TRISA            ; Voy al banco 1 de la RAM
MOVLW 0X00                 ; Cargo el registro W con 00 para llevarlo al
MOVWF ANSEL             ; registro ANSEL y dejar el puerto a digital
MOVLW TRISA               ; TRISA y dejar configurados los pines del puerto A como entradas
CLRF TRISB                   ; Cargo TRISB con ceros para configurar los pines del puerto B como salidas
BANKSEL PORTB           ; Vuelvo al banco 0 de RAM para trabajar como los puertos.






REGISTROS MAS UTILIZADOS EN EL PIC16F88

     - Registro de trabajo (W)

Es el registro principal y tiene participación en la mayoría de las instrucciones, está ubicado  en la CPU del microcontrolador.



      Contador de programa (PCL)

Registro interno que se utiliza para direccionar las instrucciones del programa de control que están almacenadas en la memoria de programa. Se encuentra en la dirección 02h de la memoria de datos.

Contiene la dirección de la próxima instrucción a ejecutar y se incrementa automáticamente haciendo que la secuencia natural de ejecución del programa sea lineal.

El microcontrolador 16F88 tiene un contador de programa capaz de direccionar los 4K x 14 bits de memoria de programa con que cuenta este PIC, es decir, desde 0x00H hasta 0x0FFFH.


       -Registro de estado (STATUS)

Es un registro muy utilizado, eso explica su presencia en los cuatro bancos de memoria de datos, en las posiciones 03h, 83h, 103h y 183h  respectivamente.
Los bits de este registro indican el estado de la última operación aritmética o lógica realizada, la causa del reset y los bits de selección del banco de memoria de datos.

A continuación se explica su composición:

Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
IRP
RP1
RP0
T0
PD
Z
DC
C

Bit 7: IRP  Utilizando para direccionamiento indirecto

Bit 5 y 6 : RP0 , RP1 bits selector de banco de memoria de RAM o de datos

           00= selecciona el banco 0
           01= selecciona el banco 1
           02= selecciona el banco 2
           03= selecciona el banco 3

Bit 4 : TO bit que indica que el WDT se desbordo

1= luego de energizar el PIC o instrucciones CLRWDT y SLEEP
0= el WDT se desbordo

Bit 3 : PD Bit que indica el PCI fue energizado .

1= PIC energizado o instrucción CLRWDT
0= instrucción SLEEP

Bit 2: Z bit cero

1: el resultado de una operación aritmética o lógica es cero
0: el resultado de una operación aritmética o lógica no es cero

Bit 1: DC bit carry indica acarreo en el bit 4

1= Existe carry en el cuarto bit
0= No existe carry en el cuarto bit

Bit 0: C bit carry indica acarro en el bit 8

1=  Existe carry en el octavo bit
0= no existe carry en el octavo bit 


      -Registro de opciones (OPTION_REG)




Ocupa la dirección  81 H y 181 H de la memoria de datos, es un registro de lectura y escritura que contiene varios bits de control para configurar la preescala del TMR0 o del WDT, las resistencias internas para el puerto B, selección del tipo de reloj para el TMR0 que puede ser interno o externo y selección del flanco para la interrupción EXT.

bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
RBPU
INTEDG
TOCS
TOSE
PSA
PS2
PS1
PS0

bit 7: RBPU resistencias internas para el puerto B.

                    1 = resistencias desactivadas
                    0 = resistencias activadas

bit 6 : INTEDG flanco para la interrupción por cambio en RB0

                     1 = flanco ascendente
                     0 = flaco descendente

bit 5 : TOCS tipo de reloj para el TMR0

                      1 = pulsos introducidos a través del contador ( pin RA4/TOCKI)
                      0 = pulso de reloj internos (oscilador)

bit 4 : TOSE tipo de flanco en TOCKI

                     1 =  incremento del TMR0 cada flanco descendente
                     0 = incremento del TMR0 cada flanco ascendente

bit 3 : PSA asignación del divisor de frecuencias

                     1 = asignado al perro guardián (WDT)
                      0 = asignado al temporizador (TMR0)

bit 2,1,0: PS2,1,0  valor para el divisor de frecuencias

Valores de la preescala para el TMR0 y el WDT

PS2
0
0
0
0
1
1
1
1
PS1
0
0
1
1
0
0
1
1
PS0
0
1
0
1
0
1
0
1
División del TMR0
1 : 2
1 : 4
1 : 8
1: 16
1 : 32
1 : 64
1 : 128
1 : 256
División del WDT
1 : 1
1 : 2
1 : 4
1 : 8
1 : 16
1 : 32
1 : 64
1 : 128


-Registro para la configuración de puertos (TRISX)

TRISA: Posición 85h del banco uno de la memoria de datos. Es quien figura las líneas del puerto A como entradas o salidas. Un cero en el bit correspondiente al pin lo configura como salida y un uno lo hace como entrada


TRISB: Posición 86h del banco uno de la memoria de datos. Es quien configura las líneas del puerto B como entradas y salidas. Un cero en el bit correspondiente al pin lo configura como salida y un uno lo hace como entrada 




EL MICROCONTROLADOR PIC 16F88

Es un microcontrolador más de la familia de 14 bits de MICROCHIP con un encapsulado DIP de 18 pines y que, con excepción del número de pines, no tiene nada que enviarle al conocido 16F873A, debido a que cuenta a 7 canales  de conversión A/D de 10 bits, módulo de comunicación serie 12C y USART, canal para comparación, captura y modulación de ancho de pulso con resolución de 10 bits, 2 comparadores análogos, temporizadores de 8 y 16 bits, 16 posibles líneas para  entrada y salida, memoria de programa de 4K X 14 bits, memoria RAM 368 bytes y 256 bytes de memoria EEPROM. Adicionales a esto se puede configurar el oscilador internamente de a 8 frecuencias diferentes partido desde 31,25 Khz hasta 8 Mhz.



Cuenta con 18 pines, 2 de alimentación, 2 para el oscilador y un pin destinado al reset (MCLR), los 13 restantes pueden ser de entrada y salida, aunque si elegimos trabajar tanto el oscilador como el reset de forma interna, podemos contar con 15 líneas de entrada y salida y la del MCLR, que sería el pin RA5, que solo puede configurarse como línea de entrada.

Las 16 l/O están distribuidas en 8 para e puerto A Y 8 para e puerto B.


     MEMORIA DE PROGRAMA


El PIC 16F88 cuenta con 4Kbyte de memoria de programa, es decir 4096 posiciones para instrucciones de 14 bits. Comienza con la posición 000h que es la posición del reset, hasta la posición FFFh, teniendo en cuenta que en la posición 004h está ubicado el vector de interrupciones para cuando se va hacer uso de estas.

Igualmente cuenta con 8 niveles de pila o stack que nos permiten igual números  de subrutinas anidadas.

Memoria ROM o de programa

     MEMORIA DE DATOS   


La memoria de dato del PIC 16F88 posee 4 bancos enumerados desde el 0 hasta el 3, donde las primeras 32 posiciones pertenecen a registros de propósito especial (00h-1Fh) y las demás a los posibles registros de propósito general a utilizar en el programa, es decir, a partir de la dirección 20h.



Se direccionan con ayuda de los bits 5 y 6 del registro de estado (STATUS) que se explica en detalle más adelante.










MEMORIAS RAM Y ROM

MEMORIA RAM O DE DATOS



Es la memoria de acceso aleatorio utilizada para almacenar   los datos que se manejan en el programa, estos datos están variando continuamente, es por eso que esta memoria es tanto de lectura como de escritura.



En los microcontroladores PIC, esta memoria se divide en dos partes:

Registros de funciones especiales SFR: Ocupan las primeras  posiciones en los diferentes bancos de memoria RAM  que posee el micro, ya tienen una dirección predeterminada y cumplen funciones  especiales en las tareas de control del microcontrolador.

Registro de propósito general GPR: Se utilizan para guardar otros datos temporales necesarios en la ejecución del programa. Podemos crear los que sean necesarios para nuestra aplicación.

Cada microcontrolador tiene un número determinado de bancos de memoria RAM; por ejemplo el 16F88 cuenta con 4 bancos.       



MEMEMORIA ROM O DE PROGRAMA 


Es la memoria no volátil del microcontrolador en la cual se almacenan en forma permanente las instrucciones correspondientes al programa. Como el programa es siempre el mismo, esta memoria de solo lectura, garantiza la permanencia de este a un sin que haya alimentación, de esta forma las instrucciones no necesitan ser cargadas cada vez que ejecute la aplicación.

El PIC 16F88 posee una memoria de programa (ROM ) tipo flash que permite el grabado y el borrador eléctricamente de forma muy rápida y sencilla, a través de un equipo físico llamado programador. Su capacidad es de 4096 líneas de 14 bits cada una.





RESET (MCLR) Y LINEAS DE ENTRADA Y SALIDA

Los microcontroladores PIC poseen un pin de Reset que reinicia el funcionamiento del sistema cuando es necesario. Se le llama MCLR y actúa cuando recibe un nivel lógico bajo.




Cuando no se hace necesario tener un circuito de Reset manual, este pin debe conectarse a Vcc, que es el estado normal cuando el PIC está trabajando.






El microcontrolador se comunica con el mundo exterior a través de las líneas de entra y salida, normalmente llamadas puertos. Estas trabajan entre 0 y 5 voltios. Los puertos pueden configurarse como entradas para recibir datos a través de sensores, pulsadores, swiches y teclados; o como salidas para controlar dispositivos externos como displays, motores o válvulas entre otros.




A excepción de dos patitas destinadas a recibir la alimentación, otras dos para el cristal de cuarzo, que regula la frecuencia de trabajo, y una más para provocar el Reset, las restantes patitas de un microcontrolador sirven para soportar su comunicación con los periféricos externos que controla.

Las líneas de E/S que se adaptan con los periféricos manejan información en paralelo y se agrupan en conjuntos de ocho, que reciben el nombre de Puertas.




Hay modelos con líneas que soportan la comunicación en serie; otros disponen de conjuntos de líneas que implementan puertas de comunicación para diversos protocolos, como el I2C, el USB, etc.





viernes, 13 de febrero de 2015

CONJUNTOS DE INSTRUCCIONES



Todas las instrucciones se ejecutan en un ciclo de máquina, es decir, cuatro ciclos de reloj, con excepción de las de salto que requiere 2 ciclos de máquina, o sea, 8 ciclos de reloj para su ejecución

¿Por qué son la familia de 14 bits?
Cabe recordar que los registros donde se almacenan los datos son de 8 bits y la longitud de las instrucciones es de 14 bits. Veamos un ejemplo:

Instrucción:       Decrementar uno al registro auxiliar y saltar si queda en cero
Ensamblador:   Decfsz auxiliar, 1
Maquina            001011 dfff ffff ( formato de 14 bits)

001011 representa el código de operación para esta instrucción.

La letra d  es el destino en el cual quedara el resultado de la operación. Si es 1, este quedara almacenado en el registro auxiliar, si es 0, se almacenara en el registro de trabajo llamado W. se escribe al final de la instrucción.



fff ffff estos 7 bits representa la dirección del registro auxiliar de la memoria de datos.
Otro ejemplo de instrucción de lenguaje ensamblador y en lenguaje de maquina:




Instrucción:        Realizar una and entre un literal y el registro de trabajo W.
Ensamblador:    andlw.15
Maquina:           11 1010 0000 1111 (Formato de 14 bits en binario)
                          3A0F( Formato de 14 bits en hexadecimal)






Debemos anotar que el formato para expresar los literales en lenguaje ensamblador puede ser binario, hexadecimal o decimal. Veamos un ejemplo:

Instrucción:       Sumar 37 al registro de trabajo W

Ensamblador:     addlw           .37        expresado en decimal  
                           addlw            d 37        expresado en decimal 
                           addlw            D 37        expresado en decimal 
                           addlw            b 00100101        expresado en binario
                           addlw            B 00100101                expresado en binario
                           addlw            0.25       expresado en hexadecimal  
                           addlw            25H        expresado en hexadecimal