You are on page 1of 81

XXXVI aniversario del Instituto Tecnolgico de Tuxtla Gutirrez

Programacin avanzada de recursos especiales de Microcontrolador

DIA 2 CONVERTIDOR ANALOGICO A DIGITAL.

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

Convertidor analgico a digital

Seales analgicas:
Temperatura. Peso. Flujo. Velocidad. Posicin. Humedad. Aceleracin. Intensidad luminosa. Sonido. Etc.

Elaborado por Ing. Alvaro Hernndez Sol

CAD
Seal analgica
Dato binario ( 4, 8, 12, 16, 18 )

CAD

. . .

CPU

Paralelo

CAD Serial

CPU

Elaborado por Ing. Alvaro Hernndez Sol

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

Convertidor analgico a digital.

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

Convertidor analogico a digital

R E G I S T R O

255 Al CPU (11111111)

Elaborado por Ing. Alvaro Hernndez Sol

Convertidor analgico a digital.


Seal analgica
0 - 2.5 volts 5 volts

Voltaje de referencia

Convertidor analogico a digital

R E G I S T R O

128 Al CPU (10000000)

Seal analgica

0 - 1.25 volts

Voltaje de referencia

5 volts

Convertidor analogico a digital

R E G I S T R O

64
Al CPU (01000000)

Elaborado por Ing. Alvaro Hernndez Sol

Convertidor analgico a digital.


Seal analgica
0 - 2.5 volts 2.5 volts

Voltaje de referencia

Convertidor analogico a digital

R E G I S T R O

255 Al CPU (11111111)

Seal analgica

0 - 1.25 volts

Voltaje de referencia

2.5 volts

Convertidor analogico a digital

R E G I S T R O

128 Al CPU (10000000)

Elaborado por Ing. Alvaro Hernndez Sol

Convertidor analgico a digital.


Seal analgica
0 - 0.63 volts

Voltaje de referencia

2.5 volts

Convertidor analogico a digital

R E G I S T R O

64
Al CPU (10000000)

Seal analgica

0 - 1 volts

Voltaje de referencia

1.25 volts

Convertidor analogico a digital

R E G I S T R O

204 Al CPU (11001100)

Elaborado por Ing. Alvaro Hernndez Sol

Convertidor analgico a digital.

El PIC16F877 tiene un CAD


8

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

Este convertidor tiene cuatro registros denominados:


1. 2. 3. 4.

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

Elaborado por Ing. Alvaro Hernndez Sol

CAD (registro ADCON0)


Bit
7-6

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

CAD (registro ADCON1)


Bit
7

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

VREFVSS VSS VSS VSS

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

Elaborado por Ing. Alvaro Hernndez Sol

CAD

Elaborado por Ing. Alvaro Hernndez Sol

Configuracin del convertidor

Se tiene que asignar valores a los siguientes registros:


TRISA.- Configuracin de puerto A. TRISE.- Configuracin de puerto E. ADCON0.- Seleccin de operacin.

ADCON1.- Configuracin de terminales.


INTCON (opcional).- Configuracin de interrupcin. PIE1 (opcional).- Encendido de convertidor. PIR1 (opcional).- Bandera de convertidor.
Elaborado por Ing. Alvaro Hernndez Sol

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

Elaborado por Ing. Alvaro Hernndez Sol

Adc_Read(?)
Example unsigned tmp; . . . tmp = Adc_Read(1);

1*/

