Está en la página 1de 22

MICROCONTROLADOR PIC

PIC (Peripheral Interface Controller). Es un circuito integrado que posee toda la arquitectura
de un computador.

CPU – RAM – EEPROM – Circuito de entrada.

CPU – RAM – EEPROM – Circuito de salida.

Posee un oscilador interno de 4 MHz (no muy preciso).

Oscilador:

Figura X

Notas importantes:

 El voltaje de alimentación al PIC es de 3 hasta 5.5 voltios.


 El PIC consume poca potencia.
 Es susceptible a daños por estática (Se recomienda usar pinzas).
 Los pines de entrada y salida soportan máximo 25mA.
 Se recomienda utilizar un capacitor de 0.1 μƒ en paralelo al PIC.
 Cuando se necesite precisión, utilizar un cristal oscilador de 4MHz o más.
 Utilizar un regulador de voltaje. Ej: 7805.

 78xx es la denominación de una familia de reguladores de tensión positiva, de


tres terminales, Vi voltaje de entrada, Vo voltaje de salida y la pata central la
masa o común, con especificaciones similares y que sólo difieren en la tensión
de salida suministrada y en la corriente que es capaz de dar ante una demanda de
ello depende las letras que intercala detrás de los dos primeros digitos:
 El 7805 es el regulador de voltaje más común, y muy usado en diseños
empotrados. El 7805 es un regulador lineal hecho por varios fabricantes como
“Fairchild”, o “ST Microelectronics”. Puede venir en varios tipos de
encapsulados. Para corrientes de salida hasta de 1A existen dos tipos de
encapsulados: TO-220 (vertical) y D-PAK (horizontal).

 Con un disipador apropiado esos tipos de reguladores LM78xx pueden


proporcionar corrientes de más de 1A. Además incluyen protección por
sobrecarga térmica, y contra cortocircuitos.

Si su diseño no excede los 100 mA de consumo puede elegir un regulador del


tipo LM78L05. El mismo viene en presentaciones pequeñas y puede entregar
corrientes de hasta 100 mA.
Las características estándar de los principales modelos son las encontradas en la
siguiente tabla.

780
7803 7805 7808 7809 7810 7812 7815 7818 7824
6

Vout 3,3V 5V 6V 8V 9V 10V 12V 15V 18V 24V

2,2V - 2,5V - 2,6V -


Vin - Vout
30V 23V 20V

Temperatura de 0- 0- 0- 0- 0-
operación 125 °C 125 °C 125 °C 125 °C 125 °C

Imax de salida 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A

La tensión de alimentación debe ser un poco más de 2 volts superior a la tensión que entrega
el regulador y menor a 35 volts

La electrónica ha evolucionado mucho. Casi todo lo que hasta hace unos años se hacia
mediante un grupo (a veces muy numeroso) de circuitos integrados conectados entre si,
hoy se puede realizar utilizando un microcontrolador y unos pocos componentes
adicionales.

El lenguaje nativo de estos microcontroladores es el ASM, y en el caso de la familia


“16F” solo posee 35 instrucciones. Pero el ASM es un lenguaje que esta mucho más
cerca del hardware que del programador, y gracias a la miniaturización que permite
incorporar cada vez más memoria dentro de un microcontrolador sin aumentar
prácticamente su costo, han surgido compiladores de lenguajes de alto nivel. Entre ellos
se encuentran varios dialectos BASIC y C. El BASIC resulta bastante más simple de
aprender.
LENGUAJES

Lenguaje Humano

Alto Nivel HIGH Basic

………….
………….
3F83….. Hexadecimal

Bajo nivel 10011 Código Binario

Lenguaje Máquina

Trabajaremos con un lenguaje de alto nivel.

Lo más interesante de trabajar con microcontroladores es que se necesitan


conocimientos tanto de electrónica (hardware) como de programación (software)
Un microcontrolador es como un ordenador en pequeño: dispone de una memoria
donde se guardan los programas, una memoria para almacenar datos, dispone de
puertos de entrada y salida, etc.

A menudo se incluyen puertos seriales (RS-232), conversores analógico/digital,


generadores de pulsos PWM para el control de motores, bus I2C, y muchas cosas más.
Por supuesto, no tienen ni teclado ni monitor, aunque podemos ver el estado de teclas
individuales o utilizar pantallas LCD o LED para mostrar información.

