Professional Documents
Culture Documents
Trabajo de Diploma
Diseo de una sonda de nivel con
compensacin de la presin atmosfrica
Autor:
Alimed Celecia Ramos
Tutor:
Ing. Arturo Hernndez Gonzlez
Cotutores:
Dr.C Jorge Ramrez Beltrn
Ing. Luis Ernesto Farah Fernndez
2013
Pgina |i
Agradecimientos
En tan poco espacio es imposible mencionar a todas las personas que de
alguna forma u otra influyeron en mi formacin como profesional y como
persona. Sean extensivos estos agradecimientos a quienes no se encuentren
en estas letras y sin embargo hayan sido importantes para m.
P g i n a | ii
A mi padre
P g i n a | iii
Declaracin de autora
Declaro que soy el nico autor de este trabajo, del cual entrego copia al
Departamento de Telecomunicaciones y Telemtica de la Facultad de
Ingeniera Elctrica del Instituto Superior Politcnico Jos Antonio Echeverra,
para que pueda ser utilizado en el desarrollo de otros trabajos.
Y para que haga constar se firma el presente documento:
__________________
Alimed Celecia Ramos
P g i n a | iv
Resumen
El Instituto Nacional de Recursos Hidrulicos (INRH) se encuentra
desarrollando varios proyectos en nuestro pas que tienen como objetivo
automatizar
las
mediciones
de
las
principales
cuencas
hidrogrficas
nacionales. Para lograr este fin es necesario utilizar una gran variedad de
instrumentos de medicin. Mediante las sondas de nivel se puede obtener el
nivel lquido de pozos, cisternas o cualquier contenedor en el cual se encuentre
almacenado algn lquido.
Las sondas de nivel que actualmente son utilizadas en el pas son
importadas a muy altos precios ya que en nuestro pas no se fabrican. Adems,
cuando se daa alguna de stas que se importa no es posible repararla porque
no estn disponibles los detalles de su diseo. Debido a esto el Grupo de
Instrumentacin Electrnica y Sensores Inteligentes (IESI) del Centro de
Investigaciones Hidrulicas (CIH) decidi desarrollar una sonda de nivel similar
a las existentes en el mercado.
Este trabajo trata acerca de las sondas de nivel que emplean el principio
hidrosttico. Se analizan los aspectos tericos relacionados con estos
dispositivos y se caracterizan algunas sondas de nivel comerciales.
Utilizando los conocimientos adquiridos durante el transcurso de la carrera,
se dise una sonda de nivel con compensacin de la presin atmosfrica. En
este trabajo se exponen las caractersticas y el funcionamiento de cada bloque
funcional del diseo y el procesamiento de las seales para realizar la
compensacin. Tambin se explica el funcionamiento del dispositivo en el
modo normal de operacin y el diseo e implementacin de los firmwares que
lo definen.
Utilizando varios software de simulacin como IAR, PSPICE y Proteus se
realizaron las simulaciones de las partes esenciales del dispositivo,
comprobando el correcto funcionamiento tanto del hardware como el firmware
desarrollados. Tambin se realiz con la ayuda del Instituto de Central de
Investigacin Digital (ICID) una prueba para comprobar la validez de la
comunicacin digital. En el captulo final se exponen los resultados obtenidos.
Pgina |v
Abstract
The Instituto Nacional de Recursos Hidrulicos (INRH) is developing several
projects in our country that have as objective to automate the measurements of
major national watersheds. By level probes can get the fluid level of wells,
cisterns or any container in which is stored any liquid.
Level probes that are currently used in the country are imported at high prices
because in our country no longer manufactured. Furthermore, when some of
this imported ones are damaged is not possible fixit because the details of the
design are not available. Because of this the Grupo de Instrumentacin
Electrnica y Sensores Inteligentes (IESI) of Centro de Investigaciones
Hidrulicas (CIH) decided to develop a level probe similar to those existing in
the market.
This work is about level probes that employs the hydrostatic principle. We
analyze the theoretical aspects of these devices and are characterized some
commercial level probes.
Using the knowledge acquired during the course of the degree, we designed
a level probe with atmospheric pressure compensation. In this paper we
describe the characteristics and operation of each functional block of the design
and signal processing for compensation. It also explains the operation of the
device in the normal mode of operation and the design and implementation of
the firmwares that define it.
Using various simulation softwares such as IAR, PSPICE and Proteus were
performed simulations of the essential parts of the device, checking the correct
operation of the hardware and the firmware developed. Also was performed
with the help of the Instituto Central de Investigacin Digital (ICID) a test to
check the validity of the digital communication. In the final chapter the obtained
results are exposed.
P g i n a | vi
ndice
INTRODUCCIN ................................................................................................................................. 1
CAPTULO 1 ESTUDIO TERICO DE LAS SONDAS DE NIVEL ................................................................. 6
1.1 INTRODUCCIN .................................................................................................................................. 6
1.2 MEDICIN DE NIVEL ............................................................................................................................ 6
1.2.1 Principio capacitivo ................................................................................................................ 6
1.2.2 Principio resistivo ................................................................................................................... 7
1.2.3 Principio ultrasnico ............................................................................................................... 7
1.2.4 Principio de radar ................................................................................................................... 8
1.2.5 Principio de lser .................................................................................................................... 8
1.2.6 Principio de los flotadores ...................................................................................................... 8
1.2.7 Principio hidrosttico.............................................................................................................. 8
1.3 SENSORES PIEZORRESISTIVOS ................................................................................................................. 9
1.3.1 Puente de Wheatstone ......................................................................................................... 10
1.4 CLASIFICACIN DE LOS SENSORES DE PRESIN PIEZORRESISTIVOS ................................................................ 11
1.5 CARACTERSTICAS NO DESEADAS DE LOS SENSORES DE PRESIN PIEZORRESISTIVOS Y SUS MTODOS DE
COMPENSACIN .......................................................................................................................................... 12
1.6 TECNOLOGA CHIP IN OIL.................................................................................................................... 13
1.7 CLASIFICACIN DE MEDIDORES DE NIVEL ................................................................................................ 13
1.8PROBLEMAS DE LAS SONDAS DE NIVEL SUMERGIBLES Y SU CORRECCIN ........................................................ 17
1.9 SALIDAS DE LAS SONDAS DE NIVEL ........................................................................................................ 18
1.9.1 Salidas analgicas ................................................................................................................ 18
1.9.2 Salidas digitales .................................................................................................................... 18
1.10 ANLISIS DE SONDAS DE NIVEL EXISTES EN EL MERCADO .......................................................................... 19
1.10.1 Medidor de nivel de radar VEGAPULS WL61 de VEGA ....................................................... 19
1.10.2 Medidor de nivel capacitivo Liquicap T FMI21 de Endress + Hauser .................................. 20
1.10.3 Sonda de nivel sumergible con sensor de presin PS3417 de IFM ..................................... 20
1.10.4 Sonda de nivel sumergible con salida digital SDI-12 OTT PLS de OTT ................................ 21
1.10.5 Sonda de nivel sumergible con sensor de presin DCX-22 AA de Keller ............................. 21
1.11 CARACTERSTICAS DE LA SONDA DE NIVEL A DISEAR .............................................................................. 22
1.12 CONCLUSIONES .............................................................................................................................. 23
CAPTULO 2 HARDWARE DE LA SONDA DE NIVEL ............................................................................ 24
2.1 INTRODUCCIN ................................................................................................................................ 24
2.2 DIAGRAMA EN BLOQUES DE LA SONDA DE NIVEL ...................................................................................... 24
2.3 SELECCIN DEL SENSOR DE PRESIN ...................................................................................................... 25
2.4 SELECCIN DEL PDS .......................................................................................................................... 26
2.5 DISEO DE LA FUENTE DE ALIMENTACIN .............................................................................................. 29
2.6 DISEO DEL LAZO DE SALIDA 4-20 MA .................................................................................................. 30
2.6.1 Seleccin del amplificador operacional ................................................................................ 31
2.6.2 Ecuaciones del lazo de corriente 4-20 mA ............................................................................ 32
2.6.3 Clculo de las resistencias Rof y Rg ...................................................................................... 33
2.6.4 Seleccin del transistor ......................................................................................................... 34
2.6.5 Clculo de las resistencias Rb y Rc ........................................................................................ 34
2.7 DISEO DE LA INTERFAZ DE SALIDA DIGITAL ............................................................................................ 35
2.7.1 Seleccin del driver RS232 .................................................................................................... 35
2.7.2 Seleccin del driver RS485 .................................................................................................... 36
2.7.3 Compatibilidad electromagntica de la interfaz digital ....................................................... 36
2.8 ESQUEMTICO DE LA SONDA DE NIVEL................................................................................................... 36
2.9 CONCLUSIONES ................................................................................................................................ 40
CAPTULO 3 FIRMWARES DE LA SONDA DE NIVEL ........................................................................... 41
3.1 INTRODUCCIN ................................................................................................................................ 41
3.2 OPERACIN EN TIEMPO REAL DE LA SONDA DE NIVEL ................................................................................ 41
3.3 COMUNICACIN CON LOS SENSORES KELLER 9LD .................................................................................... 42
P g i n a | vii
2
3.5.2 Desarrollo del firmware para la comunicacin digital del sistema ...................................... 55
3.5.2.1 Configuracin de las salidas del dispositivo .................................................................................. 56
3.5.2.2 Configuracin de la unidad de ingeniera ..................................................................................... 56
3.5.2.3 Obtencin de los datos de los sensores y procesamiento ............................................................ 57
3.5.2.4 Envo de los datos al amo ............................................................................................................. 58
3.5.2.5 Respuestas con CRC ...................................................................................................................... 59
Introduccin
Pgina |1
Introduccin
El nivel es la altura que alcanza una sustancia lquida. En la actualidad las
industrias se encuentran en constante perfeccionamiento de los instrumentos
de control y herramientas con el objetivo de aumentar la calidad del proceso
productivo. La obtencin de nivel de sustancias lquidas es necesaria en
numerosos procesos industriales y para la gestin de recursos hidrulicos.
Existen diversas maneras de medir el nivel basndose en diferentes principios
fsicos, estas pueden enumerarse como: capacitivos, resistivos, hidrostticos,
ultrasnicos, de radar, lser, seguimiento de la superficie, flotadores, entre
otros (1), (2). Una de las formas de medir nivel de manera continua es la
utilizacin de sondas de nivel sumergibles, permitiendo proporcionar los datos
de nivel de manera permanente mediante una seal elctrica a su salida (1).
La mayora de las sondas de nivel sumergibles se basan en el principio
hidrosttico para la obtencin del nivel (2). Dicho principio proporciona el nivel a
partir de la presin ejercida por un bloque lquido sobre una superficie. Esta
presin ejercida por la columna lquida est compuesta por la presin ejercida
por el bloque y la presin ejercida por encima del lquido (presin en la
superficie libre del lquido).
Los sensores de presin son dispositivos encargados de detectar los
cambios de esta magnitud y transformarlos en seales elctricas. Uno de los
principios fsicos mayormente empleados en la medicin de la presin y el nivel
es el piezorresistivo (3). ste se basa en la descripcin de los cambios
ocurridos en la resistencia elctrica de un material debido a la aplicacin de
tensiones mecnicas. Estos sensores han logrado una gran popularidad en
diversas aplicaciones debido a las propiedades elsticas del silicio, su
utilizacin en la construccin de los circuitos integrados y los grandes avances
en la elaboracin de los Sistemas Micro-Electro-Mecnicos (MEMS). Una de
las configuraciones ms utilizada con piezorresistores para las mediciones es
la del puente de Wheatstone (4).
La seal de salida de estos sensores es altamente dependiente de la
temperatura (5), por lo cual se hace necesaria su compensacin para obtener
un mnimo de precisin en la medicin. La compensacin puede realizarse
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Introduccin
Pgina |2
Introduccin
Pgina |3
Hiptesis:
A partir del diseo y la simulacin de una sonda de nivel con compensacin
de la presin atmosfrica es posible obtener un primer prototipo de transmisor
de nivel con la finalidad de reducir las importaciones de sondas de nivel y
adaptarlas a las condiciones del clima en nuestro pas.
Los mtodos de investigacin que fueron empleados son:
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Introduccin
1.
Pgina |4
Mtodo histrico - lgico para analizar el estado del arte de las sondas
Introduccin
Pgina |5
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Pgina |6
Pgina |7
(1.1)
Donde
: Capacitancia en Farad
: Constante de proporcionalidad
: Constante dielctrica
: rea efectiva de los conductores
: Distancia entre electrodos
Pgina |8
Pgina |9
C a p t u l o 1 E s t u d i o T e r i c o d e l a s S o n d a s d e N i v e l P g i n a | 10
La tensin a su salida
C a p t u l o 1 E s t u d i o T e r i c o d e l a s S o n d a s d e N i v e l P g i n a | 11
(1.6)
es 0, es decir,
C a p t u l o 1 E s t u d i o T e r i c o d e l a s S o n d a s d e N i v e l P g i n a | 12
C a p t u l o 1 E s t u d i o T e r i c o d e l a s S o n d a s d e N i v e l P g i n a | 13
C a p t u l o 1 E s t u d i o T e r i c o d e l a s S o n d a s d e N i v e l P g i n a | 14
brindan una salida continua, mientras que los detectores ofrecen una salida
que indica la presencia o no de fluido en algn punto. Estos ltimos no generan
informacin exacta del lugar en el cual se encuentra el lquido. Adems pueden
ser clasificadas por el principio fsico que utilizan para monitorear la variable.
Los medidores de nivel capacitivos pueden emplearse en tanques con
paredes conductoras que pueden ser utilizadas como electrodos de referencia
o tanques con paredes no conductoras que necesitan un electrodo de
referencia adicional. Cuando el lquido es conductor, la sonda que se inserta en
el mismo debe ser recubierta con un material aislante (2). Debido al valor de la
constante dielctrica de los lquidos, el valor de la capacitancia del sistema va a
ser mayor cuando la sonda est completamente cubierta que cuando est
parcialmente o completamente descubierta. Los cambios de capacidad con el
nivel son convertidos en variaciones de la seal de salida mediante circuitos de
procesamiento (1). Estos medidores de nivel capacitivos pueden observarse en
la figura 1.3
Los medidores de nivel resistivos utilizan tambin las paredes del tanque
como electrodo, pero en este caso las paredes del tanque deben ser
conductoras. Comnmente se utiliza una sonda de dos electrodos, eliminando
la necesidad de utilizar tanques metlicos aterrados. Para compensar los
efectos de la variacin de la resistividad del lquido o fluido se utilizan
electrodos de compensacin. Normalmente se fabrican de acero inoxidable,
aunque tambin pueden fabricarse de tantalio y hastelloy. Se instalan en
posicin vertical para evitar la generacin de corrientes parsitas causadas por
la formacin de pelculas de lquido.
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
C a p t u l o 1 E s t u d i o T e r i c o d e l a s S o n d a s d e N i v e l P g i n a | 15
C a p t u l o 1 E s t u d i o T e r i c o d e l a s S o n d a s d e N i v e l P g i n a | 16
C a p t u l o 1 E s t u d i o T e r i c o d e l a s S o n d a s d e N i v e l P g i n a | 17
C a p t u l o 1 E s t u d i o T e r i c o d e l a s S o n d a s d e N i v e l P g i n a | 18
C a p t u l o 1 E s t u d i o T e r i c o d e l a s S o n d a s d e N i v e l P g i n a | 19
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
C a p t u l o 1 E s t u d i o T e r i c o d e l a s S o n d a s d e N i v e l P g i n a | 20
C a p t u l o 1 E s t u d i o T e r i c o d e l a s S o n d a s d e N i v e l P g i n a | 21
1.10.4 Sonda de nivel sumergible con salida digital SDI-12 OTT PLS
de OTT
Esta sonda de nivel est formada por una clula de medicin de presin
capacitiva de cermica y un controlador integrado que se encarga de calcular el
nivel del agua. Emplea un cable ventilado para determinar la presin de la
superficie del lquido. Puede suministrarse con salida analgica de 4-20mA o
las salidas digitales SDI-12 o RS485. El rango de alimentacin es de 9.6 a 28V
(16).
Brinda un rango de medicin desde de 0 a 4m hasta de 0 a 40m con un error
del 0.05% del valor final del margen de medicin. Puede trabajar en
temperaturas desde -25 hasta 70 C. La desviacin anual mxima es de solo
0.1% del valor final del margen de medicin.
C a p t u l o 1 E s t u d i o T e r i c o d e l a s S o n d a s d e N i v e l P g i n a | 22
C a p t u l o 1 E s t u d i o T e r i c o d e l a s S o n d a s d e N i v e l P g i n a | 23
1.12 Conclusiones
1. El empleo las sondas de nivel sumergibles que emplean el principio
hidrosttico para realizar el clculo de nivel brinda grandes ventajas
que diversifican su campo de aplicacin.
2. Las sondas de nivel sumergibles necesitan realizar la compensacin
de la presin atmosfrica y para ello puede utilizase otro sensor en la
superficie del lquido.
3. Debido
las
caractersticas
no
deseadas
de
los
sensores
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 24
P g i n a | 25
in
Oil,
integrando
dentro
del
propio
sensor
el
circuito
de
ptimas
caractersticas
para
su
utilizacin
en
sistemas
alimentados por batera (18). Garantizan un TEB (Total Error Band) de un 0,5%
del intervalo de medida dentro de un rango de temperatura de 0 a 50C. El
rango de medicin que se puede llegar a obtener es de 1 a 200 bar de manera
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 26
P g i n a | 27
control
digital
de
motores,
control
remoto,
termostatos,
Asynchronous
Receiver-Transmitter),
SPI
(Serial
Peripheral
Interface) , I2C, entre otros, los cuales sern utilizados para la comunicacin
con los sensores y para la interfaz de salida digital RS232 y RS485.
Adicionalmente posee 5 modos de trabajo a bajo consumo lo cual logra
extender la vida de la batera en aplicaciones portables. Cuenta con dos
osciladores internos brindando la posibilidad de no utilizar un cristal externo.
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 28
P g i n a | 29
P g i n a | 30
Vin (V)
Min
Typ
MAX6029_30
2,9955
MAX6035_AUR30
2,994
3,006
4,9
33
MAX6037_30
2,994
3,006
3,2
MAX6129_30
2,988
3,012
3,2 12,6
Source
Current
(mA)
No
95
No
10
No
73
6,75
P g i n a | 31
debe
seleccionarse
un
amplificador
operacional
para
lograr
P g i n a | 32
MAX4076
MAX9617
MAX9911
MAX44264
Icc
(A)
Typ Max
40 55
59 78
4
5
0.75 1.2
Avol
(dB)
Min Typ
80 117
120 160
95 120
90 120
GBW
(kHz)
Typ
230
1500
200
9
Shutdown
P g i n a | 33
ya
estas
relaciones
es
necesario
establecer
valores
P g i n a | 34
P g i n a | 35
P g i n a | 36
Typ
Max
Typ
Max
Maximum
Data Rate
(kbps)
Min
MAX3222E
0.3
10
250
MAX3322E
MAX3230E
MAX13234E
1
0.3
0.3
1
1
1
1
1
10
10
10
250
250
250
Shutdown Supply
Current (A)
P g i n a | 37
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 38
P g i n a | 39
P g i n a | 40
2.9 Conclusiones
1. La alimentacin se realiza a 3V para lograr que el consumo de toda la
sonda sea lo menor posible.
2. La utilizacin del MSP430F6638 en el diseo ofrece grandes ventajas,
ya que disminuye la cantidad de componentes externos que se
necesitan y posee un muy bajo consumo de corriente.
3. Se dise el hardware de la sonda de nivel a partir de un diagrama en
bloques general y tomando en consideracin los requisitos a cumplir
que fueron expresados en el captulo anterior.
4. Se dise un conversor de voltaje-corriente para garantizar el lazo de
corriente 4-20mA.
5. Se garantiz un consumo general del dispositivo menor que 4mA
mediante los dispositivos seleccionados.
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 41
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 42
del
dispositivo.
Pueden
definirse
tres
funcionalidades
P g i n a | 43
de
circuitos
integrados.
Dicho
protocolo
presenta
varias
P g i n a | 44
P g i n a | 45
esclavo
debe
confirmar
siempre
los
bytes
mediante
un
ACK
Figura 3.3 Estructura de la trama enviada y recibida por los sensores Keller
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 46
P g i n a | 47
valores enviados por el mismo. Este proceso se realizar dentro del CPU
(unidad procesadora central) del MSP. Este escalamiento o conversin se logra
mediante la utilizacin de una funcin lineal determinada por dos puntos, los
cuales van a ser los valores mximo y mnimo que sern sensados por el
sensor en particular. Estos valores son almacenados en memoria por el sensor
y equivalen a 16384 y 49152. La expresin que permite obtener la presin real
se describe como:
(3.1)
Donde:
[
(3.2)
Donde:
[ ]: Dato de temperatura en
[
debe garantizarse una direccin de esclavo nica para cada uno. Para
P g i n a | 48
la
activacin
del
bit
UCSWRST
del
registro
UCB0CTL1.
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 49
conversor
digital-analgico
que
se
encuentra
embebido
en
el
P g i n a | 50
salida del DAC alcanza el valor mximo de tensin antes de que la palabra
digital de entrada sea la mxima posible como se observa en la figura 3.6.
El mdulo de DAC tiene la capacidad de calibrar la tensin de offset del
amplificador de salida. Cuando esta opcin se encuentra activa se inicia el
proceso de calibracin, el cual debe finalizar antes de que sea utilizado el DAC.
P g i n a | 51
P g i n a | 52
P g i n a | 53
propios del protocolo. Es importante resaltar que para que un esclavo o amo
sea considerado compatible con la versin 1.3 del protocolo deben soportar
cada comando presente en dicha tabla.
El ltimo componente de cada comando es el caracter !. Este caracter slo
puede ser enviado como el final del comando. Los ltimos dos bytes de cada
respuesta son un retorno de transmisin y de una alimentacin de lnea
(<CR><LF>).
El comando aI! se encarga solicitar informacin al esclavo (49). Entre las
informaciones con las cuales se debe responder se encuentra el nivel de
compatibilidad, el nmero del modelo y un nmero de versin del firmware,
entre otros. El comando ?! solicita al esclavo que responda con su direccin.
Se debe tener en cuenta que si se encuentran conectados varios esclavos al
bus estos respondern al mismo tiempo a la solicitud, causando colisin en el
bus.
El comando aM! le indica al esclavo que comience la medicin. Sin
embargo la respuesta a este comando no es el dato medido, sino el tiempo y el
nmero de muestras que obtendr en dicho tiempo conformados en el
siguiente formato atttn<CR><LF>. Si el esclavo retorna 000 como tiempo de
demora es que la muestra se encuentra lista inmediatamente para ser enviada
y el amo debe enviar el comando aD0! para obtener la muestra. En caso
contrario el amo espera a que transcurra el tiempo especificado, seguidamente
transmite un espaciamiento continuo en la lnea de datos durante 12ms y
solicita la muestra con aD0!, en el caso en que los datos se encuentren listos
en el esclavo antes del tiempo indicado le enva al amo una solicitud de
servicio, la cual sugiere al amo detener el conteo del tiempo y solicitar dichos
datos. La respuesta de tiempo dada por el esclavo debe ser mayor que el que
realmente le tomar realizar la medicin para permitir tolerancias en los
tiempos de transferencia. La nombrada solicitud de servicio es una respuesta
con el formato a<CR><LF>.
El comando aC! le ordena al esclavo tomar una medicin concurrente. Esto
significa que la medicin se realizar mientras otros esclavos estn midiendo
tambin. La respuesta es similar a la proporcionada a aM!, la diferencia en
este caso es que el esclavo no enva una solicitud de servicio al amo, sino que
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 54
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 55
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 56
Comando
Descripcin
aXL!
aX0!
aX2!
aX4!
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 57
Comando
Unidad de ingeniera
Unit_out
aXB!
bar
aXmB!
mbar
aXC!
mH2O
aXmC!
mmH2O
aXkP!
kPa
aXMP!
MPa
aXK!
Kg/cm2
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 58
3.3
P g i n a | 59
Unidad
mbar
1000
mH2O
10.2
mmH2O
10200
kPa
100
MPa
0.1
Kg/cm2
102
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 60
P g i n a | 61
3.6 Conclusiones
1. En el modo de operacin en tiempo real el firmware utiliza las
muestras
obtenidas
de
los
sensores
para
calcular
el
nivel
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 62
P g i n a | 63
datos almacenados en
P g i n a | 64
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 65
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 66
P g i n a | 67
Comando
Significado
a!
Reconocimiento activo
aI!
Informacin
aM!
Comenzar medicin
aD2!
Enviar muestra
aXC!
aD2!
Enviar muestra
aMC!
aD2!
Enviar muestra
P g i n a | 68
seguida por versin del protocolo que se emplea (1.3), el nombre del fabricante
(CIH) y la versin del dispositivo (1.0).
Al comando de comenzar medicin le sigue el de enviar datos, a lo cual se
responde con un valor en pantalla. Este valor es el resultado del procesamiento
de dos valores escogidos como muestras para la simulacin. Se puede
observar la estructura de la respuesta y comprobar que es similar a la expuesta
en el epgrafe 3.5.1.3. La simulacin prosigue con un cambio de unidad
ingenieril y la posterior visualizacin de la misma muestra pero en la nueva
unidad configurada. Por ltimo se realiza una peticin del dato pero
aadindosele el CRC, que son 3 bits.
Para comprobar que todas las unidades ingenieriles funcionan correctamente
se simula el mismo procedimiento pero configurando diferentes unidades a la
salida. En cada caso se cambia en orden de unidad de ingeniera (en el orden
presentado en la tabla 3.3) y se enva la misma muestra pero convertida a la
unidad solicitada. Esto puede observarse en la figura 4.5.
P g i n a | 69
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 70
P g i n a | 71
Estos valores son: para Rof 4.9M y para Rg 300K. Se deben obtener de
alguna forma estos valores a partir de los valores de resistencias comerciales.
La figura 4.7 es el resultado de varias iteraciones realizadas para lograr el
correcto funcionamiento del conversor voltaje corriente.
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 72
P g i n a | 73
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 74
P g i n a | 75
(4.2)
(4.3)
Donde:
: Nivel alto de tensin desde el sistema externo
: Nivel bajo de tensin desde el sistema externo
: Umbral del mximo nivel alto de tensin para un MSP430
: Umbral del mnimo nivel bajo de tensin para un MSP430
: tolerancia de los resistores
: Tensin de alimentacin del MSP430
: Corriente de escape de una entrada de un MSP430
Los resultados obtenidos al aplicar dichas expresiones fueron:
,
P g i n a | 76
P g i n a | 77
P g i n a | 78
(4.4)
(4.5)
Los gastos por salario bsico se calculan a partir del estipendio apercibido
por los estudiantes y los salarios del tutor y cotutores segn el tiempo de
laborable empleado en el proyecto. Esto se observa en la expresin 4.6
(4.6)
Donde:
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 79
(4.7)
Donde:
: Salario bsico
: Seguridad social
: Salario complementario
: Medios o materiales directos
: Dieta, pasajes
: Otros gastos
El salario complementario es el 9.09% del salario bsico, este se utiliza para
pagar las vacaciones. En el caso del tutor la estimacin representa 11.13 CUP,
lo mismo para uno de los cotutores y el del otro cotutor es 18.94 CUP.
El valor de la seguridad social equivale al 10% de la suma del salario bsico
y el salario complementario. El tutor consume por seguridad social 13.35 CUP,
similar al de un cotutor. El otro genera un gasto de 22.73 CUP.
Los gastos en dieta y pasajes son nulos. Los medios directos son tambin
cero ya que en este caso no fue utilizado ningn componente para la
fabricacin del dispositivo (no estaba dentro de los objetivos). En otros gastos
pueden incluirse los gastos por concepto de tiempo de mquina. Este se tarifica
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
P g i n a | 80
como 10.00 CUP por hora. Si asumimos que se utilizaron cerca de 700 horas
de mquina entonces el resultado son 7000 CUP.
Empleando entonces la expresin 4.7 el costo directo es de 8168.76 CUP.
Mediante la expresin 4.4 se obtiene de costo total de 9074.39 CUP.
Componente
Precio (CUC)
Cantidad
MSP430F6638
13.06
Keller 9LD
59.85
Keller 9FLD
63.45
XTAL ABLS-4.000MHZ-B2-T
0.74
MAX9911
1.40
2DD2679
0.43
MAX3471
4.78
MAX3230
5.07
MAX6035
2.30
Conector 5 vas
0.42
Conector 3 vas
0.35
Conector 2 vas
0.28
Diodo Schottky
0.23
Conector JTAG
1.95
Diodo Zener
0.32
Capacitor 0.1uF
0.10
13
Capacitor 22pF
0.10
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
0.10
Capacitor 470nF
0.12
Capacitor 10uF
0.10
Capacitor 100uF
0.12
Resistencia 1K
0.10
Resistencia 10K
0.10
Resistencia 100K
0.10
Resistencia 150K
0.10
Total
158.66
P g i n a | 81
4.5 Conclusiones
1. Se comprob mediante la simulacin en Proteus la validez de la
comunicacin entre el microcontrolador y los sensores de presin.
2. Mediante la simulacin en PSPICE se comprob que la salida del lazo
de corriente es correcta y que no depende del consumo del circuito
siempre y cuando este se mantenga por debajo de 3.4mA.
3. Se comprob mediante la simulacin en Proteus y posteriormente de
forma
prctica
el
correcto
funcionamiento
del
protocolo
de
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Conclusiones Finales
P g i n a | 82
Conclusiones Finales
En correspondencia con los objetivos de esta tesis se obtuvieron los
resultados enumerados a continuacin:
1. Se realiz un profundo estudio del estado del arte de las sondas de
nivel y sus principales caractersticas.
2. Se dise una sonda de nivel con compensacin de la presin
atmosfrica cumpliendo los requerimientos planteados en el diseo.
3. Se dise un algoritmo para compensar las muestras obtenidas de los
sensores de presin y procesarlas para obtener el dato de nivel y
garantizar su envo de manera satisfactoria.
4. Se comprob el funcionamiento del diseo realizado utilizando
programas de simulacin que permitieron realizar la puesta a punto
del dispositivo.
5. Se realiz un experimento prctico que permiti validar el firmware
desarrollado para el microcontrolador y el protocolo de comunicacin
SDI-12.
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Recomendaciones
P g i n a | 83
Recomendaciones
Es importante como trabajo futuro comprobar la exactitud de los sensores
Keller 9LD para determinar la necesidad de algn algoritmo de compensacin.
Se debe continuar trabajando en el diseo de la placa impresa para lograr la
fabricacin del dispositivo diseado. Al final se debe realizar las pruebas
adecuadas con el dispositivo fsico sobre los tiempos de comunicacin y los
errores que pueden presentarse. Tambin debe crearse un programa de
usuario con interfaz grfica para visualizar las respuestas recibidas a los
comandos definidos por el protocolo de comunicacin.
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Referencias Bibliogrficas
P g i n a | 84
Referencias Bibliogrficas
1.
Ramrez J, Villar Y. Fundamentos de la medicin de presin, nivel y caudal en los
sistemas hidrulicos. 2011. p. 107.
2.
Hambrice K, Hopper H. A Dozen Ways to Measure Fluid Level and How They
Work2004. Disponible en: http://www.sensorsmag.com/list/sensors/leak-level-46.
3.
Gad-el-Hak M. The MEMS handbook. 1ra ed. Kreith F, editor. Washington, D.C.: CRC
Press LLC; 2002.
4.
Kularatna N. Electronic circuit design: from concept to implementation. Boca Raton:
CRC Press; 2008.
5.
Chuan Y, Chen L. The Intelligent Pressure Sensor System Based on DSP. 2010 3rd
International Conference on Advanced Computer Theory and Engineering (ICACTE)2010.
6.
Hernndez A. Diseo de un transmisor de presin con salida digital RS232 y salida
analgica 4-20mA. Habana: CUJAE; 2011.
7.
Philip C. J, Abhay J, Pramod S, Ajayakumar PD, Natarajan K. Signal Conditioner for
MEMS based Piezoresistive sensor. 2010 5th International Conference on Industrial and
Information Systems, ICIIS 2010,; Jul 29 - Aug 01, 2010,; India2010.
8.
Thanachayanont A, Sangtong S. Low-Voltage Current-Sensing CMOS Interface Circuit
for Piezo-Resistive Pressure Sensor. ETRI Journal. 2007;29(1):70-8.
9.
Boujamaa EM, Alandry B, Hacine S, Latorre L, Mailly F, Nouet P. A Low Power Interface
Circuit for Resistive Sensors with Digital Offset Compensation. 2010 IEEE International
Symposium on Circuits and Systems (ISCAS); May 30 2010-June 2 2010 Paris2010.
10.
Sifuentes E, Casas O, Reverter F, Palls-Areny R. Direct interface circuit to linearise
resistive sensor bridges. Sensors and Actuators A: Physical. 2008;147(1):210-5.
11.
Jordana J, Palls-Areny R. A simple, efficient interface circuit for piezoresistive pressure
sensors. Sensors and Actuators A: Physical. 2006;127(1):69-73.
12.
Hofer D, Vetterli B. OEM-TRANSMITTERS: ALL-INCLUSIVE2012.
13.
Vega. Radar VEGAPULS. 2011.
14.
Endress+Hauser. Technical Information Liquicap T FMI21. 2007.
15.
IFM. PS3417. SUBMERSIBLE 1BAR 15M CABLE. 2012.
16.
OTT. OTT PLS Pressure Level Sensor. 2009.
17.
Keller. DCX-22 AA. Data Collector for Water Levels 100% waterproof, air pressure
compensated. 2006.
18.
Keller. Piezoresistive OEM Pressure Transmitters Series 4 LD9 LD. 2013. p. 2.
19.
ZMDI. ZSC31050. Advanced Differential Sensor Signal Conditioner. 2010. p. 28.
20.
ZMDI. ZSC31050. Advanced Differential Sensor Signal Conditioner Functional
Description. 2010. p. 50.
21.
Cypress. PSoC 3: CY8C38 Family Data Sheet. 2012. p. 137.
22.
Microchip.
dsPIC33FJ32GP302/304,
dsPIC33FJ64GPX02/X04,
and
dsPIC33FJ128GPX02/X04 Data Sheet. 2008. p. 378.
23.
Microchip.
dsPIC33FJ32MC302/304,
dsPIC33FJ64MCX02/X04,
and
dsPIC33FJ128MCX02/X04 Data Sheet. 2008. p. 398.
24.
Texas Instrument. MSP430F663x Mixed Signal Microcontroller. 2012. p. 116.
25.
Texas Instrument. MSP430x5xx and MSP430x6xx Family User's Guide. 2013. p. 1148.
26.
Cypress. PSoC 3 and PSoC 5 Getting More Resolution from 8-Bit DACs. 2012. p. 15.
27.
Maxim. MAX6029. Ultra-Low-Power Precision Series Voltage Reference. 2006. p. 16.
28.
Maxim. MAX6035. High-Supply-Voltage, Precision Voltage Reference in SOT23. 2006.
p. 15.
29.
Maxim. MAX6037. Low-Power, Fixed and Adjustable Reference with Shutdown in
SOT23. 2007. p. 18.
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Referencias Bibliogrficas
P g i n a | 85
30.
Maxim. MAX6129. Ultra-Low-Power Series Voltage Reference. 2005. p. 16.
31.
Maxim. Application Note 1064. Designing a 4-20mA Current Loop Using the MAX1459
Sensor Signal Conditioner. 2002.
32.
Maxim. MAX4074MAX4078. Micropower, SOT23, Rail-to-Rail, Fixed-Gain,
GainAmp/Open-Loop Op Amps. 1999. p. 20.
33.
Maxim. MAX9617MAX9620. Single/Dual SC70, Zero-Drift, High-Efficiency, 1.5MHz Op
Amps with RRIO. 2012. p. 9.
34.
Maxim. MAX9910MAX9913. 200kHz, 4A, Rail-to-Rail I/O Op Amps with Shutdown.
2010. p. 17.
35.
Maxim. MAX44264. Ultra-Low Power Op Amp in a Tiny 6-Bump WLP. 2010. p. 10.
36.
Diodes Incorporated. 2DD2679. LOW VCE(SAT) NPN SURFACE MOUNT TRANSISTOR.
2008. p. 4.
37.
Maxim. MAX3222E/MAX3232E/MAX3237E/MAX3241E/MAX3246E. 15kV ESDProtected, Down to 10nA, 3.0V to 5.5V, Up to 1Mbps, True RS-232 Transceivers. 2010. p. 22.
38.
Maxim. MAX3322E/MAX3323E. 15kV ESD-Protected, RS-232 Transceivers for
Multidrop Applications. 2003. p. 13.
39.
Maxim. MAX3230E/MAX3230AE/MAX3231E/MAX3231AE. 15kV ESD-Protected +2.5V
to +5.5V RS-232 Transceivers in UCSP and WLP. 2008. p. 16.
40.
Maxim. MAX13234EMAX13237E. 3Mbps RS-232 Transceivers with Low-Voltage
Interface. 2008. p. 16.
41.
Maxim. MAX3471. 1.6A, RS-485/RS-422, Half-Duplex, Differential Transceiver for
Battery-Powered Systems. 1998. p. 8.
42.
Multicomp. SMBJ / SMCJ Series Surface Mount Voltage Suppressors. 2005.
43.
Philips Semiconductors. Application Note AN10216-01 I2C MANUAL. 2003.
44.
Philips Semiconductors. THE I 2C-BUS SPECIFICATION. 2000.
45.
Hofer D. Description of the Communication Protocol for Series 4 LD ... 9LD OEM
pressure transmitter from KELLER2013.
46.
SDI-12 Support Group. SDI-12. 2012; Available from: http://www.sdi-12.org.
47.
National Instrument. Building an Environmental Monitoring System for SDI-12
Devices2012.
Disponible
en:
http://sine.ni.com/nipdfgenerator/nipdfgenerator?pageURL=http://www.ni.com/whitepaper/7706/en&clientAppName=dz&dotsPerPixel=&dotsPerPoint=.
48.
Campbell Scientific. Serial Data Interface SDI-12 Information. 2006.
49.
SDI-12 Support Group. SDI-12 A Serial-Digital Interface Standard for MicroprocessorBased Sensors. 2013.
50.
Texas Instrument. Application Report SLAA221 CRC Implementation With MSP430.
2004.
51.
Texas Instrument. MSP430x22x2, MSP430x22x4 Mixed Signal Microcontroller. 2007.
52.
Texas Instrument. MSP430x2xx Family User's Guide. 2012.
53.
Texas Instrument. MSP430x15x, MSP430x16x, MSP430x161x Mixed Signal
Microcontoller. 2006.
54.
Texas Instrument. MSP430x1xx Family User's Guide. 2003.
55.
Maxim. MAX481/MAX483/MAX485/MAX487MAX491/MAX1487. Low-Power, SlewRate-Limited RS-485/RS-422 Transceivers. 2009.
56.
Texas Instrument. Application Report SLAA148 Interfacing the 3-V MSP430 to 5-V
Circuits. 2002.
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Bibliogrfa
P g i n a | 86
Bibliografa
1. Altium Designer. Module 1: Getting Started With Altium Designer. 2009.
2. Altium Designer. Module 2: Help and DXP system menu. 2009.
3. Altium Designer. Module 3: Schematic Editor Basics. 2009.
4. Bierl L. MSP430 Family Mixed-Signal Microcontroller Application Reports. 2000.
5. Boujamaa EM, Alandry B, Hacine S, Latorre L, Mailly F, Nouet P. A Low Power Interface
Circuit for Resistive Sensors with Digital Offset Compensation. 2010 IEEE International
Symposium on Circuits and Systems (ISCAS); May 30 2010-June 2 2010 Paris2010.
6. Campbell Scientific. Serial Data Interface SDI-12 Information. 2006.
7. Chuan Y, Chen L. The Intelligent Pressure Sensor System Based on DSP. 2010 3rd
International Conference on Advanced Computer Theory and Engineering (ICACTE)2010.
8. Cypress. PSoC 3: CY8C38 Family Data Sheet. 2012. p. 137.
9. Cypress. PSoC 3 and PSoC 5 Getting More Resolution from 8-Bit DACs. 2012. p. 15.
10. Davies J. MSP430 Microcontroller Basics: Elsevier Ltd; 2008.
11. Diodes Incorporated. 2DD2679. LOW VCE(SAT) NPN SURFACE MOUNT TRANSISTOR.
2008. p. 4.
12. EduDevices DdId. Soluciones para aplicaciones de 3V2007.
13. Endress+Hauser. Technical Information Liquicap T FMI21. 2007.
14. Gad-el-Hak M. The MEMS handbook. 1ra ed. Kreith F, editor. Washington, D.C.: CRC
Press LLC; 2002.
15. Garca J, Rodrguez JI, Goi R, Brzalez A, Funes P, Rodrguez R. Aprenda lenguaje ANSI
C como si estuviera en primero 1998.
16. Hambrice K, Hopper H. A Dozen Ways to Measure Fluid Level and How They
Work2004.
17. Hernndez A. Diseo de un transmisor de presin con salida digital RS232 y salida
analgica 4-20mA. Habana: CUJAE; 2011.
18. Hofer D. Description of the Communication Protocol for Series 4 LD ... 9LD OEM
pressure transmitter from KELLER2013.
19. Hofer D, Vetterli B. OEM-TRANSMITTERS: ALL-INCLUSIVE2012. Available from:
www.keller.com.
20. IAR Systems. MSP430 IAR EMBEDDED WORKBENCH Tutorials. 2000.
21. IFM. PS3417. SUBMERSIBLE 1BAR 15M CABLE. 2012.
22. Jones BL, Aitken P. Sams Teach Yourself C in 21 Days. 6ta ed: Sams Publishing; 2003.
23. Jordana J, Palls-Areny R. A simple, efficient interface circuit for piezoresistive pressure
sensors. Sensors and Actuators A: Physical. 2006;127(1):69-73.
24. Keller. DCX-22 AA. Data Collector for Water Levels 100% waterproof, air pressure
compensated. 2006.
25. Keller. Piezoresistive OEM Pressure Transmitters Series 4 LD9 LD. 2013. p. 2.
26. Kularatna N. Electronic circuit design: from concept to implementation. Boca Raton:
CRC Press; 2008.
27. Maxim. MAX3471. 1.6A, RS-485/RS-422, Half-Duplex, Differential Transceiver for
Battery-Powered Systems. 1998. p. 8.
28. Maxim. MAX4074MAX4078. Micropower, SOT23, Rail-to-Rail, Fixed-Gain,
GainAmp/Open-Loop Op Amps. 1999. p. 20.
29. Maxim. Application Note 1064. Designing a 4-20mA Current Loop Using the MAX1459
Sensor Signal Conditioner. 2002.
30. Maxim. MAX3322E/MAX3323E. 15kV ESD-Protected, RS-232 Transceivers for
Multidrop Applications. 2003. p. 13.
31. Maxim. MAX6129. Ultra-Low-Power Series Voltage Reference. 2005. p. 16.
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Bibliogrfa
P g i n a | 87
32. Maxim. MAX6029. Ultra-Low-Power Precision Series Voltage Reference. 2006. p. 16.
33. Maxim. MAX6035. High-Supply-Voltage, Precision Voltage Reference in SOT23. 2006.
p. 15.
34. Maxim. MAX6037. Low-Power, Fixed and Adjustable Reference with Shutdown in
SOT23. 2007. p. 18.
35. Maxim. MAX3230E/MAX3230AE/MAX3231E/MAX3231AE. 15kV ESD-Protected +2.5V
to +5.5V RS-232 Transceivers in UCSP and WLP. 2008. p. 16.
36. Maxim. MAX13234EMAX13237E. 3Mbps RS-232 Transceivers with Low-Voltage
Interface. 2008. p. 16.
37. Maxim. MAX481/MAX483/MAX485/MAX487MAX491/MAX1487. Low-Power, SlewRate-Limited RS-485/RS-422 Transceivers. 2009.
38. Maxim. MAX9910MAX9913. 200kHz, 4A, Rail-to-Rail I/O Op Amps with Shutdown.
2010. p. 17.
39. Maxim. MAX44264. Ultra-Low Power Op Amp in a Tiny 6-Bump WLP. 2010. p. 10.
40. Maxim. MAX3222E/MAX3232E/MAX3237E/MAX3241E/MAX3246E. 15kV ESDProtected, Down to 10nA, 3.0V to 5.5V, Up to 1Mbps, True RS-232 Transceivers. 2010. p. 22.
41. Maxim. MAX9617MAX9620. Single/Dual SC70, Zero-Drift, High-Efficiency, 1.5MHz Op
Amps with RRIO. 2012. p. 9.
42. Microchip.
dsPIC33FJ32GP302/304,
dsPIC33FJ64GPX02/X04,
and
dsPIC33FJ128GPX02/X04 Data Sheet. 2008. p. 378.
43. Microchip.
dsPIC33FJ32MC302/304,
dsPIC33FJ64MCX02/X04,
and
dsPIC33FJ128MCX02/X04 Data Sheet. 2008. p. 398.
44. Multicomp. SMBJ / SMCJ Series Surface Mount Voltage Suppressors. 2005.
45. National Instrument. Building an Environmental Monitoring System for SDI-12
Devices2012. Available from: http://ni.com.
46. OTT. OTT PLS Pressure Level Sensor. 2009.
47. Philip C. J, Abhay J, Pramod S, Ajayakumar PD, Natarajan K. Signal Conditioner for
MEMS based Piezoresistive sensor. 2010 5th International Conference on Industrial and
Information Systems, ICIIS 2010,; Jul 29 - Aug 01, 2010,; India2010.
48. Philips Semiconductors. THE I 2C-BUS SPECIFICATION. 2000.
49. Philips Semiconductors. Application Note AN10216-01 I2C MANUAL. 2003.
50. Ramrez J, Villar Y. Fundamentos de la medicin de presin, nivel y caudal en los
sistemas hidrulicos. 2011. p. 107.
51. SDI-12 Support Group. SDI-12. 2012; Available from: http://www.sdi-12.org.
52. SDI-12 Support Group. SDI-12 A Serial-Digital Interface Standard for MicroprocessorBased Sensors. 2013.
53. Sifuentes E, Casas O, Reverter F, Palls-Areny R. Direct interface circuit to linearise
resistive sensor bridges. Sensors and Actuators A: Physical. 2008;147(1):210-5.
54. Texas Instrument. Application Report SLAA148 Interfacing the 3-V MSP430 to 5-V
Circuits. 2002.
55. Texas Instrument. MSP430x1xx Family User's Guide. 2003.
56. Texas Instrument. Application Report SLAA221 CRC Implementation With MSP430.
2004.
57. Texas Instrument. Application Report SLAA207. Choosing An Ultralow-Power MCU
2004.
58. Texas Instrument. MSP430x15x, MSP430x16x, MSP430x161x Mixed Signal
Microcontoller. 2006.
59. Texas Instrument. MSP430x22x2, MSP430x22x4 Mixed Signal Microcontroller. 2007.
60. Texas Instrument. MSP430F663x Mixed Signal Microcontroller. 2012. p. 116.
61. Texas Instrument. MSP430x2xx Family User's Guide. 2012.
62. Texas Instrument. MSP430x5xx and MSP430x6xx Family User's Guide. 2013. p. 1148.
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Bibliogrfa
P g i n a | 88
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
Anexos
Anexo 1. Programa desarrollado para el funcionamiento del
dispositivo en bibliotecas .c y .h.
I2C.h
#include "intrinsics.h"
#include "msp430f6638.h"
void INIT_I2C(void);
void TX_BYTE(unsigned char buffer_TX);
void RX_BYTE(void);
extern unsigned char TXByteCtr;
extern unsigned char TXData;
extern unsigned char *PRxData;
extern unsigned char RXByteCtr;
extern volatile unsigned char RxBuffer[3];
I2C.c
#include "intrinsics.h"
#include "msp430f6638.h"
#include "I2C.h"
void INIT_I2C(void)
{
Port_Mapping();
P2SEL |= 0x36;
UCB0CTL1 |= UCSWRST;
// Reset activado
// SMCLK
UCB0BR1 = 0;
UCB0I2CSA = 0x20;
UCB0CTL1 &= ~UCSWRST;
UCB0IE |= UCTXIE;
UCB0IE |= UCRXIE;
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
}
void TX_BYTE(unsigned char buffer_TX)
{
TXByteCtr = 1;
TXData = buffer_TX;
while (1)
{
while (UCB0CTL1 & UCTXSTP);
while (1)
{
PRxData = (unsigned char *)RxBuffer;
RXByteCtr = 3;
// Inicio de RX buffer
__no_operation();
}
}
#pragma vector = USCI_B0_VECTOR
__interrupt void USCI_B0_ISR(void)
{
switch(__even_in_range(UCB0IV,12))
{
case 0: break;
// Vector 0: No interrupts
case 2: break;
// Vector 2: ALIFG
case 4: break;
// Vector 4: NACKIFG
case 6: break;
// Vector 6: STTIFG
case 8: break;
// Vector 8: STPIFG
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
case 10:
RXByteCtr--;
if (RXByteCtr)
{
*PRxData++ = UCB0RXBUF; // Mover data a la direccin PRxData
if (RXByteCtr == 1)
// Solo un byte?
UCB0CTL1 |= UCTXSTP;
}
else
{
*PRxData = UCB0RXBUF;
}
break;
case 12:
if (TXByteCtr)
{
UCB0TXBUF = TXData;
// Load TX buffer
TXByteCtr--;
}
else
{
UCB0CTL1 |= UCTXSTP;
}
break;
default: break;
}
}
DAC.h
#include "intrinsics.h"
#include "msp430f6638.h"
void INIT_DAC12(void);
void DAC_CONV(unsigned char Pressure_Data);
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
DAC.c
#include "intrinsics.h"
#include "msp430f6638.h"
#include "DAC.h"
void INIT_DAC12(void)
{
P6SEL |= 0x20;
//Config
}
void DAC_CONV(unsigned char Pressure_Data)
{
DAC12_DAT = Pressure_Data;
//Paso el dato
DAC12_0CTL0 |= DAC12ENC;
//Activo la conversion
P1OUT = 0x08;
// Habilito el amplificador
}
#pragma vector = DAC12_VECTOR
__interrupt void DAC12_ISR(void)
{
switch(__even_in_range(DAC12_IV,14))
{
case 0: break;
case 2:
DAC12_0CTL0 &= ~DAC12ENC;
P1OUT = 0;
break;
case 4: break;
case 6: break;
case 8: break;
case 10: break;
case 12: break;
case 14: break;
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
default: break;
}
}
UART.h
#include "intrinsics.h"
#include "msp430f6638.h"
void INIT_UART(void);
unsigned long ORG_COM(unsigned long total1, unsigned long total2,
unsigned long total3, unsigned long total4);
extern unsigned long RXUART;
extern unsigned char TXUART;
unsigned long total;
unsigned long command;
unsigned long command1;
unsigned long command2;
unsigned long command3;
char hasReceived;
UART.c
#include "intrinsics.h"
#include "msp430f6638.h"
#include "UART.h"
#include "SDI-12.h"
void INIT_UART(void)
{
Port_Mapping();
UCA0CTL1 |= UCSWRST;
// Reset activado
//
Activar
Paridad
par,
// CLK = SMCLK
UCA0BR0 = 0x41;
// 1MHz/1200=833.33
UCA0BR1 = 0x03;
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
UCA0MCTL = UCBRS_3+UCBRF_0;
//
Modulation
UCBRSx=3,
UCBRFx=0
UCA0CTL1 &= ~UCSWRST;
UCA0IE |= UCTXIE;
UCA0IE |= UCRXIE;
hasReceived = 0;
Unit_out = 0;
__no_operation();
}
unsigned long ORG_COM(unsigned long total1, unsigned long total2,
unsigned long total3, unsigned long total4)
{
total = total1;
total = total + (total2 << 8);
total = total + (total3 << 16);
total = total + (total4 << 24);
return total;
}
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV,4))
{
case 0:break;
// Vector 0 - no interrupt
case 2:
// Vector 2 - RXIFG
while (!(UCA0IFG&UCRXIFG));
// RX buffer listo?
RXUART = UCA0RXBUF;
hasReceived++;
if (hasReceived==1)
{
command = RXUART;
__delay_cycles (50);
}
else if(hasReceived==2)
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
{
command1 = RXUART;
if (command1 == 0x21)
{
total = ORG_COM(command, command1, command2, command3);
REC_COM(total);
total = 0;
command = 0;
command1 = 0;
command2 = 0;
command3 = 0;
}
__delay_cycles (50);
}
else if(hasReceived==3)
{
command2 = RXUART;
if (command2 == 0x21)
{
total = ORG_COM(command, command1, command2, command3);
REC_COM(total);
total = 0;
command = 0;
command1 = 0;
command2 = 0;
command3 = 0;
}
__delay_cycles (50);
}
else if (hasReceived==4)
{
command3 = RXUART;
__delay_cycles (50);
total = ORG_COM(command, command1, command2, command3);
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
REC_COM(total);
total = 0;
command = 0;
command1 = 0;
command2 = 0;
command3 = 0;
}
case 4:
// Vector 4 - TXIFG
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
UCA0TXBUF = TXUART;
break;
default: break;
}
}
SDI-12.h
#include "intrinsics.h"
#include "msp430f6638.h"
#include "stdlib.h"
#define CRC_MSG_MAXSIZE
#define CRC_TEST_SEQ
20
"123456789"
Anexos
void Start_Cmed_CRC(void);
void Cont_med(void);
void Cont_med_CRC(void);
void default_aswer(void);
double Measure_Start(void);
void Data_Out(void);
void Send(void);
void Send_2(void);
void Send_3(void);
unsigned short crc16MakeBitwise2(unsigned short crc, unsigned short poly,
unsigned char *pmsg, unsigned int
msg_size);
void CRC_out(void);
void DAC_CONV(unsigned char Pressure_Data);
double Pressure;
long Pressure2;
double Real_Pressure;
double Analog_pres;
int Pres_analog;
extern short Unit_out;
unsigned int CRC_ask;
unsigned int Flag_analog;
unsigned int buffer_TX;
unsigned int Sensor1_Status;
unsigned int Sensor2_Status;
long Sensor1;
long Sensor2;
long z;
unsigned int First_char;
unsigned int Sec_char;
unsigned int Third_char;
unsigned short crc16;
unsigned char msg[CRC_MSG_MAXSIZE] = CRC_TEST_SEQ "5555";
void CRC_out(void);
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
SDI-12.c
#include "intrinsics.h"
#include "msp430f6638.h"
#include "stdlib.h"
#include "CRC.h"
#include "I2C.h"
#include "UART.h"
#include "SDI-12.h"
void REC_COM(unsigned long command_RX)
{
if(command_RX == 0x30584C21)
// aXL!
{
Analog_out();
}
else if (command_RX == 0x30584F21)
// aXO!
{
Analog_off();
}
else if (command_RX == 0x30583221)
// aX2!
{
RS232_out();
}
else if (command_RX == 0x30583421)
// aX4!
{
RS485_out();
}
else if (command_RX == 0x30584221)
// aXB!
{
Unit_out = 0;
}
else if (command_RX == 0x30586D42)
// aXmB
{
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
Unit_out = 1;
}
else if (command_RX == 0x30584321)
// aXC!
{
Unit_out = 2;
}
else if (command_RX == 0x30586D43)
// aXmC
{
Unit_out = 3;
}
else if (command_RX == 0x30586B50)
// aXkP
{
Unit_out = 4;
}
else if (command_RX == 0x30584D50)
// aXMP
{
Unit_out = 5;
}
else if (command_RX == 0x30584B21)
// aXK!
{
Unit_out = 6;
}
else if (command_RX == 0x00003021)
// a!
{
Ack_active();
}
else if (command_RX == 0x00304921)
// aI!
{
Send_ID();
}
else if (command_RX == 0x00003F21)
// ?!
{
Addr_query();
}
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
// aM!
{
Start_med();
}
else if (command_RX == 0x304D4321)
// aMC!
{
Med_CRC();
}
else if (command_RX == 0x30443021)
// aD0!
{
Send_Data();
}
else if (command_RX == 0x00305621)
// aV!
{
CRC_ask = 1;
Send_Data();
}
else if (command_RX == 0x00304321)
// aC!
{
Start_med();
}
else if (command_RX == 0x30434321)
// aCC!
{
Med_CRC();
}
else if (command_RX == 0x30523021)
// aR0!
{
Cont_med();
}
else if (command_RX == 0x30524330)
// aRC0
{
Cont_med_CRC();
}
else
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
{
default_aswer();
}
}
void Analog_out(void)
{
P1OUT |= BIT3;
Flag_analog = 1;
}
void Analog_off(void)
{
P1OUT &= ~BIT3;
Flag_analog = 0;
}
void RS485_out(void)
{
P4OUT |= BIT0;
}
void RS232_out(void)
{
P4OUT &= ~BIT0;
}
void Ack_active(void)
{
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x30;
// address
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x0D;
// <CR>
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x0A;
// <LF>
}
void Send_ID(void)
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
{
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x30;
// address
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = '1';
// 1
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = '3';
// 3
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x0D;
// <CR>
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x0A;
// <LF>
}
void Addr_query(void)
{
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x30;
// address
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x0D;
// <CR>
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x0A;
// <LF>
}
void Start_med(void)
{
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x30;
// address
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = '1';
// 1
__no_operation();
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = '2';
// 2
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = '0';
// 0
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = '1';
// 1 muestra
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x0D;
// <CR>
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x0A;
// <LF>
Pressure = Measure_Start();
}
void Med_CRC(void)
{
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x30;
// address
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = '1';
// 1
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = '2';
// 2
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = '0';
// 0
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = '1';
// 1 muestra
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
TXUART = 0x0D;
// <CR>
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x0A;
// <LF>
Pressure = Measure_Start();
CRC_ask = 1;
}
void Send_Data(void)
{
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x30;
// address
__no_operation();
Data_Out();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x0D;
// <CR>
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x0A;
// <LF>
}
void Cont_med(void)
{
Pressure = Measure_Start();
Send_Data();
}
void Cont_med_CRC(void)
{
Pressure = Measure_Start();
CRC_ask = 1;
Send_Data();
}
void default_aswer(void)
{
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x30;
// address
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x30;
// address
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x30;
// address
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x30;
// address
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x30;
// address
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x30;
// address
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x0D;
// <CR>
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x0A;
// <LF>
}
void CRC_out(void)
{
First_char = 0x40|(crc16 * 4096);
Sec_char = 0x40|((crc16 * 64)&0x3F);
Third_char = 0x40|(crc16&0x3F);
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = First_char;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = Sec_char;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
TXUART = Third_char;
__no_operation();
}
double Measure_Start(void)
{
UCB0I2CSA = 0x20;
buffer_TX = 0xAC;
TX_BYTE(buffer_TX);
// Transmitir comando
while (!(P1IFG&0x00));
// EOC
RX_BYTE();
// Recibir data
// Inicio de RX buffer
Sensor1_Status = *PRxData;
Sensor1 = *PRxData++;
UCB0I2CSA = 0x22;
buffer_TX = 0xAC;
TX_BYTE(buffer_TX);
// Transmitir comando
while (!(P1IFG&0x01));
// EOC
RX_BYTE();
// Recibir data
// Inicio de RX buffer
Sensor2_Status = *PRxData;
Sensor2 = *PRxData++;
Real_Pressure = 3 * Sensor1;
Real_Pressure = Real_Pressure - Sensor2;
Real_Pressure = Real_Pressure - 16384;
Real_Pressure = Real_Pressure / 32768;
return Pressure;
}
void Data_Out(void)
{
switch(Unit_out)
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
{
case 0:
if (Flag_analog)
{
Analog_pres = Pressure * 1000;
Pres_analog = (int) Analog_pres;
DAC_CONV(Pres_analog);
}
if (Pressure < 0)
{
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x2D;
__no_operation();
Pressure = Pressure * (-1);
Pressure = Pressure * 1000000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
// TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
TXUART=0x2B;
__no_operation();
Pressure = Pressure * 1000000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
// TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x2D;
__no_operation();
Pressure = Pressure * (-1);
Pressure = Pressure * 1000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
// TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x2B;
__no_operation();
Pressure = Pressure * 1000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
Anexos
}
if (Pressure < 0)
{
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x2D;
__no_operation();
Pressure = Pressure * (-1);
Pressure = Pressure * 100000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
// TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x2B;
__no_operation();
Pressure = Pressure * 100000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
// TX buffer listo?
// TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x2D;
__no_operation();
Pressure = Pressure * (-1);
Pressure = Pressure * 100;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
Anexos
}
else
{
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x2B;
__no_operation();
Pressure = Pressure * 100;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
// TX buffer listo?
TXUART=0x30;
__no_operation();
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x2D;
__no_operation();
Pressure = Pressure * (-1);
Pressure = Pressure * 10000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
// TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x2B;
__no_operation();
Pressure = Pressure * 10000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
Anexos
break;
case 5:
Pressure = Pressure / 10;
if (Flag_analog)
{
Analog_pres = Pressure * 10000;
Pres_analog = (int) Analog_pres;
DAC_CONV(Pres_analog);
}
if (Pressure < 0)
{
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x2D;
__no_operation();
Pressure = Pressure * (-1);
Pressure = Pressure * 1000000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
// TX buffer listo?
TXUART=0x30;
__no_operation();
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x2B;
__no_operation();
Pressure = Pressure * 10000000;
Pressure2 = (long) Pressure;
z = Pressure2 / 10000000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 10000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
}
break;
case 6:
Pressure = Pressure * 102;
if (Flag_analog)
{
Analog_pres = Pressure * 10;
Pres_analog = (int) Analog_pres;
DAC_CONV(Pres_analog);
}
if (Pressure < 0)
{
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x2D;
__no_operation();
Pressure = Pressure * (-1);
Pressure = Pressure * 10000;
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
// TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x2B;
__no_operation();
Pressure = Pressure * 10000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
Anexos
length = sizeof(CRC_TEST_SEQ)-1;
crc16 = crc16MakeBitwise2(CRC16_INIT_REM, CRC16_POLY, msg,
length);
CRC_out();
CRC_ask = 0;
}
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x0D;
__no_operation();
while (!(UCA0IFG&UCTXIFG));
// TX buffer listo?
TXUART=0x0A;
__no_operation();
}
CRC.h
#include "intrinsics.h"
#include "msp430f6638.h"
/**********************************************************************************
FUNCTION:
CRC definitions
AUTHOR:
Emil Lenchak
DATE:
March, 2004
COPYRIGHT:
TOOLS:
***********************************************************************************/
#ifndef _MSP430_CRC
#define _MSP430_CRC
/************************
CONSTANTS
************************/
#ifdef __ICC430__
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
20
#define CRC_TABLE_SIZE
256
#define CRC_TEST_SEQ
"123456789"
#define CRC16_CHECK
0xFEE8
#define CRC16R_CHECK
0xBB3D
#define CRC32_CHECK
0xFC891918
#define CRC32R_CHECK
0xCBF43926
0x8005
#define CRC16_INIT_REM
0x0
#define CRC16_FINAL_XOR
#define CRC16R_POLY
0x0
0xA001
#define CRC16R_INIT_REM
#define CRC16R_FINAL_XOR
0x0
0x0
0x1021
//#define CRC16_POLY_REF
//#define CRC16_INIT_REM
0x0
0x04C11DB7
#define CRC32_INIT_REM
#define CRC32_FINAL_XOR
#define CRC32R_POLY
0xFFFFFFFF
0xFFFFFFFF
0xEDB88320
#define CRC32R_INIT_REM
#define CRC32R_FINAL_XOR
0xFFFFFFFF
0xFFFFFFFF
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
#endif // _MSP430_CRC
unsigned short crc16MakeBitwise(unsigned short, unsigned short, unsigned
char*, unsigned int);
CRC.c
#include "intrinsics.h"
#include "msp430f6638.h"
#include "CRC.h"
/**********************************************************************************
FUNCTIONS:
ARGUMENTS:
pointer
to
CRC
table
(specific
to
generator
polynomial)
arg3: pointer to the message
arg4: size of message in bytes
***********************************************************************************/
/**************************************
CRC MEMBERS (FUNCTIONS)
**************************************/
Anexos
{
unsigned int i, j, carry;
unsigned char msg;
unsigned short temp;
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
Anexos
char
*pmsg,
Anexos
{
if((msg ^ crc) >> 31) crc = (crc << 1) ^ poly;
else crc <<= 1;
msg <<= 1;
}
}
return(crc ^ CRC32_FINAL_XOR);
}
unsigned short crc16MakeTableMethod(unsigned short crc, TBL_MEM
unsigned short *table,
unsigned
char
// normal
return(crc ^ CRC16_FINAL_XOR);
}
unsigned short crc16rMakeTableMethod(unsigned short crc, TBL_MEM
unsigned short *table,
unsigned
char
// reflected
return(crc ^ CRC16R_FINAL_XOR);
}
unsigned
long
crc32MakeTableMethod(unsigned
long
crc,
TBL_MEM
// normal
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos
return(crc ^ CRC32_FINAL_XOR);
}
unsigned long crc32rMakeTableMethod(unsigned long crc, TBL_MEM
unsigned long *table,
unsigned char *pbuffer,
unsigned int length)
{
while(length--)
crc = table[(crc ^ *pbuffer++) & 0xFFL] ^ (crc >> 8); // reflected
return(crc ^ CRC32R_FINAL_XOR);
}
/************************************
CRC UTILITIES
************************************/
Anexos
Alimed Celecia Ramos | Diseo de una sonda de nivel con compensacin de la presin
atmosfrica
Anexos