SlideShare una empresa de Scribd logo
1 de 86
1
DTO. INGENIERIA ELECTRÓNICA
TEMA
6
PICmicro GAMA MEDIA:
PIC16F87X
2
PICmicro GAMA MEDIA: PIC16F87X
Arquitectura
3
PICmicro GAMA MEDIA: PIC16F87X
Arquitectura
4
PICmicro GAMA MEDIA: PIC16F87X
Arquitectura
5
PICmicro GAMA MEDIA: PIC16F87X
Arquitectura
6
PICmicro GAMA MEDIA: PIC16F87X
Arquitectura
7
PICmicro GAMA MEDIA: PIC16F87X
Arquitectura
8
PICmicro GAMA MEDIA: PIC16F87X
Modulos
– Puertos de Entrada/Salida.
– Puerto Esclavo Paralelo (PSP).
– Temporizadores/contadores de 8/16 bits (TMR).
– Captura / Comparación / PWM (CCP).
– Comparadores Analógicos.
– Conversión Analógica / Digital (A/D).
– Transmisor Receptor Asíncrono Síncrono Universal (USART ó SCI).
– Puerto Serie Síncrono Básico ó Maestro(BSSP ó MSSP).
– Memoria EEPROM de datos.
– FLASH EEPROM de programa modificable desde el código.
9
PICmicro GAMA MEDIA: PIC16F87X
Conversión A/D
•Un sistema de conversión A/D hacer llegar al controlador digital la información
suministrada por el proceso analógico que se desea controlar. Establece una relación
biunívoca entre el valor de la señal en su entrada y la palabra digital obtenida en su
salida.
•La conversión A/D se fundamenta en la teoría de muestreo: “Si una señal continua,
S(t) , tiene una banda de frecuencia en la que fm es la mayor frecuencia, dicha señal
podrá reconstruirse sin distorsión a partir de muestras de la señal tomadas a una
frecuencia de valor fs > 2·fm”
•Circuitos de captura y mantenimiento (S/H=Sample and hold): Muestrean la señal
analógica (durante un intervalo de tiempo) y mantienen ese valor, generalmente en un
condensador, durante el tiempo que dura la transformación A/D propiamente dicha.
10
PICmicro GAMA MEDIA: PIC16F87X
Conversión A/D
•Tipos de convertidores: Directo, Aproximaciones sucesivas, de simple rampa, de doble
rampa, de paso intermedio a frecuencia.
•Aproximaciones Sucesivas: es el implementado en los PICs, se basa en ir eliminando
mitades de tabla hasta quedarse con el valor que más se aproxima a la tensión
analógica a convertir.
Sea uº=3,2V
1) Prueba con 1000 (2,5V)
2,5 < 3,2  mitad superior
2) Prueba con 1100 (3,75V)
3,75 > 3,2 mitad inferior
3) Prueba con 1010 (3,125V)
3,125 < 3,2 mitad superior
4) Prueba con 1011 (3,4375V)
3,4375 > 3,2 valor inferior
11
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Convierte la señal analógica en un número digital de 10 bits.
– Los 16F876/873 tienen 5 canales (en puerto A) y los 16F877/874 tienen 8 canales
(5 en el puerto A y 3 en el puerto E).
– Tienen tensiones de referencia VREF+ y VREF- seleccionables por software.
Pueden ser VDD y VSS o las tensiones aplicadas en los pines RA3 / RA2 .
– Puede seguir funcionando cuando el PIC está en modo SLEEP ya que dispone de
un oscilador RC interno propio.
–Hay 11 registros asociados a este periférico.
Definición de pines de entrada y señales aplicadas
TRISA – PORTA – TRISE - PORTE
Manejo de interrupciones
INTCON – PIE1 – PIR1
Control del conversor A/D
ADCON0 – ADCON1 – ADRESH - ADRESL
12
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Estructura Interna
13
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Función de transferencia.
•La primera transición tiene lugar cuando la tensión analógica de entrada
alcanza el valor VREF- + (VREF+ - VREF-)/1024 = 1 LSb.
Caso de que VREF+ = VDD y que VREF- = VSS
14
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Registro ADCON0 (1Fh) [PIC16F87x]
bit 7-6 ADCS1:ADCS0: Selección del reloj para la conversión A/D
00 = fOSC/2 01 = fOSC/8 10 = fOSC/32 11 = fRC
bit 5-3 CHS2:CHS0: Selección del canal de conversión
000 = Canal 0 001 = Canal 1 010 = Canal 2 011 = Canal 3
100 = Canal 4 101 = Canal 5 110 = Canal 6 111 = Canal 7
bit 2 GO/DONE: Estado de la conversión
Si ADON=1:
1 = Conversión en progreso 0 = Conversión finalizada
bit 0 ADON: Bit de encendido del convertidor A/D
1 = Módulo A/D encendido 0 = Módulo A/D apagado
15
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Registro ADCON1 (9Fh) [PIC16F87x]
bit 7 ADFM: Selección de formato del resultado
1 = Ajuste a la derecha 0 = Ajuste a la izquierda
bit 3-0 PCFG3:PCFG0: Configuración de las entradas al módulo A/D
16
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Registro ADCON0 (1Fh) [PIC16F87xA]
bit 7-6 ADCS1:ADCS0: Selección del reloj para la conversión A/D junto con ADCS2
que está en ADCON1.
ADCS2=0 00 = fOSC/2 01 = fOSC/8 10 = fOSC/32 11 = fRC
ADCS2=1 00 = fOSC/4 01 = fOSC/16 10 = fOSC/64 11 = fRC
– Registro ADCON1 (9Fh) [PIC16F87xA]
bit 6 ADCS2: Selección de reloj para conversión A/D junto con ADCS1 y ADCS0.
17
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Registro INTCON (0Bh , 8Bh , 10Bh , 18Bh)
bit 7 GIE: Habilitación global de interrupciones
bit 6 PEIE: Habilitación de interrupciones de periféricos
– Registro PIE1 (8Ch)
bit 6 ADIE: Habilitación de la interrupción del convertidor A/D
– Registro PIR1 (0Ch)
bit 6 ADIF: Flag de la interrupción del convertidor A/D
1 = Conversión A/D completada. 0 = Conversión A/D aún no completada.
18
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Pasos en una conversión A/D
1. Configurar el módulo A/D.
• Definir entradas analógicas y tensión de referencia. (ADCON1)
• Seleccionar el canal de la conversión. (ADCON0)
• Seleccionar el reloj de la conversión. (ADCON0)
• Encender el módulo A/D. (ADCON0)
2. Configurar la interrupción por conversión A/D.
• Bajar el flag ADIF. (PIR1).
• Habilitar la interrupción del convertidor A/D. (PIE1).
• Habilitar las interrupciones de los periféricos. (INTCON).
• Habilitar la máscara global de interrupciones. (INTCON)
3. Esperar a que transcurra el tiempo de adquisición.
• Tiempo necesario para capturar el valor analógico a convertir.
• Los valores típicos del tiempo de adquisición son del orden de 20µs.
19
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
4. Comenzar la conversión.
• Poner a “1” el bit GO/DONE. (ADCON0)
No activar este bit a la vez que se enciende el convertidor A/D
5. Esperar a que se complete la conversión A/D.
• Controlando cuándo el bit GO/DONE se pone a “0”.
• Esperando a que llegue la interrupción del convertidor.
6. Leer el resultado de la conversión.
• Disponible en los registros ADRESH:ADRESL.
• Bajar el flagADIF si se están usando interrupciones.
7. Llevar a cabo la siguiente conversión.
• Volver al paso 1 ó 2, según convenga.
• Espera mínima antes de empezar la siguiente adquisición: 2·TAD
(Esta espera no es necesaria en el caso de los PIC16F87xA porque el interruptor
de captura se “cierra” en cuanto se obtiene el resultado).
TAD: Tiempo necesario para la conversión de un bit.
20
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Tiempo de adquisición: tiempo necesario para cargar el condensador de
mantenimiento CHOLD
– Máxima impedancia recomendada para la fuente: Rs<10K.
En estas condiciones, TACQ ≈ 20µS
– Hasta que no acabe la conversión, no empieza otra adquisición (SS abierto)
Esperar TACQ : a) Tras una conversión;
b) tras seleccionar un nuevo canal;
c) Tras encender el módulo AD
21
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Tiempo de conversión: la conversión de 10 bits dura 12TAD
– TAD configurable en ADCON0 (reloj de la conversión).
TAD=2·TOSC TAD=8·TOSC TAD=32·TOSC TAD=2µs÷6µs (típ. 4µs)
También
TAD=4·TOSC TAD=16·TOSC TAD=64·TOSC en PIC16F87xA
– Para un funcionamiento correcto se necesita un valor mínimo de TAD=1,6µs.
22
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Tiempo de conversión y adquisición en PIC16F87x
23
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Tiempo de conversión y adquisición en PIC16F87xA
24
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
• Módulo A/D cuando el micro entra en modo dormido ( SLEEP)
– El módulo A/D puede funcionar durante el modo dormido si se selecciona como
reloj para la conversión el RC interno (ADCS1:ADCS0 = 11).
– Si se elige como reloj el RC, el módulo A/D espera 1 ciclo de instrucción antes
de iniciar la conversión. Esto permitiría la ejecución de la instrucción SLEEP que
se coloque a continuación, esto eliminaría todo posible ruido de conmutación
(debido al paso de normal a dormido) durante la conversión.
– Cuando se haya completado la conversión, el bit GO/DONE se pondrá a “0” y el
resultado se cargará en los registros ADRESH y ADRESL. Si la interrupción del
conversor A/D está habilitada (ADIE y PEIE a “1”) el dispositivo se “despertará”.
Si no estuviera habilitada, el módulo A/D se apagará aunque el bit ADON siga a
“1”.
– Si la fuente de reloj para la conversión no es la RC interna, una instrucción
SLEEP provocará que la conversión que se esté ejecutando se aborte y que el
módulo A/D se apague aunque el bit ADON siga a “1”.
25
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
• Efectos de un RESET sobre el módulo A/D
– Un RESET del dispositivo provoca que los registros del módulo A/D se
inicialicen a los valores indicados en la tabla. Por tanto, un RESET provoca que
el módulo A/D se apague y que cualquier conversión que se estuviera
realizando cuando se produce el RESET se aborte. Todos los pines asociados al
módulo A/D pasan a ser entradas analógicas. Los valores acumulados en
ADRESH:ADRESL no se modifican por un Power-On-Reset. El valor que
contendrán los registros ADRESH:ADRESL tras un POR serán desconocidos
inicialmente.
26
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Conversión A/D en el compilador C de CCS
• Configuración del módulo conversor A/D
setup_adc (modo);
modo: ADC_OFF (ADCON0 ← 00h)
ADC_CLOCK_DIV_2 (ADCON0 ← 01h)
ADC_CLOCK_DIV_8 (ADCON0 ← 41h)
ADC_CLOCK_DIV_32 (ADCON0 ← 81h)
ADC_CLOCK_INTERNAL (ADCON0 ← C1h)
• Definición de entradas analógicas
setup_adc_ports (valor);
valor: NO_ANALOGS (ADCON1 ← 86h)
ALL_ANALOG (ADCON1 ← 80h)
ANALOG_RA3_REF (ADCON1 ← 81h)
A_ANALOG (ADCON1 ← 82h)
A_ANALOG_RA3_REF (ADCON1 ← 83h)
RA0_RA1_RA3_ANALOG (ADCON1 ← 84h)
RA0_RA1_ANALOG_RA3_REF (ADCON1 ← 85h)
27
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Definición de entradas analógicas (cont.)
setup_adc_ports (valor);
valor: ANALOG_RA3_RA2_REF (ADCON1 ← 88h)
ANALOG_NOT_RE1_RE2 (ADCON1 ← 89h)
ANALOG_NOT_RE1_RE2_REF_RA3 (ADCON1 ← 8Ah)
ANALOG_NOT_RE1_RE2_REF_RA3_RA2 (ADCON1 ← 8Bh)
A_ANALOG_RA3_RA2_REF (ADCON1 ← 8Ch)
RA0_RA1_ANALOG_RA3_RA2_REF (ADCON1 ← 8Dh)
RA0_ANALOG (ADCON1 ← 8Eh)
RA0_ANALOG_RA3_RA2_REF (ADCON1 ← 8Fh)
• Selección del canal analógico
set_adc_channel (canal);
canal: 0 (AN0) 4 (AN4)
1 (AN1 ) 5 (AN5)
2 (AN2) 6 (AN6)
3 (AN3) 7 (AN7)
28
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Lectura del resultado
valor = read_adc ();
valor: Entero de 16 bits según la directiva #device adc= empleada.
– La influencia de dicha directiva se recoge en la siguiente tabla
– El fichero 16f876.h incluye como primera directiva #device PIC16F876. Es
necesario incluir información del tipo de conversor A/D. Por ello los ficheros C
que usen este módulo deberán comenzar por:
#device “16F876.h”
#device adc=10
29
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
setup_adc_ports (A_ANALOG);
setup_adc (ADC_CLOCK_INTERNAL);
set_adc_channel (3);
delay_us (20);
valor = read_adc ();
setup_adc (ADC_OFF);
W ← 10000010
Banco 1
ADCON1 ← W
Banco 0
W ← ADCON0
W ← W & 00111000
W ← W | 11000001
ADCON0 ← W
W ← ADCON0
W ← W & 11000111
W ← W | 00011000
ADCON0 ← W
GO/DONE ← 1
Espera a GO/DONE=0
W ← ADRESH
TEMP ← W
Banco 1
W ← ADRESL
Banco 0
REGL ← W
W ← TEMP
REGH ← W
W ← ADCON0
W ← W & 00111000
ADCON0 ← W
30
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
Project >> New >> Pic Wizard >> nombre fichero y guardar
31
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
32
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
33
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
ad_fuente.h
34
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D: ejemplo lectura de tensión canal0
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA4/T0CKI
6
RA5/AN4/SS
7
OSC1/CLKIN
9
OSC2/CLKOUT
10
RC1/T1OSI/CCP2
12
RC2/CCP1
13
RC3/SCK/SCL
14
RB7/PGD
28
RB6/PGC
27
RB5
26
RB4
25
RB3/PGM
24
RB2
23
RB1
22
RB0/INT
21
RC7/RX/DT
18
RC6/TX/CK
17
RC5/SDO
16
RC4/SDI/SDA
15
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
11
MCLR/Vpp/THV
1
U1
PIC16F876
RV1
1k
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD1
LM016L
BAT1
5
RV1(3)
lectura
valor
LSB