Son muy rapidos un PIC funcionando a 20MHz puede ejecutar 5 millones de


instrucciones por segundo.

Los pines del PIC se dedican casi en su totalidad a los puertos que mencionábamos
anteriormente. El resto (2 o mas) son los encargados de proporcionar la alimentación al
chip, y a veces, un sistema de RESET. Desde BASIC es posible saber si un pin esta en
“estado alto” (conectado a 5V o a un “1” lógico) o en “estado bajo” (puesto a 0V o a un
“0” lógico”). También se puede poner un pin de un puerto a “1” o “0”. De esta manera, y
mediante un rele, por ejemplo, se puede encender o apagar una luz, motor, maquina,
etc.

Uno de los microcontroladores más famosos de todos los tiempos ha sido, sin duda, el
16F84A, que ya es considerado obsoleto. Un buen reemplazo es el 16F628A, y es el que
utilizaremos en la mayoría de los ejemplos y proyectos que veamos. La disposición de
sus pines es la siguiente:
Función de los pines del 16F628A

Como podemos ver, los pines 1, 2, 3, 4, 15, 16, 17 y 18 tienen el nombre de RAx. Esos
pines conforman el puerto A, “PORTA” . Los pines 6 al 13 forman parte del puerto B
(“PORTB”). El pin 5 es el que se conectara al negativo de la fuente de alimentación. El
14 irá conectado a 5V.(toma de energía para el pic)

Muchos de los pines tienen más de una descripción. Esto se debe a que pueden
utilizarse de varias maneras diferentes, seleccionables por programa. Por ejemplo, el
pin 4 sirve como parte del PORTA, como RESET (MCLR = Master Clear) y como
tensión de programación (Vpp)

Ahora bien ¿Cómo colocamos el programa dentro del PIC? Para ello necesitamos
algunas herramientas. Por un lado, es necesario un “quemador” de PICs, Además,
necesitaremos un software que envíe el programa al PIC. Y también vamos a necesitar
un compilador, para “traducir” nuestro programa en BASIC al ASM /HEX que es capaz
de entender el PIC. Existe una versión de prueba que se puede bajar gratuitamente
desde aquí.
El GTP USB+, un excelente programador de micros y
memorias.

. Para comenzar, usaremos un PIC 16F628A.

El primer ejemplo que veremos, consiste en encender y apagar continuamente un LED


conectado a uno de los pines del micro, pin 9, PORTB.3 . Utilizaremos el circuito
siguiente:

Nuestro primer ejemplo.


A diferencia de un programa de ordenador, donde uno escribe el programa, lo compila,
lo ejecuta y ya, en el mundo de los microcontroladores hay que, previamente, definir el
tipo de microcontrolador que se va a utilizar, cual va a ser su frecuencia de clock, como
va a ser el circuito en que se va a utilizar el mismo, etc.

En primer lugar, vamos a aprovechar el oscilador interno del 16F628A y nos evitaremos
el cristal y condensadores asociados. El puerto B3 del micro tiene su pin 9 conectado a
un LED mediante una resistencia de 220ohms, que tienen como función limitar la
corriente que circula por el LED. Esta será nuestra "salida".

El circuito debe alimentarse con 5v bien filtrados y regulados. Volviendo a nuestro


programa, vamos a encender un LED de forma intermitente.

Figura X Diagrama Básico

Ejemplo:

INICIO: ;nombre de la subrutina


HIGH port b.3 ;ON LED – 1 LOGICO 5V – PIN 9
PAUSE 1000 ;Pausa de 1 segundo
LOW portb.3 ;OFF – LED 0 LOGICO OV – PIN 9
PAUSE 1000 ;Pausa de 1 segundo
GOTO INICIO ;Va a inicio y sigue eternamente
END
1 unidad de tiempo = 1 milisegundo
Los puertos A son analógicos, si se desea utilizar como digitales, usar al inicio del programa la
sentencia:

cmcon = 7 , todo puerto A pasa a ser digital pero el A5 y A4 son diferentes.

A5 (MCLR) solo es de entrada (no para encender un LED). El A4 es de colector abierto y


debe estar conectado a 5 voltios

Figura X Conexión a pulsadores

Figura X Es un negador

FOCO INTERMITENTE:

cmcon = 7 ; Todo el puerto A es digital


