Proceso de Conversión: Programación en Lenguaje C para Microcontroladores de 8 Bits Pic18Fxxxx

También podría gustarte

Está en la página 1de 5

22/04/2019

oz
un
M
ir a
re
Pe
s
su
Je
Programación en Proceso de conversión
an
m
er

lenguaje C para
.G
ng

Microcontroladores de 8 bits
I
c.
.S

PIC18FXXXX
M

ADC
M.Sc. Ing. Germán Jesús Pereira Muñoz

M.Sc. Ing. Germán Jesús Pereira M.Sc. Ing. Germán Jesús Pereira
22/4/2019 1 22/4/2019 2
Muñoz Muñoz

1 2

Sample &
Descripción Hold
• Puede llegar hasta a 50K muestras por segundo.
• Resolución programable por software en modo de 8 y 10
bits.
• 10 entradas con los dispositivos de 28 pines
• 13 entradas con los dispositivos de 40/44 pines.
• Rango del voltaje de entrada para el ADC 0-Vcc.
• Referencia de voltaje interna o externa.
• Modo de conversión ADC (continua o individual).
• Inicio de conversión ADC por Auto-Disparo en fuentes de
Interrupción.
• Interrupción ADC al completar la conversión. La solución es que la señal analógica está "congelado" durante la transformación.
La conversión AD empieza a tomar una ”muestra” de la señal con un interruptor de
• Tiempo de adquisición programable (0 a 20TAD) y la almacena en un condensador.
En la serie PIC18FXXXX, el muestreo tiene una capacitancia de 25 pF.
M.Sc. Ing. Germán Jesús Pereira M.Sc. Ing. Germán Jesús Pereira
22/4/2019 3 22/4/2019 4
Muñoz Muñoz

3 4

Tiempo de adquisicion tACQ Esquema de convercion

Cada vez que se ha seleccionado un canal de conversión para cambiarlo


se debe tomar en cuenta el tiempo Chold para subir a la tensión
analógica.
M.Sc. Ing. Germán Jesús Pereira M.Sc. Ing. Germán Jesús Pereira
22/4/2019 5 22/4/2019 6
Muñoz Muñoz

5 6

1
22/04/2019

oz
un
M
ir a
re
Pe
s
su
Modulo ADC Modulo ADC
Je
an
m
er
.G
ng
I
c.
.S
M

M.Sc. Ing. Germán Jesús Pereira M.Sc. Ing. Germán Jesús Pereira
22/4/2019 7 22/4/2019 8
Muñoz Muñoz

7 8

ADCON0 REGISTER 0 ADCON1 REGISTER 1 (Part I)

CHS3:CHS0 – VCFG1: Bit de configuración de la tensión de referencia VREF-:


BIT 5-2 CHS3:CHS0: Bits selectores del canal analógico
0 0 0 0 = canal 0 (AN0) * VCFG1=‘0’: VREF- se conecta a VSS
BIT 1 GO/DONE*: Bit A/D del estado de la conversión 0 0 0 1 = canal 1 (AN1) * VCFG1=‘1’: VREF- se conecta a la línea física RA2
Cuando ADON=1: 0 0 1 0 = canal 2 (AN2)
1 = conversión A/D en marcha 0 0 1 1 = canal 3 (AN3) – VCFG0: Bit de configuración de la tensión de referencia VREF+:
0 = A/D en reposo 0 1 0 0 = canal 4 (AN4) * VCFG1=‘0’: VREF+ se conecta a VDD
BIT 0 ADON: Bit de permiso del A/D 0 1 0 1 = canal 5 (AN5)(1,2) * VCFG1=‘1’: VREF+ se conecta a la línea física RA3
1 = módulo A/D permitido 0 1 1 0 = canal 6 (AN6)(1,2)
0 = módulo A/D no permiido 0 1 1 1 = canal 7 (AN7)(1,2) – PCFG3..PCFG0: Bits configuración de los puertos de conversión A/D.
1 0 0 0 = canal 8 (AN8)
1 0 0 1 = canal 9 (AN9)
Mediante estos bits se establecen las líneas físicas (RA5..RA0, RB4..RB0, RE2..RE0) que van
1 0 1 0 = canal 10 (AN10)
1 0 1 1 = canal 11 (AN11)
a trabajar como entradas del convertidor A/D.
Nota 1: Estos canales no se implementan en los dispositivos de 28pines.
2: La ejecución de una conversión en los canales no implementados 1 1 0 0 = canal 12 (AN12)
devolverá una medida flotante de la entrada. 1 1 0 1 = No implementado(2)
1 1 1 0 = No implementado(2)
1 1 1 1 = No implementado(2)

