Ir al contenido

Convertidor Analogico-Digital (ADC)

El PIC18F4550 integra un ADC de 10 bits con 13 canales analogicos (AN0–AN12). Convierte una tension analogica (potenciometro, LM35, divisor resistivo) en un numero digital que tu programa lee desde ADRESH:ADRESL.

Esta pagina cierra Tema 9 CAD del curso: registros ADCON0/1/2, flujo de conversion y enlace con GPIO y config bits. La aplicacion oficial es Practica 7 — Convertidor AD.

Mapa de canales analogicos AN0 a AN12 en puertos A, B y E
Distribucion de los 13 canales ADC. RA4 no es analogico. — Tema 9 CAD — basado en datasheet PIC18F4550
Figura 9.1: funciones basicas en un sistema de medida
Cadena sensor → acondicionamiento → ADC → procesador. El ADC digitaliza la senal analogica. — Tema 9 — Convertidor A/D · UNEXPO
Figuras 9.2 y 9.3: acondicionamiento de senal y caracteristica de transferencia del ADC
Acondicionador antes del ADC y curva de cuantizacion (aproximaciones sucesivas). — Tema 9 — Convertidor A/D · UNEXPO

El convertidor A/D mide una tension en un pin analogico y la representa como entero 0–1023 (10 bits).

Sensor (potenciometro, LM35…)
↓ tension 0 V – Vref (tipico 5 V)
Pin ANx del PIC (RA0, RE0…)
↓ modulo ADC (aproximaciones sucesivas)
ADRESH:ADRESL → valor 0..1023 en tu programa

Sin ADC tendrias que construir conversion externa; el PIC18F4550 la trae integrada.

ConceptoValor en PIC18F4550
Resolucion10 bits → 1024 niveles (0 a 1023)
1 LSBVref / 1024 ≈ 4,88 mV con Vref = 5 V
Tension estimadaV ≈ (ADRES / 1023) × Vref

Ejemplo: ADRES = 512 → V ≈ 2,5 V con Vref = 5 V.

RegistroFuncion principal
ADCON1Que pines son analogicos vs digitales (PCFG)
ADCON2Reloj de conversion (ADCS), formato (ADFM), tiempo de adquisicion
ADCON0Canal (CHS), encendido (ADON), inicio/fin (GO/DONE)

Configuras ADCON1/2 una vez al inicio; en cada lectura tocas ADCON0 (canal + GO).

  • TRISx — el pin ANx debe ser entrada.
  • ADCON1 — declara el pin como analogico; el resto del puerto puede quedar digital (LCD, LEDs).
  • PBADEN = OFF en CONFIG — evita que RA/RB arranquen analogicos sin querer (Config bits).
PuertoPines analogicosNotas
ARA0/AN0, RA1/AN1, RA2/AN2, RA3/AN3, RA5/AN4RA4 no es analogico (T0CKI digital)
BRB0/AN12, RB1/AN10, RB2/AN8, RB3/AN9, RB4/AN11Comparten puerto con GPIO e interrupciones
ERE0/AN5, RE1/AN6, RE2/AN7Comunes en practicas con LCD en RE

Practica 7: potenciometro en AN0 (RA0); LCD y pines de control en digital via ADCON1.

CampoFuncion
CHS3:CHS0Selecciona canal AN0–AN12
ADON1 = modulo ADC encendido
GO/DONE1 = conversion en curso; 0 = terminada

Flujo de una lectura:

BSF ADCON0, GO ; inicia conversion
Esperar GO = 0 ; hardware termina
Leer ADRESH:ADRESL

PCFG en ADCON1 define que pines son ANx y cuales GPIO digital. Valor tipico Practica 7 — solo AN0 analogico:

MOVLW 0x0E ; RA0 analogico, resto digital
MOVWF ADCON1

En practicas solo GPIO (Practica 1, teclado LCD) suele usarse ADCON1 = 0x0F para dejar todos los pines como digitales.

CampoFuncion
ADCS2:0Reloj de conversion (depende de Fosc)
ADFM0 = justificado a la derecha; 1 = a la izquierda
ACQT2:0Tiempo de adquisicion (sample & hold)

Cristal 20 MHz (curso UNEXPO): ADCS = 101 en ADCON2. Codigo de referencia Practica 7:

MOVLW B'10100010' ; ADFM=1, ADCS=101
MOVWF ADCON2
MOVLW B'00000001' ; canal AN0, ADON=1
MOVWF ADCON0
BSF TRISA, 0 ; RA0 entrada

Recorrido completo — leer AN0 (potenciometro)

Sección titulada «Recorrido completo — leer AN0 (potenciometro)»

Subrutinas estilo sandwich:

config_adc:
MOVLW 0x0E
MOVWF ADCON1
MOVLW B'10100010'
MOVWF ADCON2
MOVLW B'00000001'
MOVWF ADCON0
BSF TRISA, 0
RETURN
leer_an0:
BSF ADCON0, GO ; inicia conversion
espera_adc:
BTFSC ADCON0, GO ; salta si GO=0 (listo)
GOTO espera_adc ; salto → bucle hasta terminar
MOVF ADRESL, W ; lee resultado (segun ADFM)
MOVWF adc_l
MOVF ADRESH, W
MOVWF adc_h
RETURN

Desde programa:: CALL config_adc una vez; en bucle CALL leer_an0 y muestra en LCD o convierte a voltaje.

Puedes usar ADIE en PIE1 + PEIE + GIE para leer el resultado en una ISR cuando ADIF se activa — misma cadena que Timer1. En Practica 7 el curso suele usar polling sobre GO/DONE.

ErrorSintoma
No configurar ADCON1Lecturas erraticas o pines LCD afectados
Pin como salida (TRIS=0)ADC no mide correctamente
GO sin ADONConversion no arranca
ADCS incorrecto para FoscConversion lenta o imprecisa
Confundir RA4 con analogicoAN4 esta en RA5, no RA4

Practica · Laboratorio

Practica 7 — Convertidor AD

Lee un potenciometro o sensor en AN0, convierte el valor y muestralo en LCD o LEDs. Cristal 20 MHz: ADCS = 101 en ADCON2. Tutorial completo: Practica 7.

  • PWM / CCP — otro modulo del Tema 9 (salida analogica por duty cycle)
  • UART — enviar el valor ADC al PC (Practica 8)
  • Parcial IV — repaso ADC + serial

¿Cuantos bits tiene el ADC del PIC18F4550?

10 bits → valores 0–1023.

¿Que hace BSF ADCON0, GO?

Inicia una conversion; el bit queda en 1 hasta que termina (GO/DONE = 0).

¿Para que sirve ADCON1?

Configura que pines son entrada analogica y cuales GPIO digital.

¿Que pin NO es analogico en PORTA?

RA4 — es T0CKI (entrada digital del Timer0).

Ejercicio · Parcial

Calcula la tension

Si Vref = 5 V y ADRES = 768, ¿aproximadamente cuantos voltios mide el canal? (768/1023 × 5 V)

Examen interactivo

Convertidor A/D

Basado en: Tema 9. CAD.pdf

0 de 0 respondidas

La resolucion del ADC del PIC18F4550 es de...
ADCON0 selecciona principalmente...
ADCON1 con PCFG sirve principalmente para...
GO/DONE en ADCON0 durante la conversion...
Con cristal 20 MHz, ADCS en ADCON2 suele ser...
El valor digital maximo de un ADC 10 bits es...
RA4 en PORTA...
Practica 7 tipica: potenciometro en...