FOCO VAR PORTA.0 ; El pin A0 (17) se asigna como Foco
INTERMIT: ; nombre de la subrutina
HIGH FOCO ; ON el foco
PAUSE 1000 ; Pausa de 1 segundo
LOW FOCO ; OFF el foco
PAUSE 1000 ; Pausa de 1 segundo
GOTO INTERMIT ; Continua el programa eternamente
END

El mismo programa con otra sentencia:

FOCO VAR PORTB.0 ; El pin B0 (6) es foco


LED: ; nombre de la subrutina
LOW FOCO ; OFF pin 6 ó B0
PAUSE 1000 ; Pausa de 1 segundo
TOGGLE FOCO ; cambia de estado a B0 (OFF ON)
PAUSE 1000 ; Pausa de 1 segundo
GOTO LED ; Continua el programa eternamente
END

TOGGLE Cambia el estado de un puerto. Toggle es un negador

TRISB = trisb

Esta sentencia permite trabajar todo el puerto B como salidas, se debe poner al inicio del
programa:

trisb = 0 ó trisb = %0

Ejemplo:

Portb = % 0 1 0 0 1 0 0 1 Muy bueno para trabajar en grupo.


B7 B6 B5 B4 B3 B2 B1 B0
Indica que los puertos B6 – B3 – B0 están en ON, todos los demás OFF.

Para números binarios (0 – 1) utilizar %, para hexadecimales (0, 1, … , 9, A, B, …) utilizar $.

DECIM BINARIO HEXADECIMAL


12 1100 $C
Ejemplo de parpadeo:

Trisb = 0 ; Utilizar todos los puntos B como salidas


FOCO: ; nombre de la subrutina
portb=% 00000001 ; ON en B0 pin6
pause 1000 ; pausa de 1 segundo
portb=% 00000000 ; OFF en B0 pin6
pause 1000 ; pausa de 1 segundo
GOTO FOCO ; in a FOCO
END.

El PIC ejecuta cada línea de programa en un microsegundo (1 μseg).

Tarea →PGM para semáforos de 2 intersecciones.

Semáforo de dos intersecciones.

FIGURA X

trisb=0 Todo el bloque B es de salida


semáforo: R A V R A V
portb=%100001
pause 9000
portb=%100011
pause 3000
portb=%001100
pause 9000
portb=%011100
pause 3000
GOTO semáforo
Tarea: Realizar el mismo ejercicio utilizando HIGH y LOW.

Si se desea realizar el proyecto con focos de 120V se utiliza salida a transistor y relé.

Tarea:

 Luces para discoteca


 Autofantástico

INSTRUCCIÓN FOR-NEXT

Esta instrucción sirve para ejecutar o repetir un número n de veces líneas de programa.

Se usa de la siguiente forma:

X VAR BYTE ; Se crea y asigna un tamaño a la variable X


FOR X=1 TO 5 ; Ejecuta las siguientes instrucciones 5 veces hasta NEXT
………………………
……………………...
………………………
NEXT

Tamaño de la variable (declarar antes del programa)

X VAR BIT → 0–1


X VAR BYTE → 0 – 255
X VAR WORD → 0 – 65535

X VAR BYTE
Led1 VAR portb.0
programa:
FOR X=1 TO 5
HIGH Led1
PAUSE 500
LOW Led1
PAUSE 500
NEXT
PAUSE 2000

FOR X=1 TO 3
HIGH Led1
PAUSE 500
LOW Led1
PAUSE 500
NEXT
PAUSE 3000
GOTO programa
END

Desplazamientos

Los desplazamientos no son más que recorrer un lugar a la izquierda o derecha de los puertos.

Los desplazamientos utilizan la multiplicación y la división.

Si tenemos X=1 → %00000001

Y lo multiplicamos por 2 X=2 → %00000010

Otra vez multiplicamos por 2 X=4 → %00000100

Podemos llegar a X=128 → %10000000

Para hacer que el 1 regrese a B0 (a la derecha), dividimos para 2.

LEDS=LEDS<<1 (Equivale a multiplicar por 2) se desplaza 1 a 1.

LEDS=LEDS<<2 (Equivale a multiplicar por 4) se desplaza de 2 en 2.

LEDS=LEDS>>1 (Equivale a dividir para 2) se desplaza 1 a la derecha.


LEDS=LEDS>>2 (Equivale a dividir para 4) se desplaza 2 a la derecha.

