Professional Documents
Culture Documents
MÓDULO 6:
Conversor analógico/digital
2
Conversor
Analógico-Digital
3
Introducción
4
Registros (I)
5
Registros (II)
6
Alineación del resultado
7
Configuración del AD
8
Pruebas con el conversor A/D
Pontenciómetro
9
Ejemplo 1: Lectura por espera activa
ad0-leds.c
#include <pic16f876a.h> Configurar puerto
B para salida
void main(void)
{
TRISB = 0x00; Configurar pin RA0 como pin analogico y el
resto como digitales
ADCON1 = 0x0E;
TRISA0 = 1; Pin RA0 de entrada
ADFM = 0;
Alineación a la izquierda
ADCON0 = 0x00;
ADON=1; Seleccionar canal RA0 y reloj Fosc/2
10
Ejemplo 2: Lectura mediante interrupciones (I)
11
Ejemplo 2: Lectura mediante interrupciones
ad0-leds-int.c
Rutina de atencion a la interrupcion
#include <pic16f876a.h>
void isr() interrupt 0
{ Limpiar flag del conversor
ADIF=0; Leer la muestra y sacarla por los leds
PORTB=ADRESH;
Comenzar la siguiente lectura
GO=1;
}
Configuracion del conversor. Igual que en el ejemplo
void main(void) anterior
{
Habilitar la interrupcion
(...) del conversor
Se toma una
Habilitar las muestra por RA0 y se
ADIE=1; interrupciones de los
saca por el puerto B
PEIE=1; periféricos
para verla en los leds
GIE=1; Habilitar las
interrupciones globales
ADIF=0; Limpiar flag de interrupción
GO=1; Comenzar la lectura
while(1);
} El bucle principal no hace nada. Todo se 12
realiza mediante interrupciones
Ejemplo 3: vúmetro
Mostrar por los leds una barra
ad0-vumetro.c indicadora de la tensión de entrada
#include <pic16f876a.h>
Valores a sacar por el vúmetro según la
tensión se va incrementando
unsigned char vumetro[] = {0x00,
0x01, 0x03 ,0x07, 0x0F, 0x1F, 0x3F,
índice para acceder a la tabla vúmetro
0x7F, 0xFF};
unsigned char indice; Muestra leída
unsigned char muestra;
Rutina de atención a la interrupción
void isr() interrupt 0
Limpiar flag de interrupción
{
ADIF=0; Leer la muestra de 8 bits
muestra=ADRESH;
Si se lee el valor máximo, por el vumetro se
if (muestra==0xFF) indice=8; saca el último elemento (0xFF)
else indice=muestra>>5;
Usar como índice los 3 bits más significativos
PORTB=vumetro[indice];
de la muestra
GO=1;
Leer el valor de la tabla y enviarlo a los leds
}
Comenzar la siguiente conversión
void main(void)
{ El programa principal es igual que en el
(...) ejemplo anterior
13
}
Ejercicio:
14