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.
Que hace el ADC
Sección titulada «Que hace el ADC»El convertidor A/D mide una tension en un pin analogico y la representa como entero 0–1023 (10 bits).
Paso 1 — Del mundo analogico al digital
Sección titulada «Paso 1 — Del mundo analogico al digital» 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 programaSin ADC tendrias que construir conversion externa; el PIC18F4550 la trae integrada.
Paso 2 — Resolucion y LSB
Sección titulada «Paso 2 — Resolucion y LSB»| Concepto | Valor en PIC18F4550 |
|---|---|
| Resolucion | 10 bits → 1024 niveles (0 a 1023) |
| 1 LSB | Vref / 1024 ≈ 4,88 mV con Vref = 5 V |
| Tension estimada | V ≈ (ADRES / 1023) × Vref |
Ejemplo: ADRES = 512 → V ≈ 2,5 V con Vref = 5 V.
Paso 3 — Tres registros de configuracion
Sección titulada «Paso 3 — Tres registros de configuracion»| Registro | Funcion principal |
|---|---|
ADCON1 | Que pines son analogicos vs digitales (PCFG) |
ADCON2 | Reloj de conversion (ADCS), formato (ADFM), tiempo de adquisicion |
ADCON0 | Canal (CHS), encendido (ADON), inicio/fin (GO/DONE) |
Configuras ADCON1/2 una vez al inicio; en cada lectura tocas ADCON0 (canal + GO).
Paso 4 — Relacion con GPIO y config bits
Sección titulada «Paso 4 — Relacion con GPIO y config bits»TRISx— el pin ANx debe ser entrada.ADCON1— declara el pin como analogico; el resto del puerto puede quedar digital (LCD, LEDs).PBADEN = OFFenCONFIG— evita que RA/RB arranquen analogicos sin querer (Config bits).
Canales analogicos AN0–AN12
Sección titulada «Canales analogicos AN0–AN12»| Puerto | Pines analogicos | Notas |
|---|---|---|
| A | RA0/AN0, RA1/AN1, RA2/AN2, RA3/AN3, RA5/AN4 | RA4 no es analogico (T0CKI digital) |
| B | RB0/AN12, RB1/AN10, RB2/AN8, RB3/AN9, RB4/AN11 | Comparten puerto con GPIO e interrupciones |
| E | RE0/AN5, RE1/AN6, RE2/AN7 | Comunes en practicas con LCD en RE |
Practica 7: potenciometro en AN0 (RA0); LCD y pines de control en digital via ADCON1.
ADCON0 — canal, encendido y GO/DONE
Sección titulada «ADCON0 — canal, encendido y GO/DONE»| Campo | Funcion |
|---|---|
CHS3:CHS0 | Selecciona canal AN0–AN12 |
ADON | 1 = modulo ADC encendido |
GO/DONE | 1 = conversion en curso; 0 = terminada |
Flujo de una lectura:
BSF ADCON0, GO ; inicia conversion ↓ Esperar GO = 0 ; hardware termina ↓ Leer ADRESH:ADRESLADCON1 — pines analogicos vs digitales
Sección titulada «ADCON1 — pines analogicos vs digitales»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 ADCON1En practicas solo GPIO (Practica 1, teclado LCD) suele usarse ADCON1 = 0x0F para dejar todos los pines como digitales.
ADCON2 — reloj, formato y adquisicion
Sección titulada «ADCON2 — reloj, formato y adquisicion»| Campo | Funcion |
|---|---|
ADCS2:0 | Reloj de conversion (depende de Fosc) |
ADFM | 0 = justificado a la derecha; 1 = a la izquierda |
ACQT2:0 | Tiempo 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 entradaRecorrido 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 conversionespera_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 RETURNDesde programa:: CALL config_adc una vez; en bucle CALL leer_an0 y muestra en LCD o convierte a voltaje.
Interrupcion ADC (opcional)
Sección titulada «Interrupcion ADC (opcional)»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.
Errores comunes
Sección titulada «Errores comunes»| Error | Sintoma |
|---|---|
| No configurar ADCON1 | Lecturas erraticas o pines LCD afectados |
Pin como salida (TRIS=0) | ADC no mide correctamente |
| GO sin ADON | Conversion no arranca |
| ADCS incorrecto para Fosc | Conversion lenta o imprecisa |
| Confundir RA4 con analogico | AN4 esta en RA5, no RA4 |
Practica 7 UNEXPO
Sección titulada «Practica 7 UNEXPO»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.
Siguiente paso
Sección titulada «Siguiente paso»- 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
Preguntas estilo parcial
Sección titulada «Preguntas estilo parcial»¿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)
Convertidor A/D
Basado en: Tema 9. CAD.pdf
0 de 0 respondidas
Inicia sesion en CALETAS para sincronizar este resultado entre dispositivos.
Iniciar sesion en CALETAS