Ejemplo:

X VAR BYTE ; Se crea una variable X de tamaño 1 … 255


LEDS VAR PORT B ; Todo el puerto B se llama LEDS
TRISB=0 ; Todo el puerto B es de salida
LEDS=1 ; LEDS=1 (%00000001) cargamos la variable LEDS con 1, sino lo
hacemos equivale a multiplicar por cero.
PGRM:
FOR X=1 TO 7
LEDS=LEDS<<1
PAUSE 200
NEXT

FOR X=1 TO 7
LEDS=LEDS>>1
PAUSE 200
NEXT
GOTO PGRM
END

PULSADORES

Son elementos de entrada.

Existen 2 tipos:

 1 Lógico (5V) al pulsar cambia a 0L


 0 Lógico (0V) al pulsar cambia a 1L

Figura X

Si se tiene una fuente de voltaje mayor a 5V (en el PiC solo 5 – 3V) se debe diseñar un divisor
de voltaje de tal manera que al PIC ingrese máximo 5V.
Ejemplo:

Figura X Divisor de voltaje

VT V PIC VT V1 V2
= = =
R 1 + R2 6.8 ← R 1 + R2 R1 R2

12 24
∗6. 8=V PIC ∗2.4=V PIC
16.8 12.4

12 24
i= =0.71 mA i= =1. 93 mA
16 . 8 k 12. 4 k

V PIC =4.9V V PIC =4.7V

PROGRAMA (Sumador binario sin antirrebote)

Figura X

cmcon=7
trisb=0
boton VAR porta.1
num VAR BYTE
num=0

Pulsar:
portb=num
IF boton=0 THEN contar
GOTO pulsar
Contar:
num=num+1
GOTO Pulsar
END
Nota: Cuando pulsa P y hasta saltarlo el PIC ya sumo muchas veces, es decir, no suma por cada
pulsada un número.

PROGRAMA (Sumador binario con antirrebote)

cmcon=7
trisb=0
boton VAR porta.1
num VAR BYTE
num=0

Pulsar:
portb=num
IF boton=0 THEN contar
GOTO pulsar
Contar:
IF boton=0 THEN contar
PAUSE 200
num=num+1
GOTO Pulsar
END

DECLARACIÓN IF … THEN

Sirve de condicionante, si es verdad ejecuta la operación que sigue al THEN, si es falsa sigue
con la operación de la línea siguiente. Tiene algunas formas de aplicación.

 IF Portb.0=0 THEN Paro


(Ir a Paro si en B.0 existe un cero lógico 0V)
 IF Portb.2=1 THEN arranque
(Ir a arranque si en B.2 existe un 1 lógico 5V)
 IF portb.0=0 THEN ; Si la operación es verdadera ejecuta todo lo que se
HIGH porta.2 encuentra entre THEN y END IF
PAUSE 1000
LOW porta.2
END IF
 IF portb.3=0 THEN
______________
______________ ; Si es verdad ejecuta todas estas operaciones
______________

ELSE

______________
______________ ; Si es falsa ejecuta todas estas operaciones
______________

END IF

Con esta sentencia se pueden utilizar operadores como: =, ≠, ¡=, >, <, <=, >= o
también OR, XOR, NOT AND, NOT OR, NOT XOR.

 IF porta.1=0 AND porta.3=0 THEN prog.

LED INTERMITENTE VELOCIDAD VARIABLE

Pulbaja VAR portb.5


Pulsube VAR portb.4
Led VAR portb.3
xy VAR byte
veces VAR byte
veces=100
inicio:
HIGH Led
GOSUB TIMER
Low Led
GOSUB TIMER
GOTO inicio
timer:
if pulsube=0 then GOSUB RESTAR
if pulbaja=0 then GOSUB SUMAR
FOR xy=1 TO VECES
PAUSE 5
NEXT
RETURN
SUMAR:
If veces > 150 then RETURN
VECES=VECES+5
RETURN
RESTAR:
If veces < 10 then RETURN
VECES=VECES-5
RETURN
END

Figura X

MANEJO DE DISPLAY

Los display son utilizados para visualizar datos sean estos numéricos o alfanuméricos.

Ej: Utilización de un display de 7 segmentos con CI 7447 (decodificador de B a D).

Figura X

