Professional Documents
Culture Documents
DEFINICION
CONVERTIDOR ANALOGICO A DIGITAL.Dispositivo perifrico programable que tiene la facultad de llevar a cabo la conversin de una seal analgica a su correspondiente valor digital.
SEAL ANALOGICA
CONVERTIDOR 1, 2, 3, 4, 5, 6, 7, 8,...
SEAL DIGITAL
Aproximaciones sucesivas
Elaborado por Ing. Alvaro Hernndez Sol
Seales analgicas:
Temperatura. Peso. Flujo. Velocidad. Posicin. Humedad. Aceleracin. Intensidad luminosa. Sonido. Etc.
CAD
Seal analgica
Dato binario ( 4, 8, 12, 16, 18 )
CAD
. . .
CPU
Paralelo
CAD Serial
CPU
CAD
Bus de datos
AN0 AN1 M U L T I P L E X O R
D0 D1 D2 D3 D4 D5 D6 D7 D0
CPU
ANn
. . .
AN2 AN3
C A D
B U F F E R
D1 D2 D3 D4 D5 D6 D7
Entradas analgicas
CAD
Elaborado por Ing. Alvaro Hernndez Sol
Voltaje de referencia (VREF).- Es el valor mximo de seal analgica con el cual se obtiene el mximo valor digital.
0-5 volts
Seal analgica
Voltaje de referencia
5 volts
R E G I S T R O
Voltaje de referencia
R E G I S T R O
Seal analgica
0 - 1.25 volts
Voltaje de referencia
5 volts
R E G I S T R O
64
Al CPU (01000000)
Voltaje de referencia
R E G I S T R O
Seal analgica
0 - 1.25 volts
Voltaje de referencia
2.5 volts
R E G I S T R O
Voltaje de referencia
2.5 volts
R E G I S T R O
64
Al CPU (10000000)
Seal analgica
0 - 1 volts
Voltaje de referencia
1.25 volts
R E G I S T R O
entradas analgicas. Capacitor como muestreador y retenedor de entrada. Convertidor de aproximaciones sucesivas. Salida digital de 10 bits. Voltaje de referencia seleccionable por software.(VDD, VSS, RA2 o RA3).
Elaborado por Ing. Alvaro Hernndez Sol
CAD
Modulo convertidor analgico a digital de 10 bits.
CAD
ADRESH.- Resultado parte alta. ADRESL.- Resultado parte baja. ADCON0.- Registro de control 0. ADCON1.- Registro de control 1.
El registro de control 0 controla la operacin del modulo CAD. El registro de control 1 configura las funciones de las terminales de los puertos (ent/sal digital o ent. analgica).
Elaborado por Ing. Alvaro Hernndez Sol
CAD
El resultado de la conversion se almacena en los dos registros ADRESH y ADRESL. El resultado se puede almacenar de dos formas, justificado a la derecha o justificado a la izquierda.
Resultado
10
Justificacin
Derecha Izquierda Derecha
Binario
0000001010
ADRESH
00000000 00000010 00000000
ADRESL
00001010 10000000 11001000 00000000 11110100 00000000 11101000 00000000
200
Izquierda Derecha
0011001000
00110010 00000001
500
Izquierda Derecha
0111110100
01111101 00000011
1000
Izquierda
1111101000
11111010
Nombre
ADCS1: ADCS0
Funcin
Seleccin del reloj para la conversin 00 = FOSC/2 01 = FOSC/8 10 = FOSC/32 11 = FRC (el reloj es derivado del modulo del oscilador interno RS) Selecciona del canal de entrada (terminal) analogica. 000 = channel 0, (RA0/AN0) 001 = channel 1, (RA1/AN1) 010 = channel 2, (RA2/AN2) 011 = channel 3, (RA3/AN3) 100 = channel 4, (RA5/AN4) 101 = channel 5, (RE0/AN5)(1) 110 = channel 6, (RE1/AN6)(1) 111 = channel 7, (RE2/AN7)(1) Bit de estado de la conversin. If ADON = 1: 1 = A/D conversion in progress (setting this bit starts the A/D conversion) 0 = A/D conversion not in progress (this bit is automatically cleared by hardware when the A/D conversion is complete) Seleccin de encendido del convertidor 1 = Activado. Elaborado por Ing. Alvaro Hernndez Sol 0 = Apagado.
5-3
CHS2: CHS0
GO/DONE
ADON
Nombre
ADFM
Funcin
Seleccin del formato del resultado de la conversin 0 = Justificado a la derecha. Los 6 BMS de ADRESH son leidos como 0. 1 = Justificado a la izquierda. Los 6 bms de ADRESL son leidos como 0. Control de configuracin de puertos.
AN7 RE2
0000 0001 0010 0011 A A D D
3-0
PCFG3: PCFG0
AN6 RE1
A A D D
AN5 RE0
A A D D
AN4 RA5
A A A A
AN3 RA3
A VREF+ A VREF+
AN2 RA2
A A A A
AN1 RA1
A A A A
AN0 RA0
A A A A
VREF+
VDD RA3 VDD RA3
CANA L/REF
8/0 7/1 5/0 4/1
0100
0101 011X 1000 1001 1010 1011 1100 1101 1110 1111
D
D D A D D D D D D D
D
D D A D D D D D D D
D
D D A A A A D D D D
D
D D A A A A A D D D
A
VREF+ D VREF+ A VREF+ VREF+ VREF+ VREF+ D VREF+
D
D D VREFA A VREFVREFVREFD VREF-
A
A D A A A A A A D D
A
A D A A A A A A A A
VDD
RA3 VDD RA3 VDD RA3 RA3 RA3 RA3 VDD RA3
VSS
VSS VSS RA2 VSS VSS RA2 RA2 RA2 VSS RA2
3/0
2/1 0/0 6/2 6/0 5/1 4/2 3/2 2/2 1/0 1 /2
CAD
Adc_Read(?)
unsigned Adc_Read(unsigned short channel); Descripcin: Inicializa: Reloj interno RC (min 12TAD). Antes de usar la funcin configurar: Terminales de los puertos A y E como entrada ( Bits del TRISA y TRISE ). Terminar deseada como entrada analogica ( ADCON1 ). Valor del voltaje de referencia adecuado, Vref+ y Vref- ( ADCO0 )
Elaborado por Ing. Alvaro Hernndez Sol
Adc_Read(?)
El Parmetro channel representa el canal desde el cual la seal analogica sera adquirida.
Canal 0 1 2 3 4 5 6 Puerto PORTA PORTA PORTA PORTA PORTA PORTE PORTE Terminal RA0 RA1 RA2 RA3 RA5 RE0 RE1
PORTE
RE2
Adc_Read(?)
Example unsigned tmp; . . . tmp = Adc_Read(1);
1*/
Se selecciona una configuracin para una sola entrada analogica y se justifica la conversion resultante a la derecha (ADCON1).
//Instrucciones de configuracin
ADCON1 = 0b00001110; TRISA.F0 = 1; //Vref+ = VDD y Vref- = VSS // RA0 como entrada
Elaborado por Ing. Alvaro Hernndez Sol
Respuesta:
Se selecciona una configuracin para tres entradas analgicas con voltaje de referencia positivo externo (RA3) y se justifica la conversin resultante a la derecha (ADCON1). Se configura la terminal fsica como entrada (TRISE o TRISA).
//Instrucciones de configuracin
ADCON1 = 0b00000011;
TRISA = 0b00101111;
//Instrucciones de configuracin
ADCON1 = 0b00001000; // 6 entradas analgicas, Vref+ = RA3 y Vref- = RA2
TRISA = 0b00101111;
TRISE = 0b00000111;
El registro INTCON nos sirve para: Activar el vector de interrupciones ( GIE ) Activacin de los registros PIE1, PIE2, PIR1 y PIR2 (PEIE). El registro PIE1 nos sirve para: Activa el convertidor analgico digital para usar el vector de interrupcin. (ADIE). El registro PIR1 nos sirve para: Bandera del convertidor analgico digital. (ADIF).
Elaborado por Ing. Alvaro Hernndez Sol
Inicializa variables, puertos y LCD. Realiza la conversin. Convierte valor convertido a a cadena. Enva a LCD. Retardo de 1 segundo. Ir a 2.
Problema propuesto 1
1.
Modifique el problema, de tal forma, que adems de mostrar el valor decimal de la conversin, se muestre el valor de voltaje convertido. Suponga adems que ese valor de voltaje, corresponde a la salida de un sensor de temperatura LM35, para un rango de 10 C. - 45 C. Muestre el resultado intercalado con un retardo de 1 segundo entre uno y otro.
Elaborado por Ing. Alvaro Hernndez Sol
(problema)
Se necesita realizar un programa que lleve a cabo la conversin analgica a digital con las siguientes condiciones:
Se tiene una seal de entrada de voltaje que tiene un rango 0 v 3.5 v. Se requiere que la conversion se ajuste al rango.
Ventrada
0 v. 3.5 v.
Elaborado por Ing. Alvaro Hernndez Sol
Codigo Convertido
Inicializa variables, puertos y LCD. Realiza la conversin. Convierte valor convertido a a cadena. Enva a LCD. Retardo de 1 segundo. Ir a 2.
12_1
TRISA = 0b00001011; ADCON1= 0b00000101; Lcd_Init ( &PORTD ); Lcd_Out (1,1,"Conversin analogica"); Lcd_Out (2,1,"valor decimal :"); Lcd_Out (3,12,"volts");
Problema 2
1.
2.
Modifique el programa para que se pueda visualizar el valor de voltaje en la misma pantalla. Modifique el problema anterior, para esta ocasin el sensor unicamente da valores de 1.5 a 4 volts. Y se requiere manejar la mayor resolucion posible.
TIMER
TMR1
de 2 bytes (TMR1H y TMR1L). Preescalador (1:1, 1:2, 1:4, 1:8) Generador de reloj (RC0 y RC1)
TMR1
Ejemplos
Se quiere contar 4 pulsos recargando el valor de conteo.
TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H : : : : : : : : : : : : : : : : : TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L = = = = = = = = = = = = = = = = = 65532 ( 0xFFFC ) 65533 65534 65535 0 desborde del timer 65532 65533 65534 65535 0 desborde del timer 65532 65533 65534 65535 0 desborde del timer 65532 65533 : : : : : : : : : : : : TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L TMR1L = = = = = = = = = = = = 65531 ( 0xFFFB ) 65532 65533 65534 65535 0 desborde del timer 1 2 3 4 5 no hay desborde 6
TMR1
Bit
5:4
Nombre
T1CKPS1: T1CK0S0 Seleccin del preescalador del Timer1 11 = 1:8 10 = 1:4 01 = 1:2 00 = 1:1
Funcin
T1OSCEN
Habilitacion del oscilador del Timer1 . 1 = Habilita el oscilador. 0 = El oscilador esta desactivado (el inversor se apaga para eliminar el consumo de potencia). Control de sincronizacin de entrada del reloj externo del Timer1 Cuando TMR1CS = 1: 1 = No se sincroniza la entrada del reloj externo. 0 = Se sincroniza la entrada del reloj externo. Cuando TMR1CS = 0: Este bit es ignorado. El Timer1 usa el reloj interno. Selecciona la fuente de reloj para el Timer1. 1 = El reloj es extrerno desde la terminar RC0/T1OSO/T1CKI (En el filo de caida) 0 = Reloj interno (FOSC/4) Encendido del Timer1. 1 = Encendido. Elaborado por Ing. Alvaro Hernndez Sol 0 = Detiene el Timer1
/T1SYNC
TMR1CS
TMR1ON
TMR1
Cuando T1OSCEN esta desactivado (0) el inversor se deshabilita evitando el consumo de energa.
Elaborado por Ing. Alvaro Hernndez Sol
TMR1H y TMR1L.- valor de conteo. TMR1H : byte alto TMR1L : byte bajo.
Un conteo de 10 microsegundos usando un cristal de 20 MHz. Como los registros puede contar desde 1 hasta 65536 pulsos, en esta ocacin no sera necesario usar el preescalador.
TMR1H : TMR1L 65536 Tbuscado en
seg
65536
65536 50 65486
( 0 xFFCE )
//Instrucciones de configuracin
T1CON = 0b00000001; TMR1H = 0xFF; TMR1L = 0xCE;
Elaborado por Ing. Alvaro Hernndez Sol
65536
( 0 x3CB0 )
//Instrucciones de configuracin
T1CON = 0b00110001; TMR1H = 0x3C; TMR1L = 0xB0;
Elaborado por Ing. Alvaro Hernndez Sol
Un conteo de 7500 pulsos externos utilizando RC0/T1OSCI/T1CKI No es necesario usar el preescalador Sin sincronizacin.
65536
7500 1
65536 7500
//Instrucciones de configuracin
T1CON = 0b00000011; TMR1H = 0xE2; TMR1L = 0xB4;
Elaborado por Ing. Alvaro Hernndez Sol
INTCON.- Configurando GIE y PEIE, para activar el vector de interrupciones y activar los registros PIE1, PIE2, PIR1 y PIR2, respectivamente. PIE1.- Activar TMR1IE ( Inicia el uso de la bandera de desborde del Timer 1 ). PIR1.- Verificar TMR1IF ( Bandera de desborde del Timer 1 ).
Elaborado por Ing. Alvaro Hernndez Sol
3.- Frecuencimetro
Disear un programa que indique la frecuencia de giro de un motor. Dicho programa utilizara el timer 1 como medidor de tiempo entre impulso e impulso.
7.
Configurar interrupcin externa para detectar vuelta del motor. Configurar Timer 1 como temporizador, sin encenderlo. Si es el segundo pulso, ir a 5. No es el segundo pulso, ir a 3 Determina frecuencia. Imprime frecuencia. Ir a 3.
Elaborado por Ing. Alvaro Hernndez Sol
4.
5. 6. 7. 8.
9.
Reinicia la interrupcin externa. Cuenta pulso. Si es primer pulso ir a 5 No es el primer pulso ir a 7 Enciende temporizador 1. Salir de ISR. Apaga temporizador. Reinicia contador de pulsos. Salir de ISR.
Elaborado por Ing. Alvaro Hernndez Sol
Si
2 pulsos?
No
2 pulsos?
No
Si
Apaga Timer 1
Enciende Timer 1
Terminar
2.
Genere un reloj, el cual pueda ser configurado, que tenga hora, minuto, segundos. Modifique el problema propuesto 2 del TMR0, de tal forma que el retardo de 60 segundos sea llevado a cabo por el TMR1 y el conteo de los pulsos sea realizado por el TMR0, configurado como contador de eventos externos.
Elaborado por Ing. Alvaro Hernndez Sol
TIMER
TIMER 2
Es un temporizador de 8 bits que tiene un preescalador y un postescalador. Es usado como base de tiempo para el modulo de PWM (CCP)
Tambien alimenta al modulo de puerto serial sincrono (SSP), como reloj de corrimiento.
Elaborado por Ing. Alvaro Hernndez Sol
Los pulsos de reloj entran a un preescalador, en este se puede seleccionar una escala de 1, 4 o 16.
El registro TMR2 se incrementa a partir de cero, de uno en uno, por cada pulso que le llega del preescalador. Cuando el el registro
TMR2
2.
3.
TMR2.
Este mismo pulso llega a un postescalador que puede tener cualquiera de las siguientes escalas: 1, 2, 3, 4, 5, ..., 15 o 16.
6.
Como salida este postescalador genera un pulso que activa la bandera del TIMER 2 (TMR2IF).
Registro T2CON
Bit
6:3
Nombre
TOUTPS3: TOUTPS2: TOUTPS1: TOUTPS0 Seleccin del postescalador del Timer 2 0000 = 1:1 0001 = 1:2 0011 = 1:3 0100 = 1:4 . . . 1110 = 1:15 1111 = 1:16 Encendido del Timer 2 . 1 = Encendido. 0 = Detiene el Timer 2.
Funcin
TMR2ON
1:0
T2CKPS1: T2CKPS0
Registros de configuracin
TMR2.-Nmero de pulsos a contar. PR2.- Nmero de pulsos a contar. T2CON.- Configuracin del TIMER 2.
INTCON (opcional).- Configuracin de interrupcin. PIE1 (opcional).- Habilitacin del Timer 2. PIR1 (opcional).- Bandera de desborde del Timer 2.
Un conteo de 75 microsegundos usando un cristal de 12 MHz. Como el registro TMR2 puede contar desde 0 hasta PR2 pulsos, en esta ocacin no sera necesario utilizar tanto el preescalador como el postescalador.
PR2 Tbuscado en
seg
PR2
225
( 0 xE1 )
//Instrucciones de configuracin
T2CON = 0b00000100; PR2 = 0xE1; // 0xE5 // 0xFF TMR2 = 0; // 0x04 // 0x1E
Elaborado por Ing. Alvaro Hernndez Sol
Un conteo de 50 milisegundos usando un cristal de 4 MHz. Como el registro TMR2 puede contar desde 0 hasta PR2 pulsos, en esta ocacin se necesita utilizar tanto el preescalador como el postescalador.
PR2 Tbuscado en preescalad or 50000 224
seg
PR2
223
( 0 xDF )
//Instrucciones de configuracin
T2CON = 0b01101111; PR2 = 0xDF; TMR2 = 0;
INTCON.- Configurando GIE y PEIE, para activar el vector de interrupciones y activar los registros PIE1, PIE2, PIR1 y PIR2, respectivamente. PIE1.- Activar TMR2IE ( Inicia el uso de la bandera de desborde del Timer 2 ). PIR1.- Verificar TMR2IF ( Bandera de desborde del Timer 2 ).
Disear un programa que controle el acceso de una habitacin. El sistema cuenta con un sensor de presencia, que enva un pulso cuando hay personas en la habitacin. Si el sistema no detecta la presencia de personas durante 5 minutos, se debe activar un cerrojo elctrico. El cerrojo se desactiva cuando se introduce una clave. Esto ltimo se simular con un pulso de desactivacin.
Elaborado por Ing. Alvaro Hernndez Sol
5.
6. 7. 8.
9.
10. 11. 12.
13.
14.
Si es interrupcin externa ir a 10 No es interrupcin externa ir a 3 Si es Timer 2 ir a 5 No es el Timer 2 salir de ISR. Reinicia Timer 2 Incrementa conteo Si conteo es igual a 5 minutos ir a 13 No conteo igual a 5 minutos ir a 9 Salir de ISR. Reinicia Interrupcin externa. Reinicia Timer 2. Salir de ISR. Activa cerrojo. Salir de ISR.
Elaborado por Ing. Alvaro Hernndez Sol
Si
No
INT_EXT?
No
1
Conteo = 5 min? No Si
Timer 2?
No
Si
Incrementa conteo
Activa cerrojo
1 Terminar
Elaborado por Ing. Alvaro Hernndez Sol
}
Elaborado por Ing. Alvaro Hernndez Sol
I2C
Registros 1
SMP: Bit de muestreo CKE: Seleccin de filo del reloj SPI D/A: Bit de Dato/Direccin P: Bit de STOP
1 = Modo de velocidad estandar (100 kHz y 1 MHz) 0 = Modo de alta velocidad (400 kHz)
1 = Niveles de entrada de acuerdo a las especificaciones SMBus 0 = Niveles de entrada de acuerdo a las especificaciones I2C 1 = Indica que el ultimo byte recibido o transmitido fue un dato 0 = Indica que el ultimo byte recibido o transmitido fue una direccion
1 = Indica que un bit de STOP ha sido detectado (este bit es 0 en el RESET) 0 = El bit STOP no ha sido detectado
S: Bit de START (Este bit se limpia cuando el modulo MSSP es deshabilitado, SSPEN es limpiado) R/W: Bit de lectura/escritura
1 = Lectura 0 = Escritura
1 = Indica que un bit de START ha sido detectado (este bit es 0 en el RESET) 0 = El bit START no ha sido detectado En modo I2C esclavo: En modo I2C Maestro:
bit 1 bit 0
1 = Transmisin en progreso 0 = Transmisin no esta en progreso OR de este bit con SEN, RSEN, PEN, RCEN o ACKEN indicaran si el MSSP esta en modo IDLE. 1 = Indica que el usuario necesita actualizar la direccin en el registro SSPADD 0 = La direccin no se necesita actualizar
UA: Actualizacin de direccin (10-bit en modo I2C) BF: Bit de estado de Buffer lleno
Recepcin (modos SPI y I2C): 1 = Recepcin completada, SSPBUF esta lleno 0 = Recepcin no completada, SSPBUFElaborado por Ing. Alvaro Hernndez Sol esta vacio Transmisin (modo I2C): 1 = Transmisin de dato en progreso (No incluye los bits ACK y STOP), SSPBUF esta lleno 0 = Transmisin de data completada (No incluye los bits ACK y STOP), SSPBUF esta vacio
bit 7 WCOL: Write Collision Detect bit Master mode: 1 = A write to SSPBUF was attempted while the I2C conditions were not valid 0 = No collision Slave mode: 1 = SSPBUF register is written while still transmitting the previous word (must be cleared in software) 0 = No collision bit 6 SSPOV: Receive Overflow Indicator bit In SPI mode: 1 = A new byte is received while SSPBUF holds previous data. Data in SSPSR is lost on overflow. In Slave mode, the user must read the SSPBUF, even if only transmitting data, to avoid overflows. In Master mode, the overflow bit is not set, since each operation is initiated by writing to the SSPBUF register. (Must be cleared in software.) 0 = No overflow In I2 C mode: 1 = A byte is received while the SSPBUF is holding the previous byte. SSPOV is a "dont care" in Transmit mode. (Must be cleared in software.) 0 = No overflow bit 5 SSPEN: Synchronous Serial Port Enable bit In SPI mode, Elaborado por Ing. Alvaro Hernndez Sol When enabled, these pins must be properly configured as input or output 1 = Enables serial port and configures SCK, SDO, SDI, and SS as the source of the serial port pins
Registros asociados
Comunicacin I2C
Programa que establezca comunicacin con una memoria que maneja su acceso bajo el protocolo I2C. El programa debe llenar la memoria partiendo de la direccin 0 hasta la mxima direccin los nmeros decrementales partiendo del 255, repitiendo tantas veces como sea necesario.
Elaborado por Ing. Alvaro Hernndez Sol
Configuracin del puerto de comunicacin I2C. Inicializacin de variable con 255 y direccin con 0. Enciende el puerto I2C. Envo de comando para escritura. Envo de direccin. Envo de variable. Incrementa direccin. Decrementa variable. Si variable es negativo asigna 255 a variable. Si direccin es menor a mximo salta a 3.
Elaborado por Ing. Alvaro Hernndez Sol
14.
15. 16. 17. 18.
19.
Asigna direccin con 0. Enciende el puerto I2C. Enva comando de lectura. Enva direccin. Lee el dato. Visualiza el dato en el puerto B. Apaga el puerto I2C. Si direccin es menor a mximo salta a 12. Salta a 2.
Elaborado por Ing. Alvaro Hernndez Sol
Enva dato
Apaga puerto I2C
dato = 255
direccin<max
Enva direccin
Enva dato
datoContador = 0
variable<max