Escolar Documentos
Profissional Documentos
Cultura Documentos
microcontrolador en
un lenguaje de alto
nivel.
ALUMNOS:
SANDRA GÓMEZ JIMÉNEZ
LIZET PÉREZ SANTIAGO
JOSÉ ARMANDO CRUZ VILLA
JONATAN JIMÉNEZ GUTIÉRREZ
Introducción a la programación en
lenguaje
de valto nivel en
microcontroladores.
Como el proceso de escribir un código ejecutable era
considerablemente arduo, en consecuencia fue creado el primer
lenguaje de programación denominado ensamblador (ASM).
Siguiendo la sintaxis básica del ensamblador, era más fácil escribir y
comprender el código. Las instrucciones en ensamblador consisten
en las abreviaturas con significado y a cada instrucción
corresponde una localidad de memoria. Un programa
denominado ensamblador compila (traduce) las instrucciones del
lenguaje ensamblador a código máquina (código binario).
Ventajas de lenguajes de
programación de alto nivel
A pesar de todos los lados buenos, el lenguaje ensamblador tiene
algunas desventajas:
Incluso una sola operación en el programa escrito en ensamblador
consiste en muchas instrucciones, haciéndolo muy largo y difícil de
manejar.
Cada tipo de microcontrolador tiene su propio conjunto de
instrucciones que un programador tiene que conocer para escribir
un programa
Un programador tiene que conocer el hardware del
microcontrolador para escribir un programa
Estructura del programa
1 La Unidad Aritmética Lógica (ALU), que ejecuta todas las
operaciones solicitadas.
2 Una serie de registros, donde se almacenan temporalmente los
datos. De aquí, la ALU extrae las instrucciones sobre las operaciones
específicas a realizar y sobre el segmento de la memoria RAM donde
vaciará sus resultados una vez ejecutadas las instrucciones.
3 Una serie de bloques de control (direcciones, datos, memoria), para
comunicarse con el exterior. Estos bloques controlan el flujo de
información y el orden de ejecución del programa.
4 El circuito de reloj o Timer, sincroniza perfectamente la ejecución de
todas las operaciones señaladas en los tres puntos anteriores.
El microprocesador determina si una afirmación es cierta o falsa
mediante las reglas del álgebra de Boole. En la actualidad este
componente electrónico está compuesto por millones de transistores,
integrados en una misma placa de silicio.
Puertos de Entrada/Salida
Con el propósito de sincronizar el funcionamiento de los puertos de E/S
con la organización interna del microcontrolador de 8 bits, ellos se
agrupan, de manera similar a los registros, en cinco puertos denotados
con A, B, C, D y E. Todos ellos tienen las siguientes características en
común:
Por las razones prácticas, muchos pines de E/S son multifuncionales.
Si un pin re aliza una de estas funciones, puede ser utilizado como
pin de E/S de propósito general.
Cada puerto tiene su propio registro de control de flujo, o sea el
registro TRIS correspondiente: TRISA, TRISB, TRISC etc. lo que
determina el comportamiento de bits del puerto, pero no
determina su contenido.
Al poner a cero un bit del registro TRIS (pin=0), el pin
correspondiente del puerto se configurará como una salida. De
manera similar, al poner a uno un bit del registro TRIS (bit=1), el pin
correspondiente del puerto se configurará como una entrada. Esta
regla es fácil de recordar: 0 = Entrada 1 = Salida.
Interrupciones
Interrumpen la ejecución de un programa y pasan a la rutina de servicio del evento que provoca
la interrupción.El vector de interrupción se encuentra en la dirección 04H de la memoria de
programa.Al terminar la rutina de servicio (RETFIE) se retoma el programa en el ‘punto de ruptura’.
Fuentes de interrupción:
• Pin INT, cambio en los terminales del puerto B (RB7:RB4).
• Overflow en los temporizadores.
• Cambio en el comparador.
• Fin de escritura en la memoria EEPROM de datos.
• Relacionadas con el Puerto Paralelo Esclavo, con la USART, con el fin de conversión A/D y en
general con los módulos periféricos con que puede contar una MCU.
Gestión de interrupciones mediante registros:
• INTCON: registro general de control y estado.
En función de los periféricos disponibles por una MCU:
•PIE1, PIE2 (Peripheal Interrupt Enable) habilitan las interrupciones de cada periférico.
• PIR1 y PIR2 (Peripheal Interrupt Flag Registers) identifican el periférico que interrumpe.
Adquisición de datos de interfaz
externa
El siguiente apartado describe el proceso mediante el cual se
convierten los dos valores analógicos provenientes de la interfaz del
usuario (entradas del controlador difuso) en sus equivalentes
números digitales. El voltaje de referencia es el voltaje de la fuente
VDD (5V). Dichos valores se encuentran en el pin AN0 Y AN1 del
microcontrolador. Los valores de salida se entregan en los registros:
VALOR_PRIMER_POT y VALOR_SEGUNDO_POT.
La secuencia de la rutina es la
siguiente:
1. El programa recibe una interrupción de cambio. En la ISR cambia el canal de
adquisición del convertidor A/D al primer canal (AN0). Como se mencionó,
tiene 72 que esperar un tiempo de adquisición. Para ello se programa el Timer0
con el tiempo de adquisición mínimo cuyos cálculos se muestran al final de este
apartado (fórmula 4). Regresa al programa principal.
2. Recibe la interrupción del Timer0 que indica que ya terminó el tiempo de
adquisición. En la ISR activa la conversión y regresa al programa principal.
3. Recibe la interrupción de que la conversión esta lista. En la ISR lee el valor de
la primera conversión y lo guarda en el registro VALOR_PRIMER_POT. Seguido a
esto, cambia el canal de adquisición al segundo canal (AN1) y configura
nuevamente el Timer0 para dar el tiempo necesario de adquisición. Regresa al
programa principal.
4. Se repiten los pasos 2 y 3, salvo que el resultado es guardado en el registro
VALOR_SEGUNDO_POT
Adquisición de datos externos
Programación de la inferencia
Puerto B:
• Puerto de 8 bits bidireccionales
Diagrama de bloques
para RB3:RB0.
Configuración y programación del
PIC
Existen muchos tipos de conversores, pero resulta interesante
destacar tres elementos primordiales que pueden ser muy
importantes a la hora de definir con cual trabajar:
Error o precisión con respecto a un calculo teórico o constante de
proporcionalidad.
Frecuencia máxima de trabajo y de la señal de entrada (en caso
de trabajar con señal no-continua).
Resolución (del registro en bits que representa la tensión).
Introduciendonós al PIC16f877, la idea es tratar de explicar como
utilizar el modulo conversor que este contiene.
Este PIC al trabajar con la característica de conversor A/D permite
representar un valor de tensión contenido en un rango predefinido,
a través de una palabra de 10 bits. Esto brinda una gran resolución
lo que permite tener una precisión aceptable.
Si las tensiones de referencia son Vref+ y Vref-, tensiones continuas
situadas en un rango permisible del PIC (ver datasheet) entonces la
resolucion es de:
Resolucion = (Vref+ - Vref- )/1024
Suponiendo que ya tienen una idea de cuales son las direcciones de
un PIC16f877 y la arquitectura de este microcontrolador, les comento
como trabajar sencillamente para configurar el A/D.
¿En que elementos se constituye el
módulo de conversión A/D del
PIC?
Un registro de resultado de la conversión que consiste en dos bytes:
Un byte alto o ADRESH (Bank0 0x1E)
Un byte bajo o ADRESL (Bank1 0x9E)
-Dos registros de control y configuración del modulo A/D:
Registro ADCON0 (Bank0 0x1F)
Registro ADCON1 (Bank1 0x9F)
-Dos niveles de tensión de referencia que pueden configurarse entre los bits:
RA2, RA3
RA2, VSS
RA3, VSS
VDD, VSS
¿Cómo configuro y utilizo el
conversor en el PIC?
Necesitamos configurar el puerto que recibirá la llamada tensión
de referencia, la velocidad de "lectura de los valores de tensión, las
lineas que estarán pudiendo recibir niveles de tensión a leer y otros
elementos más.
El registro ADCON0 que se ubica en el primer banco (necesitamos
acceder a este banco antes de configurarlo), más precisamente
en la dirección 1F está compuesto de los siguientes bits:
El bit menos significativo ADON deberá estar en 1 para activar el
modulo.
El bit de control GO/DONE estará en 1 cada vez que el modulador esté
trabajando: este bit lo podemos utilizar como flag para encender un
led o evitar que se produzca una interrupción durante el proceso.
Como podemos trabajar leyendo niveles de tensión desde cualquiera
de los canales del puerto A del PIC entonces los bits CHS2, CHS1 y CHS0
permiten escoger el puerto que el conversor "leerá". Por ej:
CH2,CH1,CH0= 101 utiliza el puerto RA5 para leer niveles de tensión.
Por otra parte, el registro ADCON1 situado en el banco 0 más
precisamente en la dirección 9F, se encarga más que todo de la
configuración de las tensiones de referencia y la velocidad de
actualización. Así:
Como los bits del registro del conversor son 10, los 2 bits del byte
alto pueden ser justificados a la izquierda o a la derecha. El
hardware completa con 0's los demás 6 bits. El bit ADFM permite la
justificación: si es 1 se justifica a la derecha, si es 0 lo hace a la
izquierda.