/* Lee el valor analogico del canal

Elaborado por Ing. Alvaro Hernndez Sol

Configuracin del CAD


1.- Se tiene la necesidad de muestrear la seal analgica que entrega un sensor de temperatura, con valores mnimos y mximo de voltaje, de 0 volts 5 volts: Respuesta:

Se selecciona una configuracin para una sola entrada analogica y se justifica la conversion resultante a la derecha (ADCON1).

Se configura la terminal fisica como entrada (TRISE o TRISA).

//Instrucciones de configuracin
ADCON1 = 0b00001110; TRISA.F0 = 1; //Vref+ = VDD y Vref- = VSS // RA0 como entrada
Elaborado por Ing. Alvaro Hernndez Sol

Configuracin del CAD


2.- Se desea muestrear tres seales analogicas, con valores mnimos y mximo de voltaje, de 0 volts 3.5 volts:

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;

// 4 entradas analogicas y Vref+ = RA3


// RA0, RA1, RA2, RA5 como entradas

Elaborado por Ing. Alvaro Hernndez Sol

Configuracin del CAD


3.- Se desea muestrear cinco seales analgicas, con valores mnimos y mximo de voltaje, de 0.5 volts 3.5 volts:
Respuesta: Se selecciona una configuracin para cinco entradas analgicas con voltaje de referencia positivo y negativo externo (RA3 y RA2) y se justifica la conversin resultante a la derecha (ADCON1).

Se configura la terminal fsica como entrada (TRISE y TRISA).

//Instrucciones de configuracin
ADCON1 = 0b00001000; // 6 entradas analgicas, Vref+ = RA3 y Vref- = RA2

TRISA = 0b00101111;
TRISE = 0b00000111;

// RA0, RA1, RA2, RA3 y RA5 como entradas.


// RE0, RE1 y RE2 como entradas.
Elaborado por Ing. Alvaro Hernndez Sol

Registros asociados al CAD

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

1.- Conversion analgica (problema)

Se desea llevar a cabo la conversin de una seal analgica..

Elaborado por Ing. Alvaro Hernndez Sol

1.- Conversin analgica (algoritmo)


1.
2. 3. 4. 5. 6.

Inicializa variables, puertos y LCD. Realiza la conversin. Convierte valor convertido a a cadena. Enva a LCD. Retardo de 1 segundo. Ir a 2.

Elaborado por Ing. Alvaro Hernndez Sol

1.- Conversin analgica (diagrama de flujo)


contador Inicia puertos y LCD Inicia variable

Conversin analgico a digital

Elaborado por Ing. Alvaro Hernndez Sol

1.- Conversin analgica (diagrama esquemtico)

Elaborado por Ing. Alvaro Hernndez Sol

1.- Conversin analgica (programa)


char cadena[6]; unsigned valor; void main ( void ) { TRISA = 0b00000001; ADCON1= 0b00001110; Lcd_Init ( &PORTD ); Lcd_Out (1,1,"Conversin analogica"); Lcd_Out (2,1,"valor decimal :"); Lcd_Out (3,12,"volts"); while(1) { valor = Adc_Read ( 0 ); WordToStr ( valor, cadena ); Lcd_Out ( 2, 13, cadena ); } } Elaborado por Ing. Alvaro Hernndez Sol

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

2.- Conversin con referencia

(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

0 decimal. 1023 decimal.

2.- Conversin con referencia (algoritmo )


1.
2. 3. 4. 5. 6.

Inicializa variables, puertos y LCD. Realiza la conversin. Convierte valor convertido a a cadena. Enva a LCD. Retardo de 1 segundo. Ir a 2.

Elaborado por Ing. Alvaro Hernndez Sol

2.- Conversin con referencia (diagrama de flujo)


contador Inicia puertos y LCD Inicia variable

Conversin analgico a digital

Elaborado por Ing. Alvaro Hernndez Sol

2.- Conversin con referencia (diagrama esquemtico )

Elaborado por Ing. Alvaro Hernndez Sol

Contador de segundos condicionado (programa


char cadena[6]; unsigned valor; void main ( void ) {

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");

while(1) { valor = Adc_Read ( 0 ); }

WordToStr ( valor, cadena ); Lcd_Out ( 2, 13, cadena );

Elaborado por Ing. Alvaro Hernndez Sol

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.

Elaborado por Ing. Alvaro Hernndez Sol

TIMER

Temporizador numero 1 de pulsos de reloj interno y contador de pulsos externos.

TMR1

Tiene las misma caracteristicas que el TMR0. Temporizador y contador (RC0).


Diferencias:
Registro

de 2 bytes (TMR1H y TMR1L). Preescalador (1:1, 1:2, 1:4, 1:8) Generador de reloj (RC0 y RC1)

Elaborado por Ing. Alvaro Hernndez Sol

TMR1 como oscilador

Cuando se habilita (T1OSCEN) las terminales RC1/T1OSI/CCP2 y RC0/T1OSO/T1CKI se convierten en entradas.


Se genera una frecuencia de oscilacin de hasta 200 kHz, usando un cristal de:

32.768 kHz 100 kHz 200 kHz.

Funciona a pesar de la condicin SLEEP.


Elaborado por Ing. Alvaro Hernndez Sol

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

Se quiere contar 5 pulsos pero no se recarga el valor de conteo.


TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H TMR1H
. . .

Elaborado por Ing. Alvaro Hernndez Sol

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

Configuracin del TMR1

Se tiene que asignar valores a los siguientes registros:

TMR1H y TMR1L.- valor de conteo. TMR1H : byte alto TMR1L : byte bajo.

T1CON.- Configuracin del TIMER 1.


INTCON (opcional).- Configuracin de interrupcin. PIE1 (opcional).- Habilitacin del Timer 1. PIR1 (opcional).- Bandera de desborde del Timer 1.
Elaborado por Ing. Alvaro Hernndez Sol

Configuracin del TMR1

Si queremos que el Timer 1 haga:


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

Pr eescalador 4 Tciclo de reloj 10 0.2

65536

10 seg 1 4 0.05 seg

TMR1H : TMR1L 65536

65536 50 65486

( 0 xFFCE )

//Instrucciones de configuracin
T1CON = 0b00000001; TMR1H = 0xFF; TMR1L = 0xCE;
Elaborado por Ing. Alvaro Hernndez Sol

Configuracin del TMR1

Si queremos que el Timer 1 haga:

Un conteo de 200 ms ( 200000 microsegundos ) usando un cristal de 8 MHz.


Como no podemos contar los 200000 pulsos con el registro tenemos que usar el preescalador.
TMR1H : TMR1L 65536 Tbuscado en
seg

Pr eescalador 4 Tperiodode reloj 200000 4

65536

200000 seg 8 4 0.125 seg

TMR1H : TMR1L 65536

65536 50000 15536

( 0 x3CB0 )

//Instrucciones de configuracin
T1CON = 0b00110001; TMR1H = 0x3C; TMR1L = 0xB0;
Elaborado por Ing. Alvaro Hernndez Sol

Configuracin del TMR1

Si queremos que el Timer 1 haga:


Un conteo de 7500 pulsos externos utilizando RC0/T1OSCI/T1CKI No es necesario usar el preescalador Sin sincronizacin.

TMR1H : TMR1L 65536

# pulsos externos Pr eescalador ( 0 xE2 B 4 )

65536

7500 1

65536 7500

TMR1H : TMR1L 58036

//Instrucciones de configuracin
T1CON = 0b00000011; TMR1H = 0xE2; TMR1L = 0xB4;
Elaborado por Ing. Alvaro Hernndez Sol

Registros asociados al TMR1

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.

Elaborado por Ing. Alvaro Hernndez Sol

3.- Frecuencmetro (Algoritmo)


1.
2. 3. 4. 5. 6.

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

3.- Frecuencmetro (algoritmo ISR)


1.
2. 3.

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

Frecuencimetro ( diagrama de flujo 1)


frecuencimetro Configura INT-EXT Timer 1

Si
2 pulsos?

No

Encuentra frecuencia Imprime frecuencia

Elaborado por Ing. Alvaro Hernndez Sol

Frecuencimetro ( diagrama de flujo 2)


ISR Reinicia la INT-EXT Cuenta el pulso

2 pulsos?
No

Si

Apaga Timer 1

Enciende Timer 1

Terminar

Elaborado por Ing. Alvaro Hernndez Sol

3.- Frecuencmetro (programa)


unsigned frecuencia, pulso, conteo; char cad[10]; void interrupt (void) { INTCON.F1 = 0; pulso ++; if ( pulso == 1 ) { T1CON.F0 = 1; } else { T1CON.F0 = 0; INTCON = 0; } }
void main (void) { TRISB = 255; OPTION_REG = 0b0100000; INTCON = 0b10010000; T1CON = 0b00110000; Lcd_Init ( &PORTD ); Lcd_Out(1,1, Frecuencmetro); Lcd_Out(3,1, Frecuencia :) Lcd_Out(2,1, Pulsos :); TMR1H = TMR1L = 0; while(1) { if ( pulso == 2 ) { conteo = (TMR1H<<8)+TMR1L; WordToStr ( conteo, cad); Lcd_Out (2,12,cad); frecuencia =(1000000/conteo)/8; WordToStr ( frecuencia, cad); Lcd_Out (3,12,cad); pulso = 0; TMR1H = TMR1L = 0; INTCON = 0x90; } } }

Elaborado por Ing. Alvaro Hernndez Sol

PROBLEMAS DEL TMR1


1.

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

Temporizador de ciclos de reloj y generador de seal de periodo para puerto serial.

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

Funcionamiento del timer 2


1.

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.

alcanza el valor precargado en PR2, se genera un pulso.


Elaborado por Ing. Alvaro Hernndez Sol

Funcionamiento del TIMER 2


4.
5.

El pulso que se genera reinicia el registro

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).

Elaborado por Ing. Alvaro Hernndez Sol

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

Seleccin del preescalador del Timer 2. 00 = 1:1 01 = 1:4 1X = 1:16


Elaborado por Ing. Alvaro Hernndez Sol

Diagrama a bloques del TIMER 2

Elaborado por Ing. Alvaro Hernndez Sol

Registros de configuracin

Se tiene que asignar valores a los siguientes registros:


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.

Elaborado por Ing. Alvaro Hernndez Sol

Configuracin del TMR2

Si queremos que el Timer 2 haga:


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

preescalad or postescala dor 4 Tciclo de reloj 75 0.33

75 seg 1 1 4 0.083 seg

PR2

225

( 0 xE1 )

//Instrucciones de configuracin
T2CON = 0b00000100; PR2 = 0xE1; // 0xE5 // 0xFF TMR2 = 0; // 0x04 // 0x1E
Elaborado por Ing. Alvaro Hernndez Sol

Configuracin del TMR2

Si queremos que el Timer 2 haga:


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

postescala dor 4 Tciclo de reloj

50000 seg 16 14 4 0.25 seg

PR2

223

( 0 xDF )

//Instrucciones de configuracin
T2CON = 0b01101111; PR2 = 0xDF; TMR2 = 0;

Elaborado por Ing. Alvaro Hernndez Sol

Registros asociados al Timer 2

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 ).

Elaborado por Ing. Alvaro Hernndez Sol

4.- Cerrojo temporizado (problema)

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

4.- Cerrojo temporizado (algoritmo)


Programa principal 1. Configurar interrupcin externa. 2. Configurar Timer 2. 3. Si cerrrojo activado y pulso de desactivacin presente ir a 5 4. No cerrojo activado o pulso de desactivacin ir a3 5. Desactiva el cerrojo. 6. Reinicia conteo de tiempo. 7. Ir a 3.
Elaborado por Ing. Alvaro Hernndez Sol

4.- Cerrojo temporizado (algoritmo 2)


Programa ISR
1.
2. 3. 4.

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

4.- Cerrojo temporizado ( diagrama de flujo 1)


Cerrojo temp. Configura INT-EXT Timer 2

Cerrojo activado Y Pulso desactivacin?

Si

No

Desactivar el cerrojo Reinicia el conteo de tiempo

Elaborado por Ing. Alvaro Hernndez Sol

4.- Cerrojo temporizado ( diagrama de flujo 2)


ISR Reinicia la INT-EXT Cuenta el pulso
Si

INT_EXT?
No

Reinicia INT_EXT Reinicia conteo

1
Conteo = 5 min? No Si

Timer 2?
No

Si

Incrementa conteo

Activa cerrojo

1 Terminar
Elaborado por Ing. Alvaro Hernndez Sol

4.- Cerrojo temporizado (programa)


unsigned decima_segundos, seg, anterior; char cad[10]; void interrupt (void) { if (INTCON.F1 == 1) { INTCON.F1 = 0; decima_segundos = 0; TMR2 = 0; } if ( PIR1.F1 == 1 ) { PIR1.F1 = 0; decima_segundos++; if ( decima_segundos == 30000 ) { PORTC.F0 = 1; T2CON.F2 = 0; INTCON.F4 = 0; } } }
Elaborado por Ing. Alvaro Hernndez Sol

4.- Cerrojo temporizado (programa 2)


void main (void) { OPTION_REG = 0b0100000;
INTCON = 0b11010000; PIE1 = 0b00000010; T2CON = 0b01111111; PR2 = 39; TRISC = 0xf0; TRISB = 255; PORTC = 0; TMR2 = 0; Lcd_Init ( &PORTD ); Lcd_Out(1,1, "Cerrojo temporizado"); Lcd_Out(3,1, "Cerrojo : abierto"); Lcd_Out(2,8, "segundos");
while(1) { if ( PORTC.F0 == 1 && PORTC.F7 == 1) { PORTC.F0 = 0; decima_segundos = 0; TMR2 = 0; T2CON.F2 = 1; } seg = decima_segundos/100; if ( seg != anterior ) { anterior = seg; WordToStr ( seg, cad); Lcd_Out ( 2, 1, cad ); if (seg == 300) Lcd_Out(3, 11, "Cerrado "); } }

}
Elaborado por Ing. Alvaro Hernndez Sol

I2C

Elaborado por Ing. Alvaro Hernndez Sol

Registros 1

Bit 7 bit 6 bit 5 bit 4 bit 3 bit 2

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

(Este bit se limpia cuando el modulo MSSP es deshabilitado, SSPEN es limpiado)

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

Elaborado por Ing. Alvaro Hernndez Sol

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

Comunicacin I2C (algoritmo 1)


1.
2. 3. 4. 5. 6. 7. 8. 9. 10.

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

Comunicacin I2C (algoritmo 2)


11.
12. 13.

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

Comunicacin I2C (diagrama de flujo 1)


I2 C Configura puerto I2C 2 Enva direccin

Enva dato
Apaga puerto I2C

dato = 255 direccin = 0


1 Retardo de un segundo Enciende puerto I2C 1
dato = 0

dato = 255

direccin<max

Enva comando escritura

Elaborado por Ing. Alvaro Hernndez Sol

Comunicacin I2C (diagrama de flujo 2)


A Enva variable Configura puerto I2C 2

Enva direccin
Enva dato

Dato = 255 Direccin = 0


1 Retardo de un segundo Enciende puerto I2C 1
dato<max

datoContador = 0

variable<max

Elaborado por Ing. Alvaro Hernndez Sol

You might also like