Professional Documents
Culture Documents
Mayo de 2012
NDICE
NDICE ......................................................................................................................... 3
NDICE DE FIGURAS ................................................................................................... 7
NDICE DE TABLAS ................................................................................................... 11
1.
2.
3.
2.1.
2.2.
3.2.
Especificaciones ......................................................................................... 43
4.2.
6.
7.
5.2.
5.3.
6.2.
Referencias...................................................................................................... 111
NDICE DE FIGURAS
Fig. 4.4. Ejemplo de cdigos para los dos modos de funcionamiento ......................... 47
Fig. 4.5. Diagrama de bloques del emisor................................................................... 48
Fig. 4.6. Fase 1 de la bomba de carga MCP1252 ....................................................... 50
Fig. 4.7. Fase 2 de la bomba de carga MCP1252 ....................................................... 50
Fig. 4.8. Fase 3 de la bomba de carga MCP1252 ....................................................... 51
Fig. 4.9. Circuito emisor completo .............................................................................. 54
Fig. 4.10. Diagrama de flujo de la rutina principal ....................................................... 56
Fig. 4.11. Diagrama de flujo de la rutina de asociacin con un nuevo receptor........... 58
Fig. 4.12. Descripcin de las posiciones EEPROM del microcontrolador emisor ........ 59
Fig. 4.13. Eleccin del tiempo de adquisicin del convertidor A/D .............................. 61
Fig. 4.14. Diagrama de flujo de la rutina de conversin A/D ....................................... 62
Fig. 4.15. Rutina de transmisin ................................................................................. 64
Fig. 4.16. Subrutinas de gestin del tiempo de transmisin ........................................ 65
Fig. 4.17. Diagrama de bloques del receptor .............................................................. 66
Fig. 4.18. Circuito de alimentacin .............................................................................. 66
Fig. 4.19. Circuito detector de paso por cero .............................................................. 67
Fig. 4.20. Pulso de paso por cero con resistencia de polarizacin del fotodiodo de 51
k............................................................................................................................... 69
Fig. 4.21. Pulso de paso por cero con resistencia de polarizacin del fotodiodo de
100 k........................................................................................................................ 70
Fig. 4.22. Circuito de recepcin y control .................................................................... 73
Fig. 4.23. Rutina principal del microcontrolador maestro ............................................ 74
Fig. 4.24. Realizacin de la lectura de cada bit ........................................................... 75
Fig. 4.25. Subrutinas de recepcin de los bits. ........................................................... 76
Fig. 4.26. Gestin en la recepcin de cada bit. ........................................................... 77
Fig. 4.27. Descripcin de las posiciones EEPROM del microcontrolador maestro
receptor ...................................................................................................................... 78
Fig. 4.28. Rutina de recepcin de los cdigos ............................................................ 79
Fig. 4.29. Rutina de asociacin con el emisor............................................................. 81
Fig. 4.30. Rutina detallada de asociacin con el emisor ............................................. 82
Fig. 4.31. Rutina de gestin del cdigo en modo normal de funcionamiento............... 82
Fig. 4.32. Subrutina de interrupcin del timer 1 .......................................................... 83
Fig. 4.33. Diagrama de flujo de la rutina de luminosidad............................................. 86
Fig. 4.34. Rutina principal del microcontrolador esclavo (PIC12F508). ....................... 88
Fig. 4.35. Rutina del timer 0 para el microcontrolador esclavo (PIC12F508)............... 89
Fig. 4.36. Circuito de disparo del triac......................................................................... 89
Fig. 4.37. Caracterstica esttica V-I del triac y cuadrantes de disparo del triac. ......... 90
Fig. 4.38. Imagen del prototipo emisor........................................................................ 91
Fig. 4.39. Imagen del prototipo receptor. .................................................................... 91
Fig. 4.40. Formas de onda para el sistema emisor (1). ............................................... 93
Fig. 4.41. Formas de onda para el sistema emisor (2). ............................................... 94
Fig. 4.42. Formas de onda para el sistema emisor (3). ............................................... 94
10
NDICE DE TABLAS
11
12
1. Introduccin y objetivos
Actualmente pueden encontrarse en el mercado dispositivos electrnicos de bajo
consumo que se alimentan a partir de fuentes y sistemas de generacin renovables. La
utilizacin de dichos sistemas es limitada, dada su capacidad y discontinuidad energtica.
An as se han desarrollado aplicaciones de utilidad con importantes ventajas respecto a su
equivalente con alimentacin tradicional (pilas o bateras). Estos sistemas limpios
proporcionan alimentacin autnoma sin necesidad, en la mayora de los casos, de
mantenimiento. El objetivo principal de este proyecto es desarrollar dos aplicaciones a
partir de uno de estos sistemas de generacin para lograr un funcionamiento
completamente autnomo.
Estos sistemas de generacin usados en dispositivos de bajo consumo son los
llamados recolectores o energy harvesting systems en la bibliografa anglosajona. Entre
las fuentes primarias de las que extraen energa elctrica se encuentran la luz solar
(tambin luz artificial), el movimiento, gradientes de temperatura, cargas electrostticas,
etc. Cada sistema tiene sus particularidades especiales de aplicacin en funcin de factores
como su capacidad energtica, disponibilidad de la misma, tamao, peso, etc. En este
proyecto se ha optado por la energa solar por motivos que se expondrn ms adelante. Se
ha empleado un pequeo panel fotovoltaico del tamao habitual de los que usa un farol de
jardn, que habitualmente se encarga de cargar un par de pilas AA de 1,2 V y 500 mAh
durante el da para encender un diodo led durante la noche.
En relacin a la aplicacin, se ha decidido desarrollar dos sistemas basados en
radiofrecuencia. Estos sistemas utilizan circuitos integrados con reducidos consumos y
funcionalidades diversas tales como redes de sensores, sistemas de seguridad y deteccin,
riego automtico, etc. En estos ejemplos se elimina la conexin fsica entre el control y el
sistema a controlar, permitiendo una comunicacin remota a distancias de hasta decenas
de metros y un funcionamiento independiente del emisor y el receptor. Son, por lo tanto,
aplicaciones ptimas en los que poder instalar los sistemas de generacin anteriormente
mencionados.
Los productos de radiofrecuencia encontrados en el mercado se alimentan
generalmente a partir de bateras, y en algunos casos a partir de la red elctrica
(receptores). En el caso de las bateras, los problemas asociados son un almacenamiento de
energa limitado, la disminucin acelerada de su carga, oxidacin y sulfatacin de los
contactos, y en ltima instancia, prdida del electrolito que puede llegar a inutilizar el
dispositivo. Debido a ello, otro de los objetivos de este proyecto ha sido modificar el
sistema de almacenamiento para reducir en lo posible estos problemas.
13
El primer sistema desarrollado tiene como objetivo la activacin del timbre de una
casa, mientras que el segundo sistema es un control de encendido y apagado del
alumbrado de un recinto. En ambos casos se ha construido un prototipo.
Se han escogido estas dos aplicaciones debido a su reducido nmero de activaciones
requeridas diariamente. De esta forma, el circuito emisor de ambos sistemas puede ser
alimentado puntualmente cuando sea requerido enviar una seal a los receptores, lo que
reduce el consumo y permite una mayor autonoma cuando la energa ofrecida por el panel
sea escasa o nula.
Los objetivos generales de este proyecto se resumen en:
14
15
variacin del campo magntico y el nmero de espiras del devanado. Para conseguir
tensiones de un nivel suficiente es necesario que el devanado tenga un nmero elevado de
espiras, lo que incrementa su volumen, peso y el coste del sistema. Adems, la energa
primaria proporciona movimientos de baja frecuencia que reducen el nmero de pasos de
los imanes por el devanado, reduciendo as la amplitud de la tensin. Las aplicaciones
suelen ser las mismas que los sistemas piezoelctricos. Al igual que stos generan corriente
alterna, que debe ser rectificada y filtrada. En el caso de los sistemas electromagnticos es
esencial utilizar diodos con muy baja tensin de polarizacin directa.
Sistemas solares: estn basados en el efecto fotoelctrico. Son los sistemas con diferencia
ms utilizados en aplicaciones de bajo consumo. En el mercado pueden encontrarse relojes
de pulsera, cargadores de telfonos porttiles y muchos otros productos que utilizan
paneles fotovoltaicos cuyas capacidades energticas se encuentran en el rango de 10 a 100
mAh (Fig. 2.3). Entre sus ventajas estn el proporcionar corriente continua de salida, no
tener partes mviles que puedan sufrir fatiga y romperse (menor mantenimiento) y una
elevada durabilidad. Son adems los nicos sistemas que pueden proporcionar los niveles
de tensin y corriente que exige una aplicacin de bajo consumo estndar (unidades de
voltio y miliamperio). De esta manera hay menores prdidas por transformacin.
16
17
En la Fig. 2.6 puede verse una estimacin de la energa por unidad de superficie para
las diferentes fuentes de energa utilizadas por los sistemas recolectores segn Texas
Instruments. Como puede verse, la luz es la fuente que ms energa proporciona para la
tecnologa actual disponible. Los grandes paneles son capaces de obtener hasta 1 mW de
potencia media en una clula de 100 mm2 y una eficiencia tpica del 10%.
Los sistemas termoelctricos aplicados a personas son actualmente capaces de
generar unas pocas decenas de W/cm2. Sin embargo han levantado inters para ser
empleados en dispositivos mdicos de bajo consumo [2]. A nivel industrial los gradientes
de temperatura producidos son mayores, obtenindose mayores densidades de energa.
18
19
En 1998 la marca de relojes Seiko lanz al mercado su modelo Thermic (Fig. 2.9), el
primer reloj alimentado a partir de la diferencia de temperatura entre la atmsfera y la
mueca del usuario.
20
Fig. 2.10. Mdulo sensor STM300 con placa solar ECS310 y mdulo transmisor STM310
21
Por otro lado, existen micro-sensores implantables en el cuerpo para medir la presin
sangunea. El modelo desarrollado por la Universidad de Michigan mide 9 milmetros
cbicos (Fig. 2.13). Utiliza dos micro-paneles solares en serie y una batera de litio de
pelcula fina de 3.6 V y 12 Ah de capacidad [9]. Para la toma de datos utiliza un
procesador ARM Cortex-M3 de 32 bits, cuyo consumo medio es menor de 1 nW [10]. Este
procesador necesita alrededor de 2000 veces menos energa en modo de bajo consumo
que su equivalente comercial.
22
23
24
En la Fig. 3.1 puede verse el diagrama de bloques del circuito emisor. Como puede
verse, est formado por:
25
MAX666
SENSE
Vout
Rlim
R2
Vset
R1
Fig. 3.2. Esquema del regulador MAX 666 y configuracin para salida de tensin ajustable
26
0, 5 V
= 50
10 10 3
R1 + R 2
R1
; Vset = 1, 3 V
R2 = R1 (
Vout
1)
1,3
R1 = 1 k ; R2 = 1,5 k ; Vout = 3, 25 V
Los bloques de control y transmisin estn formados por el dispositivo que obtiene la
secuencia digital de informacin a enviar y por el mdulo de radiofrecuencia que permite
27
28
En este circuito integrado, la frecuencia del oscilador interno, y por tanto la duracin
de cada bit, puede regularse a partir de la eleccin de una resistencia externa al encoder.
La frecuencia de trabajo escogida ha sido de 3 kHz a 3 V. Para estos valores, la resistencia
externa debe tomar un valor de aproximadamente 820 k (Fig. 3.5).
29
30
PANEL SOLAR
PULSADOR
V+
Supply
in out
MAX666
0.1F
Sense
Vin
V50
1k5
Vout
LBO
LBI
Vset
GND
Shdn
10u
1k
Supply
10u
A0
ANTENA
Vcc
GND
OUT
GND
TX
HT6014
GND
Vdd
A1
Dout
A2
OSC2
A3
OSC1
A4
LED
A5
D11
A6
D10
A7
D9
Vss
D8
10u
820k
Supply
31
3.3.1.
32
3.3.2.
Bloque de control
33
que deben transcurrir 256 ciclos mquina para que el registro de cuenta (TMR0) se
incremente en una unidad. En estos microcontroladores, cada ciclo mquina equivale a
cuatro ciclos de reloj. Si se decide utilizar el oscilador interno de 4 MHz como fuente de
reloj, cada ciclo mquina durar:
1
4 ciclos = 1 s
4 MHz
PATILLA
DESCRIPCIN
GP4 (IN)
GP1 (OUT)
Como el nmero de incrementos totales del registro TMR0 es de 255, con el reloj
interno de 4 MHz podran contarse hasta:
64 ms 39 = 2496 ms 2,5 s
34
INICIO
INICIALIZACIN DE VARIABLES
DECLARO CONTADOR
NO
SEAL VT ON
SI
ACTIVO TIMBRE
APAGO TIMBRE
SEAL VT OFF
NO
SI
RECARGO CONTADOR
Para realizar la cuenta se debe asociar el prescaler al temporizador (bit PSA=1 del
registro OPTION) y para conseguir la combinacin 1:256, los bits PS2, PS1 y PS0 deben estar
a uno.
alterna (Fig. 3.12), permitiendo el disparo del triac cuando la salida GP1 del
microcontrolador se pone a nivel alto. El funcionamiento detallado de este circuito se
describir ms adelante para el circuito receptor de la aplicacin de control de luminarias.
HT6034
Vdd
Vss
Vdd
GP5
GP0
A1
VT
GP4
GP1
A2
OSC2
GP3
GP2
A3
OSC1
Vcc
OUT
TP
GND
GND
IN
Vcc
GND
A0
ANTENA
1k
Disparo
1k
62k
10u
V7
5Vdc
Datos
A4
Din
A5
D11
A6
D10
A7
D9
Vss
D8
Datos
OPTOTRIAC
TIMBRE
Disparo
nodo
A/K
750
Ctodo
100n
TRIAC
AC Source
NC
K/A
750
La resistencia que fija la frecuencia del oscilador interno del decoder se coloca, al
igual que en el encoder, entre las patillas OSC1 y OSC2.
36
unas condiciones iniciales de luz de 900 lux (Fig. 3.13). Como puede verse, para unas
condiciones de luz limitadas no se consigue el nivel de tensin necesario. Por otro lado, el
ensayo se realiz dentro del laboratorio cercano a una ventana.
37
generado por el encoder en su salida y el cdigo a la entrada del decoder. Como puede
verse, el encoder introduce un pulso de sincronizacin seguido del cdigo de direccin y de
datos. El cdigo completo est formado por un tren de pulsos dobles de valor binario 0000
0000 0000 segn la codificacin expuesta en la Fig. 3.4.
La Fig. 3.15 muestra las formas de onda del receptor ante una recepcin vlida. Como
ya se mencion, el decoder activa su salida VT para indicar al microcontrolador que el
cdigo recibido coincide con el suyo. En este momento, el microcontrolador dispara el
circuito de activacin del altavoz durante 2,5 segundos.
38
En la Fig. 3.16 puede verse como la tensin entre los terminales del triac (traza
morada) se hace prcticamente cero al ponerse ste en conduccin. La traza azul oscura
corresponde a la tensin en la patilla Dout del encoder. Mientras se pulsa el botn de
llamada, el encoder enva repetidamente el mismo cdigo hasta que cesa la pulsacin del
botn. Por su parte, el decoder realiza la comparacin del cdigo de direcciones dos veces
seguidas. Tras verificarse la coincidencia y ponerse a nivel alto la salida VT, el
microcontrolador pone su salida GP1 a nivel alto durante 2,5 s.
Como puede verse, la patilla Din del decoder (traza azul claro) permanece a nivel alto
despus de producirse una transmisin vlida. De esta forma se mantiene activo el
oscilador interno sin atenderse a los cdigos de entrada. Tras cesar la pulsacin del botn,
el circuito emisor deja de esta alimentado. La seal VT vuelve a nivel bajo y el oscilador
retorna al modo durmiente. Sin embargo, el microcontrolador del sistema receptor seguir
activando el altavoz hasta completar los 2,5 segundos programados.
39
La Fig. 3.17 muestra el tiempo de arranque desde que el circuito emisor recibe
energa al pulsar el botn hasta la transmisin del cdigo. Este tiempo est en torno a los
10 ms, lo que supone un tiempo menor al de transmisin. Teniendo en cuenta que el
decoder realiza la comparacin de su cdigo con dos cdigos consecutivos, el tiempo de
transmisin para la validacin ser superior a 40 ms. Debido a la rapidez de activacin del
encoder, la energa perdida en el arranque es pequea.
40
41
42
4.1. Especificaciones
43
Para entrar en el modo asociacin, tanto el circuito emisor como receptor disponen
de un botn de asociacin. En este modo de funcionamiento se crea un vnculo entre un
determinado receptor y el emisor. La secuencia a seguir para realizar la asociacin puede
verse a continuacin (Fig. 4.1).
44
Una vez el circuito receptor que controla una determinada fuente de luz ha sido
asociado a un emisor, ambos circuitos pueden comunicarse para controlar el encendido y
apagado de dicha fuente de luz, as como su nivel de intensidad. La secuencia de operacin
del sistema para este modo de funcionamiento puede verse a continuacin (Fig. 4.2).
PULSAR EL BOTN DEL SISTEMA
EMISOR CORRESPONDIENTE AL
RECEPTOR QUE SE DESEA
CONTROLAR
Como se indic en las especificaciones, el circuito emisor debe poder controlar hasta
dos receptores distintos. Por lo tanto, ste debe incluir un botn diferente para cada
receptor. El circuito emisor tendr un total de tres botones:
Botn de asociacin.
Tras pulsarse uno de los botones de control, el emisor debe comprobar inicialmente
que realmente existe un receptor asociado a dicho botn. La asociacin se realiza siempre
por orden, es decir, se referencia el primer receptor asociado con el botn de control 1 y
as sucesivamente. En caso de no haber un receptor asociado al botn que se ha pulsado,
el emisor no realiza ninguna accin. En caso contrario enva el cdigo adecuado a dicho
receptor. Este ltimo debe cumplir la orden deseada (apagar o encender la bombilla) y no
otro receptor.
45
Cada 1 lgico se representa como un pulso a nivel alto de duracin 256 s, mientras
que un 0 lgico tiene una duracin de 512 s, el doble que un 1 lgico (Fig. 4.3). Entre bit
y bit dentro del mismo byte se deja la salida de transmisin 256 s a nivel bajo. Entre un
byte y otro se dejan 512 s de espera a nivel bajo.
Tanto en el modo de asociacin como en el modo normal de funcionamiento el
receptor ha de recibir un total de 32 bits repartidos en 4 bytes de informacin (Fig. 4.4). En
el modo de asociacin, estos 4 bytes se reparten de la siguiente manera:
46
47
48
49
50
51
PATILLA
FUNCIONALIDAD
GP0
GP1
GP2
GP3
GP4
GP5
52
53
54
Cuando se pulsa alguno de los tres botones se produce la alimentacin del resto del
circuito emisor. Cuando la tensin en el microcontrolador es estable, ste realiza la
siguiente secuencia (Fig. 4.10):
55
RUTINA PRINCIPAL
DECLARACIN DE VARIABLES
CONFIGURACIN DE REGISTROS
n_disp==FFh
NO
SI
n_disp=0
NO
RECEPTOR
NO
SI
SI
NO
NO
SI
2 RECEPTORES
2 RECEPTORES
SUBRUTINA
ASOCIADOS
ASOCIADOS
ASOCIACIN
SI
SI
ASOCIADO
NO
ASOCIAR
SI
1 RECEPTOR
NO
RECEPTOR
LEO CDIGO DE
LEO CDIGO DE
RECEPTOR_1
RECEPTOR_2
MODO SLEEP
SUBRUTINA
CONVERSIN A/D
SUBRUTINA DE
TRANSMISIN
56
MODO SLEEP
Antes de controlar inalmbricamente una fuente de luz hay que asociar el receptor
que lo controla al emisor elegido. Una vez el receptor queda a la espera de recibir el
cdigo, indicndolo con un diodo LED, y se pulsa del botn de asociacin del circuito
emisor, el microcontrolador realizar las siguientes tareas (Fig. 4.11):
57
SUBRUTINA
ASOCIACIN
SI
2 RECEPTORES
ASOCIADOS
N DE
GUARDAR N
DISPOSITIVOS = 0
DISPOSITIVOS EN
EEPROM
NO
LEO SEMILLA DE EEPROM Y LO
SALIR
GUARDO EN SEMILLA_COPIA
SI
NO
1 RECEPTOR
ASOCIADO
GENERACIN DE
GENERACIN DE
ALEATORIO 1
ALEATORIO 2
GUARDO ALEATORIO
GUARDO ALEATORIO
EN SEMILLA
EN SEMILLA
SI
COINCIDE
RESETEO SEMILLA
NO
PRIMER
NO
DISPOSITIVO
AADIDO
SI
GUARDO SEMILLA EN EEPROM
RECEPTOR ASOCIADO
RECEPTOR ASOCIADO
SUBRUTINA DE TRANSMISIN
EN EEPROM
58
VOLVER
Una vez tiene asociado al menos un receptor, el emisor puede controlarlo pulsando
el botn correspondiente. Tras comprobar que existe un receptor asociado a la entrada
que ha detectado, el microcontrolador:
Activa la bomba de carga poniendo a nivel alto su salida GP5. Esto permite la
alimentacin del bloque de transmisin a 3,3 V. La bomba de carga necesita
un mnimo de 200 s para arrancar. En este caso, el microcontrolador espera
512 s para asegurar una tensin estable en el bloque de transmisin.
59
60
61
SUBRUTINA DE
CONVERSION A/D
ALIMENTO CIRCUITERA
CONVERSOR (ADON=1)
FIN DE
NO
CONVERSIN
SI
CODIGO_ADC= ADRESH
RETURN
Una vez realizada la conversin se dispone ya de los 4 bytes que forman el cdigo:
Una variable genrica llamada cdigo para ir cargando cada uno de los bytes
por turnos.
La trama de bits de cada byte enviado por la salida GP0 se realiza de la siguiente
manera (Fig. 4.15):
Antes de enviar el ltimo byte se debe preguntar por el modo de funcionamiento (bit
de control) para enviar el valor correcto (Fig. 4.15):
Una vez salta la interrupcin, el bit T0IF (flag de interrupcin del timer 0) del
registro INTCON se pone automticamente a nivel alto por hardware. Este bit
63
Tras producirse la interrupcin hay que poner a cero el bit T0IF e inhabilitar
las interrupciones poniendo a cero el bit GIE. Tras esto se apaga la salida GP0.
RUTINA DE
TRANSMISIN
**
*
CDIGO 1
NO
CARGO
BIT X==0
NO
CALL UNO
SI
PRIMER BYTE
ENVIADO
CALL CERO
SI
CDIGO 2
NO
ENVIADO
**
CARGO
SEGUNDO BYTE
CDIGO 3
NO
CARGO
TERCER BYTE
ENVIADO
CDIGO_ADC
SI
ESPERO 512 s
SI
NO
CDIGO 4
SI
NO
SI
CARGO
ENVIADO
LTIMO BIT
NO
MODO
PROGRAMACIN
SI
CDIGO 4
NO
CARGO 0xFF
ENVIADO
SI
VOLVER
64
TIMER 0
CERO
UNO
INHABILITO INTERRUPCIONES
APAGO SALIDA
SALIDA=1
SALIDA=1
RETURN
RETURN
RETFIE
4.3.3.
Bloque de transmisin
El bloque de transmisin est formado por un mdulo de radiofrecuencia Aurel TXSAW MID/3V igual al utilizado en la aplicacin del timbre inalmbrico y por una antena
helicoidal de 15 cm. El mdulo opera a una tensin de 3,3 V proporcionada por la bomba
de carga y trabaja en la banda libre de 434 MHz.
65
4.4.1.
Bloque de alimentacin
Todo el circuito receptor se alimenta a partir de la red de 230 V. Para obtener el nivel
de continua adecuado para los circuitos integrados se ha utilizado un puente rectificador y
un convertidor CC-CC reductor del fabricante Rohm Semiconductor, modelo BP5041A1.
BP5041A1
10
CC/CC
Vin
GND
Fusible 0.5 A
1 2
L78L05
Vcc
Vout
10
V+
0.1u/400V
220u
33u
10u/450V
FREQ = 50
VAMPL = 311
GND
V-
66
hasta los 390 V. Ofrece una corriente mxima de salida de 100 mA (Vi=282 V) a una
frecuencia de conmutacin de 42 kHz y una eficiencia tpica del 62% en estas condiciones.
El rizado mximo es de 0,15 Vpp (Vi=282 V, Io=50 mA). Se ha utilizado un fusible con una
corriente de corte de 500 mA por indicacin del fabricante. Los 5 V necesarios para los
chips de control se obtienen mediante un regulador L78L05 (Fig. 4.18).
4.4.2.
Bloque de sincronizacin
4N37
1k
GP1 (PIC12F508)
V-
Cuando existe suficiente tensin de entrada para polarizar en directa el led, ste
activar el fototransistor, poniendo la patilla GP1 del microcontrolador de control a masa.
Si se produce el paso por cero de la corriente, el transistor quedar desactivado, teniendo
en su colector aproximadamente la tensin de la fuente Vcc. De esta manera se obtiene el
pulso de paso por cero. Dado el pequeo valor de la capacidad interna del fototransistor (6
pF para la unin colector-emisor), los tiempos de conmutacin no se ven influenciados en
gran medida debido a ste. Sin embargo no ocurre lo mismo con el led.
67
I m xf =
5V
= 5 mA
1 k
Por otro lado, se ha introducido una resistencia para limitar la corriente por el
circuito de potencia. La mxima corriente permitida en el led es de 60 mA, siendo su cada
de tensin tpica de 1,3 V a 10 mA. A la salida del puente de diodos se van a tener picos
mximos de:
V m x = 230 2 = 325 V
Debe tenerse en cuenta que a la entrada del optotriac (bloque de disparo) no debe
superarse una corriente de 50 mA. Si se pretende una corriente de aproximadamente 10
mA para el valor mximo de tensin, el valor mnimo de la resistencia ser de:
RL =
325 1, 3
= 33 k
10 mA
Con un valor superior de resistencia, la corriente por sta ser menor, minimizndose
las prdidas de potencia. Sin embargo, para un valor ms alto de resistencia, el tiempo de
carga del condensador interno del diodo ser mayor, producindose un ensanchamiento
del pulso de paso por cero a la salida del optoacoplador. Esto puede perjudicar el control
de tiempos realizado para el nivel de iluminacin. Para el caso de 51 k se produciran
prdidas de potencia de:
325 1,3
I Lmx =
= 6, 4 mA;
51 k
6, 4 10 3 2
PL m x = (
) 51103 = 1,04 W
2
I L max =
325 1,3
= 3, 2 mA ;
100
PL max = (
68
3, 2 10 3 2
) 100 103 = 0,5 W
2
En la Fig. 4.20 y Fig. 4.21 se representa la duracin del pulso para 51 k y 100 k,
respectivamente. Como puede verse, para 51 k el pulso dura unos 800 s y para 100 k
es de hasta 3 ms, lo que limita el tiempo disponible para activar la bombilla. Para una
frecuencia de red de 50 Hz, cada ciclo de la onda rectificada dura 10 ms. Si quiere activarse
la bombilla durante 8 ms por ciclo (80%), tras un paso por cero el microcontrolador cuenta
2 ms con la bombilla apagada. Tras esto, activa la bombilla hasta el prximo ciclo mientras
pregunta por otro paso por cero. Si la resistencia de polarizacin fuera de 100 k, el
microcontrolador detectara el mismo paso por cero en 3 ms antes de finalizar su cuenta de
8 ms, lo que provoca un fallo de control. Este problema se soluciona por software, evitando
que el microcontrolador atienda su entrada de paso por cero hasta que el nivel del pulso
sea nulo. As se asegura que el pulso finaliza antes de volver a preguntar por el siguiente
pulso.
Fig. 4.20. Pulso de paso por cero con resistencia de polarizacin del fotodiodo de 51 k
69
Fig. 4.21. Pulso de paso por cero con resistencia de polarizacin del fotodiodo de 100 k
4.4.3.
En la Fig. 4.22 puede verse el esquema de la parte de control del circuito receptor. El
mdulo transmisor se encarga de enviar el cdigo recibido por radiofrecuencia al
microcontrolador maestro (PIC12F675) por su patilla GP2. Las entradas GP3 y GP4 se
dedican a los pulsadores de reset y asociacin respectivamente. As mismo se dedica la
70
salida GP5 para el diodo led que indica la entrada en modo asociacin, y las salidas GP0 y
GP1 de comunicacin con el microcontrolador esclavo (Tabla 4.2).
GP0
GP1
GP2
GP3
GP4
GP5
GP0
GP1
GP2
GP3
GP4
GP5
SALIDA DE CONFIRMACIN
ENTRADA DETECCIN DE PASOS POR CERO
SALIDA PARA PWM
ENTRADA PULSADOR DE RESET
ENTRADA DE COMUNICACIN (INTENSIDAD)
ENTRADA DE COMUNICACIN (INTENSIDAD)
GP4
0
1
0
1
FUNCIN
Luz apagada
Nivel 1
Nivel 2
Nivel 3
Cada vez que el microcontrolador esclavo recibe los niveles lgicos en sus entradas
GP4 y GP5, ste enva por su salida GP0 la seal que confirma que ha recibido e
interpretado el cdigo. El microcontrolador maestro recibe esta seal por la entrada del
pulsador de asociacin (GP4) por la falta de pines. A pesar de ello no se producen
71
problemas, ya que nunca se puede producir una nueva asociacin mientras se controla la
bombilla.
Una vez el microcontrolador esclavo recibe el nivel de intensidad, debe generar la
seal cuadrada correspondiente al nivel de luz segn la Tabla 4.5.
Tiempo a nivel bajo (ms)
5
3
0
Rango
1 (50%)
2 (70%)
3 (100%)
Tabla 4.5. Tiempos para la PWM de salida en funcin del nivel de intensidad de luz
72
GND
Vdd
RECEPTOR RF AC-RX4
OUT
Vcc
DATOS
220n
73
in out
1k
BOTN ASOCIACIN
RANGORECIBIDO(OUT)
Vdd
LED ASOCIAR
2.7k
220n
Vdd
Vdd
10k
GP3
GP2
GP1
GP0
GP5
GP4
Vss
Vdd
PIC12F675
2.7k
GND
56k
TP
GND
GND
IN
Vcc
ANTENA
BOTN RESET
DATOS
56k
bit de rango 1
bit de rango 0
LED POWER
Vdd
GP3
GP4
GP5
Vdd
GP2
GP1
GP0
Vss
PIC12F508
220n
56k
41
GND
OPTOTRIAC (OUT)
RANGORECIBIDO(OUT)
RUTINA PRINCIPAL
PRECARGA DE VALORES
CONFIGURACIN DE REGISTROS
NO
PRIMERA
SI
ASOCIACIN
VEZ
NO
RUTINA
SI
RUTINA
ASOCIACIN
SI
ASOCIACIN
ASOCIACIN
NO
RECIBO
NO
CDIGO
SI
RUTINA RECEPCIN
CDIGO
SI
FALLO
NO
RUTINA
LUMINOSIDAD
74
75
UNO
CERO
CARRY = 1
CARRY = 0
RETURN
RETURN
76
Cada bit recibido se guarda en el bit C (carry) del registro STATUS, y se rota la
variable utilizada en la recepcin de cada byte (cdigo).
Una vez se ha recibido un byte completo, lo cual se sabe mediante una variable
empleada que cuenta cuando se han recibido 8 bits, se ha de preguntar por el modo de
funcionamiento. As el microcontrolador sabr si debe almacenar el byte recibido en la
rutina ASOCIAR (modo asociacin) verificar su coincidencia con el valor de su EEPROM en
la rutina NO_ASOCIAR (modo normal). En ambos casos, la operacin se realiza tras la
recepcin de cada uno de los bytes, utilizndose bits de control para conocer qu byte
llega.
Los bytes recibidos se guardan siempre en memoria EEPROM de datos. En la primera
posicin se guarda la variable que anuncia si se est asociado o no con un emisor. En caso
afirmativo, el valor guardado ser F0h. Este valor se guarda en el momento de la
asociacin. Adems, el receptor debe guardar los dos cdigos de emisor para conocer a su
interlocutor, as como su propio cdigo de receptor que gener aleatoriamente el emisor
(Fig. 4.27).
Al finalizar la llegada de todos los bytes se comprueba si han llegado los cuatro, y si el
contador de bits ha llegado a 32. En caso afirmativo se para el timer 1 y se inhabilita su
interrupcin. En caso contrario se activa un bit de fallo y se espera la interrupcin del timer
1.
77
Fig. 4.27. Descripcin de las posiciones EEPROM del microcontrolador maestro receptor
78
RECEPCIN CDIGOS
INICIALIZO TIMER 0
FLAG INTERRUPCIN TIMER 0=0
ACTIVO TIMER 1
NO
BIT
SI
NO
FIN CUENTA
TIMER 0
SI
FLAG INTERRUPCIN TIMER 0 =0
SI
GP2=0
NO
UNO
CERO
4 BYTES
NO
SI
ACTIVO BIT
NO
32 BITS
8 BITS
SI
DE FALLO
CONTADOR=8
SI
PARAR TIMER 1
INHABILITAR LA
NO
INTERRUPCIN TIMER 1
MODO
SI
ASOCIACIN
NO_ASOCIAR
VOLVER
79
ASOCIAR
Fig. 4.29):
Espera la llegada de los 4 bytes. Cuando llega el primer bit, salta a la rutina de
recepcin del cdigo de asociacin.
RUTINA ASOCIACIN
SALIR MODO
NO
LLEGA CDIGO
ASOCIACIN
SI
SI
RUTINA RECEPCIN
CDIGO
80
SUBRUTINA ASOCIAR
SEGUNDO CODIGO
SI
CDIGO N2
EMISOR=CODIGO RECIBIDO
NO
CODIGO RECEPTOR=CODIGO
SI
CDIGO N3
RECIBIDO
NO
CDIGO N4
NO
SI
CDIGO==0xFF
SI
NO
PRIMER CODIGO
GUARDO VARIABLES
EMISOR=CODIGO RECIBIDO
EN EEPROM
VOLVER
81
Los tres primeros bytes se validan comparndolos con los bytes guardados en
memoria EEPROM. En caso de no coincidir alguno de ellos se activa el bit de
fallo. Este bit se chequear en la rutina principal.
CDIGO N2
SI
COINCIDEN
SI
NO
NO
CDIGO N3
ACTIVO BIT DE
SI
FALLO
NO
CODIGO CONVERSOR
SI
COINCIDEN
CDIGO N4
SI
A/C=CODIGO RECIBIDO
NO
NO
PRIMER CODIGO
EMISOR=CODIGO RECIBIDO
NO
COINCIDEN
ACTIVO BIT DE
FALLO
SI
VOLVER
82
Se activa el bit TMR1IE del registro PIE1, que habilita la interrupcin del timer
1.
Se activa el bit PEIE del registro INTCON, que habilita las interrupciones de los
perifricos.
Se activa el bit GIE del registro INTCON, que habilita todas las interrupciones.
Al llegar el primer bit del cdigo se activa la cuenta del timer 1 mediante el bit
TMR1ON del registro T1CON.
SUBRUTINA INTERRUPCIN
TIMER 1
RETFIE
83
Una vez llega una transmisin vlida en el modo normal de funcionamiento se salta a
la rutina de LUMINOSIDAD. Esta rutina realiza las siguientes operaciones:
84
RUTINA LUMINOSIDAD
SI
RANGO 1
INDICO RANGO 1 AL
NO
GP4==1
MICROCONTROLADO
SI
NO
SI
RANGO 2
INDICO RANGO 2 AL
NO
GP4==1
MICROCONTROLADO
NO
SI
INDICO RANGO 3 AL
MICROCONTROLADO
NO
SI
GP4==1
ENCENDIDA
PRECARGO TIMER 1
NO
RECIBO
CDIGOS
SI
RECEPCIN CDIGOS
SI
FALLO
NO
INDICO AL
MICROCONTROLADOR
ESCLAVO APAGAR LA
VOLVER A RUTINA
PRINCIPAL
SI
NO
85
GP4==0
4.4.3.7.
86
RUTINA PRINCIPAL
ESCLAVO
****
CONFIGURO REGISTROS E
INICIALIZO VARIABLES
SI
RANGO 1
*
NO
SI
RANGO 2
**
NO
NO
SI
RANGO 3
RANGO 3 Y ENVO OK
***
ACTIVO SALIDA DE
CONFIRMACIN (GP0)
NO
NO
PASO POR
APAGAR
CERO
LUZ
SI
SI
NO
APAGO SALIDA
PASO POR
CERO
RUTINA TIMER 0
APAGO SALIDA
ACTIVO SALIDA
APAGO SALIDA DE
CONFIRMACIN
**
***
EN FUNCIN DEL
RANGO
87
****
SUBRUTINA TIMER 0
RESETEO REGISTRO DE
CUENTA (TMR0)
CARGO TMR0 EN
ACUMULADOR
TMR0==63
SI
NO
NO
FIN
CUENTA
GP4 Y GP5
SI
==0
SI
VOLVER
88
NO
El circuito de disparo (Fig. 4.36) dispone de un triac NXP BT137 como componente
principal para controlar la corriente por la bombilla. Este dispositivo es a su vez controlado
por un optotriac Sharp de la serie PC3SF11YVZ, que es a su vez controlado por el
microcontrolador esclavo (PIC12F508) del circuito de control. La principal misin del
optotriac es proporcionar aislamiento ptico entre el circuito de control (microcontrolador)
y el de potencia (triac).
BOMBILLA
OPTOTRIAC
2
nodo
A/K
H
L
GP2 (PIC12F508)
R2=20k
Ctodo
TRIAC
230Vac
NC
K/A
R1=20k
El triac funciona como un tiristor bidireccional con tres terminales. Esta caracterstica
le permite controlar el paso de corriente en ambos sentidos. El terminal de puerta (G) es el
89
terminal utilizado para provocar el disparo. El triac puede dispararse por corriente de
puerta positiva o negativa (Fig. 4.37). El bloqueo se produce cuando la corriente baja por
debajo del nivel de corriente de mantenimiento (IH).
Fig. 4.37. Caracterstica esttica V-I del triac y cuadrantes de disparo del triac.
I f m x triac =
100 W
= 0, 435 A
230 V
Por otro lado, no debe sobrepasarse la corriente mxima de cebado del optotriac.
Esta corriente es de 0,1 A, por lo que debe elegirse una resistencia para limitarla (R1). En el
laboratorio se han realizado pruebas con diferentes valores, eligindose finalmente una
resistencia de 20 k. La intensidad eficaz de puerta en el peor caso (sin tener en cuenta la
tensin en conduccin del optotriac) ser:
IG, max =
En la Fig. 4.38 y Fig. 4.39 pueden verse respectivamente los prototipos de emisor y
receptor finalizados. Para el diseo del PCB se utiliz el programa gratuito DesignSpark de
la empresa RS Components. Este software permite montar el circuito a partir de las
extensas libreras de componentes que posee, y realizar un rutado automtico de las
90
pistas. Adems permite obtener una vista en tres dimensiones del diseo realizado para
obtener una idea del resultado final.
Para simular los programas se utiliz el entorno de desarrollo MPLAB del fabricante
Microchip, as como el entorno de simulacin Proteus. Los programas fueron grabados con
el programador PICKit2 (Microchip). Un factor a tener en cuenta antes de la programacin
consiste en que estos microcontroladores guardan en su ltima direccin de memoria de
programa (1FFh para el PIC12F508 y 3FFh para el PIC12F675) el valor de calibracin de su
oscilador interno. Este valor (6 bits) viene grabado de fbrica y es necesario para ajustar la
91
92
93
94
Un valor grande del condensador de salida permite un menor rizado en la tensin (40
mVpp en este caso), teniendo el inconveniente de una mayor prdida por energa no
aprovechada durante transmisin (cola de descarga). Es por tanto un compromiso entre el
nivel de rizado que se necesita y la energa disponible.
La Fig. 4.43 muestra mejor la cada en la tensin de entrada (azul oscuro) al enviar
cada bit del cdigo. Tambin puede verse la inyeccin de corriente que demanda la bomba
de carga para obtener la tensin de salida y en la transmisin.
95
96
En las Fig. 4.47 a Fig. 4.49 pueden verse las seales de control entre el
microcontrolador maestro y el esclavo para los distintos niveles de luminosidad. Las
seales de entrada al microcontrolador esclavo (GP4 y GP5) le indican la PWM a generar. El
microcontrolador esclavo mantendr su salida GP0 a nivel alto hasta la recepcin de otro
cdigo vlido.
97
En la Fig. 4.50 puede verse la seal PWM al 50% sincronizada con los pulsos de paso
por cero. Posteriormente a la recepcin del cdigo se espera el siguiente paso por cero
para temporizar, en este caso, 5 ms antes de activar la salida GP2.
98
99
Para abordar este sistema habra que disear una nueva placa con un plano de masa
y un blindaje adecuado a las caractersticas de la aplicacin. Indicar que con posterioridad a
la fabricacin y prueba del prototipo se encontr un nuevo documento con las
especificaciones del plano de masa que debe rodear el mdulo receptor RF (Fig. 4.53).
100
101
102
103
104
Es necesario modificar el diseo emisor para conseguir una carga rpida del
microcontrolador, que evite perder ms de 30 ms desde la activacin del
pulsador hasta que se consigue la estabilizacin de la tensin de alimentacin.
105
106
6. Presupuesto.
El presupuesto para ambos sistemas consta de dos partes: una para los componentes
utilizados en el diseo y otra para los servicios de ingeniera. sta ltima incluye los costes
del diseo, bsqueda de componentes, montaje y prueba de los circuitos.
Componente
Panel solar
Pulsador
Diodo Schottky STM
STPS1L30U
Regulador MAX666
Encoder Holtek 6014
Transmisor RF Aurel
Antena RF 433 MHz
Soporte antenna RF
Otros*
PRECIO BASE
IVA (18%)
TOTAL
1
1
1
1
1
Precio total ()
5
3
0,30
4,66
1,69
6,17
5,29
1,21
2
24,85
4,47
29,32
* precio estimado
Componente
Decoder Holtek 6034
Microcontrolador PIC
12F508
Mdulo receptor
Aurel AC-RX2
Antena RF 433 MHz
Soporte antena RF
SOLUTIONS SCRTM4RA
Fototriac Sharp
pc3sf11yvz
Triac NXP BT137
Otros*
PRECIO BASE
IVA (18%)
Precio total ()
1,73
0,73
5,05
5,05
5,29
1,21
5,29
1,21
1,22
1,22
0,6
0,60
3
15,96
2,87
107
TOTAL
18,83
* precio estimado
El precio del panel solar se ha estimado al existir una oferta muy variada. Tambin se
ha estimado el precio de componentes generales, como resistencias y condensadores.
PRESUPUESTO INGENIERA
Precio hora trabajada (/h)
Nmero de horas (8 h/da,
5 das laborables/semana, 2 meses)
PRECIO BASE
IVA (18%)
TOTAL
40
320
12800
2304
15104
24,85
15,96
12800
12840,81
2311,34
15152,15
Componente
Panel solar
Pulsador
Microcontrolador
PIC12F675
Diodo Schottky STM
STPS1L30U
Condensador SD,0.1F
5.5V vertical
Bomba de carga
MCP1252-33X50I/MS
Precio total ()
5
3
1,58
0,30
1,20
1,79
1,79
1,662
1,662
108
Potencimetro 1K
Transmisor RF Aurel
Antena RF 433 MHz
Soporte antena RF
SOLUTIONS
Otros*
PRECIO BASE
IVA (18%)
TOTAL
2,12
6,17
5,29
1,21
1
1
1
1
2,12
6,17
5,29
1,21
2
26,27
4,73
31
* precio estimado
Componente
Pulsador
Fusible 0.5 A
Portafusible
Microcontrolador PIC
12F508
Microcontrolador
PIC12F675
Diodo Schottky STM
STPS1L30U
AC/DC Converter NonIsol. 12V 100mA
Diodo
Optoacoplador Vishay
4n37
Mdulo receptor
Aurel AC-RX2
Antena RF 433 MHz
Soporte antena RF
SCRTM4RA
Fototriac Sharp
pc3sf11yvz
Triac NXP BT137
Diodo LED
Otros*
PRECIO BASE
IVA (18%)
TOTAL
Precio total ()
2
0,4
1,2
0,73
1,58
1,58
0,30
0,30
5,89
5,89
1,7
0,37
4
1
6,8
0,37
5,05
5,05
5,29
1,21
5,29
1,21
1,22
1,22
0,6
0,5
1
2
0,6
1
3
31,36
5,64
37
* precio estimado
109
PRESUPUESTO INGENIERA
Precio hora trabajada (/h)
Nmero de horas (8 h/da,
5 das laborables/semana, 4 meses)
PRECIO BASE
IVA (18%)
TOTAL
40
640
25600
4608
30208
26,27
31,36
25600
25657,63
4618,37
30276
110
7. Referencias.
[1]
[2]
[3]
[4]
[5]
[6]
Energy Scavenging for Mobile and Wireless Electronics. Joseph A. Paradiso. MIT. Thad
Starner. Georgia Institute of Technology.
[7]
[8]
Pgina de modelos GPS alimentados con energa solar de la empresa Telemetry Solutions:
http://www.telemetrysolutions.com/solar-power.php.
[9]
Millimeter-Scale Nearly Perpetual Sensor System with Stacked Battery and Solar Cells.
Gregory Chen, Matthew Fojtik, DaeyeonKim, David Fick, JunsunPark, MingooSeok, MaoTerChen, ZhiyoongFoo, Dennis Sylvester, David Blaauw. Electrical Engineering & Computer
Science Department. The University of Michigan, Ann Arbor.
[10]
[11]
[12]
111
http://www.elektrobock.cz/en/solar-wireless-
112
Anexos.
Anexo 1: Esquemas elctricos y lista de componentes.
APLICACIN 1: EMISOR
113
APLICACIN 1: RECEPTOR
114
115
APLICACIN 2: EMISOR
116
APLICACIN 2: RECEPTOR
10
BP5041A1
Vin
GND
Fusible 0.5 A
1 2
L78L05
Vcc
Vout
10
V+
220u
0.1u/400V
33u
10u/450V
FREQ = 50
VAMPL = 311
GND
V-
Vcc
100k
V+
4N37
1k
GP1 (PIC12F508)
V-
BOMBILLA
OPTOTRIAC
nodo
A/K
H
L
GP2 (PIC12F508)
20k
Ctodo
TRIAC
NC
K/A
20k
117
230Vac
GND
Vdd
RECEPTOR RF AC-RX4
Vcc
OUT
DATOS
220n
GND
IN
Vcc
ANTENA
118
in out
1k
BOTN ASOCIACIN
RANGORECIBIDO(OUT)
Vdd
LED ASOCIAR
2.7k
220n
Vdd
Vdd
GP2
GP3
10k
GP1
GP0
GP5
GP4
Vss
Vdd
PIC12F675
2.7k
GND
56k
TP
GND
in out
BOTN RESET
DATOS
56k
bit de rango 1
bit de rango 0
LED POWER
Vdd
GP3
GP4
GP5
Vdd
GP2
GP1
GP0
Vss
PIC12F508
220n
56k
41
GND
OPTOTRIAC (OUT)
RANGORECIBIDO(OUT)
119
120
p=12F508
#include <p12F508.inc>
ENDC
;**********************************************************************
ORG
0x1FF
ORG
0x000
; Vector de reset
movwf OSCCAL
; Comienzo del programa
start
movlw b'111101'
tris GPIO
movlw
b'11010111'
option
movlw 0x27
movwf contador
bcf GPIO,1
; Apago el timbre.
salto
btfss GPIO,4
goto salto
bsf GPIO,1
; Enciendo el timbre.
call espera
; Realizo la temporizacin
bcf GPIO,1
; Apago el timbre.
final
btfsc GPIO,4
goto final
goto salto
; Rutina del timer 0
espera
clrf TMR0
; Inicio timer 0
salto1
movf TMR0,w
xorlw .250
btfss STATUS,Z
goto salto1
decfsz contador,1
goto espera
movlw 0x27
movwf contador
retlw 0x00
END
121
122
p=12F675
#include <p12F675.inc>
errorlevel -302
__CONFIG _CP_ON & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
; Declaracin de variables a partir de la 0x20
CBLOCK 0x20
n_disp
codigo_ID1
codigo_ID2
codigo_rec1
codigo_rec2
codigo_ADC
semilla
codigo
bits
bits_wait
semilla_copia
ENDC
;******************************************************************************************
ORG
0x000
goto start
ORG
0x004
call interrupt
RETFIE
;******************************************************************************************
;*********************************COMIENZO DEL PROGRAMA**********************************
;******************************************************************************************
; Leo el valor de calibracin del oscilador interno (direccin 0x3FF)
start
bsf
STATUS,RP0
call 0x3FF
movwf OSCCAL
;******************************************************************************************
; CONFIGURACIN DE REGISTROS
123
banksel GPIO
clrf GPIO
; Inicializo GPIO.
banksel ANSEL
movlw 0x38
; Valor 111000 (GP4 como entrada analgica y reloj derivado del oscilador interno a 500 kHz).
movwf ANSEL
banksel CMCON
movlw 0x07
; Comparador deshabilitado.
movwf CMCON
movlw 0x0C
; Valor 00001100 (A/D justificado a la izquierda, Vref=Vdd, Canal 3 para lectura ADC (AN3)).
movwf ADCON0
; NO OLVIDAR PONER ADON=0 una vez realizada la conversin (alimentacin del mdulo ADC).
banksel TRISIO
movlw 1Eh ; Valor del puerto 011110.
; GP0: salida digital para enviar los cdigos.
; GP1: entrada digital para el pulsador de programacin.
; GP2: entrada digital para el pulsador del receptor 1.
; GP3: entrada digital para el pulsador del receptor 2.
; GP4: entrada analgica para la toma del dato del A/D (AN3).
; GP5: salida de activacin de la bomba de carga.
movwf TRISIO
movlw 0xC0
movwf INTCON
bcf GPIO,0
movlw 0x02
OPTION
banksel GPIO
;******************************************************************************************
; INICIALIZACIN DE VALORES
valores
movlw 0xFF ; Cargo los valores de codigo_ID1 y de codigo_ID2 (valores fijos).
movwf codigo_ID1
movlw 0xF0
movwf codigo_ID2
clrf bits
bcf GPIO,5
; Transmisor deshabilitado.
bcf bits_wait,0
;******************************************************************************************
cargar_EEPROM
; Primero cargo el nmero de dispositivos (n_disp) para ver si tengo que realizar todo el ciclo.
movlw 0x00
movwf addr
call leer_EEPROM
movwf n_disp
; Comprobacin del nmero de dispositivos asociados.
movf n_disp,0
124
xorlw 0xFF
btfss STATUS,Z
goto bucle
; NO
clrf n_disp
;******************************************************************************************
; PREGUNTO POR LOS PULSADORES
bucle
btfss GPIO,1
goto bucle_1
goto programacin
bucle_1
btfss GPIO,2
goto bucle_2
goto pulsador_1
bucle_2
btfss GPIO,3
goto bucle
goto pulsador_2
;******************************************************************************************
; PULSADOR_1 ACTIVADO
; Camino del pulsador_1.
; Pregunto por el valor de n_disp.
pulsador_1
movf n_disp,0
xorlw 0x02
btfss STATUS,Z
goto n_disp_11
bcf STATUS,Z
transmision
; Leo de la EEPROM el byte del receptor_1.
bsf GPIO,5
; Transmisor RF habilitado.
call espera
call wait_for_T0
call espera
call wait_for_T0
movlw 0x01
; Leo'codigo_rec1' de la EPROM.
movwf addr
call leer_EEPROM
movwf codigo_rec
call conversion
goto seguir_22
bcf STATUS,Z
goto transmision
125
;******************************************************************************************
; PULSADOR_2 ACTIVADO
; Camino del pulsador_2.
; Pregunto por el valor de n_disp.
pulsador_2
movf n_disp,0
xorlw 0x02
btfss STATUS,Z
goto DORMIR
bcf STATUS,Z
bsf GPIO,5
; Transmisor habilitado.
call espera
call wait_for_T0
call espera
call wait_for_T0
; Leo de la EEPROM el valor del receptor_2.
movlw 0x02 ; Leo'codigo_rec2' de la EPROM.
movwf addr
call leer_EEPROM
movwf codigo_rec
; Realizo conversin del ADC
call conversion
; Conversin AD.
;******************************************************************************************
; CARGA DEL CDIGO A ENVIAR
seguir_22
movf codigo_ID1,0
movwf codigo
bsf bits,4
goto enviar_COD
; Envo el byte.
seguir_222
movf codigo_ID2,0
movwf codigo
goto enviar_COD
; Envo el byte.
seguir_333
movf codigo_rec,0
movwf codigo
bsf bits,7
btfss bits,5
; Modo programacin?.
goto send
bsf bits,2
; SI
send
goto enviar_COD
; Envo el byte.
seguir_444
movf codigo_ADC,0
movwf codigo
bsf bits,6
goto enviar_COD
; Envo el byte.
;******************************************************************************************
126
; PULSADOR_PROGRAMACION ON
programacion
bsf bits,5
movf n_disp,0
xorlw 0x02
btfss STATUS,Z
goto pos
movf n_disp,w
movwf EEDATA
call escribir_EEPROM
goto DORMIR
;*********************************************************************
pos
; Cargo la variable semilla.
movlw 0x03 ; Leo 'semilla' de la EEPROM.
movwf addr
call leer_EEPROM
movwf semilla
movwf semilla_copia
; Pregunto si el nmero de dispositivos es 1.
movf n_disp,0
xorlw 0x01
btfss STATUS,Z
goto sem_2
; Genero cdigo aleatorio (cdigo del nuevo receptor).
; En funcin de si n_disp es 0 1 se entrar en una parte o en otra.
sem_1
; n_disp=1.
movlw 0x05
addwf semilla,1
swapf semilla,1
rlf semilla,1
sem_2
; n_disp=0.
rlf semilla,1
rlf semilla,1
movlw 0x02
addwf semilla,1
rrf semilla,1
rrf semilla,1
rrf semilla,1
rrf semilla,1
swapf semilla,1
; Verifico si coincide con el anterior valor de semilla.
movf semilla,0
xorwf semilla_copia,0
btfss STATUS,Z
goto sigo
bcf STATUS,Z
127
clrf semilla
; Fin de generacin del nuevo identificador aleatorio.
sigo
movf semilla,0
movwf codigo_rec
; Pregunto qu nmero de dispositivo ha sido el ltimo en aadirse.
pos_22
movf n_disp,0
xorlw 0x00
btfss STATUS,Z
goto dos
; Se aade el primer dispositivo.
uno
bsf STATUS, RP0
movf semilla,w
movwf EEDATA
call escribir_EEPROM
goto save
; Se aade el segundo dispositivo.
dos
bsf STATUS, RP0
movf semilla,w
movwf EEDATA
call escribir_EEPROM
; Guardar semilla y n_disp.
save
bsf GPIO,5
; Transmisor habilitado.
movf semilla,w
movwf EEDATA
call escribir_EEPROM
incf n_disp
movf n_disp,w
movwf EEDATA
movlw 0x00
; Guardo n_disp.
movwf EEADR
call escribir_EEPROM
goto seguir_22
; Envo el cdigo.
prog_end
clrf bits
fin_prog
goto DORMIR
; Finalizo.
;******************************************************************************************
; CONTROL DE LA SECUENCIA DE ENVO DE LOS CDIGOS
saltito
128
call espera
call wait_for_T0
call espera
call wait_for_T0
; Compruebo el cdigo a enviar
regreso_1
btfss bits,4
; SI.
goto seguir_222
jumpy
btfss bits,7
goto seguir_333
jumpy1
btfss bits,5
goto cod_ADC
btfss bits,2
goto prog_end
bcf bits,2
movlw 0xFF
movwf codigo
goto enviar_COD
cod_ADC
btfss bits,6
; codigo_ADC enviado?.
goto seguir_444
regreso
clrf bits
goto DORMIR
; Finalizo transmisin.
;******************************************************************************************
; ENVO DEL CDIGO DE 8 BITS
enviar_COD
; Comienzo envo cdigo
btfss codigo,0
; Bit 0
goto no
call salida_si
goto sig0
no
call salida_no
sig0
btfss codigo,1
; Bit 1
goto no1
call salida_si
goto sig1
no1
call salida_no
sig1
btfss codigo,2
; Bit 2
goto no2
call salida_si
goto sig2
129
no2
call salida_no
sig2
btfss codigo,3
; Bit 3
goto no3
call salida_si
goto sig3
no3
call salida_no
sig3
btfss codigo,4
; Bit 4
goto no4
call salida_si
goto sig4
no4
call salida_no
sig4
btfss codigo,5
; Bit 5
goto no5
call salida_si
goto sig5
no5
call salida_no
sig5
btfss codigo,6
; Bit 6
goto no6
call salida_si
goto sig6
no6
call salida_no
sig6
btfss codigo,7
; Bit 7
goto no7
call salida_si
goto sig7
no7
call salida_no
sig7
bcf GPIO,0
; Fin de transmisin
goto saltito
;******************************************************************************************
; FIN DEL PROGRAMA
DORMIR
bcf GPIO,5
; Transmisor RF desconectado.
sleep
FINAL
goto FINAL
130
;**********************************************************************************
;**********************************SUBRUTINAS**************************************
;**********************************************************************************
; CONVERSIN DEL ADC
conversion
banksel ADCON0
bsf ADCON0,0
nop
nop
nop
conv_AD
bsf ADCON0,1
conv_fin
btfsc ADCON0,1
goto conv_fin
movf ADRESH,w
movwf codigo_ADC
bcf ADCON0,0
return
;**********************************************************************************
; SUBRUTINAS DE CONTROL DE LOS BITS
salida_si
bsf GPIO,0
; Bit 0=1.
call espera
call wait_for_T0
bcf GPIO,0
call espera
call wait_for_T0
return
salida_no
bsf GPIO,0
; Bit 0=0.
call espera
call wait_for_T0
call espera
call wait_for_T0
bcf GPIO,0
call espera
call wait_for_T0
return
;**********************************************************************************
; SUBRUTINA DE LECTURA DE LA EEPROM
leer_EEPROM
bsf STATUS,RP0
; Banco 1.
movf addr,w
movwf EEADR
bsf EECON1,RD
; Bit de lectura a 1.
movf EEDATA,W
bcf STATUS,RP0
; Banco 0.
return
;**********************************************************************************
131
; Banco 1.
bsf EECON1,WREN
; Permito escritura.
bcf INTCON,GIE
movlw 55h
;Deshabilito interrupciones.
; Desbloquear escritura.
movwf EECON2 ;
movlw 0xAA ;
movwf EECON2 ;
bsf EECON1,WR
; Comienzo escritura.
wait_EEPROM
btfsc EECON1,WR
goto wait_EEPROM
bsf INTCON,GIE
; Habilito interrupciones.
bcf STATUS,RP0
; Banco 0.
return
;**********************************************************************************
; SUBRUTINA DE HABILITACIN DE INTERRUPCIN Y PRECARGA DE TIMER 0
espera
; Habilito interrupcin de timer 0
bcf INTCON,T0IF
bsf INTCON,T0IE
bsf INTCON,GIE
; Habilito interrupciones
movwf TMR0
return
;**********************************************************************************
; SUBRUTINA DE CONTROL DE INTERRUPCIN DE TIMER 0
interrupt
; Pregunto por bit de interrupcin de timer 0
btfss INTCON,T0IF
; Interrupcin de timer_0?
goto volver
bcf INTCON,T0IF
bcf INTCON,T0IE
bsf bits_wait,0
volver
return
;**********************************************************************************
; SUBRUTINA DE ESPERA DE INTERRUPCIN DE TIMER 0
wait_for_T0
btfss bits_wait,0
goto wait_for_T0
bcf bits_wait,0
return
END
132
list
p=12F675
#include <p12F675.inc>
errorlevel -302
__CONFIG _CP_ON & _CPD_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
; Declaracin de variables a partir de la 0x20
CBLOCK 0x20
dispositivo ; Variable para saber si ya est asignado a un emisor.
codigo
codigo_ID1
codigo_ID2
codigo_rec
codigo_ADC
bits
bits_2
bits_fin_rec
addr
contador_bits
; Contador para contar los bits que me llegan de cada cdigo (byte).
contador_total
; Cuenta el nmero de bits totales (han de ser 32 bits, 4 bytes de 8 bits cada uno).
ENDC
;**********************************************************************
; Descripcin memoria EEPROM.
; 00h: 'dispositivo'
; 01h: 'codigo_ID1'
; 02h: 'codigo_ID2'
; 03h: 'codigo_rec'
;**********************************************************************
133
; NIVELES
; GP0 GP1
; 0
-> APAGAR
; 0
-> RANGO 1
; 1
-> RANGO 2
; 1
-> RANGO 3
ORG
0x000
goto start
; ZONA DE INTERRUPCIONES
ORG
0x004
call interrupt
RETFIE
;**********************************************************************
; COMIENZO DEL PROGRAMA.
start
bsf
STATUS,RP0
call 0x3FF
movwf OSCCAL
; CONFIGURACIN DE REGISTROS.
bcf STATUS,RP0
; Banco 0.
clrf GPIO
; Inicializo GPIO.
; Banco 1.
movlw 1Ch ; GP0: salida de comunicacin con PIC12F508 para determinar rango.
; GP1: salida de comunicacin con PIC12F508 para determinar rango.
; GP2: entrada de recibir cdigos.
; GP3: entrada para pulsador reset.
; GP4: entrada para pulsador de asociacin y para recibir OK del PIC12F508 sobre el rango.
; GP5: salida para el LED de asociacin.
movwf TRISIO
movlw 0x02
OPTION
bcf STATUS,RP0
; Banco 0.
; Inicializacin de variables
valores
bcf GPIO,5
bcf GPIO,0
bcf GPIO,1
valores_1
134
clrf bits
clrf bits_2
clrf bits_fin_rec
clrf codigo
movlw 0x08
movwf contador_bits
clrf contador_total
; Inicializo contador de bits totales que recibo en una transmisin (debo recibir 32 bits en total).
call precarga_T1
;************************************************************************
; COMIENZO PROGRAMA
;************************************************************************
cargar_EEPROM
; Primero cargo el valor de 'dispositivo' de la EEPROM para ver si est asociado a un emisor.
movlw 0x00
movwf addr
call leer_EEPROM
movwf dispositivo
movf dispositivo,0
xorlw 0xF0
btfss STATUS,Z
goto bucle_programm ; Pregunto solo por el pulsador de asociacin.
bcf STATUS,Z
; Receptor asociado.
call cargar_cod
goto bucle_prog
; La primera vez pregunto solo por el pulsador de asociacin.
bucle_programm
btfss GPIO,4
; Asociacin o no?.
goto bucle_programm_1
call precarga_T1
bsf T1CON,TMR1ON
; Cuenta timer 1.
glitches
btfss bits_fin_rec,6
goto glitches
bcf bits_fin_rec,6
goto programacion
;**********************************************************
; Con el receptor ya asociado pregunto por el estado de las dos entradas.
bucle_prog
btfss GPIO,4
goto bucle_11
; Asociacin o no?.
; Pregunto por la recepcin.
bucle_prog_1
btfsc GPIO,4
goto bucle_prog_1
call precarga_T1
135
bsf T1CON,TMR1ON
; Cuenta timer 1.
glitches_1
btfss bits_fin_rec,6
goto glitches_1
bcf bits_fin_rec,6
goto programacion
bucle_11
btfss GPIO,2
; Cdigos ?.
goto bucle_prog
call get_code
clrf bits
;******************************************************************
; VERIFICACIN DE LOS CDIGOS OBTENIDOS ESTANDO LA BOMBILLA APAGADA
;******************************************************************
verificar_OFF
; Pregunto por el bit de fallo.
btfsc bits_2,7
; Hay fallo?.
goto fallo
goto LUMINOSIDAD
;*******************************************************************************
;*********************************************
; SALIDA NO VLIDA ESTANDO LA BOMBILLA APAGADA
;*********************************************
fallo
bcf bits_2,7
goto valores
;*******************************************************************************
; RUTINA DE CONTROL DE LOS RANGOS DE LUMINOSIDAD
;*******************************************************************************
; Pregunto por el rango de luz.
LUMINOSIDAD
; La bombilla estaba apagada -> pregunto por el rango de luminosidad que quiero.
bcf STATUS,C
movf codigo_ADC,0
sublw .80
btfss STATUS,C
goto sig_rango
bcf STATUS,C
; Precargo e inicio cuenta timer 1 por si no me llega el OK del microcontrolador esclavo.
precharge
bcf bits_2,7 ; Reseteo bit de fallo.
bcf bits_fin_rec,6
call precarga_T1
bsf T1CON,TMR1ON
; Cuenta timer 1.
; RANGO_1
bsf GPIO,1
136
bcf GPIO,0
; Espero desborde de timer 1 (no llega OK) o el OK de rango recibido por el esclavo.
error_desborde
btfsc bits_fin_rec,6
; Desborde de timer 1?
goto precharge
bcf T1CON,TMR1ON
call precarga_T1
; Fallo ?
error_desborde_2
bcf GPIO,1
bcf GPIO,0
precharge_1
bcf T1CON,TMR1ON
bcf bits_fin_rec,6
call precarga_T1
bsf T1CON,TMR1ON
; Cuenta timer 1.
error_desborde_1
btfsc bits_fin_rec,6
; Desborde ?
bcf T1CON,TMR1ON
goto valores_1
;********************************************
sig_rango
bcf STATUS,C
movf codigo_ADC,0
sublw .160
btfss STATUS,C
goto sig_rango_1
bcf STATUS,C
; Precargo e inicio cuenta timer 1 por si no me llega el OK del microcontrolador esclavo
precharge_11
bcf bits_2,7 ; Reseteo bit de fallo.
bcf bits_fin_rec,6
call precarga_T1
bsf T1CON,TMR1ON
; Cuenta timer 1.
; RANGO_2
bcf GPIO,1
bsf GPIO,0
; Espero desborde de timer 1 (no llega OK) o el OK de rango recibido.
137
error_desborde_11
btfsc bits_fin_rec,6
goto precharge_11
bcf T1CON,TMR1ON
call precarga_T1
; Fallo ?
error_desborde_22
bcf GPIO,1
bcf GPIO,0
precharge_22
bcf T1CON,TMR1ON
bcf bits_fin_rec,6
call precarga_T1
bsf T1CON,TMR1ON
; Cuenta timer 1.
error_desborde_12
btfsc bits_fin_rec,6
; Desborde ?.
goto error_desborde_22
bcf T1CON,TMR1ON
goto valores_1
;********************************************
sig_rango_1
bcf STATUS,C
movf codigo_ADC,0
sublw .255
btfss STATUS,C
goto cargar_EEPROM
bcf STATUS,C
; Precargo e inicio cuenta timer 1 por si no me llega el OK del microcontrolador esclavo.
precharge_111
bcf bits_2,7 ; Reseteo bit de fallo.
bcf bits_fin_rec,6
call precarga_T1
bsf T1CON,TMR1ON
; Cuenta timer 1.
; RANGO_3
bsf GPIO,1
bsf GPIO,0
; Espero desborde de timer 1 (no llega OK) o el OK de rango recibido.
138
error_desborde_111
btfsc bits_fin_rec,6
goto precharge_111
bcf T1CON,TMR1ON
call precarga_T1
; Fallo ?.
error_desborde_222
bcf GPIO,1
bcf GPIO,0
precharge_222
bcf T1CON,TMR1ON
bcf bits_fin_rec,6
call precarga_T1
bsf T1CON,TMR1ON
; Cuenta timer 1.
error_desborde_13
btfsc bits_fin_rec,6
; Desborde ?.
bcf T1CON,TMR1ON
goto valores_1
; Fin de rutina LUMINOSIDAD
;*******************************************************************************
; RUTINA DE ASOCIACIN CON EMISOR (MODO ASOCIACIN)
;*******************************************************************************
programacion
; Bit de programacin ON
bsf bits,7
; Bit de asociacin a 1.
; Inicio programacin
bsf GPIO,5
btfsc bits_fin_rec,1
goto end_prog
; Pregunto si hay recepcin o pulsacin del botn de asociacin (abortar modo asociacin).
arrep
btfss GPIO,4 ; Salir del modo asociacin?.
goto no_arrep
arrep_1
btfsc GPIO,4 ; Espero a fin de pulsacin.
139
goto arrep_1
goto end_prog
no_arrep
btfss GPIO,2 ; Se reciben cdigos de asociacin?.
goto arrep
; Recepcin cdigo del modo asociacin.
call get_code
btfss bits_fin_rec,7
goto out
goto end_prog
goto end_prog
movf codigo_ID1,w
movwf EEDATA
call escribir_EEPROM
;**********************************************
bsf STATUS, RP0
movf codigo_ID2,w
movwf EEDATA
call escribir_EEPROM
;**********************************************
bsf STATUS, RP0
movf codigo_rec,w
movwf EEDATA
call escribir_EEPROM
;**********************************************
bsf STATUS, RP0
call escribir_EEPROM
; Fin modo asociacin.
end_prog
goto valores ; Vuelvo al inicio para cargar todos los valores iniciales
;*******************************************************************************
; ****************************** SUBRUTINAS ************************************
;*******************************************************************************
;*******************************************************************************
; RUTINAS DE GESTIN DEL CDIGO RECIBIDO
140
;*******************************************************************************
; Es un 1
salida_si
incf contador_total
bsf STATUS,C
rrf codigo
return
; Es un 0
salida_no
incf contador_total
bcf STATUS,C
rrf codigo
return
;*******************************************************************************
; SUBRUTINA DE LECTURA DE LA EEPROM
;*******************************************************************************
leer_EEPROM
bsf STATUS,RP0
;Banco 1.
movf addr,w
movwf EEADR
bsf EECON1,RD
;Bit de lectura a 1.
movf EEDATA,W
bcf STATUS,RP0
;Banco 0.
return
;*******************************************************************************
; SUBRUTINA DE ESCRITURA DE LA EEPROM
;*******************************************************************************
escribir_EEPROM
bsf STATUS,RP0
;Banco 1.
bsf EECON1,WREN
;Permito escritura.
bcf INTCON,GIE
;Deshabilito interrupciones.
;Comienzo escritura.
wait_EEPROM
btfsc EECON1,WR
goto wait_EEPROM
bsf INTCON,GIE
;Habilito interrupciones.
bcf STATUS,RP0
;Banco 0.
return
;*******************************************************************************
; SUBRUTINA PARA CARGAR CDIGOS DE EMISOR Y RECEPTOR.
;*******************************************************************************
; Si el receptor est asociado a un emisor, cargo los cdigos desde la EEPROM
cargar_cod
141
; Realizo 58 cuentas
movwf TMR0
return
;*******************************************************************************
; RUTINA DE CONTROL DE LLEGADA DE LOS BITS
;*******************************************************************************
get_code
bsf bits_fin_rec,5
clrf TMR0
; Reseteo TMR0.
bcf INTCON,T0IF
overflow
btfss INTCON,T0IF
goto overflow
; NO -> Espero.
bcf INTCON,T0IF
; Es un 1.
call salida_no
; Es un 0.
goto siguiente
uno
call salida_si
siguiente
decfsz contador_bits
goto wait_zero
142
movlw 0x08
movwf contador_bits
btfss bits,7
; Modo asociacin?.
goto byte_noprog
; NO.
call reception_prog
; SI.
goto fin_def
byte_noprog
call reception_noprog ; Modo normal.
fin_def
btfss bits_fin_rec,0
goto wait_zero
bcf bits_fin_rec,0
goto lastback
wait_zero
btfsc GPIO,2 ; Espero a que la entrada sea 0.
goto wait_zero
goto loop
fail
btfss bits_fin_rec,6
; Fallo ?
goto loop
bcf bits_fin_rec,6
goto fail_2
; Compruebo por si acaso si me han llegado 32 bits.
lastback
movf contador_total,0
xorlw 0x20 ; Me han llegado 32 bits?.
btfss STATUS,Z
goto fail_2
; NO.
bcf STATUS,Z
; SI.
goto back_99
fail_2
bsf bits_2,7 ; Indico FALLO.
back_99
bcf T1CON,TMR1ON
; Paro timer 1.
clrf INTCON
bcf bits_fin_rec,5
clrf contador_total
; Inicializo contador del nmero total de bits en una transmisin (32 bits).
movlw 0x08
movwf contador_bits
return
;*******************************************************************************
; RUTINA DE RECEPCIN DE CDIGOS EN MODO PROGRAMACIN
;*******************************************************************************
reception_prog
btfss bits,4
goto jumpy_1
movf codigo,0
; Se ha recibido codigo_ID2.
movwf codigo_ID2
bcf bits,4
bsf bits,5
goto back_getcode
jumpy_1
143
btfss bits,5
goto jumpy_3
movf codigo,0
; Se ha recibido codigo_rec.
movwf codigo_rec
bcf bits,5
bsf bits,6
goto back_getcode
jumpy_3
btfss bits,6
goto jumpy_2
bcf bits,6
movf codigo,0
xorlw 0xFF
btfss STATUS,Z
goto back_getcode_err ; No es un cdigo de programacin -> salgo sin guardar.
bcf STATUS,Z
goto back_getcode_def
jumpy_2
movf codigo,0
; Se ha recibido codigo_ID1.
movwf codigo_ID1
bsf bits,4
goto back_getcode
back_getcode_err
bcf STATUS,Z
bsf bits_fin_rec,7
back_getcode_def
bsf bits_fin_rec,0
back_getcode
return
;*******************************************************************************
; RUTINA DE RECEPCIN DE CDIGOS CON EL RECEPTOR ASOCIADO
;*******************************************************************************
reception_noprog
; Compruebo los cdigos cuando ya estoy asociado a un emisor.
btfss bits,0
goto jumper
movf codigo,0
xorwf codigo_ID2,0
btfss STATUS,Z
bsf bits_2,7
; Indico FALLO.
bcf STATUS,Z
bcf bits,0
bsf bits,1
goto back_getcodenoprog
jumper
btfss bits,1
goto jumper_2
144
movf codigo,0
; Se ha recibido el receptor.
xorwf codigo_rec,0
btfss STATUS,Z
bsf bits_2,7
; Indico FALLO.
bcf bits,1
bsf bits,2
goto back_getcodenoprog
jumper_2
btfss bits,2
goto jumper_1
movf codigo,0
movwf codigo_ADC
bcf bits,2
goto back_getcodenoprog_def
jumper_1
movf codigo,0
xorwf codigo_ID1,0
btfss STATUS,Z
bsf bits_2,7
; Indico FALLO
bsf bits,0
goto back_getcodenoprog
back_getcodenoprog_def
bsf bits_fin_rec,0
back_getcodenoprog
return
;*******************************************************************************
; RUTINA DE INTERRUPCIN DE TIMER 1
;*******************************************************************************
interrupt
bcf PIR1,TMR1IF
bcf T1CON,TMR1ON
clrf INTCON
; Apago timer 1.
; Deshabilito interrupcin timer 1.
bsf bits_fin_rec,6
; Indico que debo salir del bucle infinito que pregunta si me llega un bit.
return
;*******************************************************************************
; PRECARGA DEL TIMER_1 CUANDO RECIBO LOS CDIGOS.
;*******************************************************************************
; En esta rutina cuento un total de 65 ms (ms de lo que dura la transmisin).
precarga_T1
movlw 0x02
movwf TMR1H
movlw 0x17
movwf TMR1L
; Activo interrupcin de timer 1
bsf STATUS,RP0
bsf PIE1,TMR1IE
bcf STATUS,RP0
movlw 0xC0
movwf INTCON
return
END
145
146
list
p=12F508
#include <p12F508.inc>
; 0
1 -> RANGO 1
; 1
0 -> RANGO 2
; 1
1 -> RANGO 3
;**********************************************************************
ORG
0x1FF
0x000
movwf OSCCAL
; GP0: salida para indicar a PIC12F675 que se han recibido las rdenes.
; GP1: entrada para detectar pasos por cero.
; GP2: salida para la PWM.
; GP3: entrada reset comn con PIC12F675.
; GP4: entrada para conocer el rango.
; GP5: entrada para conocer el rango.
tris GPIO
movlw
b'00000011'
option
begin
bcf GPIO,2
; Inicio salidas a 0.
bcf GPIO,0
salto
btfss GPIO,4
; Veo el rango.
goto salto1
call temporizar_ini
; Espero 32us.
goto salto2
salto1
btfss GPIO,5
goto salto
147
call temporizar_ini
; Espero 32us.
goto salto3
salto2
btfss GPIO,5
goto vuelta
; RANGO 1.
goto vuelta_2
; RANGO 3.
salto3
btfss GPIO,4
goto vuelta_1
; RANGO 2.
goto vuelta_2
; RANGO 3.
;Rango 1
vuelta
bsf GPIO,0
prec1
call precarga_1
wait
btfss GPIO,1
goto question
; NO.
bcf GPIO,2
; Apago salida.
call temporizar
bsf GPIO,2
; Activo salida.
goto paso_aun
; NO.
goto prec1
;**************************
;Rango 2
vuelta_1
bsf GPIO,0
prec2
call precarga_2
; Realizo la precarga.
wait_1
btfss GPIO,1
goto question_1
; NO.
bcf GPIO,2
; Apago salida.
call temporizar
bsf GPIO,2
; Activo salida.
goto paso_aun_1
; NO.
goto prec2
;**************************
;Rango 3
vuelta_2
bsf GPIO,0
; Mando el pulso al PIC12F675 para indicarle que se han recibido los pulsos y el pulso final.
wait_2
148
btfss GPIO,1
goto wait_2
bsf GPIO,2
; Enciendo salida.
goto question_2
;**************************
; Preguntas de si me llegan nuevos pulsos mientras realizo PWM.
question
btfsc GPIO,4
; Apagar bombilla ?.
goto wait
wait_zero
btfsc GPIO,5
goto wait
; GP4 y GP5 son 0 -> Apagar la bombilla.
wait_zero4
btfss GPIO,1
goto wait_zero4
bcf GPIO,2
; Apago salida.
bcf GPIO,0
goto begin
;********************
question_1
btfsc GPIO,5
; Apagar bombilla ?.
goto wait_1
wait_zero1
btfsc GPIO,4
goto wait_1
; GP4 y GP5 son 0 -> Apagar la bombilla.
wait_zero5
btfss GPIO,1
goto wait_zero5
bcf GPIO,2
; Apago salida.
bcf GPIO,0
goto begin
;********************
question_2
btfsc GPIO,4
goto question_2
wait_zero2
btfsc GPIO,5
goto wait_zero2
; GP4 y GP5 son 0 -> Apagar la bombilla.
wait_zero6
btfss GPIO,1
goto wait_zero6
bcf GPIO,2
; Apago salida.
bcf GPIO,0
; OK.
goto begin
;*********************************************************************************************
; SUBRUTINAS
;*********************************************************************************************
temporizar
clrf TMR0
; Inicio timer 0.
bucle
149
movf TMR0,w
xorlw .63
btfss STATUS,Z
goto bucle_9
; Se ha contado 1 ms?.
; NO-> pregunto por las entradas de rango.
bcf STATUS,Z
goto seguir
bucle_9
btfsc GPIO,4
; GP4==0?
goto bucle
btfsc GPIO,5
; NO
; GP5==0?
goto bucle
; NO
goto back
seguir
decfsz contador,1
; Decremento el contador.
goto temporizar
; No se ha acabado la cuenta.
back
retlw 0x00
;*********************************************************************************************
;*********************************************************************************************
temporizar_ini
clrf TMR0
; Inicio timer 0.
bucle_1
movf TMR0,w
; Cuento 16 x 2= 32us.
xorlw .2
btfss STATUS,Z
goto bucle_1
bcf STATUS,Z
retlw 0x00
;*********************************************************************************************
;*********************************************************************************************
precarga_1
movlw 0x05
movwf contador
retlw 0x00
;*********************************************************************************************
precarga_2
movlw 0x03
movwf contador
retlw 0x00
;*********************************************************************************************
END
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205