1024
5
1024
5
1
COMPILAR (F9)
MONTARLO
35
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D: lectura del valor max/min en canal0
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA4/T0CKI
6
RA5/AN4/SS
7
OSC1/CLKIN
9
OSC2/CLKOUT
10
RC1/T1OSI/CCP2
12
RC2/CCP1
13
RC3/SCK/SCL
14
RB7/PGD
28
RB6/PGC
27
RB5
26
RB4
25
RB3/PGM
24
RB2
23
RB1
22
RB0/INT
21
RC7/RX/DT
18
RC6/TX/CK
17
RC5/SDO
16
RC4/SDI/SDA
15
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
11
MCLR/Vpp/THV
1
U1
PIC16F876
RV1
1k
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD1
LM016L
BAT1
5
RV1(3)
Simular en ISIS
36
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
• Abrir el MPLAB: Project >> Wizard >> Siguiente
37
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
38
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D
– Ya se pueden utilizar las herramientas habituales de MPLAB
39
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D: práctica
• Práctica: Linealizar la NTC NTSA0WB203 y obtener el valor de Temperatura
mediante el PIC16F876.
BAT1
5
-tc
RT1
20.0k
R1
10k
R1(2)
15
.
273
15
.
298
1
)
20000
ln(
4050
1
1
15
.
273
1
)
ln(
1
1
5
10000
25
25
1












T
T
T
T
T
T
T
BAT
T
T
R
T
R
R
T
V
V
V
V
R
V
R

Ojo: Incluir #include <math.h>
40
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA4/T0CKI
6
RA5/AN4/SS
7
OSC1/CLKIN
9
OSC2/CLKOUT
10
RC1/T1OSI/CCP2
12
RC2/CCP1
13
RC3/SCK/SCL
14
RB7/PGD
28
RB6/PGC
27
RB5
26
RB4
25
RB3/PGM
24
RB2
23
RB1
22
RB0/INT
21
RC7/RX/DT
18
RC6/TX/CK
17
RC5/SDO
16
RC4/SDI/SDA
15
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
11
MCLR/Vpp/THV
1
U1
PIC16F876
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD1
LM016L
BAT1
5
-tc
RT1
20.0k
R1
10k
R1(2)
V=3.31709
PICmicro GAMA MEDIA: PIC16F87X
Modulo de Conversión A/D: práctica
Simular en ISIS
41
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP (COMPARACIÓN, CAPTURA Y PWM)
• Un microcontrolador de la gama media de los PIC16 puede tener hasta 2 módulos CCP.
• Cada módulo CCP tiene un registro de 16 bits que se puede utilizar de 3 formas distintas:
– Como registro de 16 bits para captura de tiempo al producirse un evento.
– Como registro de 16 bits para compararlo con el valor de cuenta del temporizador TMR1,
pudiendo provocar un evento cuando se alcanza el valor contenido en este registro.
– Como registro de 10 bits del ciclo de trabajo de una señal PWM generada por el
microcontrolador.
• Los 2 módulos CCP disponibles se comportan casi idénticamente, salvo el caso del
funcionamiento por disparo de evento especial ( special event trigger) que tiene una pequeña
diferencia si se trata del módulo CCP1 ó del módulo CCP2.
• Tras un reset, el módulo CCP está apagado (al forzar los bits de configuración al valor 0).
• En las siguientes transparencias se describirá el funcionamiento de CCP1. El funcionamiento de
CCP2 es idéntico (salvo la excepción indicada anteriormente) pero cada uno tiene sus propios
registros de carga y configuración (véase tabla adjunta).
42
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP
• Condiciones de funcionamiento
– Temporizadores necesarios.
Modo captura  TMR1
Modo comparación  TMR1
PWM  TMR2
– Interacción entre los dos módulos CCP.
43
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP
• Registro CCP1CON / CCP2CON (17h / 1Dh)
bit 5-4 CCPxX:CCPxY: Bits menos significativos del PWM
En modo PWM:
Los dos bits menos significativos del ciclo de trabajo.
Los ocho bits más significativos están en CCPRxL.
bit 3-0 CCPxM3:CCPxM0: Bits de selección del modo CCP a utilizar
0000 = Comparación/Captura/PWM desactivada (reset del módulo CCP)
0100 = Modo de captura, cada flanco descendente
0101 = Modo de captura, cada flanco ascendente
0110 = Modo de captura, cada 4º flanco ascendente
0111 = Modo de captura, cada 16º flanco ascendente
1000 = Modo de comparación, CCPx=1 al igualarse (CCPxIF=1)
1001 = Modo de comparación, CCPx=0 al igualarse (CCPxIF=1)
1010 = Modo de comparación, genera interrupción al igualarse (CCPx invariable, CCPxIF=1)
1011 = Modo de comparación, lanza acción especial (CCPxIF=1, CCPx invariable) CCP1 resetea
TMR1 / CCP2 resetea TMR1 y lanza una conversión A/D
11xx = Modo PWM
44
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: MODO CAPTURA
• En modo Captura, los registros CCPRxH:CCPRxL toman el valor de 16 bits que tenga el TMR1
cuando se produce un determinado evento en el pin CCPx (RC2/CCP1 para el módulo CCP1 y
RC1/T1OSI/CCP2 para el módulo CCP2). Los posibles eventos son:
– Cada flanco de bajada.
– Cada flanco de subida.
– Cada 4 flancos de subida.
– Cada 16 flancos de subida.
• El evento se configura con los bits CCPxM3:CCPxM0 de los registros CCP1CON y CCP2CON
respectivamente.
• El bit CCP1IF (PIR1<2>) ó CCP2IF (PIR2<0>) se ponen a “1” cuando se produce el evento
configurado, pudiendo provocar un salto a la rutina de interrupción. El correspondiente flag
debe limpiarse por software.
• Si se produce otra captura antes de que se lea el valor del registro CCPRx, el último valor
sobreescribe el valor anterior (que se pierde).
45
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: MODO CAPTURA
• En modo captura, el pin RC2/CCP1 y/o el pin RC1/T1OSI/CCP2 deben configurarse como
entrada por puesta a uno de los bits TRISC<2> y TRISC<1> respectivamente. Si el bit
RC2/TRISC1 y/o RC1/CCP2 se configura como salida, una escritura a este pin del puerto podría
originar una captura.
• El TMR1 debe estar corriendo en modo temporizador ó en modo contador síncrono para que el
módulo CCP produzca la comparación. No puede funcionar en modo contador asíncrono.
• Si se cambia de un modo captura (p.e. de 4 flancos) a otro (p.e. de cada flanco), el cambio
puede generar una falsa interrupción. El usuario debe por software limpiar el bit CCPxIE para
deshabilitar las interrupciones, limpiar el flag CCPxIF y luego cambiar el modo de captura.
• Si en medio de una cuenta de 4 ó 16 flancos de subida se apaga el módulo CCP o se pasa a un
modo que no sea el modo Captura (mediante los bits CCPxM3:CCPxM0), el prescaler del CCP
se resetea.
• En modo dormido, el TMR1 no se incrementa (esta en modo síncrono ó temporizador). Pero, el
prescaler del CCP sí puede continuar incrementando el contador de eventos y cuando llega al
valor configurado pone el bit CCPxF a “1” provocando que el micro se “despierte”. No obstante,
el contenido del TMR1 se transfiere a los CCPR pero el TMR1 no se ha visto incrementado y por
tanto, el valor cargado no tiene un significado dado.
46
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: MODO COMPARACION
• En modo comparación, el valor de 16 bits almacenado en los registros CCPRx es comparado
continuamente con el valor de los registros del TMR1. Cuando se produce una igualdad, el pin
CCPx puede experimentar o no un evento, que puede ser:
– Puesta a “1”.
– Puesta a “0”.
– Sin cambio.
• El evento viene fijado por el valor de los bits CCPxM3:CCPxM0 (CCPxCON<3:0>)
• Al mismo tiempo que se produce un evento en el pin se puede producir una interrupción ya
que el flag CCPxIF (de PIR1 ó PIR2) se pone a “1”.
• TMR1 debe estar funcionando en modo temporizador ó modo contador síncrono para que el
módulo CCP funcione correctamente en el modo comparación. En modo contador asíncrono, el
modo comparación no funciona.
47
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: MODO COMPARACION
• El pin CCPx que quiera verse modificado debe configurarse como salida, limpiando el bit del
registro TRISC correspondiente. En el momento que se selecciona el modo de comparación
deseado, el pin CCP se pone al nivel contrario al que tiene que cambiar cuando se produzca la
igualdad entre los registros CCPRx y TMR1. Si la igualdad no afecta al pin CCPx, este tendrá el
valor que se le haya dado previamente en el registro PORTC.
• MODO INTERRUPCION SOFTWARE: En este modo, el pin CCPx no se ve afectado, solo se
activará al flag CCPxIF a 1 y se generará la interrupción si está habilitada.
• MODO DISPARO DE EVENTO ESPECIAL: Cuando se produce la igualdad, el registro TMR1 se
resetea convirtiéndose por tanto, en un registro que marca la periodicidad del evento. En el
caso del módulo CCP2, además de resetear el TMR1 se lanza una nueva conversión A/D (si el
módulo de conversión A/D está activo) permitiendo programar la conversión A/D a periodos de
tiempo fijos.
• FUNCIONAMIENTO EN MODO DORMIDO: Al no funcionar el TMR1 (modo síncrono) en modo
dormido, el módulo CCP en modo comparación no funciona. El pin CCPx tendrá el valor que
tenía antes de entrar en modo SLEEP y “despertará” con ese valor.
• TRAS UN RESET: El módulo CCP está apagado.
48
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: MODO PWM
• En modo PWM (MODULACIÓN DE ANCHO DE PULSO - Pulse Width Modulation), el objetivo es
obtener a través de alguna de las patillas CCPx una forma de onda como la mostrada en la
figura donde tanto el periodo como el ciclo de trabajo (Duty cycle) puede variar con el objetivo,
por ejemplo, de regular la velocidad de un motor, la luminosidad de una bombilla, etc.
• El periodo de la señal viene fijado por la configuración de TMR2 y por el contenido del registro
PR2 (0x92). Este registro de 8 bits contiene los 8 bits más significativos de una cuenta de 10
bits.
• El ciclo de trabajo o ciclo útil (duty cycle) viene definido por el contenido del valor del
registro CCPRxL junto con los bits CCP1CON<5:4> antes de comenzar un nuevo periodo.
• El temporizador base con el que se compara el contenido de estos registros es el TMR2.
49
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: MODO PWM
• PERIODO DE LA ONDA PWM. Se calcula utilizando la siguiente fórmula:
T = (PR2 + 1) ·( 4 / TOSC )· PRESCALERTMR2
– Cuando TMR2 es igual a PR2, en el siguiente incremento de ciclo se producen tres acciones:
• El TMR2 se resetea.
• El pin CCPx se pone a 1. Salvo si el ciclo de trabajo esta fijado a 0 donde el pin CCPx
no se pondrá a 1 nunca (el biestable RS es de borrado prioritario).
• El nuevo ciclo de trabajo es cargado desde el registro CCPRxL al registro CCPRxH que
es el que realmente se compara con el TMR2 para fijar el ciclo ce trabajo.
50
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: MODO PWM
• CICLO DE TRABAJO DE LA ONDA PWM: El ciclo de trabajo viene definido por el valor que se
carga en el registro CCPR1L (8bits más significativos) junto con los bits CCP1CON<5:4> (2 bits
menos significativos). Por tanto se consigue una resolución de 10 bits (DCxB9:DCxB0). La
siguiente ecuación se utiliza para calcular el ciclo de trabajo (duty cycle) de la onda PWM:
D = (CCPRxL:CCPxCON<5:4>) · TOSC · PRESCALERTMR2
• Los registros CCPR1L y los bits CCP1CON<5:4> pueden escribirse en cualquier instante de
tiempo, pero no se cargan en CCPR1H y por tanto, no tiene efecto, hasta que finalice el periodo
de la onda PWM actual.
• Cuando TMR2 (+ 2 bits) se iguala a CCPxH (+ 2 bits), CCPx  0.
• Si el ciclo de trabajo de la onda PWM es mayor que el periodo, la señal que sale por la patilla
CCPx está siempre a 1.
51
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: COMPILADOR CCS
Configuración del módulo CCP
setup_ccp1 (modo); setup_ccp2 (modo);
modo: CCP_OFF (CCPxCON  00h)
CCP_CAPTURE_FE (CCPxCON  04h)
CCP_CAPTURE_RE (CCPxCON  05h)
CCP_CAPTURE_DIV_4 (CCPxCON  06h)
CCP_CAPTURE_DIV_16 (CCPxCON  07h)
CCP_COMPARE_SET_ON_MATCH (CCPxCON  08h)
CCP_COMPARE_CLR_ON_MATCH (CCPxCON  09h)
CCP_COMPARE_INT (CCPxCON  0Ah)
CCP_COMPARE_RESET_TIMER (CCPxCON  0Bh)
CCP_PWM (CCPxCON  0Ch)
CCP_PWM_PLUS_1 (CCPxCON  1Ch)
CCP_PWM_PLUS_2 (CCPxCON  2Ch)
CCP_PWM_PLUS_3 (CCPxCON  3Ch)
52
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: COMPILADOR CCS
Definición del ciclo de trabajo en modo PWM
set_pwm1_ duty (valor); set_pwm2_ duty (valor);
valor: Dato (8 ó 16 bits) que fija el DUTY CLICLE de la PWM.
Variables definidas en 16F876.h
long CCP_1; long CCP_2;
#byte CCP_1 = 0x15 #byte CCP_2 = 0x1B
#byte CCP_1_LOW = 0x15 #byte CCP_2_LOW = 0x1B
#byte CCP_1_HIGH = 0x16 #byte CCP_2_HIGH = 0x1C
53
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: COMPILADOR CCS
Configuración del pin CCPy como entrada/salida
set_tris_C (valor);
valor: Entero de 8 bits, cada uno de los cuales representa la la configuración de un pin del
puerto. (“1” E / “0”  S)
Configuración del temporizador TMR1
setup_timer_1 (modo);
modo: T1_DISABLED (T1CON  00h)
T1_INTERNAL (T1CON  85h)
T1_EXTERNAL (T1CON  87h)
T1_EXTERNAL_SYNC (T1CON  83h)
T1_CLK_OUT (T1CON  08h)
T1_DIV_BY_1 (T1CON  00h)
T1_DIV_BY_2 (T1CON  10h)
T1_DIV_BY_4 (T1CON  20h)
T1_DIV_BY_8 (T1CON  30h)
Se pueden agrupar constantes de distintos grupos con |.
54
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: COMPILADOR CCS
Configuración del temporizador TMR2
setup_timer_2 (modo,periodo,postscaler);
modo: T2_DISABLED (T2CON  00h)
T2_DIV_BY_1 (T2CON  04h)
T2_DIV_BY_4 (T2CON  05h)
T2_DIV_BY_16 (T2CON  06h)
periodo: PR2  periodo
postscaler: Número de overflows necesarios para generar una interrupción. Es un valor entre 1
y 16 (para uso con los módulos CCP se toma un postscaler de 1).
55
PICmicro GAMA MEDIA: PIC16F87X
Ejemplo: Modo Captura
– Medir el ancho de un pulso mediante el TIMER1 y el modo CAPTURA del CCP.
• El TIMER1 es un contador de 16 bits que se incrementa cada 4 ciclos de
Reloj (FOSC *4). A este tiempo le vamos a llamar PASO de TIMER1. Si el
cristal de cuarzo es de 4 Mhz, entonces 1µs se produce un PASO de TIMER1.
• Un ciclo completo del TIMER1, desde 0x0000 hasta 0xEFFF (65536 pasos),
ocupa un tiempo total de 1µs * 65.536 = 65,536ms.
• Podemos fijar un tipo de flanco a detectar y escribir un cierto código para
ejecutarlo cuando ese tipo de flanco, subida o bajada, es detectado. En este
código escrito para tratar la interrupción del CCP podemos mantener o
cambiar el flanco a detectar, cambiándolo del de Subida al de Bajada o
viceversa y leer o escribir el valor de TIMER1 que en ese momento tiene el
contador.
56
PICmicro GAMA MEDIA: PIC16F87X
Ejemplo: Modo Captura
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA4/T0CKI
6
RA5/AN4/SS
7
OSC1/CLKIN
9
OSC2/CLKOUT
10
RC1/T1OSI/CCP2
12
RC2/CCP1
13
RC3/SCK/SCL
14
RB7/PGD
28
RB6/PGC
27
RB5
26
RB4
25
RB3/PGM
24
RB2
23
RB1
22
RB0/INT
21
RC7/RX/DT
18
RC6/TX/CK
17
RC5/SDO
16
RC4/SDI/SDA
15
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
11
MCLR/Vpp/THV
1
U1
PIC16F876
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD2
LM016L
U1(RC2/CCP1)
Simular y
Montar
57
PICmicro GAMA MEDIA: PIC16F87X
Ejemplo: Modo Comparación, generador de onda cuadrada.
• Generar un pulso de Periodo T con dos semiperiodos iguales, simétrico, y de unos 2 Khz de
frecuencia: unos 0.25 ms en alto y otros 0.25 ms en bajo, total 0.5 ms de periodo.
– Utilizar el CCP en modo Compare para que el CCP vaya comparando automáticamente el
valor de TMR1 con un valor de referencia que le damos, CCP_x, y en cuanto lo alcance se
realice la conmutación del Pin asociado a él y nos dispare la Petición de Servicio de
Interrupción (ISR) INT_CCPx correspondiente.
– En el código de esta interrupción volvemos a hacer lo mismo pero configurando el
Compare para que cuando TMR1 alcance el valor de referencia conmute nuestro Pin CCP
al estado contrario.
– Si ambos valores de TMR1 de referencia, para el Compare a Alto y el Compare a bajo, son
iguales tendremos un tren de pulsos simétricos, están el mismo tiempo en alto que en
bajo, o sea que tienen un Duty Cycle del 50%. En caso contrario estarán mas tiempo en
un estado que en otro y será una onda asimétrica, o sea que tendrá un Duty Cicle distinto
del 50%.
– Calculando cuidadosamente dichos tiempos podremos generar una onda del periodo que
deseamos. Pondremos a 0 siempre TRM1 y cargaremos CCP_x con el número de PASOS
de TMR1 en que deseamos que se dispare nuestra conmutación/interrupción.
58
PICmicro GAMA MEDIA: PIC16F87X
Ejemplo: Modo Comparación-PWM
• Mediante la configuración del módulo CCP lanzar una conversión AD, automática cada 1ms. Con
el valor obtenido se realizará una conversión DA utilizando el PWM y un filtro paso-bajo.
– Mediante los bit 3-0 CCPxM3:CCPxM0 (Bits de selección del modo CCP) se puede
configurar Modo de comparación: CCP2 resetea TMR1 y lanza una conversión A/D.
– Cargando el CCP2 con el valor adecuado se consigue que, cuando coincida con el valor
de TMR1, se produzca una conversión AD (si está habilitada).
– Con el valor obtenido de la conversión (0 a 1023) se puede obtener una señal PWM
proporcional ha este valor.
– Si dicha señal es filtrada con un filtro paso bajo se obtiene una continua proporcional al
valor de la conversión.
– Como aplicación se puede aplicar esta señal a una barra de leds y obtener una señal
luminosa proporcional a la señal adquirida.
59
PICmicro GAMA MEDIA: PIC16F87X
Ejemplo: Modo Comparación-PWM
V+
3
V-
2
10
10
9
11
8
12
7
13
6
14
5
15
4
16
3
17
2
18
1
1
SIG
5
ADJ
8
RHI
6
RLO
4
VRO
7
MODE
9
U1
LM3914
BAT1
10
R1
1k
R2
2.7k
1
2
3
4
5
6
7
8
20
19
18
17
16
15
14
13
9
10
12
11
U2
LED-BARGRAPH-GRN
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA4/T0CKI
6
RA5/AN4/SS
7
OSC1/CLKIN
9
OSC2/CLKOUT
10
RC1/T1OSI/CCP2
12
RC2/CCP1
13
RC3/SCK/SCL
14
RB7/PGD
28
RB6/PGC
27
RB5
26
RB4
25
RB3/PGM
24
RB2
23
RB1
22
RB0/INT
21
RC7/RX/DT
18
RC6/TX/CK
17
RC5/SDO
16
RC4/SDI/SDA
15
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
11
MCLR/Vpp/THV
1
U3
PIC16F876
BAT3
5
RV2
1k
A
B
R3
10k
C1
1uF
RV2(3)
C1(1)
Simular en ISIS
60
PICmicro GAMA MEDIA: PIC16F87X
Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter
• Características Generales
– Los datos se envían bit a bit por una misma línea durante un tiempo
fijo.
– La velocidad de transmisión se indica en baudios (número de bits
enviados por segundo).
– La transferencia puede ser síncrona o asíncrona.
• Síncrona: Se envía la señal de reloj para sincronizar cada bit.
• Asíncrona: Se necesitan “relojes” en el emisor y el receptor de la misma
frecuencia y en fase.
61
PICmicro GAMA MEDIA: PIC16F87X
Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter
• Características Generales
– Se emplean dos registros de desplazamiento (uno en el emisor y otro en el
receptor) encadenados para la conversión paralelo/serie en la emisión y
serie/paralelo en la recepción.
– Se puede llevar a cabo varios tipos de sincronización:
• De los sucesivos bits.
• De cada paquete de bits (8 ó 9 bits)
– Se envía la señal de reloj si la distancia entre Emisor y Receptor es corta.
• Así se consiguen menores retardos en las transiciones y mejores flancos en
la señal de reloj recibida.
– Posibles codificaciones de cada bit.
• NRZ: Nivel alto: 1 / Nivel bajo: 0
• NRZI: Cambio de nivel: 1 / Sin cambio de nivel: 0
• RZ: Impulso: 1 / Sin impulso: 0
62
PICmicro GAMA MEDIA: PIC16F87X
Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter
• Transferencia Asíncrona
– Se emplean relojes de igual frecuencia (se acuerda y se configura la velocidad
de transmisión) pero también es necesario que estén en fase (sincronizados).
– Cada paquete de bits de tamaño fijo se “enmarca” con bits de arranque y de
parada que sirven para sincronizar los relojes del emisor y del receptor.
– La línea de datos está inactiva a “1”. Si se desea enviar un dato se manda un bit
de arranque, que sitúa a “0” la línea durante el tiempo correspondiente a un bit
(START).
– Al finalizar el envío de un dato, la línea se sitúa a “1” al menos durante el
tiempo de un bit: bit de parada (STOP).
63
PICmicro GAMA MEDIA: PIC16F87X
Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter
• Comunicación serie asíncrona en microcontroladores PIC
– Se va a implementar haciendo uso del módulo USART (Universal
Synchronous/Asynchronous Receiver/Transmitter). También se conoce como
Serial Communications Interface (SCI). Es uno de los dos módulos de E/S serie
del PIC.
– El módulo USART puede actuar como sistema asíncrono full duplex.
• Permite comunicarse con periféricos como CRTs y PCs. También puede configurarse
como sistema síncrono half duplex. Para comunicación con circuitos A/D o D/A,
memorias serie EEPROM, etc.
– Terminales asociados: RC6/TX/CK y RC7/RX/DT.
– El módulo USART también permite localizar direcciones de 9 bits.
64
PICmicro GAMA MEDIA: PIC16F87X
Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter
• Registros Asociados:
– SPBRG: Generador de Baud
rate
– TXSTA: Estado de transmisión
y control.
– RCSTA: Estado de recepción y
control.
– TXREG: Registro de datos de
transmisión
– RCREG: Registro de datos de
recepción.
– PIR1: Flag de interrupción.
– PIE1:Habilitación interrupción.
65
PICmicro GAMA MEDIA: PIC16F87X
Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter
• Registro TXSTA (98h)
Bit 7 En modo asíncrono no interviene.
bit 6 TX9: Bit de habilitación de la transmisión de 9 bits
0: Transmisión de 8 bits 1: Transmisión de 9 bits
bit 5 TXEN: Bit de habilitación de la transmisión
0: Transmisión deshabilitada 1: Transmisión habilitada
bit 4 SYNC: Bit de selección del modo de funcionamiento
0: Transmisión asíncrona 1: Transmisión síncrona
bit 2 BRGH: Bit de selección de alto valor de baudios
0: Baja velocidad 1: Alta velocidad
bit 1 TRMT: Bit de estado del registro TSR
0: TSR lleno 1: TSR vacío
bit 0 TX9D: 9 bit de datos transmitido.
Puede ser el bit de paridad, por ejemplo
66
PICmicro GAMA MEDIA: PIC16F87X
Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter
67
PICmicro GAMA MEDIA: PIC16F87X
Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter
• Registro RCSTA (18h)
bit 7 SPEN: Bit de habilitación del puerto serie (RC6:RC7 como puerto serie)
0:Deshabilitado 1:Habilitado
bit 6 RX9: Bit de habilitación de la recepción de 9 bits
0:Recepción de 8 bits 1:Recepción de 9 bits
bit 4 CREN: Bit de habilitación de recepción continua
0:Deshabilitada 1:Habilitada
bit 3 ADDEN: Bit de habilitación de detección de dirección
0:Deshabilitada 1:Habilitada (Sólo si RX9=1)
bit 2 FERR: Bit de error de
0:No hubo error 1:Sí hubo error (Se actualiza al leer RCREG)
bit 1 OERR: Bit de error de
0:No hubo error 1:Sí hubo error (Se pone a 0 si CREN ← 0)
bit 0 RX9D: 9 bit de datos transmitido.
68
PICmicro GAMA MEDIA: PIC16F87X
Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter
• Comunicación serie asíncrona con la USART
– La información se transmite en formato NRZ: Se transmite primero el bit menos
significativo.
– El emisor y el receptor son funcionalmente independientes: Aunque comparten
el mismo formato de datos y la misma velocidad de la comunicación (baudios).
– El receptor incorpora un circuito de muestreo de la línea de datos que lee el
valor del bit en la mitad del periodo de muestreo. Así se eliminan posibles
errores debidos a las diferencias en los relojes del emisor y el receptor.
– No se genera paridad mediante hardware. Si se quiere enviar como 9º bit el bit
de paridad, el usuario debe calcularlo e interpretarlo en el software.
69
PICmicro GAMA MEDIA: PIC16F87X
Modulo USART: COMPILADOR CCS
#use rs232 (options)
opciones: BAUD = x
XMIT = pin
RCV = pin
BITS = x
…….
EJEMPLO:
#use delay (clock=3000000);
#use rs232 (BAUD=9600 , XMIT=PIN_C6 , RCV=PIN_C7 , BITS=8)
set_uart_speed (baud, [stream])
setup_uart(baud, stream)
baud: Constante entre 100 y 115.200
(permite cambiar la velocidad de la USART durante la ejecución del programa)
¡¡IMPORTANTE!!
Es imprescindible que aparezca
una directiva #use delay antes
de que se pueda utilizar una
directiva #use rs232.
70
PICmicro GAMA MEDIA: PIC16F87X
Modulo USART: COMPILADOR CCS
• Transmisión serie
putc (dato); putchar (dato);
dato: Carácter de 8 bits.
puts (string);
string: Cadena de caracteres constante o array de caracteres terminado
con un 0.
– La función puts manda los caracteres de la cadena uno a uno a través
del bus RS-232 utilizando la función putc.
– Detrás de la cadena envía un RETURN (13) y un retorno de carro (10).
Muy a menudo estas funciones se ven remplazadas por la función printf, más
versátil que cualquiera de ellas.
71
PICmicro GAMA MEDIA: PIC16F87X
Modulo USART: COMPILADOR CCS
• Transmisión serie
printf ([función,] string [, valores...]);
– string: Cadena de caracteres (constante) o array de caracteres terminado con
un 0.
– función: Función a utilizar para escribir la cadena indicada. Por defecto es putc,
que permite escribir en el bus RS-232.
– valores: Variables a incluir en la cadena
– Cuando se usan variables, en la cadena se indicará como %wt, donde:
w: 1-9 (nº de caracteres)
01-09 (nº de posiciones a completar con 0s)
1.1-9.9(nº de decimales)
t: C Carácter e Flotante en formato exp.
S Cadena o carácter f Flotante
U Entero con signo Lx Long en hexadecimal
x Entero en hexadecimal LX Ídem en mayúsculas
X Ídem en mayúsculas lu Long sin signo (en decimal)
D Entero con signo ld Long con signo (en decimal)
72
PICmicro GAMA MEDIA: PIC16F87X
Modulo USART: COMPILADOR CCS
• Recepción serie
valor = getc(); valor = getch(); valor = getchar();
valor: Carácter de 8 bits.
– Espera que llegue un carácter por la línea RS-232 y da su valor. En los PIC con
USART, se pueden almacenar hasta tres caracteres. Para no estar
continuamente esperando, se puede usar kbhit().
valor = kbhit();
valor: 0 (FALSE) si getc debe esperar a que llegue un carácter.
1 (TRUE) si ya hay un carácter listo para ser leído por getc.
gets(string);
string: Puntero a un array de caracteres.
• Almacena caracteres (leídos con getc) en el array hasta que recibe un RETURN (13).
Termina la cadena con un 0.
73
PICmicro GAMA MEDIA: PIC16F87X
Ejemplo: PIC a PIC por USART
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD1
LM016L
VCC
Alphanumeric LCD
GND VCC
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA4/T0CKI
6
RA5/AN4/SS
7
OSC1/CLKIN
9
OSC2/CLKOUT
10
RC1/T1OSI/CCP2
12
RC2/CCP1
13
RC3/SCK/SCL
14
RB7/PGD
28
RB6/PGC
27
RB5
26
RB4
25
RB3/PGM
24
RB2
23
RB1
22
RB0/INT
21
RC7/RX/DT
18
RC6/TX/CK
17
RC5/SDO
16
RC4/SDI/SDA
15
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
11
MCLR/Vpp/THV
1
U1
PIC16F876
VCC
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA4/T0CKI
6
RA5/AN4/SS
7
OSC1/CLKIN
9
OSC2/CLKOUT
10
RC1/T1OSI/CCP2
12
RC2/CCP1
13
RC3/SCK/SCL
14
RB7/PGD
28
RB6/PGC
27
RB5
26
RB4
25
RB3/PGM
24
RB2
23
RB1
22
RB0/INT
21
RC7/RX/DT
18
RC6/TX/CK
17
RC5/SDO
16
RC4/SDI/SDA
15
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
11
MCLR/Vpp/THV
1
U2
PIC16F876
D1
LED-RED
R1
180
Enviar datos del 0 a 9
(apareciendo en el LCD el
dato transmitido).
Al recibir el 5 el led se debe
encender, en el resto de los
datos debe estar apagado
Simular en ISIS
74
PICmicro GAMA MEDIA: PIC16F87X
Ejemplo: PIC a PC por USART
Enviar datos del convertidor (en tensión y el valor de la conversión AD) por el puerto
serie. Visualizarlos con el editor de puerto serie del ISIS.
LCD[0..3]
LCD0
LCD1
LCD2
LCD3
LCD0
LCD1
LCD2
LCD3
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD1
LM016L
VCC
RV1
100k
+88.8
Volts
Alphanumeric LCD
GND
Variable
Resistor
RB0
RB1
GND VCC
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA4/T0CKI
6
RA5/AN4/SS
7
OSC1/CLKIN
9
OSC2/CLKOUT
10
RC1/T1OSI/CCP2
12
RC2/CCP1
13
RC3/SCK/SCL
14
RB7/PGD
28
RB6/PGC
27
RB5
26
RB4
25
RB3/PGM
24
RB2
23
RB1
22
RB0/INT
21
RC7/RX/DT
18
RC6/TX/CK
17
RC5/SDO
16
RC4/SDI/SDA
15
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
11
MCLR/Vpp/THV
1
U1
PIC16F876
RB1
RB0
RXD
RTS
TXD
CTS
Simular en ISIS
75
PICmicro GAMA MEDIA: PIC16F87X
Ejemplo: PIC a PC por USART
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD1
LM016L
VCC
Alphanumeric LCD
GND VCC
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA4/T0CKI
6
RA5/AN4/SS
7
OSC1/CLKIN
9
OSC2/CLKOUT
10
RC1/T1OSI/CCP2
12
RC2/CCP1
13
RC3/SCK/SCL
14
RB7/PGD
28
RB6/PGC
27
RB5
26
RB4
25
RB3/PGM
24
RB2
23
RB1
22
RB0/INT
21
RC7/RX/DT
18
RC6/TX/CK
17
RC5/SDO
16
RC4/SDI/SDA
15
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
11
MCLR/Vpp/THV
1
U1
PIC16F876
ERROR
TXD
3
RXD
2
CTS
8
RTS
7
DSR
6
DTR
4
DCD
1
RI
9
P1
COMPIM
Utilizando un hiperterminal
(terminal.exe), comunicarse
con el PC.
Desde el PC enviar un dato,
el PIC debe recibirlo y
visualizarlo en el LCD. Una
vez recibido debe enviar la
palabra “recibido” al PC.
Utilizar Interrupciones.
Conectar COM1 con el COM2
Simular en ISIS
76
PICmicro GAMA MEDIA: PIC16F87X
• La Norma RS232
– Nace con la idea de comunicar un computador o equipo terminal de
datos (DTE o Data Terminal Equipment) y un módem o equipo de
comunicación de datos (DCE o Data Communications Equipment).
– Su uso se extendió a otras aplicaciones y hoy se emplea para
comunicar equipos que no respetan íntegramente la norma y que no
necesitan la mayoría de las líneas de la norma original: detector de
portadora (DCD),indicador de llamada (RI), canal secundario,…
• Se emplea, por ejemplo, para comunicar equipos que son ambos DTE, como
dos PCs o un PC y un microcontrolador.
– Los equipos pueden utilizar distintos conectores:
• Conector SUB-D de 25 pins.
• Conector SUB-D de 9 pins.
• Conector SUB-D de 15 pins de alta densidad. (el menos habitual).
• El conector de 25 pines es el único que dispone de todas las señales definidas
en la norma original.
77
PICmicro GAMA MEDIA: PIC16F87X
• La Norma RS232
Ejemplo: Los puertos serie de un PC (COMn).
– Presentan de manera mayoritaria conectores SUB-D de 9 pines hembra
(aunque la norma original dice que los DTE deben ser macho).
– Pin 1 DCD (E) Detección de Portadora
– Pin 2 RXD (E) Recepción de Datos
– Pin 3 TXD (S) Transmisión de Datos
– Pin 4 DTR (S) PC listo para recibir (respuesta a CTS)
– Pin 5 MASA COMÚN
– Pin 6 DSR (E) PC puede enviar datos (respuestas a RTS)
– Pin 7 RTS (S) PC solicita envíar datos (le responderán con DSR)
– Pin 8 CTS (E) Le preguntan si PC listo para recibir (responderá con DTR)
– Pin 9 RI (E) Indicador de llamada (si el otro equipo es un modem)
RTS – DSR Protocolo de envío de datos desde el PC
CTS – DTR Protocolo de recepción de datos en el PC
78
PICmicro GAMA MEDIA: PIC16F87X
• La Norma RS232
– Para realizar la conexión entre un
microcontrolador y un PC, será necesario realizar
la correspondiente adaptación de los niveles de
tensión que utiliza el microcontrolador a los
niveles de la norma RS232
– Existen varios circuitos integrados comerciales
que realizan esta adaptación con muy pocos
componentes (p.e. la familia MAX220 a 249).
– Se puede simplificar el conexionado y obviar las
líneas de pregunta-respuesta “engañando” al
emisor para hacerle creer que el receptor está
siempre listo. El truco pasa por “puentear” las
líneas de petición de envío y las respuestas.
79
PICmicro GAMA MEDIA: PIC16F87X
• La Norma RS232
(el 233 no necesita condensadores)
80
PICmicro GAMA MEDIA: PIC16F87X
• USB/USART
– En la mayoría del los portátiles ya no existe el puerto Serie (e incluso
en algunos PC de mesa). Para simular un puerto serie se puede utilizar
el USB (ojo: NO el protocolo USB) mediante el empleo de C.I. como el
FT232.
81
PICmicro GAMA MEDIA: PIC16F87X
• Ejemplo USB/USART
– Montar el ejemplo de la transparencia 75 utilizando la placa del FT232.
Utilizar el TERMINAL.EXE para comunicarse con el PIC. Configurar el
PC para trabajar con el puerto correspondiente.
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD1
LM016L
VCC
Alphanumeric LCD
GND VCC
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA4/T0CKI
6
RA5/AN4/SS
7
OSC1/CLKIN
9
OSC2/CLKOUT
10
RC1/T1OSI/CCP2
12
RC2/CCP1
13
RC3/SCK/SCL
14
RB7/PGD
28
RB6/PGC
27
RB5
26
RB4
25
RB3/PGM
24
RB2
23
RB1
22
RB0/INT
21
RC7/RX/DT
18
RC6/TX/CK
17
RC5/SDO
16
RC4/SDI/SDA
15
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
11
MCLR/Vpp/THV
1
U1
PIC16F876
ERROR
TXD
3
RXD
2
CTS
8
RTS
7
DSR
6
DTR
4
DCD
1
RI
9
P1
COMPIM
82
PICmicro GAMA MEDIA: PIC16F87X
• INTERNET/USART
– Se pueden crear terminales de internet “embebidos” en el PIC; pero
existe la posibilidad (mucho más sencilla) de utilizar un servidor virtual
para puerto serie en un PC y emplear un hiperterminal como
comunicación desde otro PC. De este modo se puede controlar
remotamente el PIC.
internet
83
PICmicro GAMA MEDIA: PIC16F87X
• Ejemplo INTERNET/USART
VCC
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA4/T0CKI
6
RA5/AN4/SS
7
OSC1/CLKIN
9
OSC2/CLKOUT
10
RC1/T1OSI/CCP2
12
RC2/CCP1
13
RC3/SCK/SCL
14
RB7/PGD
28
RB6/PGC
27
RB5
26
RB4
25
RB3/PGM
24
RB2
23
RB1
22
RB0/INT
21
RC7/RX/DT
18
RC6/TX/CK
17
RC5/SDO
16
RC4/SDI/SDA
15
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
11
MCLR/Vpp/THV
1
U1
PIC16F876
ERROR
TXD
3
RXD
2
CTS
8
RTS
7
DSR
6
DTR
4
DCD
1
RI
9
P1
COMPIM
D1
LED-RED
R1
180
84
PICmicro GAMA MEDIA: PIC16F87X
• Ejemplo INTERNET/USART
PC origen
PC remoto Del PC origen: ejecutar ipconfig /all
85
PICmicro GAMA MEDIA: PIC16F87X
• Ejemplo INTERNET/USART
• PC remoto
86
PICmicro GAMA MEDIA: PIC16F87X
• Ejemplo INTERNET/USART
Se puede cambiar el puerto con CLOSE y COMx
• En el ISIS poner en marcha la simulación.
• En el hiperterminal enviar: ? o 1 o 2.

Más contenido relacionado

Similar a Compilador CCS.ppt

Micc final sept05 2009 soluc
Micc final sept05 2009 solucMicc final sept05 2009 soluc
Micc final sept05 2009 solucJair BG
 
Micc final sept05 2009 soluc
Micc final sept05 2009 solucMicc final sept05 2009 soluc
Micc final sept05 2009 solucJair BG
 
Micc final sept05_2009
Micc final sept05_2009Micc final sept05_2009
Micc final sept05_2009Jair BG
 
Micc final feb14_2009
Micc final feb14_2009Micc final feb14_2009
Micc final feb14_2009Jair BG
 
Micc final feb14_2009_soluc
Micc final feb14_2009_solucMicc final feb14_2009_soluc
Micc final feb14_2009_solucJair BG
 
Micc final feb14_2009_soluc
Micc final feb14_2009_solucMicc final feb14_2009_soluc
Micc final feb14_2009_solucJair BG
 
Microcontroladores ii en c. tema 4
Microcontroladores ii en c. tema 4Microcontroladores ii en c. tema 4
Microcontroladores ii en c. tema 4Luis Zurita
 
Curso AVRs 2008 - ADCs
Curso AVRs 2008 - ADCsCurso AVRs 2008 - ADCs
Curso AVRs 2008 - ADCscepaul.jordan
 
Laboratorio de convertidores Analógico a digital.docx
Laboratorio de convertidores Analógico a digital.docxLaboratorio de convertidores Analógico a digital.docx
Laboratorio de convertidores Analógico a digital.docxJesús Tarín
 
Digitalio config 16f887a_886
Digitalio config 16f887a_886Digitalio config 16f887a_886
Digitalio config 16f887a_886luisvargasquinto
 
Convertidor analogico digital de los microcontroladores AVR
Convertidor analogico digital de los microcontroladores AVRConvertidor analogico digital de los microcontroladores AVR
Convertidor analogico digital de los microcontroladores AVRCamilo Okue
 
⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886
⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886
⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886Victor Asanza
 

Similar a Compilador CCS.ppt (20)

Tema3 Microii
Tema3 MicroiiTema3 Microii
Tema3 Microii
 
Micc final sept05 2009 soluc
Micc final sept05 2009 solucMicc final sept05 2009 soluc
Micc final sept05 2009 soluc
 
Micc final sept05 2009 soluc
Micc final sept05 2009 solucMicc final sept05 2009 soluc
Micc final sept05 2009 soluc
 
Micc final sept05_2009
Micc final sept05_2009Micc final sept05_2009
Micc final sept05_2009
 
Pic16 f877
Pic16 f877Pic16 f877
Pic16 f877
 
Micc final feb14_2009
Micc final feb14_2009Micc final feb14_2009
Micc final feb14_2009
 
Micc final feb14_2009_soluc
Micc final feb14_2009_solucMicc final feb14_2009_soluc
Micc final feb14_2009_soluc
 
Micc final feb14_2009_soluc
Micc final feb14_2009_solucMicc final feb14_2009_soluc
Micc final feb14_2009_soluc
 
Microcontroladores ii en c. tema 4
Microcontroladores ii en c. tema 4Microcontroladores ii en c. tema 4
Microcontroladores ii en c. tema 4
 
Curso AVRs 2008 - ADCs
Curso AVRs 2008 - ADCsCurso AVRs 2008 - ADCs
Curso AVRs 2008 - ADCs
 
Proyecto de micros
Proyecto de microsProyecto de micros
Proyecto de micros
 
Clase 4 pro
Clase 4 proClase 4 pro
Clase 4 pro
 
Laboratorio de convertidores Analógico a digital.docx
Laboratorio de convertidores Analógico a digital.docxLaboratorio de convertidores Analógico a digital.docx
Laboratorio de convertidores Analógico a digital.docx
 
Digitalio config 16f887a_886
Digitalio config 16f887a_886Digitalio config 16f887a_886
Digitalio config 16f887a_886
 
Módulo EUSART del PIC16F887
Módulo EUSART del PIC16F887Módulo EUSART del PIC16F887
Módulo EUSART del PIC16F887
 
conversor ad del pic16 f877
 conversor ad del pic16 f877 conversor ad del pic16 f877
conversor ad del pic16 f877
 
Convertidor analogico digital de los microcontroladores AVR
Convertidor analogico digital de los microcontroladores AVRConvertidor analogico digital de los microcontroladores AVR
Convertidor analogico digital de los microcontroladores AVR
 
⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886
⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886
⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886
 
Txusart
TxusartTxusart
Txusart
 
El conversor adc
El conversor adcEl conversor adc
El conversor adc
 

Último

Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleJonathanCovena1
 
Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...Baker Publishing Company
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.DaluiMonasterio
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...JAVIER SOLIS NOYOLA
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
CULTURA NAZCA, presentación en aula para compartir
CULTURA NAZCA, presentación en aula para compartirCULTURA NAZCA, presentación en aula para compartir
CULTURA NAZCA, presentación en aula para compartirPaddySydney1
 
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwe
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtweBROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwe
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwealekzHuri
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
Procesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxProcesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxMapyMerma1
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADOJosé Luis Palma
 
Factores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFactores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFlor Idalia Espinoza Ortega
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxjosetrinidadchavez
 

Último (20)

Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo Sostenible
 
Unidad 3 | Teorías de la Comunicación | MCDI
Unidad 3 | Teorías de la Comunicación | MCDIUnidad 3 | Teorías de la Comunicación | MCDI
Unidad 3 | Teorías de la Comunicación | MCDI
 
Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
CULTURA NAZCA, presentación en aula para compartir
CULTURA NAZCA, presentación en aula para compartirCULTURA NAZCA, presentación en aula para compartir
CULTURA NAZCA, presentación en aula para compartir
 
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwe
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtweBROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwe
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwe
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
Procesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxProcesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptx
 
Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
 
Factores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFactores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamica
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
 

Compilador CCS.ppt

  • 2. 2 PICmicro GAMA MEDIA: PIC16F87X Arquitectura
  • 3. 3 PICmicro GAMA MEDIA: PIC16F87X Arquitectura
  • 4. 4 PICmicro GAMA MEDIA: PIC16F87X Arquitectura
  • 5. 5 PICmicro GAMA MEDIA: PIC16F87X Arquitectura
  • 6. 6 PICmicro GAMA MEDIA: PIC16F87X Arquitectura
  • 7. 7 PICmicro GAMA MEDIA: PIC16F87X Arquitectura
  • 8. 8 PICmicro GAMA MEDIA: PIC16F87X Modulos – Puertos de Entrada/Salida. – Puerto Esclavo Paralelo (PSP). – Temporizadores/contadores de 8/16 bits (TMR). – Captura / Comparación / PWM (CCP). – Comparadores Analógicos. – Conversión Analógica / Digital (A/D). – Transmisor Receptor Asíncrono Síncrono Universal (USART ó SCI). – Puerto Serie Síncrono Básico ó Maestro(BSSP ó MSSP). – Memoria EEPROM de datos. – FLASH EEPROM de programa modificable desde el código.
  • 9. 9 PICmicro GAMA MEDIA: PIC16F87X Conversión A/D •Un sistema de conversión A/D hacer llegar al controlador digital la información suministrada por el proceso analógico que se desea controlar. Establece una relación biunívoca entre el valor de la señal en su entrada y la palabra digital obtenida en su salida. •La conversión A/D se fundamenta en la teoría de muestreo: “Si una señal continua, S(t) , tiene una banda de frecuencia en la que fm es la mayor frecuencia, dicha señal podrá reconstruirse sin distorsión a partir de muestras de la señal tomadas a una frecuencia de valor fs > 2·fm” •Circuitos de captura y mantenimiento (S/H=Sample and hold): Muestrean la señal analógica (durante un intervalo de tiempo) y mantienen ese valor, generalmente en un condensador, durante el tiempo que dura la transformación A/D propiamente dicha.
  • 10. 10 PICmicro GAMA MEDIA: PIC16F87X Conversión A/D •Tipos de convertidores: Directo, Aproximaciones sucesivas, de simple rampa, de doble rampa, de paso intermedio a frecuencia. •Aproximaciones Sucesivas: es el implementado en los PICs, se basa en ir eliminando mitades de tabla hasta quedarse con el valor que más se aproxima a la tensión analógica a convertir. Sea uº=3,2V 1) Prueba con 1000 (2,5V) 2,5 < 3,2  mitad superior 2) Prueba con 1100 (3,75V) 3,75 > 3,2 mitad inferior 3) Prueba con 1010 (3,125V) 3,125 < 3,2 mitad superior 4) Prueba con 1011 (3,4375V) 3,4375 > 3,2 valor inferior
  • 11. 11 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Convierte la señal analógica en un número digital de 10 bits. – Los 16F876/873 tienen 5 canales (en puerto A) y los 16F877/874 tienen 8 canales (5 en el puerto A y 3 en el puerto E). – Tienen tensiones de referencia VREF+ y VREF- seleccionables por software. Pueden ser VDD y VSS o las tensiones aplicadas en los pines RA3 / RA2 . – Puede seguir funcionando cuando el PIC está en modo SLEEP ya que dispone de un oscilador RC interno propio. –Hay 11 registros asociados a este periférico. Definición de pines de entrada y señales aplicadas TRISA – PORTA – TRISE - PORTE Manejo de interrupciones INTCON – PIE1 – PIR1 Control del conversor A/D ADCON0 – ADCON1 – ADRESH - ADRESL
  • 12. 12 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Estructura Interna
  • 13. 13 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Función de transferencia. •La primera transición tiene lugar cuando la tensión analógica de entrada alcanza el valor VREF- + (VREF+ - VREF-)/1024 = 1 LSb. Caso de que VREF+ = VDD y que VREF- = VSS
  • 14. 14 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Registro ADCON0 (1Fh) [PIC16F87x] bit 7-6 ADCS1:ADCS0: Selección del reloj para la conversión A/D 00 = fOSC/2 01 = fOSC/8 10 = fOSC/32 11 = fRC bit 5-3 CHS2:CHS0: Selección del canal de conversión 000 = Canal 0 001 = Canal 1 010 = Canal 2 011 = Canal 3 100 = Canal 4 101 = Canal 5 110 = Canal 6 111 = Canal 7 bit 2 GO/DONE: Estado de la conversión Si ADON=1: 1 = Conversión en progreso 0 = Conversión finalizada bit 0 ADON: Bit de encendido del convertidor A/D 1 = Módulo A/D encendido 0 = Módulo A/D apagado
  • 15. 15 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Registro ADCON1 (9Fh) [PIC16F87x] bit 7 ADFM: Selección de formato del resultado 1 = Ajuste a la derecha 0 = Ajuste a la izquierda bit 3-0 PCFG3:PCFG0: Configuración de las entradas al módulo A/D
  • 16. 16 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Registro ADCON0 (1Fh) [PIC16F87xA] bit 7-6 ADCS1:ADCS0: Selección del reloj para la conversión A/D junto con ADCS2 que está en ADCON1. ADCS2=0 00 = fOSC/2 01 = fOSC/8 10 = fOSC/32 11 = fRC ADCS2=1 00 = fOSC/4 01 = fOSC/16 10 = fOSC/64 11 = fRC – Registro ADCON1 (9Fh) [PIC16F87xA] bit 6 ADCS2: Selección de reloj para conversión A/D junto con ADCS1 y ADCS0.
  • 17. 17 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Registro INTCON (0Bh , 8Bh , 10Bh , 18Bh) bit 7 GIE: Habilitación global de interrupciones bit 6 PEIE: Habilitación de interrupciones de periféricos – Registro PIE1 (8Ch) bit 6 ADIE: Habilitación de la interrupción del convertidor A/D – Registro PIR1 (0Ch) bit 6 ADIF: Flag de la interrupción del convertidor A/D 1 = Conversión A/D completada. 0 = Conversión A/D aún no completada.
  • 18. 18 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Pasos en una conversión A/D 1. Configurar el módulo A/D. • Definir entradas analógicas y tensión de referencia. (ADCON1) • Seleccionar el canal de la conversión. (ADCON0) • Seleccionar el reloj de la conversión. (ADCON0) • Encender el módulo A/D. (ADCON0) 2. Configurar la interrupción por conversión A/D. • Bajar el flag ADIF. (PIR1). • Habilitar la interrupción del convertidor A/D. (PIE1). • Habilitar las interrupciones de los periféricos. (INTCON). • Habilitar la máscara global de interrupciones. (INTCON) 3. Esperar a que transcurra el tiempo de adquisición. • Tiempo necesario para capturar el valor analógico a convertir. • Los valores típicos del tiempo de adquisición son del orden de 20µs.
  • 19. 19 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D 4. Comenzar la conversión. • Poner a “1” el bit GO/DONE. (ADCON0) No activar este bit a la vez que se enciende el convertidor A/D 5. Esperar a que se complete la conversión A/D. • Controlando cuándo el bit GO/DONE se pone a “0”. • Esperando a que llegue la interrupción del convertidor. 6. Leer el resultado de la conversión. • Disponible en los registros ADRESH:ADRESL. • Bajar el flagADIF si se están usando interrupciones. 7. Llevar a cabo la siguiente conversión. • Volver al paso 1 ó 2, según convenga. • Espera mínima antes de empezar la siguiente adquisición: 2·TAD (Esta espera no es necesaria en el caso de los PIC16F87xA porque el interruptor de captura se “cierra” en cuanto se obtiene el resultado). TAD: Tiempo necesario para la conversión de un bit.
  • 20. 20 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Tiempo de adquisición: tiempo necesario para cargar el condensador de mantenimiento CHOLD – Máxima impedancia recomendada para la fuente: Rs<10K. En estas condiciones, TACQ ≈ 20µS – Hasta que no acabe la conversión, no empieza otra adquisición (SS abierto) Esperar TACQ : a) Tras una conversión; b) tras seleccionar un nuevo canal; c) Tras encender el módulo AD
  • 21. 21 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Tiempo de conversión: la conversión de 10 bits dura 12TAD – TAD configurable en ADCON0 (reloj de la conversión). TAD=2·TOSC TAD=8·TOSC TAD=32·TOSC TAD=2µs÷6µs (típ. 4µs) También TAD=4·TOSC TAD=16·TOSC TAD=64·TOSC en PIC16F87xA – Para un funcionamiento correcto se necesita un valor mínimo de TAD=1,6µs.
  • 22. 22 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Tiempo de conversión y adquisición en PIC16F87x
  • 23. 23 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Tiempo de conversión y adquisición en PIC16F87xA
  • 24. 24 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D • Módulo A/D cuando el micro entra en modo dormido ( SLEEP) – El módulo A/D puede funcionar durante el modo dormido si se selecciona como reloj para la conversión el RC interno (ADCS1:ADCS0 = 11). – Si se elige como reloj el RC, el módulo A/D espera 1 ciclo de instrucción antes de iniciar la conversión. Esto permitiría la ejecución de la instrucción SLEEP que se coloque a continuación, esto eliminaría todo posible ruido de conmutación (debido al paso de normal a dormido) durante la conversión. – Cuando se haya completado la conversión, el bit GO/DONE se pondrá a “0” y el resultado se cargará en los registros ADRESH y ADRESL. Si la interrupción del conversor A/D está habilitada (ADIE y PEIE a “1”) el dispositivo se “despertará”. Si no estuviera habilitada, el módulo A/D se apagará aunque el bit ADON siga a “1”. – Si la fuente de reloj para la conversión no es la RC interna, una instrucción SLEEP provocará que la conversión que se esté ejecutando se aborte y que el módulo A/D se apague aunque el bit ADON siga a “1”.
  • 25. 25 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D • Efectos de un RESET sobre el módulo A/D – Un RESET del dispositivo provoca que los registros del módulo A/D se inicialicen a los valores indicados en la tabla. Por tanto, un RESET provoca que el módulo A/D se apague y que cualquier conversión que se estuviera realizando cuando se produce el RESET se aborte. Todos los pines asociados al módulo A/D pasan a ser entradas analógicas. Los valores acumulados en ADRESH:ADRESL no se modifican por un Power-On-Reset. El valor que contendrán los registros ADRESH:ADRESL tras un POR serán desconocidos inicialmente.
  • 26. 26 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Conversión A/D en el compilador C de CCS • Configuración del módulo conversor A/D setup_adc (modo); modo: ADC_OFF (ADCON0 ← 00h) ADC_CLOCK_DIV_2 (ADCON0 ← 01h) ADC_CLOCK_DIV_8 (ADCON0 ← 41h) ADC_CLOCK_DIV_32 (ADCON0 ← 81h) ADC_CLOCK_INTERNAL (ADCON0 ← C1h) • Definición de entradas analógicas setup_adc_ports (valor); valor: NO_ANALOGS (ADCON1 ← 86h) ALL_ANALOG (ADCON1 ← 80h) ANALOG_RA3_REF (ADCON1 ← 81h) A_ANALOG (ADCON1 ← 82h) A_ANALOG_RA3_REF (ADCON1 ← 83h) RA0_RA1_RA3_ANALOG (ADCON1 ← 84h) RA0_RA1_ANALOG_RA3_REF (ADCON1 ← 85h)
  • 27. 27 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Definición de entradas analógicas (cont.) setup_adc_ports (valor); valor: ANALOG_RA3_RA2_REF (ADCON1 ← 88h) ANALOG_NOT_RE1_RE2 (ADCON1 ← 89h) ANALOG_NOT_RE1_RE2_REF_RA3 (ADCON1 ← 8Ah) ANALOG_NOT_RE1_RE2_REF_RA3_RA2 (ADCON1 ← 8Bh) A_ANALOG_RA3_RA2_REF (ADCON1 ← 8Ch) RA0_RA1_ANALOG_RA3_RA2_REF (ADCON1 ← 8Dh) RA0_ANALOG (ADCON1 ← 8Eh) RA0_ANALOG_RA3_RA2_REF (ADCON1 ← 8Fh) • Selección del canal analógico set_adc_channel (canal); canal: 0 (AN0) 4 (AN4) 1 (AN1 ) 5 (AN5) 2 (AN2) 6 (AN6) 3 (AN3) 7 (AN7)
  • 28. 28 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Lectura del resultado valor = read_adc (); valor: Entero de 16 bits según la directiva #device adc= empleada. – La influencia de dicha directiva se recoge en la siguiente tabla – El fichero 16f876.h incluye como primera directiva #device PIC16F876. Es necesario incluir información del tipo de conversor A/D. Por ello los ficheros C que usen este módulo deberán comenzar por: #device “16F876.h” #device adc=10
  • 29. 29 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D setup_adc_ports (A_ANALOG); setup_adc (ADC_CLOCK_INTERNAL); set_adc_channel (3); delay_us (20); valor = read_adc (); setup_adc (ADC_OFF); W ← 10000010 Banco 1 ADCON1 ← W Banco 0 W ← ADCON0 W ← W & 00111000 W ← W | 11000001 ADCON0 ← W W ← ADCON0 W ← W & 11000111 W ← W | 00011000 ADCON0 ← W GO/DONE ← 1 Espera a GO/DONE=0 W ← ADRESH TEMP ← W Banco 1 W ← ADRESL Banco 0 REGL ← W W ← TEMP REGH ← W W ← ADCON0 W ← W & 00111000 ADCON0 ← W
  • 30. 30 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D Project >> New >> Pic Wizard >> nombre fichero y guardar
  • 31. 31 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D
  • 32. 32 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D
  • 33. 33 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D ad_fuente.h
  • 34. 34 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D: ejemplo lectura de tensión canal0 RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF- 4 RA4/T0CKI 6 RA5/AN4/SS 7 OSC1/CLKIN 9 OSC2/CLKOUT 10 RC1/T1OSI/CCP2 12 RC2/CCP1 13 RC3/SCK/SCL 14 RB7/PGD 28 RB6/PGC 27 RB5 26 RB4 25 RB3/PGM 24 RB2 23 RB1 22 RB0/INT 21 RC7/RX/DT 18 RC6/TX/CK 17 RC5/SDO 16 RC4/SDI/SDA 15 RA3/AN3/VREF+ 5 RC0/T1OSO/T1CKI 11 MCLR/Vpp/THV 1 U1 PIC16F876 RV1 1k D7 14 D6 13 D5 12 D4 11 D3 10 D2 9 D1 8 D0 7 E 6 RW 5 RS 4 VSS 1 VDD 2 VEE 3 LCD1 LM016L BAT1 5 RV1(3) lectura valor LSB    1024 5 1024 5 1 COMPILAR (F9) MONTARLO
  • 35. 35 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D: lectura del valor max/min en canal0 RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF- 4 RA4/T0CKI 6 RA5/AN4/SS 7 OSC1/CLKIN 9 OSC2/CLKOUT 10 RC1/T1OSI/CCP2 12 RC2/CCP1 13 RC3/SCK/SCL 14 RB7/PGD 28 RB6/PGC 27 RB5 26 RB4 25 RB3/PGM 24 RB2 23 RB1 22 RB0/INT 21 RC7/RX/DT 18 RC6/TX/CK 17 RC5/SDO 16 RC4/SDI/SDA 15 RA3/AN3/VREF+ 5 RC0/T1OSO/T1CKI 11 MCLR/Vpp/THV 1 U1 PIC16F876 RV1 1k D7 14 D6 13 D5 12 D4 11 D3 10 D2 9 D1 8 D0 7 E 6 RW 5 RS 4 VSS 1 VDD 2 VEE 3 LCD1 LM016L BAT1 5 RV1(3) Simular en ISIS
  • 36. 36 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D • Abrir el MPLAB: Project >> Wizard >> Siguiente
  • 37. 37 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D
  • 38. 38 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D – Ya se pueden utilizar las herramientas habituales de MPLAB
  • 39. 39 PICmicro GAMA MEDIA: PIC16F87X Modulo de Conversión A/D: práctica • Práctica: Linealizar la NTC NTSA0WB203 y obtener el valor de Temperatura mediante el PIC16F876. BAT1 5 -tc RT1 20.0k R1 10k R1(2) 15 . 273 15 . 298 1 ) 20000 ln( 4050 1 1 15 . 273 1 ) ln( 1 1 5 10000 25 25 1             T T T T T T T BAT T T R T R R T V V V V R V R  Ojo: Incluir #include <math.h>
  • 41. 41 PICmicro GAMA MEDIA: PIC16F87X Modulo de CCP (COMPARACIÓN, CAPTURA Y PWM) • Un microcontrolador de la gama media de los PIC16 puede tener hasta 2 módulos CCP. • Cada módulo CCP tiene un registro de 16 bits que se puede utilizar de 3 formas distintas: – Como registro de 16 bits para captura de tiempo al producirse un evento. – Como registro de 16 bits para compararlo con el valor de cuenta del temporizador TMR1, pudiendo provocar un evento cuando se alcanza el valor contenido en este registro. – Como registro de 10 bits del ciclo de trabajo de una señal PWM generada por el microcontrolador. • Los 2 módulos CCP disponibles se comportan casi idénticamente, salvo el caso del funcionamiento por disparo de evento especial ( special event trigger) que tiene una pequeña diferencia si se trata del módulo CCP1 ó del módulo CCP2. • Tras un reset, el módulo CCP está apagado (al forzar los bits de configuración al valor 0). • En las siguientes transparencias se describirá el funcionamiento de CCP1. El funcionamiento de CCP2 es idéntico (salvo la excepción indicada anteriormente) pero cada uno tiene sus propios registros de carga y configuración (véase tabla adjunta).
  • 42. 42 PICmicro GAMA MEDIA: PIC16F87X Modulo de CCP • Condiciones de funcionamiento – Temporizadores necesarios. Modo captura  TMR1 Modo comparación  TMR1 PWM  TMR2 – Interacción entre los dos módulos CCP.
  • 43. 43 PICmicro GAMA MEDIA: PIC16F87X Modulo de CCP • Registro CCP1CON / CCP2CON (17h / 1Dh) bit 5-4 CCPxX:CCPxY: Bits menos significativos del PWM En modo PWM: Los dos bits menos significativos del ciclo de trabajo. Los ocho bits más significativos están en CCPRxL. bit 3-0 CCPxM3:CCPxM0: Bits de selección del modo CCP a utilizar 0000 = Comparación/Captura/PWM desactivada (reset del módulo CCP) 0100 = Modo de captura, cada flanco descendente 0101 = Modo de captura, cada flanco ascendente 0110 = Modo de captura, cada 4º flanco ascendente 0111 = Modo de captura, cada 16º flanco ascendente 1000 = Modo de comparación, CCPx=1 al igualarse (CCPxIF=1) 1001 = Modo de comparación, CCPx=0 al igualarse (CCPxIF=1) 1010 = Modo de comparación, genera interrupción al igualarse (CCPx invariable, CCPxIF=1) 1011 = Modo de comparación, lanza acción especial (CCPxIF=1, CCPx invariable) CCP1 resetea TMR1 / CCP2 resetea TMR1 y lanza una conversión A/D 11xx = Modo PWM
  • 44. 44 PICmicro GAMA MEDIA: PIC16F87X Modulo de CCP: MODO CAPTURA • En modo Captura, los registros CCPRxH:CCPRxL toman el valor de 16 bits que tenga el TMR1 cuando se produce un determinado evento en el pin CCPx (RC2/CCP1 para el módulo CCP1 y RC1/T1OSI/CCP2 para el módulo CCP2). Los posibles eventos son: – Cada flanco de bajada. – Cada flanco de subida. – Cada 4 flancos de subida. – Cada 16 flancos de subida. • El evento se configura con los bits CCPxM3:CCPxM0 de los registros CCP1CON y CCP2CON respectivamente. • El bit CCP1IF (PIR1<2>) ó CCP2IF (PIR2<0>) se ponen a “1” cuando se produce el evento configurado, pudiendo provocar un salto a la rutina de interrupción. El correspondiente flag debe limpiarse por software. • Si se produce otra captura antes de que se lea el valor del registro CCPRx, el último valor sobreescribe el valor anterior (que se pierde).
  • 45. 45 PICmicro GAMA MEDIA: PIC16F87X Modulo de CCP: MODO CAPTURA • En modo captura, el pin RC2/CCP1 y/o el pin RC1/T1OSI/CCP2 deben configurarse como entrada por puesta a uno de los bits TRISC<2> y TRISC<1> respectivamente. Si el bit RC2/TRISC1 y/o RC1/CCP2 se configura como salida, una escritura a este pin del puerto podría originar una captura. • El TMR1 debe estar corriendo en modo temporizador ó en modo contador síncrono para que el módulo CCP produzca la comparación. No puede funcionar en modo contador asíncrono. • Si se cambia de un modo captura (p.e. de 4 flancos) a otro (p.e. de cada flanco), el cambio puede generar una falsa interrupción. El usuario debe por software limpiar el bit CCPxIE para deshabilitar las interrupciones, limpiar el flag CCPxIF y luego cambiar el modo de captura. • Si en medio de una cuenta de 4 ó 16 flancos de subida se apaga el módulo CCP o se pasa a un modo que no sea el modo Captura (mediante los bits CCPxM3:CCPxM0), el prescaler del CCP se resetea. • En modo dormido, el TMR1 no se incrementa (esta en modo síncrono ó temporizador). Pero, el prescaler del CCP sí puede continuar incrementando el contador de eventos y cuando llega al valor configurado pone el bit CCPxF a “1” provocando que el micro se “despierte”. No obstante, el contenido del TMR1 se transfiere a los CCPR pero el TMR1 no se ha visto incrementado y por tanto, el valor cargado no tiene un significado dado.
  • 46. 46 PICmicro GAMA MEDIA: PIC16F87X Modulo de CCP: MODO COMPARACION • En modo comparación, el valor de 16 bits almacenado en los registros CCPRx es comparado continuamente con el valor de los registros del TMR1. Cuando se produce una igualdad, el pin CCPx puede experimentar o no un evento, que puede ser: – Puesta a “1”. – Puesta a “0”. – Sin cambio. • El evento viene fijado por el valor de los bits CCPxM3:CCPxM0 (CCPxCON<3:0>) • Al mismo tiempo que se produce un evento en el pin se puede producir una interrupción ya que el flag CCPxIF (de PIR1 ó PIR2) se pone a “1”. • TMR1 debe estar funcionando en modo temporizador ó modo contador síncrono para que el módulo CCP funcione correctamente en el modo comparación. En modo contador asíncrono, el modo comparación no funciona.
  • 47. 47 PICmicro GAMA MEDIA: PIC16F87X Modulo de CCP: MODO COMPARACION • El pin CCPx que quiera verse modificado debe configurarse como salida, limpiando el bit del registro TRISC correspondiente. En el momento que se selecciona el modo de comparación deseado, el pin CCP se pone al nivel contrario al que tiene que cambiar cuando se produzca la igualdad entre los registros CCPRx y TMR1. Si la igualdad no afecta al pin CCPx, este tendrá el valor que se le haya dado previamente en el registro PORTC. • MODO INTERRUPCION SOFTWARE: En este modo, el pin CCPx no se ve afectado, solo se activará al flag CCPxIF a 1 y se generará la interrupción si está habilitada. • MODO DISPARO DE EVENTO ESPECIAL: Cuando se produce la igualdad, el registro TMR1 se resetea convirtiéndose por tanto, en un registro que marca la periodicidad del evento. En el caso del módulo CCP2, además de resetear el TMR1 se lanza una nueva conversión A/D (si el módulo de conversión A/D está activo) permitiendo programar la conversión A/D a periodos de tiempo fijos. • FUNCIONAMIENTO EN MODO DORMIDO: Al no funcionar el TMR1 (modo síncrono) en modo dormido, el módulo CCP en modo comparación no funciona. El pin CCPx tendrá el valor que tenía antes de entrar en modo SLEEP y “despertará” con ese valor. • TRAS UN RESET: El módulo CCP está apagado.
  • 48. 48 PICmicro GAMA MEDIA: PIC16F87X Modulo de CCP: MODO PWM • En modo PWM (MODULACIÓN DE ANCHO DE PULSO - Pulse Width Modulation), el objetivo es obtener a través de alguna de las patillas CCPx una forma de onda como la mostrada en la figura donde tanto el periodo como el ciclo de trabajo (Duty cycle) puede variar con el objetivo, por ejemplo, de regular la velocidad de un motor, la luminosidad de una bombilla, etc. • El periodo de la señal viene fijado por la configuración de TMR2 y por el contenido del registro PR2 (0x92). Este registro de 8 bits contiene los 8 bits más significativos de una cuenta de 10 bits. • El ciclo de trabajo o ciclo útil (duty cycle) viene definido por el contenido del valor del registro CCPRxL junto con los bits CCP1CON<5:4> antes de comenzar un nuevo periodo. • El temporizador base con el que se compara el contenido de estos registros es el TMR2.
  • 49. 49 PICmicro GAMA MEDIA: PIC16F87X Modulo de CCP: MODO PWM • PERIODO DE LA ONDA PWM. Se calcula utilizando la siguiente fórmula: T = (PR2 + 1) ·( 4 / TOSC )· PRESCALERTMR2 – Cuando TMR2 es igual a PR2, en el siguiente incremento de ciclo se producen tres acciones: • El TMR2 se resetea. • El pin CCPx se pone a 1. Salvo si el ciclo de trabajo esta fijado a 0 donde el pin CCPx no se pondrá a 1 nunca (el biestable RS es de borrado prioritario). • El nuevo ciclo de trabajo es cargado desde el registro CCPRxL al registro CCPRxH que es el que realmente se compara con el TMR2 para fijar el ciclo ce trabajo.
  • 50. 50 PICmicro GAMA MEDIA: PIC16F87X Modulo de CCP: MODO PWM • CICLO DE TRABAJO DE LA ONDA PWM: El ciclo de trabajo viene definido por el valor que se carga en el registro CCPR1L (8bits más significativos) junto con los bits CCP1CON<5:4> (2 bits menos significativos). Por tanto se consigue una resolución de 10 bits (DCxB9:DCxB0). La siguiente ecuación se utiliza para calcular el ciclo de trabajo (duty cycle) de la onda PWM: D = (CCPRxL:CCPxCON<5:4>) · TOSC · PRESCALERTMR2 • Los registros CCPR1L y los bits CCP1CON<5:4> pueden escribirse en cualquier instante de tiempo, pero no se cargan en CCPR1H y por tanto, no tiene efecto, hasta que finalice el periodo de la onda PWM actual. • Cuando TMR2 (+ 2 bits) se iguala a CCPxH (+ 2 bits), CCPx  0. • Si el ciclo de trabajo de la onda PWM es mayor que el periodo, la señal que sale por la patilla CCPx está siempre a 1.
  • 51. 51 PICmicro GAMA MEDIA: PIC16F87X Modulo de CCP: COMPILADOR CCS Configuración del módulo CCP setup_ccp1 (modo); setup_ccp2 (modo); modo: CCP_OFF (CCPxCON  00h) CCP_CAPTURE_FE (CCPxCON  04h) CCP_CAPTURE_RE (CCPxCON  05h) CCP_CAPTURE_DIV_4 (CCPxCON  06h) CCP_CAPTURE_DIV_16 (CCPxCON  07h) CCP_COMPARE_SET_ON_MATCH (CCPxCON  08h) CCP_COMPARE_CLR_ON_MATCH (CCPxCON  09h) CCP_COMPARE_INT (CCPxCON  0Ah) CCP_COMPARE_RESET_TIMER (CCPxCON  0Bh) CCP_PWM (CCPxCON  0Ch) CCP_PWM_PLUS_1 (CCPxCON  1Ch) CCP_PWM_PLUS_2 (CCPxCON  2Ch) CCP_PWM_PLUS_3 (CCPxCON  3Ch)
  • 52. 52 PICmicro GAMA MEDIA: PIC16F87X Modulo de CCP: COMPILADOR CCS Definición del ciclo de trabajo en modo PWM set_pwm1_ duty (valor); set_pwm2_ duty (valor); valor: Dato (8 ó 16 bits) que fija el DUTY CLICLE de la PWM. Variables definidas en 16F876.h long CCP_1; long CCP_2; #byte CCP_1 = 0x15 #byte CCP_2 = 0x1B #byte CCP_1_LOW = 0x15 #byte CCP_2_LOW = 0x1B #byte CCP_1_HIGH = 0x16 #byte CCP_2_HIGH = 0x1C
  • 53. 53 PICmicro GAMA MEDIA: PIC16F87X Modulo de CCP: COMPILADOR CCS Configuración del pin CCPy como entrada/salida set_tris_C (valor); valor: Entero de 8 bits, cada uno de los cuales representa la la configuración de un pin del puerto. (“1” E / “0”  S) Configuración del temporizador TMR1 setup_timer_1 (modo); modo: T1_DISABLED (T1CON  00h) T1_INTERNAL (T1CON  85h) T1_EXTERNAL (T1CON  87h) T1_EXTERNAL_SYNC (T1CON  83h) T1_CLK_OUT (T1CON  08h) T1_DIV_BY_1 (T1CON  00h) T1_DIV_BY_2 (T1CON  10h) T1_DIV_BY_4 (T1CON  20h) T1_DIV_BY_8 (T1CON  30h) Se pueden agrupar constantes de distintos grupos con |.
  • 54. 54 PICmicro GAMA MEDIA: PIC16F87X Modulo de CCP: COMPILADOR CCS Configuración del temporizador TMR2 setup_timer_2 (modo,periodo,postscaler); modo: T2_DISABLED (T2CON  00h) T2_DIV_BY_1 (T2CON  04h) T2_DIV_BY_4 (T2CON  05h) T2_DIV_BY_16 (T2CON  06h) periodo: PR2  periodo postscaler: Número de overflows necesarios para generar una interrupción. Es un valor entre 1 y 16 (para uso con los módulos CCP se toma un postscaler de 1).
  • 55. 55 PICmicro GAMA MEDIA: PIC16F87X Ejemplo: Modo Captura – Medir el ancho de un pulso mediante el TIMER1 y el modo CAPTURA del CCP. • El TIMER1 es un contador de 16 bits que se incrementa cada 4 ciclos de Reloj (FOSC *4). A este tiempo le vamos a llamar PASO de TIMER1. Si el cristal de cuarzo es de 4 Mhz, entonces 1µs se produce un PASO de TIMER1. • Un ciclo completo del TIMER1, desde 0x0000 hasta 0xEFFF (65536 pasos), ocupa un tiempo total de 1µs * 65.536 = 65,536ms. • Podemos fijar un tipo de flanco a detectar y escribir un cierto código para ejecutarlo cuando ese tipo de flanco, subida o bajada, es detectado. En este código escrito para tratar la interrupción del CCP podemos mantener o cambiar el flanco a detectar, cambiándolo del de Subida al de Bajada o viceversa y leer o escribir el valor de TIMER1 que en ese momento tiene el contador.
  • 56. 56 PICmicro GAMA MEDIA: PIC16F87X Ejemplo: Modo Captura RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF- 4 RA4/T0CKI 6 RA5/AN4/SS 7 OSC1/CLKIN 9 OSC2/CLKOUT 10 RC1/T1OSI/CCP2 12 RC2/CCP1 13 RC3/SCK/SCL 14 RB7/PGD 28 RB6/PGC 27 RB5 26 RB4 25 RB3/PGM 24 RB2 23 RB1 22 RB0/INT 21 RC7/RX/DT 18 RC6/TX/CK 17 RC5/SDO 16 RC4/SDI/SDA 15 RA3/AN3/VREF+ 5 RC0/T1OSO/T1CKI 11 MCLR/Vpp/THV 1 U1 PIC16F876 D7 14 D6 13 D5 12 D4 11 D3 10 D2 9 D1 8 D0 7 E 6 RW 5 RS 4 VSS 1 VDD 2 VEE 3 LCD2 LM016L U1(RC2/CCP1) Simular y Montar
  • 57. 57 PICmicro GAMA MEDIA: PIC16F87X Ejemplo: Modo Comparación, generador de onda cuadrada. • Generar un pulso de Periodo T con dos semiperiodos iguales, simétrico, y de unos 2 Khz de frecuencia: unos 0.25 ms en alto y otros 0.25 ms en bajo, total 0.5 ms de periodo. – Utilizar el CCP en modo Compare para que el CCP vaya comparando automáticamente el valor de TMR1 con un valor de referencia que le damos, CCP_x, y en cuanto lo alcance se realice la conmutación del Pin asociado a él y nos dispare la Petición de Servicio de Interrupción (ISR) INT_CCPx correspondiente. – En el código de esta interrupción volvemos a hacer lo mismo pero configurando el Compare para que cuando TMR1 alcance el valor de referencia conmute nuestro Pin CCP al estado contrario. – Si ambos valores de TMR1 de referencia, para el Compare a Alto y el Compare a bajo, son iguales tendremos un tren de pulsos simétricos, están el mismo tiempo en alto que en bajo, o sea que tienen un Duty Cycle del 50%. En caso contrario estarán mas tiempo en un estado que en otro y será una onda asimétrica, o sea que tendrá un Duty Cicle distinto del 50%. – Calculando cuidadosamente dichos tiempos podremos generar una onda del periodo que deseamos. Pondremos a 0 siempre TRM1 y cargaremos CCP_x con el número de PASOS de TMR1 en que deseamos que se dispare nuestra conmutación/interrupción.
  • 58. 58 PICmicro GAMA MEDIA: PIC16F87X Ejemplo: Modo Comparación-PWM • Mediante la configuración del módulo CCP lanzar una conversión AD, automática cada 1ms. Con el valor obtenido se realizará una conversión DA utilizando el PWM y un filtro paso-bajo. – Mediante los bit 3-0 CCPxM3:CCPxM0 (Bits de selección del modo CCP) se puede configurar Modo de comparación: CCP2 resetea TMR1 y lanza una conversión A/D. – Cargando el CCP2 con el valor adecuado se consigue que, cuando coincida con el valor de TMR1, se produzca una conversión AD (si está habilitada). – Con el valor obtenido de la conversión (0 a 1023) se puede obtener una señal PWM proporcional ha este valor. – Si dicha señal es filtrada con un filtro paso bajo se obtiene una continua proporcional al valor de la conversión. – Como aplicación se puede aplicar esta señal a una barra de leds y obtener una señal luminosa proporcional a la señal adquirida.
  • 59. 59 PICmicro GAMA MEDIA: PIC16F87X Ejemplo: Modo Comparación-PWM V+ 3 V- 2 10 10 9 11 8 12 7 13 6 14 5 15 4 16 3 17 2 18 1 1 SIG 5 ADJ 8 RHI 6 RLO 4 VRO 7 MODE 9 U1 LM3914 BAT1 10 R1 1k R2 2.7k 1 2 3 4 5 6 7 8 20 19 18 17 16 15 14 13 9 10 12 11 U2 LED-BARGRAPH-GRN RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF- 4 RA4/T0CKI 6 RA5/AN4/SS 7 OSC1/CLKIN 9 OSC2/CLKOUT 10 RC1/T1OSI/CCP2 12 RC2/CCP1 13 RC3/SCK/SCL 14 RB7/PGD 28 RB6/PGC 27 RB5 26 RB4 25 RB3/PGM 24 RB2 23 RB1 22 RB0/INT 21 RC7/RX/DT 18 RC6/TX/CK 17 RC5/SDO 16 RC4/SDI/SDA 15 RA3/AN3/VREF+ 5 RC0/T1OSO/T1CKI 11 MCLR/Vpp/THV 1 U3 PIC16F876 BAT3 5 RV2 1k A B R3 10k C1 1uF RV2(3) C1(1) Simular en ISIS
  • 60. 60 PICmicro GAMA MEDIA: PIC16F87X Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter • Características Generales – Los datos se envían bit a bit por una misma línea durante un tiempo fijo. – La velocidad de transmisión se indica en baudios (número de bits enviados por segundo). – La transferencia puede ser síncrona o asíncrona. • Síncrona: Se envía la señal de reloj para sincronizar cada bit. • Asíncrona: Se necesitan “relojes” en el emisor y el receptor de la misma frecuencia y en fase.
  • 61. 61 PICmicro GAMA MEDIA: PIC16F87X Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter • Características Generales – Se emplean dos registros de desplazamiento (uno en el emisor y otro en el receptor) encadenados para la conversión paralelo/serie en la emisión y serie/paralelo en la recepción. – Se puede llevar a cabo varios tipos de sincronización: • De los sucesivos bits. • De cada paquete de bits (8 ó 9 bits) – Se envía la señal de reloj si la distancia entre Emisor y Receptor es corta. • Así se consiguen menores retardos en las transiciones y mejores flancos en la señal de reloj recibida. – Posibles codificaciones de cada bit. • NRZ: Nivel alto: 1 / Nivel bajo: 0 • NRZI: Cambio de nivel: 1 / Sin cambio de nivel: 0 • RZ: Impulso: 1 / Sin impulso: 0
  • 62. 62 PICmicro GAMA MEDIA: PIC16F87X Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter • Transferencia Asíncrona – Se emplean relojes de igual frecuencia (se acuerda y se configura la velocidad de transmisión) pero también es necesario que estén en fase (sincronizados). – Cada paquete de bits de tamaño fijo se “enmarca” con bits de arranque y de parada que sirven para sincronizar los relojes del emisor y del receptor. – La línea de datos está inactiva a “1”. Si se desea enviar un dato se manda un bit de arranque, que sitúa a “0” la línea durante el tiempo correspondiente a un bit (START). – Al finalizar el envío de un dato, la línea se sitúa a “1” al menos durante el tiempo de un bit: bit de parada (STOP).
  • 63. 63 PICmicro GAMA MEDIA: PIC16F87X Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter • Comunicación serie asíncrona en microcontroladores PIC – Se va a implementar haciendo uso del módulo USART (Universal Synchronous/Asynchronous Receiver/Transmitter). También se conoce como Serial Communications Interface (SCI). Es uno de los dos módulos de E/S serie del PIC. – El módulo USART puede actuar como sistema asíncrono full duplex. • Permite comunicarse con periféricos como CRTs y PCs. También puede configurarse como sistema síncrono half duplex. Para comunicación con circuitos A/D o D/A, memorias serie EEPROM, etc. – Terminales asociados: RC6/TX/CK y RC7/RX/DT. – El módulo USART también permite localizar direcciones de 9 bits.
  • 64. 64 PICmicro GAMA MEDIA: PIC16F87X Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter • Registros Asociados: – SPBRG: Generador de Baud rate – TXSTA: Estado de transmisión y control. – RCSTA: Estado de recepción y control. – TXREG: Registro de datos de transmisión – RCREG: Registro de datos de recepción. – PIR1: Flag de interrupción. – PIE1:Habilitación interrupción.
  • 65. 65 PICmicro GAMA MEDIA: PIC16F87X Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter • Registro TXSTA (98h) Bit 7 En modo asíncrono no interviene. bit 6 TX9: Bit de habilitación de la transmisión de 9 bits 0: Transmisión de 8 bits 1: Transmisión de 9 bits bit 5 TXEN: Bit de habilitación de la transmisión 0: Transmisión deshabilitada 1: Transmisión habilitada bit 4 SYNC: Bit de selección del modo de funcionamiento 0: Transmisión asíncrona 1: Transmisión síncrona bit 2 BRGH: Bit de selección de alto valor de baudios 0: Baja velocidad 1: Alta velocidad bit 1 TRMT: Bit de estado del registro TSR 0: TSR lleno 1: TSR vacío bit 0 TX9D: 9 bit de datos transmitido. Puede ser el bit de paridad, por ejemplo
  • 66. 66 PICmicro GAMA MEDIA: PIC16F87X Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter
  • 67. 67 PICmicro GAMA MEDIA: PIC16F87X Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter • Registro RCSTA (18h) bit 7 SPEN: Bit de habilitación del puerto serie (RC6:RC7 como puerto serie) 0:Deshabilitado 1:Habilitado bit 6 RX9: Bit de habilitación de la recepción de 9 bits 0:Recepción de 8 bits 1:Recepción de 9 bits bit 4 CREN: Bit de habilitación de recepción continua 0:Deshabilitada 1:Habilitada bit 3 ADDEN: Bit de habilitación de detección de dirección 0:Deshabilitada 1:Habilitada (Sólo si RX9=1) bit 2 FERR: Bit de error de 0:No hubo error 1:Sí hubo error (Se actualiza al leer RCREG) bit 1 OERR: Bit de error de 0:No hubo error 1:Sí hubo error (Se pone a 0 si CREN ← 0) bit 0 RX9D: 9 bit de datos transmitido.
  • 68. 68 PICmicro GAMA MEDIA: PIC16F87X Modulo USART: Universal Synchronous/Asynchronous Receiver/Transmitter • Comunicación serie asíncrona con la USART – La información se transmite en formato NRZ: Se transmite primero el bit menos significativo. – El emisor y el receptor son funcionalmente independientes: Aunque comparten el mismo formato de datos y la misma velocidad de la comunicación (baudios). – El receptor incorpora un circuito de muestreo de la línea de datos que lee el valor del bit en la mitad del periodo de muestreo. Así se eliminan posibles errores debidos a las diferencias en los relojes del emisor y el receptor. – No se genera paridad mediante hardware. Si se quiere enviar como 9º bit el bit de paridad, el usuario debe calcularlo e interpretarlo en el software.
  • 69. 69 PICmicro GAMA MEDIA: PIC16F87X Modulo USART: COMPILADOR CCS #use rs232 (options) opciones: BAUD = x XMIT = pin RCV = pin BITS = x ……. EJEMPLO: #use delay (clock=3000000); #use rs232 (BAUD=9600 , XMIT=PIN_C6 , RCV=PIN_C7 , BITS=8) set_uart_speed (baud, [stream]) setup_uart(baud, stream) baud: Constante entre 100 y 115.200 (permite cambiar la velocidad de la USART durante la ejecución del programa) ¡¡IMPORTANTE!! Es imprescindible que aparezca una directiva #use delay antes de que se pueda utilizar una directiva #use rs232.
  • 70. 70 PICmicro GAMA MEDIA: PIC16F87X Modulo USART: COMPILADOR CCS • Transmisión serie putc (dato); putchar (dato); dato: Carácter de 8 bits. puts (string); string: Cadena de caracteres constante o array de caracteres terminado con un 0. – La función puts manda los caracteres de la cadena uno a uno a través del bus RS-232 utilizando la función putc. – Detrás de la cadena envía un RETURN (13) y un retorno de carro (10). Muy a menudo estas funciones se ven remplazadas por la función printf, más versátil que cualquiera de ellas.
  • 71. 71 PICmicro GAMA MEDIA: PIC16F87X Modulo USART: COMPILADOR CCS • Transmisión serie printf ([función,] string [, valores...]); – string: Cadena de caracteres (constante) o array de caracteres terminado con un 0. – función: Función a utilizar para escribir la cadena indicada. Por defecto es putc, que permite escribir en el bus RS-232. – valores: Variables a incluir en la cadena – Cuando se usan variables, en la cadena se indicará como %wt, donde: w: 1-9 (nº de caracteres) 01-09 (nº de posiciones a completar con 0s) 1.1-9.9(nº de decimales) t: C Carácter e Flotante en formato exp. S Cadena o carácter f Flotante U Entero con signo Lx Long en hexadecimal x Entero en hexadecimal LX Ídem en mayúsculas X Ídem en mayúsculas lu Long sin signo (en decimal) D Entero con signo ld Long con signo (en decimal)
  • 72. 72 PICmicro GAMA MEDIA: PIC16F87X Modulo USART: COMPILADOR CCS • Recepción serie valor = getc(); valor = getch(); valor = getchar(); valor: Carácter de 8 bits. – Espera que llegue un carácter por la línea RS-232 y da su valor. En los PIC con USART, se pueden almacenar hasta tres caracteres. Para no estar continuamente esperando, se puede usar kbhit(). valor = kbhit(); valor: 0 (FALSE) si getc debe esperar a que llegue un carácter. 1 (TRUE) si ya hay un carácter listo para ser leído por getc. gets(string); string: Puntero a un array de caracteres. • Almacena caracteres (leídos con getc) en el array hasta que recibe un RETURN (13). Termina la cadena con un 0.
  • 73. 73 PICmicro GAMA MEDIA: PIC16F87X Ejemplo: PIC a PIC por USART D7 14 D6 13 D5 12 D4 11 D3 10 D2 9 D1 8 D0 7 E 6 RW 5 RS 4 VSS 1 VDD 2 VEE 3 LCD1 LM016L VCC Alphanumeric LCD GND VCC RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF- 4 RA4/T0CKI 6 RA5/AN4/SS 7 OSC1/CLKIN 9 OSC2/CLKOUT 10 RC1/T1OSI/CCP2 12 RC2/CCP1 13 RC3/SCK/SCL 14 RB7/PGD 28 RB6/PGC 27 RB5 26 RB4 25 RB3/PGM 24 RB2 23 RB1 22 RB0/INT 21 RC7/RX/DT 18 RC6/TX/CK 17 RC5/SDO 16 RC4/SDI/SDA 15 RA3/AN3/VREF+ 5 RC0/T1OSO/T1CKI 11 MCLR/Vpp/THV 1 U1 PIC16F876 VCC RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF- 4 RA4/T0CKI 6 RA5/AN4/SS 7 OSC1/CLKIN 9 OSC2/CLKOUT 10 RC1/T1OSI/CCP2 12 RC2/CCP1 13 RC3/SCK/SCL 14 RB7/PGD 28 RB6/PGC 27 RB5 26 RB4 25 RB3/PGM 24 RB2 23 RB1 22 RB0/INT 21 RC7/RX/DT 18 RC6/TX/CK 17 RC5/SDO 16 RC4/SDI/SDA 15 RA3/AN3/VREF+ 5 RC0/T1OSO/T1CKI 11 MCLR/Vpp/THV 1 U2 PIC16F876 D1 LED-RED R1 180 Enviar datos del 0 a 9 (apareciendo en el LCD el dato transmitido). Al recibir el 5 el led se debe encender, en el resto de los datos debe estar apagado Simular en ISIS
  • 74. 74 PICmicro GAMA MEDIA: PIC16F87X Ejemplo: PIC a PC por USART Enviar datos del convertidor (en tensión y el valor de la conversión AD) por el puerto serie. Visualizarlos con el editor de puerto serie del ISIS. LCD[0..3] LCD0 LCD1 LCD2 LCD3 LCD0 LCD1 LCD2 LCD3 D7 14 D6 13 D5 12 D4 11 D3 10 D2 9 D1 8 D0 7 E 6 RW 5 RS 4 VSS 1 VDD 2 VEE 3 LCD1 LM016L VCC RV1 100k +88.8 Volts Alphanumeric LCD GND Variable Resistor RB0 RB1 GND VCC RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF- 4 RA4/T0CKI 6 RA5/AN4/SS 7 OSC1/CLKIN 9 OSC2/CLKOUT 10 RC1/T1OSI/CCP2 12 RC2/CCP1 13 RC3/SCK/SCL 14 RB7/PGD 28 RB6/PGC 27 RB5 26 RB4 25 RB3/PGM 24 RB2 23 RB1 22 RB0/INT 21 RC7/RX/DT 18 RC6/TX/CK 17 RC5/SDO 16 RC4/SDI/SDA 15 RA3/AN3/VREF+ 5 RC0/T1OSO/T1CKI 11 MCLR/Vpp/THV 1 U1 PIC16F876 RB1 RB0 RXD RTS TXD CTS Simular en ISIS
  • 75. 75 PICmicro GAMA MEDIA: PIC16F87X Ejemplo: PIC a PC por USART D7 14 D6 13 D5 12 D4 11 D3 10 D2 9 D1 8 D0 7 E 6 RW 5 RS 4 VSS 1 VDD 2 VEE 3 LCD1 LM016L VCC Alphanumeric LCD GND VCC RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF- 4 RA4/T0CKI 6 RA5/AN4/SS 7 OSC1/CLKIN 9 OSC2/CLKOUT 10 RC1/T1OSI/CCP2 12 RC2/CCP1 13 RC3/SCK/SCL 14 RB7/PGD 28 RB6/PGC 27 RB5 26 RB4 25 RB3/PGM 24 RB2 23 RB1 22 RB0/INT 21 RC7/RX/DT 18 RC6/TX/CK 17 RC5/SDO 16 RC4/SDI/SDA 15 RA3/AN3/VREF+ 5 RC0/T1OSO/T1CKI 11 MCLR/Vpp/THV 1 U1 PIC16F876 ERROR TXD 3 RXD 2 CTS 8 RTS 7 DSR 6 DTR 4 DCD 1 RI 9 P1 COMPIM Utilizando un hiperterminal (terminal.exe), comunicarse con el PC. Desde el PC enviar un dato, el PIC debe recibirlo y visualizarlo en el LCD. Una vez recibido debe enviar la palabra “recibido” al PC. Utilizar Interrupciones. Conectar COM1 con el COM2 Simular en ISIS
  • 76. 76 PICmicro GAMA MEDIA: PIC16F87X • La Norma RS232 – Nace con la idea de comunicar un computador o equipo terminal de datos (DTE o Data Terminal Equipment) y un módem o equipo de comunicación de datos (DCE o Data Communications Equipment). – Su uso se extendió a otras aplicaciones y hoy se emplea para comunicar equipos que no respetan íntegramente la norma y que no necesitan la mayoría de las líneas de la norma original: detector de portadora (DCD),indicador de llamada (RI), canal secundario,… • Se emplea, por ejemplo, para comunicar equipos que son ambos DTE, como dos PCs o un PC y un microcontrolador. – Los equipos pueden utilizar distintos conectores: • Conector SUB-D de 25 pins. • Conector SUB-D de 9 pins. • Conector SUB-D de 15 pins de alta densidad. (el menos habitual). • El conector de 25 pines es el único que dispone de todas las señales definidas en la norma original.
  • 77. 77 PICmicro GAMA MEDIA: PIC16F87X • La Norma RS232 Ejemplo: Los puertos serie de un PC (COMn). – Presentan de manera mayoritaria conectores SUB-D de 9 pines hembra (aunque la norma original dice que los DTE deben ser macho). – Pin 1 DCD (E) Detección de Portadora – Pin 2 RXD (E) Recepción de Datos – Pin 3 TXD (S) Transmisión de Datos – Pin 4 DTR (S) PC listo para recibir (respuesta a CTS) – Pin 5 MASA COMÚN – Pin 6 DSR (E) PC puede enviar datos (respuestas a RTS) – Pin 7 RTS (S) PC solicita envíar datos (le responderán con DSR) – Pin 8 CTS (E) Le preguntan si PC listo para recibir (responderá con DTR) – Pin 9 RI (E) Indicador de llamada (si el otro equipo es un modem) RTS – DSR Protocolo de envío de datos desde el PC CTS – DTR Protocolo de recepción de datos en el PC
  • 78. 78 PICmicro GAMA MEDIA: PIC16F87X • La Norma RS232 – Para realizar la conexión entre un microcontrolador y un PC, será necesario realizar la correspondiente adaptación de los niveles de tensión que utiliza el microcontrolador a los niveles de la norma RS232 – Existen varios circuitos integrados comerciales que realizan esta adaptación con muy pocos componentes (p.e. la familia MAX220 a 249). – Se puede simplificar el conexionado y obviar las líneas de pregunta-respuesta “engañando” al emisor para hacerle creer que el receptor está siempre listo. El truco pasa por “puentear” las líneas de petición de envío y las respuestas.
  • 79. 79 PICmicro GAMA MEDIA: PIC16F87X • La Norma RS232 (el 233 no necesita condensadores)
  • 80. 80 PICmicro GAMA MEDIA: PIC16F87X • USB/USART – En la mayoría del los portátiles ya no existe el puerto Serie (e incluso en algunos PC de mesa). Para simular un puerto serie se puede utilizar el USB (ojo: NO el protocolo USB) mediante el empleo de C.I. como el FT232.
  • 81. 81 PICmicro GAMA MEDIA: PIC16F87X • Ejemplo USB/USART – Montar el ejemplo de la transparencia 75 utilizando la placa del FT232. Utilizar el TERMINAL.EXE para comunicarse con el PIC. Configurar el PC para trabajar con el puerto correspondiente. D7 14 D6 13 D5 12 D4 11 D3 10 D2 9 D1 8 D0 7 E 6 RW 5 RS 4 VSS 1 VDD 2 VEE 3 LCD1 LM016L VCC Alphanumeric LCD GND VCC RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF- 4 RA4/T0CKI 6 RA5/AN4/SS 7 OSC1/CLKIN 9 OSC2/CLKOUT 10 RC1/T1OSI/CCP2 12 RC2/CCP1 13 RC3/SCK/SCL 14 RB7/PGD 28 RB6/PGC 27 RB5 26 RB4 25 RB3/PGM 24 RB2 23 RB1 22 RB0/INT 21 RC7/RX/DT 18 RC6/TX/CK 17 RC5/SDO 16 RC4/SDI/SDA 15 RA3/AN3/VREF+ 5 RC0/T1OSO/T1CKI 11 MCLR/Vpp/THV 1 U1 PIC16F876 ERROR TXD 3 RXD 2 CTS 8 RTS 7 DSR 6 DTR 4 DCD 1 RI 9 P1 COMPIM
  • 82. 82 PICmicro GAMA MEDIA: PIC16F87X • INTERNET/USART – Se pueden crear terminales de internet “embebidos” en el PIC; pero existe la posibilidad (mucho más sencilla) de utilizar un servidor virtual para puerto serie en un PC y emplear un hiperterminal como comunicación desde otro PC. De este modo se puede controlar remotamente el PIC. internet
  • 83. 83 PICmicro GAMA MEDIA: PIC16F87X • Ejemplo INTERNET/USART VCC RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF- 4 RA4/T0CKI 6 RA5/AN4/SS 7 OSC1/CLKIN 9 OSC2/CLKOUT 10 RC1/T1OSI/CCP2 12 RC2/CCP1 13 RC3/SCK/SCL 14 RB7/PGD 28 RB6/PGC 27 RB5 26 RB4 25 RB3/PGM 24 RB2 23 RB1 22 RB0/INT 21 RC7/RX/DT 18 RC6/TX/CK 17 RC5/SDO 16 RC4/SDI/SDA 15 RA3/AN3/VREF+ 5 RC0/T1OSO/T1CKI 11 MCLR/Vpp/THV 1 U1 PIC16F876 ERROR TXD 3 RXD 2 CTS 8 RTS 7 DSR 6 DTR 4 DCD 1 RI 9 P1 COMPIM D1 LED-RED R1 180
  • 84. 84 PICmicro GAMA MEDIA: PIC16F87X • Ejemplo INTERNET/USART PC origen PC remoto Del PC origen: ejecutar ipconfig /all
  • 85. 85 PICmicro GAMA MEDIA: PIC16F87X • Ejemplo INTERNET/USART • PC remoto
  • 86. 86 PICmicro GAMA MEDIA: PIC16F87X • Ejemplo INTERNET/USART Se puede cambiar el puerto con CLOSE y COMx • En el ISIS poner en marcha la simulación. • En el hiperterminal enviar: ? o 1 o 2.