M.Sc. Ing. Germán Jesús Pereira M.Sc. Ing. Germán Jesús Pereira
22/4/2019 9 22/4/2019 10
Muñoz Muñoz

9 10

ADCON1 REGISTER 1 (Part II) ADCON1 REGISTER 1 (Part III)


Rango tensiones de conversión:
Por defecto el rango de tensiones de conversión del convertidor A/D del PIC18F4550 es de 0V
a 5V. Sin embargo puede modificar este rango para aumentar la resolución de la conversión
acercando las tensiones de referencia máxima y mínima VREF+ y VREF- a los limites de variación
de la señal que se desea digitalizar.

Esto se puede conseguir configurando las líneas RA2/AN2/VREF- y RA3/AN3/VREF+ como


tensiones de referencia del convertidor A/D (poniendo a ‘1’ los bits VCFG1 y VCFG0 del
Nota 1: El valor de POR de los bits PCFG depende del valor del bit de configuración PBADEN. Cuando PBADEN=1, registro ADCON1). De esta forma el rango de tensiones de conversión vendrá determinado por
PCFG<3: 0>=0000; cuando PBADEN=0, PCFG<3: 0>=0111.
2: AN5 con AN7 están disponibles solamente en losIng.
M.Sc. dispositivos
Germán Jesús Pereira
40/44pines. las tensiones que se conecten en dichas líneas.
M.Sc. Ing. Germán Jesús Pereira
22/4/2019 11 22/4/2019 12
Muñoz Muñoz

11 12

2
22/04/2019

oz
un
M
ir a
re
Pe
s
ADCON2 REGISTER 2 (Part II)

su
ADCON2 REGISTER 2 (Part I)
Je
an
m
er

Señal de reloj de conversión:


.G

Se define TAD como el tiempo de conversión de 1 bit. Una operación completa de conversión
ng

requiere un total de 11 TAD para 10 bits.


La señal de reloj que genera las temporizaciones TAD puede ser establecida mediante los bits
I
c.

– ADFM: Bit de configuración del tipo de almacenamiento del resultado de la conversión en los ADCS2..ADCS0.
.S

registros ADRESH y ADRESL: Existen dos fuentes para dicha señal de reloj:
M

* ADFM=‘0’: El resultado de la conversión se almacena con justificación a  El oscilador principal


izquierdas  Una red RC interna que incorpora el propio convertidor A/D.
* ADFM=‘1’: El resultado de la conversión se almacena con justificación a  Puede utilizarse para realizar conversiones en modos de bajo consumo.
derechas
 Permite que se puedan llevar a cabo conversiones con el oscilador principal desactivado.
– ACQT2..ACQT0 : Bits de selección del tiempo de adquisición de un bit

– ADCS2..ADCS0: Bits selección de la señal de reloj del convertidor A/D

M.Sc. Ing. Germán Jesús Pereira M.Sc. Ing. Germán Jesús Pereira
22/4/2019 13 22/4/2019 14
Muñoz Muñoz

13 14

ADCON2 REGISTER 2 (Part III) ADCON2 REGISTER 2 (Part IV)


Establecimiento del tiempo de adquisición (Sample&Hold):
Antes de realizar una conversión se tiene que asegurar que el CHOLD ha sido
Señal de reloj de conversión: totalmente cargado a la tensión del canal seleccionado.
El valor de TAD debe ser lo menor posible pero siempre superior al TAD mínimo indicado en las
hojas de datos de PIC18F4550: 0,7us. Para realizar un cambio de canal de conversión se debe esperar un tiempo que
dependerá de la impedancia de entrada del convertidor A/D y de la impedancia de
Ejemplo: salida del circuito sobre el que se está haciendo la conversión.
Se elige el oscilador principal como fuente de reloj y FOSC=10MHz:

