Pic Trabajo
Pic Trabajo
Pic Trabajo
PIC de Gama
media
Profesor: Alumnos:
Acarigua, 2023
INTRODUCCIÓN
¿Por qué aprender sobre los mapas de Karnaugh? El mapa de Karnaugh, al igual que el álgebra
booleana, es una herramienta de simplificación aplicable a la lógica digital. El mapa de Karnaugh
simplificará la lógica más rápido y fácilmente en la mayoría de los casos. A través de estos,
podemos simplificar nuestra ecuación de acuerdo a la tabla de la verdad que en el momento
tengamos. Así podemos tener la posibilidad de realizar un montaje más ágil y efectivo en nuestro
Protoboard.
La simplificación booleana es en realidad más rápida que el mapa de Karnaugh para una tarea que
involucra dos o menos variables booleanas. Todavía es bastante utilizable en tres variables, pero un
poco más lento. En cuatro variables de entrada, el álgebra booleana se vuelve tedioso. Los mapas
de Karnaugh son más rápidos y fáciles. Los mapas de Karnaugh funcionan bien para hasta seis
variables de entrada, son utilizables para hasta ocho variables.
PIC DE GAMA MEDIA
Es la gama más variada y completa de los PIC. Abarca modelos con encapsulado desde 18 patitas
hasta 68, cubriendo varias opciones que integran abundantes periféricos.
En esta gama sus componentes añaden nuevas prestaciones a las que poseían los de la gama baja,
haciéndoles más adecuados en las aplicaciones complejas. Admiten interrupciones, poseen
comparadores de magnitudes analógicas, convertidores A/D, puertos serie y diversos
temporizadores.
El repertorio de instrucciones es de 35, de 14 bits cada una y compatible con el de la gama baja.
Sus distintos modelos contienen todos los recursos que se precisan en las aplicaciones de los
microcontroladores de 8 bits. También dispone de interrupciones y una Pila de 8 niveles que
permite el anidamiento de subrutinas.
Encuadrado en la gama media también se halla la versión PIC14C000, que soporta el diseño de
controladores inteligentes para cargadores de baterías, pilas pequeñas, fuentes de alimentación
ininterrumpibles y cualquier sistema de adquisición y procesamiento de señales que requiera
gestión de la energía de alimentación. Los PIC 14C000 admiten cualquier tecnología de las baterías
como Li-Ion, NiMH, NiCd, Ph y Zinc.
El temporizador TMR1 que hay en esta gama tiene un circuito oscilador que puede trabajar
asíncronamente y que puede incrementarse, aunque el microcontrolador se halle en el modo de
reposo (“sleep”), posibilitando la implementación de un reloj en tiempo real. Las líneas de E/S
presentan una carga “pull-up” activada por software.
CUÁLES SON LOS PASOS A SEGUIR PARA REALIZAR UNA APLICACIÓN REAL
CON UN PIC?
1. Construir o comprar un programador de PIC compatible con los dispositivos a programar y
con el sistema operativo disponible.
2. Descargar el software de control (software de programación) del programador e instalarlo:
por ejemplo, PICkit2 v2.61, etc.
3. Descargar e instalar el ambiente de desarrollo de programación de PIC en lenguaje C
(mikroC).
4. Seguir las indicaciones del libro para crear un nuevo proyecto, configurarlo, escribir el
código fuente en lenguaje C y compilarlo para obtener el ejecutable *.hex (aplicación).
5. Descargar el fichero ejecutable al PIC por medio del software de programación y del
programador conectado a la computadora personal.
6. Retirar el PIC del programador y colocarlo en el circuito de aplicación y, ¡a disfrutar con
los maravillosos resultados! La siguiente figura muestra la secuencia de programación:
Un microcontrolador está compuesto de varios bloques
funcionales, los cuales cumplen una tarea específica;
incluye en su interior las tres principales unidades
funcionales de una computadora:
Unidad central de procesamiento (CPU): se
encarga de ejecutar las instrucciones y realizar las
operaciones con los datos.
Memorias: FLASH para las instrucciones del
programa, EEPROM (de almacenamiento
permanente) para datos y RAM (de
almacenamiento temporal) para datos.
Periféricos de entrada/salida: permiten la
comunicación del microcontrolador con su entorno
físico recibiendo y entregando datos en forma de
señales eléctricas. La conexión a los periféricos se
realiza por medio de las patillas (alfileres o pines)
del circuito integrado que conforma el
microcontrolador.
Adicionalmente existe otra terminología que conviene
conocer y entender ya que se emplea con mucha frecuencia
en el mundo de la programación de microcontroladores:
Compilador: Software que se encarga de convertir
el código escrito en lenguaje C (lenguaje humano) a
código de maquina (lenguaje de maquina). El
código en lenguaje C se conoce como código fuente
mientras que el código de maquina se conoce como
código ejecutable.
IDE (Integrated Development Environment) Ambiente de desarrollo
Integrado: software de computador que sirve para el desarrollo de programas para
microcontroladores PIC. mikroC PRO for PIC es un IDE. Básicamente un IDE está
conformado por dos partes: a) Un editor de texto para escribir el código fuente y b) Un
compilador.
Programador: es un dispositivo de hardware electrónico diseñado para transferir el código
ejecutable (código de maquina) desde el computador hacia la memoria de programa del
microcontrolador PIC. La conexión entre el computador y el programador se realiza por
medio del puerto USB; el proceso se conoce como programación, grabación o quemado
(por esta razón el programador también se suele llamar grabador o quemador). También
recibe el nombre de programador la persona que se encarga de escribir programas para
microcontroladores.
Pin: cada una de las patillas o alfileres del microcontrolador. Por ejemplo, el PIC16F628A
tiene 18 pines (encapsulado DIP18).
Sintaxis: Conjunto de reglas definidas para escribir correctamente un lenguaje de
programación. mikroC PRO para PIC tiene su propia sintaxis que es muy similar a la
sintaxis del lenguaje C de computadoras (ANSI C).
Programa: Es una secuencia de instrucciones, escritas en un determinado lenguaje de
programación para realizar una tarea específica en un microcontrolador. En este curso se
escribirán los programas de acuerdo a la sintaxis propia de mikroC PRO for PIC.
INSTRUCCIONES EN BASIC PARA PICS
Existen compiladores “especiales” en los que se puede editar en el lenguaje Basic o C y obtener un
file “hex” listo para que su grabador de PICs lo utilice.
PicBasic Pro de Micro Engineering Labs Inc. es uno de los más conocidos. Este poderoso
compilador pone al alcance del usuario potentes instrucciones para comunicación serie, matemática
de 16 bits, mediciones de censores analógicos, PWM, sonido, y muchísimas más. Además de
general los files “hex” y también es capaz de generar los files “asm”. De tal manera que sí se
pueden hacer modificaciones de bajo nivel.
Otra magnífica característica de este compilador es que además de soportar al PIC16F84 también
soporta a muchos otros de la gran familia de MICROCHIP. Por ejemplo, los micros Flash
PIC16F628, 16F876 y el 16F877.
If . . Then
Salto condicional a otra instrucción.
For . . Next
Repite varias veces una serie de instrucciones.
Gosub
Llamada a una subrutina
High
Enciende un pin
Low
Apaga un pin
Serin
Entrada serie asíncrona en un pin. (RS232)
Serout
Salida serie asincrona en un pin. (RS232)
Adcin
Lee el convertidor analógico digital
Write
Escribe en la memoria EEPROM del PIC
Hpwm
Salida para generar modulación en anchura de pulsos
El Proton Plus IDE es un elemento de programación basado en Basic estructurado orientado a la
entrada y salida de señales. La utilización de sencillas instrucciones de alto nivel, permite
programar los microcontroladores para controlar cualquier aplicación llevada a cabo por un
proceso. Las instrucciones de PBASIC PROTON PLUS IDE permiten controlar las líneas de
(entrada/salida) de un microcontrolador PIC, realizar temporizadores, realizar transmisiones serie
asíncrona, utilizar el protocolo SPI, programar pantallas LCD, capturar señales analógicas, emitir
sonidos, etc... Y todo ello en un sencillo entorno de programación que facilita la creación de
estructuras condicionales y repetitivas con instrucciones como IF THEN o FOR…NEXT y la
creación de etiquetas de referencia.
El compilador Proton Basic es un lenguaje de programación de nueva generación que hace más
fácil y rápido el manejo de microcontroladores Pic micro de Microchip. El lenguaje Basic es
mucho más fácil de leer y escribir que el lenguaje ensamblador Microchip.
El Proton Basic produce un código que puede ser programado para una variedad de micro
controladores PIC que tengan de 8 a 68 pins y varias opciones en el chip incluyendo convertidores
A/D, temporizadores y puertos seriales.
IDENTIFICADORES
Un identificador es simplemente un nombre. Son usados en Pronto Basic como etiquetas de líneas
y nombres de variables. Un identificador es cualquier secuencia de letras, dígitos y símbolos,
aunque no deben comenzar con un dígito. Los identificadores no distinguen las letras mayúsculas
de las minúsculas, por lo que etiqueta, ETIQUETA, Etiqueta son todas tratadas como equivalentes.
Aunque las etiquetas pueden tener cualquier número de caracteres de longitud, Protón Basic
solamente reconoce los primeros 32.
ETIQUETAS
Para marcar líneas que el programa puede desear referenciar con comandos GOTO o GOSUB,
Proton BAsic usa tiquetas de línea y no permite número de línea y no requiere que cada línea sea
etiquetada. Cualquier línea puede comenzar con una etiqueta de línea que es simplemente un
identificador seguido por dos puntos (:)
Ejemplo:
here:
Goto here
VARIABLES
Variables es donde se guardan datos en forma temporaria en el programa. Son creadas usando la
palabra clave DIM. Pueden ser bits, bytes, word, dword, float y string.
DIM Var1 AS BYTE ‘Crea una variable de 8-bit sin signo (0 - 255)
DIM Var3 AS WORD ' Crea una variable de 16-bit sin signo (0 - 65535)
DIM Var4 AS DWORD ' Crea a variable de 32-bit con signo (-2147483647 , +2147483647)
DIM ST AS STRING * 20 ' Crea una cadena con capacidad de 20 caracteres (8-bit)
ALIAS
DIM también puede ser usado para crear un alias para una variable. Esto es muy útil para acceder al
interior de una variable.
ARREGLOS
Los arreglos de variables pueden ser creados en una manera similar a las variables.
Tipo es BIT, BYTE ó WORD. Número de elementos es cuantos lugares en el arreglo se desean.
Algunos ejemplos de creación de arreglo son los siguientes:
La primera ubicación dentro del arreglo es el elemento cero. Dada la forma en que los arreglos
están localizados en memoria hay límites de tamaño para cada tipo.
CONSTANTES
Las llamadas constantes pueden ser creadas de manera similar a las variables. Puede ser más
conveniente usar un nombre de constante en lugar de un número constante. Si el número necesita
ser cambiado, únicamente puede ser cambiando en un lugar del programa donde se define la
constante. No pueden guardarse datos variables dentro de una constante. Ejemplos:
En este ejemplo la constante mice es de 4,13 y la misma no puede ser modificada durante el
transcurso del programa.
CONSTANTES NUMÉRICAS
Proton BAsic permite definir constantes numéricas en tres bases: decimal, binario y hexadecimal.
Valores binarios son definidos usando el prefijo “%” y valores hexadecimales usando el prefijo
“$”. Los valores decimales se toman por defecto y no requieren prefijo. Ejemplos:
PINES
A los pines de Microcontrolador, se puede acceder de diferentes modos. El mejor camino para
especificar un pin para una operación, es simplemente usar sus nombres PORT y un número de bit:
PORTB.1=1 ‘Coloca PORTB, bit 1 a 1
Para recordar fácilmente para qué puede ser usado un pin, debe serle asignado un nombre usando
el comando DIM. De esta manera, el nombre puede ser utilizado luego en cualquier operación.
COMENTARIOS
Un comentario de Protón Basic comienza con la palabra clave REM o el apóstrofe (´). Todos los
demás caracteres de esa línea se ignoran. REM es una única palabra clave y no es una abreviación
de REMark, por lo tanto, los nombres de variables pueden comenzar con REM (aunque REM por sí
mismo no es válido).
DECLARACIONES MÚLTIPLES
W2 = W0
W0 = W1
W1 = W2
Es lo mismo que:
W2 = w0 : W0 = W1 : W1 = W2
Protón Basic efectúa todas las operaciones matemáticas en orden jerárquico. Esto significa que
existe precedencia para los operadores. Multiplicación y división son efectuados antes que suma y
resta, por ejemplo.
Para asegurarse que las operaciones son efectuadas en el orden que se desea, se usan paréntesis
para agrupar las operaciones.
A=(B+C)*(D-E)
Todas las operaciones matemáticas se realizan sin signo y con una precisión de 16 bit.
Los operadores soportados son:
+ Suma
- Resta
* Multiplicación
/ División
// Resto (módulo)
COS Coseno
DIG Digito
SIN Seno
OPERADORES LÓGICOS
Los operadores lógicos difieren de las operaciones de bit inteligente. Entregan un resultado
CIERTO / FALSO de su operación. Valores 0 son tratados como falso. Cualquier otro valor es
cierto. Se usan junto a operadores de comparación en una declaración IF..THEN. Los operadores
soportados son:
Operador Descripción
OR o I I OR logico
Relational operators are used to compare two values as shown in the list below. The result can be
used to make a decision regarding program flow.
Los Operadores de Relación son usados para comparar dos valores como se muestra en la lista
abajo. El resultado es boleano y puede ser usado para tomar decisiones en el flujo del programa.
CALL ETIQUETA
Ejecuta la subrutina ensamblador llamada etiqueta. Normalmente se usa GOSUB para ejecutar una
subrutina. La principal diferencia entre GOSUB y CALL, es que con ésta última no se chequea la
existencia de etiquetas hasta el momento de ensamblar. Usando CALL se puede acceder a una
etiqueta en una sección de lenguaje ensamblador, lo que es inaccesible mediante Protón Basic.
Dentro de los comandos de Protón Basic más estudiados para la elaboración del diseño se describen
los Siguientes:
END
Detiene la ejecución del proceso y entra en modo de baja potencia. Todos los pins de I/O
permanecen en el estado en que se encuentran, END trabaja ejecutando una instrucción SLEEP
continua dentro de un loop. Un END, STOP ó GOTO deben ser colocados al final de un programa
para evitar pasar del límite de la misma u comience nuevamente.
FOR .. NEXT
El loop FOR .. NEXT permite a los programas ejecutar un número de declaraciones (Body) un
número de veces, usando una variable como contador. Debido a su complejidad y versatilidad, es
mejor describirla paso a paso.
El valor de Start se asigna a la variable índice, Count, que puede ser una variable de cualquier tipo.
Se ejecuta el Body. Body es opcional y puede ser omitido (quizás por un loop de demora). El valor
de Inc es sumado a (o restado si se especifica “-“) Count .Si no se define una cláusula STEP, se
incrementa Count en uno . Si Count no pasó End o desbordó el tipo de variable, la ejecución vuelve
al paso 2). Si el loop necesita contar más de 255 (Count > 255), se debe usar una variable de
tamaño Word.
IF ...THEN
Efectúa una o más comparaciones. Cada término Comp puede relacionar una variable con una
constante u otra variable e incluye uno de los operadores listados anteriormente. En la segunda
forma, IF..THEN puede ejecutar condicionalmente un grupo de declaraciones que sigan al THEN.
Las declaraciones deben estar seguidas por un ELSE o un ENDIF para completar la estructura.
Permite el manejo de las interrupciones del micro controlador por medio de una subrutina. Existen
dos formas de manejar interrupciones usando Proton Basic. La primera es escribir una subrutina de
interrupción en lenguaje ensamblador. Esta es la forma de manejar interrupciones con la menor
latencia y el menor overhead. El segundo método es escribir un handler (manejador) de
interrupciones. Es similar a una subrutina, pero termina con un RESUME. Cuando ocurre una
interrupción, se marca con una bandera. Cuando la ejecución de la declaración que se estaba
ejecutando termina, el programa salta al handler de interrupciones indicado en Label.
Una vez que termina el trabajo del handler, una declaración RESUME envía el programa de vuelta
a donde estaba cuando ocurrió la interrupción, tomando todo como lo dejó.
DISABLE Y ENABLE
Permiten que distintas secciones de un programa se ejecuten sin la posibilidad de ser interrumpidas.
El lugar más notorio para usar DISABLE es justo antes del actual handler de interrupciones. O el
handler puede ser colocado antes que la declaración ON INTERRUPT ya que la bandera de
interrupciones no se chequea antes del primer ON INTERRUPT en un programa.
1. Creación del proyecto. Dentro del simulador proteus iniciamos un nuevo proyecto y a
continuación nos abrirá una ventana llamada “New Project Wizard”.
En la sección start, le damos un nombre a nuestro proyecto, a continuación, nos pedirá una
serie de pasos para poder iniciar el proyecto y pulsamos next.
En la sección Schematic Design elegimos la opción “create a schematic from the selected
template” y pulsamos next.
En la sección PCB Layout elegimos “Do not create a PCB Layout” y pulsamos next.
En la sección firmware elegimos la opción “No firmware project” y pulsamos next.
2. Agregar componentes: Ahora debemos agregar los componentes que utilizaremos a nuestro
Device Selector, esto se hace dando click derecho en cualquier parte del mapa de bits y
colocamos el cursor sobre “Place” luego en “Component” luego damos click en “From
libraries”. Se nos abrirá la siguiente ventana:
En el buscador escribimos PIC16F877A, seleccionamos el resultado y damos doble click.
Repetimos el
proceso para
agregar la resistencia y el led, buscamos RES para la resistencia y LED-GREEN
para el led. Una vez que hayamos agregado los tres componentes damos click en
“Ok”.
3. Armar el circuito: Tenemos en la parte de “Devices” los componentes que anteriormente
hemos agregado, ahora sólo basta con dar click en el que queramos comenzar a utilizar y
elegimos en que parte del mapa de bits colocarlo.
Así debe quedar al terminar.
Unimos dando click la parte que deseamos unir con la parte a la que se unirá.
Ahora para colocar el GND debemos
cambiar en la barra de herramientas de
“Devices” a “Terminals Mode” y de la
misma forma que agregamos nuestros
componentes vamos a agregar GROUND.
Unimos el GND con nuestro LED-GREEN,
el PIN 33 del PIC con la resistencia y la
resistencia al
LED-GREEN.
Para cambiar el valor de la resistencia damos
doble clik sobre ella y cambiamos 10k por
330.
Escribimos el código. Una vez escrito damos click derecho en cualquier parte dentro del
código y damos click en “Compile”.
Si el código está bien escrito nos creará un archivo hexadecimal que ocuparemos más
adelante.