trisb=%
numero VAR BYTE
encerar:
numero=0
display:
portb=numero
PAUSE 500
IF numero=9 THEN encerar ; 9 = 1011
numero=numero+1
GOTO display
END

MODULOS LCD

LCD (Display de Cristal Líquido).- Visualiza mensajes, etc.

Puede presentar cualquier carácter (LCD) ASCII.

Existen de 2x8 / 2x16 / 2x20 ……………

Son de 14 pines (sin backlight)


Son de 16 pines (con backlight)

b…..l (iluminado de pantalla)

Figura X

PIN SIMBOLO DESCRIPCION


1 Vss Tierra
2 Vdd Alimentación 5V
3 Vo Ajuste del contraste
4 RS Registro
5 R/W Lectura (1) / Escritura (0)
6 E Habilitación: Conectado (1) Desconectado (0)
7 D0 Bit menos significativo
8 D1
9 D2
10 D3
11 D4
12 D5
13 D6
14 D7 Bit más significativo
15 A Alimentación del Backlight (3.5 – 5V)
16 K Tierra del Backlight

DECLARACION LCDOUT

Muestra caracteres en pantalla.

Ej:

LCDOUT $FE,1, “HOLA” ; Limpia la pantalla y escribe HOLA.

COMANDO OPERACIÓN
$FE, 1 Limpia la pantalla
$FE, 2 Vuelve al inicio
$FE, $0C Apaga el cursor
$FE, $0E Subrado del cursor
$FE, $0F Parpadeo del cursor
$FE, $10 Mueve una posición a la izquierda
$FE, $14 Mueve una posición a la derecha
$FE, $80 Cursor al inicio primero línea
$FE, $C0 Cursor al inicio segunda línea
$FE, $94 Cursor al inicio tercera línea
$FE, $D4 Cursor al inicio cuarta línea

Los LCD pueden trabajar con 4 bit o con 8 bits.


4 bits → 4 cables

- Primero: Cuatro bit más altos.


- Segundo: 4 bit bajos.
Mayor tiempo

8 bits → 8 cables Toda la información al mismo tiempo.

Menor tiempo

MCLR (Reset Externo)

El MCLR se utiliza con el puerto A5 con 1 lógico.

Al pulsar el MCLR se detiene la operación y al soltarlo continua la aperación.

En el momento de grabar el PIC el MCLR debe estar habilitado.

Figura X

iniciar
HIGH Portb.4
PAUSE 200
LOW Portb.4
PAUSE 200
GOTO iniciar
END
X VAR BYTE
P CON $FE ; Asigna P a la constante $FE
PANTALLA:
PAUSE 2000
LCDOUT P,1 ; Limpia la pantalla
PAUSE 2000
LCDOUT P,$OF ; Muestra el cursor
PAUSE 2000
LCDOUT P,$14 ; Cursor una casilla a la derecha
PAUSE 2000
FOR X=1 TO 3
LCDOUT P,$10 ; Cursor una casilla a la izquierda
PAUSE 1000
NEXT
PAUSE 2000
LCDOUT P,1
LCDOUT “POLITECNICA”
PAUSE 2000

Figura X
DECLARACION LOOKUP

Permite visualizar una palabra, carácter por carácter.

PAUSE 200
X VAR BYTE
Y VAR BYTE
CARACTER:
LCDOUT $FE,1
FOR X=0 TO 10
LOOKUP X, [“POLITECNICA”], Y
LCDOUT, Y
PAUSE 400
NEXT
PAUSE 2000
GOTO CARACTER
END

VISIBLES 16 40
LCD
16 24

PGRM → Texto en movimiento

PAUSE 200
X VAR BYTE
Y VAR BYTE
LCDOUT $FE, $7 ; Configura para desplazamiento hacia la izquierda
LCDOUT $FE, 1
INICIO:
LCDOUT $FE, $90 ; Ubica el cursor en la casilla 17.
FOR X=0 TO 23
LOOKUP X, [“MICROCONTROLADORES – PIC – ”], Y
LCDOUT, Y
PAUSE 400
NEXT
GOTO INICIO
END

DECLARACION COUNT

Cuenta el número de pulsos que ingresan por un PIN.

COUNT PORTB.0,1000,Y

Siendo; PORTB.0 = Ingreso de pulsos puerto B0

1000 = Por el tiempo de 1000 mseg

Y = y lo almacena en Y

También podría gustarte