– Si configuramos ADCS2..ADCS0=000 => TAD=2*(1/10·106)=0,2us=> demasiado pequeño.


Existen dos opciones para generar este retardo antes de comenzar la conversión:
 Por programa: se implementa un retardo software entre la selección del nuevo
– Si configuramos ADCS2..ADCS0=001 => TAD=8*(1/10·106)=0,7us=> OK canal y el inicio de la conversión.
 Estableciendo un tiempo de adquisición automático: se programa un tiempo de
– Si configuramos ADCS2..ADCS0=100 => TAD=4*(1/10·106)=0,4us=> demasiado pequeño
adquisición que se establecerá de forma automática entre la orden de inicio de
conversión y el muestreo de la señal para iniciar la conversión. Dicho tiempo
puede ser programado mediante los bits ACQT2..ACQT0 del registro ADCON2.
Este tiempo puede tener unos valores que oscilan entre 2*TAD y 20*TAD.
Cuando se elige el oscilador RC interno el TAD viene prefijado internamente y
siempre cumple con la condición del valor mínimo.
M.Sc. Ing. Germán Jesús Pereira M.Sc. Ing. Germán Jesús Pereira
22/4/2019 15 22/4/2019 16
Muñoz Muñoz

15 16

ADCON2 REGISTER 2 (Part V) ADCON2 REGISTER 2 (Part VI)

 La conversión A/D da el resultado (un valor de 10 bits) que queda almacenado en los
registros ADRESH y ADRESL.
 Existen dos posibles formas de almacenar el resultado en estos registros dependiendo
del valor del bit ADFM del registro ADCON2:

M.Sc. Ing. Germán Jesús Pereira M.Sc. Ing. Germán Jesús Pereira
22/4/2019 17 22/4/2019 18
Muñoz Muñoz

17 18

3
22/04/2019

oz
un
M
ir a
re
Pe
s
Proceso completo de conversión A/D Proceso completo de conversión A/D

su
Je (sin utilizar interrupción) (utilizando interrupción)
1º PASO: Configuración del convertidor A/D:
an
1º PASO: Configuración del convertidor A/D:
Configuración como canales A/D de las líneas que vayan a ser utilizadas (bits PCFG3..PCFG0 del registro  Configuración como canales A/D de las líneas que vayan a ser utilizadas (bits PCFG3..PCFG0 del registro
m

ADCON1) ADCON1)
er

 Configuración de las tensiones de referencia VREF+ y VREF- (bits VCFG0 y VCFG1 del registro ADCON1)  Configuración de las tensiones de referencia VREF+ y VREF- (bits VCFG0 y VCFG1 del registro ADCON1)
.G

 Configuración del reloj de conversión TAD (bits ADCS2..ADCS0 del registro ADCON2)  Configuración del reloj de conversión TAD (bits ADCS2..ADCS0 del registro ADCON2)
Configuración del tiempo de adquisición (bits ACQT2..ACQT0 del registro ADCON2)  Configuración del tiempo de adquisición (bits ACQT2..ACQT0 del registro ADCON2)
ng

 Configuración del modo de almacenamiento de la conversión (bit ADFM del registro ADCON2)  Configuración del modo de almacenamiento de la conversión (bit ADFM del registro ADCON2)
I

Activación del conversor (bit ADON del registro ADCON0)  Activación del conversor (bit ADON del registro ADCON0)
c.

2º PASO: Selección del canal (bits CHS3..CHS0 del registro ADCON0)  2º PASO: Habilitación de la interrupción del convertidor A/D:
.S

 Habilitación de la interrupción del convertidor A/D (bit ADIE del registro PIE1)
M

 Habilitación de las interrupciones de periféricos y de las interrupciones a nivel general (bits PEIE y GIE del
3º PASO: Retardo de espera del tiempo de adquisición (solo en caso de no hacer uso del registro INTCON)
tiempo de adquisición automático) 3º PASO: Selección del canal (bits CHS3..CHS0 del registro ADCON0)
4º PASO: Retardo de espera del tiempo de adquisición (solo en caso de no hacer uso del
4º PASO: Inicio de la conversión poniendo a ‘1’ el bit GO/DONE del registro ADCON0 tiempo de adquisición automático)
4º PASO: Inicio de la conversión poniendo a ‘1’ el bit GO/DONE del registro ADCON0
5º PASO: Bucle de espera del final de conversión (comprobación del bit GO/DONE hasta 5º PASO: El uC sigue ejecutando código hasta que se produzca la interrupción
que se ponga a ‘0’) 6º PASO: Cuando se produce la interrupción: puesta a ‘0’ del bit ADIF del registro PIR1 y
lectura del resultado de la conversión de los registros ADRESH y ADRESL
6º PASO: Lectura del resultado de la conversión de los registros ADRESH y ADRESL

M.Sc. Ing. Germán Jesús Pereira M.Sc. Ing. Germán Jesús Pereira
22/4/2019 19 22/4/2019 20
Muñoz Muñoz

19 20

Adc_Read
ADC(funciones) Descripción: ADC (Analog to Digital Converter) .
La función Adc_Read esta incluida para entregar el dato
resultan de la convercion ADC de un canal espeficico
Adc_Read unsigned Adc_Read(unsigned short channel);

Ejemplo:
unsigned tmp;

tmp = Adc_Read(0); // lectura del canal 0

M.Sc. Ing. Germán Jesús Pereira M.Sc. Ing. Germán Jesús Pereira
22/4/2019 21 22/4/2019 22
Muñoz Muñoz

21 22

ADC (problema) ADC (algoritmo)


• Se desea un programa para mostar la conversión Adc • 1 Configuración de puertos (ADC).
en dos puertos. • 2 Lectura de ADC
• 3 Envío a los leds
• 4 Regresar a 2

M.Sc. Ing. Germán Jesús Pereira M.Sc. Ing. Germán Jesús Pereira
22/4/2019 23 22/4/2019 24
Muñoz Muñoz

23 24

4
22/04/2019

oz
un
M
ir a
re
Pe
s
su
Je ADC (programa )
an
m
er
.G
ng
I
c.
.S
M

ADC(esquemático)

M.Sc. Ing. Germán Jesús Pereira M.Sc. Ing. Germán Jesús Pereira
22/4/2019 25 22/4/2019 26
Muñoz Muñoz

25 26

Ejercicio propuesto II
Ejercicio propuesto I • Diseñar Hardware y software que tenga las
siguientes caracteristicas:
• Desarrollar un programa para realizar la conversión
 Dos Botones
ADC del canal y mostrarla en display de 7 segmentos
 Display de 8 digitos

 Motor DC

 Un Potenciometro

En el display debe mostrar la informacion:


1. estado de motor
2. con el potenciometro debe controlar la velocidad del
motor.
3. Con los botones debe poder controlar el sentido de
22/4/2019
M.Sc. Ing. Germán Jesús Pereira
27
giro del motor M.Sc. Ing. Germán Jesús Pereira
22/4/2019 28
Muñoz Muñoz

27 28

Ejercicio propuesto III Ejercicio propuesto IV


• Diseñar Hardware y software que tenga las • Diseñar Hardware y software que tenga las
siguientes caracteristicas: siguientes características:
 Display de 8 digitos 1. 1) Tenga una pantalla OLED SD1306
 Motor DC 2. 2) Dos Potenciómetros de 10 K
 Dos Potenciometros 3. El programa debe desplegar un + en la pantalla
En el display debe mostrar la informacion: cuya posición dependa del valor de los
potenciómetros.
1. Estado de motor
2. Con el 1er potenciometro debe controlar la velocidad
del motor.
3. Con el 2do potenciometro debe poder controlar el
sentido de giro del motor
M.Sc. Ing. Germán Jesús Pereira M.Sc. Ing. Germán Jesús Pereira
22/4/2019 29 22/4/2019 30
Muñoz Muñoz

29 30

También podría gustarte