Memòria del projecte en format PDF

Anuncio
Departament d’Enginyeria Electrònica, Elèctrica i Automàtica
Medida de distancias mediante ultrasonidos
gestionada por microcontrolador
AUTOR: Ignasi Cerezuela Garcia
DIRECTOR: Jose Luis Ramirez Falo
FECHA: Abril 2007
Agradecimientos:
Este trabajo va dedicado a todas las personas que directa o indirectamente han
hecho realidad la finalización de este proyecto; mi director de proyecto por todas sus
sugerencias e ideas que han facilitado mi trabajo y a mi compañero Trini por su apoyo
logístico.
Muy especialmente dedicado a toda mi familia por todo su apoyo y comprensión, y por
ultimo a mi mujer por su paciencia y cariño.
2
Objetivo ………………………………………………………………...……5
1
Origen del proyecto…………………………………………………...6
1.1
1.2
1.3
1.4
2
3
Sistema de sensado…………………………………………………..12
2.1
Sensor de ultrasonidos……………………………………………………12
2.1.1 Modelo SRF04 de Devantech……………………………………...….12
2.1.2 Características de funcionamiento…………………………………....13
2.1.3 Caracterización del sensor………………………………………….....14
2.1.3.1 Introducción……………………………………………………….14
2.1.3.2 Objetivo…………………………………………………………….15
2.1.3.3 Solución adoptada…………………………………………………15
2.1.3.3.1 Sensor…………………………………………………..….16
2.1.3.3.2 Modulo de control…………………………………………19
2.1.3.3.2.1 Control del sensor…………………………………..….19
2.1.3.3.2.2 Envío de datos………………………………….………20
2.1.3.3.3 Modulo de interfase y adquisición………………...………21
2.1.3.4 Resultados experimentales……..………………………………….24
2.1.3.5 Conclusiones………………………………………………………27
2.2
Hardware de control……………………………………………………...28
2.2.1 Microcontrolador……………………………………………………...28
2.2.2 Descripción de placas…………………………………………...……28
2.2.2.1 Placa de control………………………………………………...….29
2.2.2.2 Placa de visualización de resultados……………………….……..30
2.3
Software de control………………………………………………...……..31
2.3.1 Descripción del programa…………………………………………….31
2.3.1.1 Gestión del sensor de ultrasonidos………………………………..31
2.3.1.2 Cálculos………………………………………………………...….33
2.3.1.3 Representación de resultados……………………………………..34
2.4
Fuentes de error…………………………………………………..………35
2.4.1 Error debido al microcontrolador…………………………….…….35
2.4.2 Error debido al sensor de ultrasonidos…………………...…………36
2.4.3 Influencia de los errores…………………………………………...…37
Resultados experimentales……………………………………….....38
3.1
3.2
4
Procedimiento………………………………………………………………7
Metodología de calculo………………………………………………….....8
Teoría de aplicación………………………………………………………10
Tecnología de calculo…………………………………………………..…11
1.4.1 Ultrasonidos…………………………………………………………...11
1.4.2 Aplicaciones de los ultrasonidos……………………………..………11
1.4.3 Por qué los ultrasonidos?.....................................................................11
Pruebas en laboratorio………………………………………………..….38
Pruebas in situ……………………………………………………….……38
Conclusiones…………………………………………………………42
3
5
Referencias………………………………………………...…………44
6
Presupuesto………………………………………………………..…45
Anexo A: Devantech SRF04………………………………………….……46
Anexo B: LC4351-11 datasheet……………………………………………50
Anexo C: PIC16F876 datasheet…………………………………………...56
Anexo D: Estándar IEEE754 para Microchip……………………………88
Anexo E: Esquemas y circuitos impresos…………………………..……120
Anexo F: Código fuente……………………………………………..……125
PFC.asm………………………………………………………………………….126
Math16.inc………………………………………………………………….……153
Anexo G: Caracterización del sensor…………………………...……….159
Código fuente: Carac.asm……………………………………………………....160
Resultados de las caracterización………………………………………………164
4
Objetivo
El objetivo de este proyecto es estudiar un sensor de ultrasonidos de bajo coste. A
partir de este estudio diseñar y montar un medidor de longitud de la máxima precisión y
resolución posible. Como ejemplo de aplicación proponemos utilizarlo como medidor de
producto enrollado.
La información necesaria, la obtendremos mediante un transductor de ultrasonidos.
Un microcontrolador se encargará del tratamiento de la información y de ejecutar las
acciones necesarias. Por último, la representación de la longitud la efectuará un conjunto
de cuatro displays LCD de siete segmentos.
5
1
Origen del proyecto
La idea surge tras haber sido trabajador en una empresa en la que el producto final
debía ser enrollado para evitar arrugas, así como facilitar el posterior transporte.
La empresa, se dedica al recubrimiento con PVC de tejido de poliéster.
Pues bien, tras observar el proceso de fabricación, más concretamente en la
medición de longitud de producto ya elaborado, observé procedimientos que podían ser
mejorados.
El método ahora utilizado, se basa en un único ‘encoder’ para toda la línea de
producción y de algún medidor de distancia de tipo mecánico. Para el caso del ‘encoder’,
la visualización de los metros elaborados se hace en un panel alejado de la línea de
producción. La medida mostrada es siempre referida al punto donde este se encuentra, no
la enrollada realmente.
El medidor de distancia tipo mecánico tiene el inconveniente de tener que estar
cerca del operario, y en lugar de fácil acceso, tanto para ponerlo a cero, como para poder
visualizar la medida cómodamente. El hecho de estar en fácil acceso, puede suponer el
movimiento, puesta a cero o rotura involuntaria. Otro inconveniente, es la suportación que
en ciertos lugares puede ser complicada e incluso molesta a la circulación. Añadir también
que este tipo de medidor tiene que estar en contacto directo con el producto en proceso, lo
que puede provocar señales o marcas, en definitiva taras.
Ya mostrados los problemas o limitaciones con las que cuenta la medición de la
longitud en este proceso, pretendemos idear un sistema, que además de resolver los
problemas observados, añada mejoras o nuevas prestaciones.
La solución que pretendemos aportar a este proceso, podría ser aplicable a
cualquier industria en la que el manejo del producto final sea de iguales características
(papel, etc.).
Pretendemos diseñar un sistema basado en una pareja emisor/receptor de
ultrasonidos, en adelante sensor de ultrasonidos. Todo el sistema irá gestionado por un
microcontrolador y en el que además se podrá visualizar la medida mediante un ‘display’.
6
1.1
Procedimiento
El procedimiento a seguir, para obtener la longitud de producto ya elaborado y listo
para su comercialización, se basa en hacer la medición directamente donde se almacena el
producto en forma de espiral, en adelante enrollador de carro bota.
El resultado de continuos enrollamientos forma una bobina de tejido recubierto de
PVC.
Basándonos en la forma en la que se enrolla el tejido sobre un eje central, podemos
saber la expresión matemática que cumple. La expresión no es otra, que la espiral de
Arquímedes:
R(k ) = Ro + k ·a
(1)
Figura 1. Representación de la espiral de Arquímedes
k = número de vueltas que lleva dadas el espiral
R = radio final del espiral
Ro = radio inicial del eje del espiral
a = espesor del material del espiral
Como que k también puede expresarse, en función del ángulo recorrido por el eje
como:
k=
θ
2·π
(2)
θ =ángulo recorrido por el eje del espiral
Teniendo en cuenta las expresiones (1) y (2), podemos obtener una expresión de la
longitud que llevamos enrollada sobre el eje, en función del número de vueltas k, y el radio
final de una espiral:
L=
2 ·π · k
2·π ·k
0
0
∫ ∂θ ·R(θ ) =
∫
2·π ·k
a·θ 
a·θ 2 

∂θ · Ro +
 = Ro ·θ +

2·π 
2·π ·2  0

7

a·k 2
= 2·π  Ro ·k +
2




(3)
1.2
Metodología de calculo
Para iniciar el cálculo, el primer dato a conocer es la distancia entre donde se coloca
el sensor de ultrasonidos y el eje del enrollador carro bota. Esta distancia es fija para todos
los enrolladores de esta empresa, por tanto será un dato introducido una vez se programe el
microcontrolador. Otro dato que también debe ser introducido es el referido al espesor del
tejido a , pues prácticamente no varia.
A continuación mostramos los pasos que seguimos para obtener la longitud total:
1.- Calcular Ro (radio inicial) mediante la expresión:
Ro = d ee − d ec
Eje
d ee
d ec
Figura 2. Obtención del Ro (radio inicial)
d ee = distancia entre sensor y el eje del cilindro enrollador
d ec =distancia entre sensor y el cilindro enrollador
2.- Calcular el radio medido en un determinado instante o final, R .
3.- Calcular el número de vueltas, utilizando la expresión (1).
k=
R − Ro
a
4.- Calcular la longitud del tejido enrollado, mediante la expresión (3)

a·k 2
L = 2·π  Ro ·k +
2

8



5.- Aplicar corrección en medida de longitud, pues en la última medida de R , no
tenemos en cuenta la longitud, desde donde medimos hasta donde se empieza a
enrollar el tejido, y que es realmente el producto total enrollado:
Lc
Figura 3. Corrección de longitud enrollada a aplicar
Tal como muestra la Figura 3, la longitud Lc , es la corrección a aplicar y que la
podemos calcular mediante, la expresión de la longitud de una circunferencia:
Lcir = 2·π ·R
(4)
Como en nuestro caso, la longitud a medir es media circunferencia:
Lc = π · R
9
(5)
1.3
Teoría de aplicación
La aplicación de la medida del radio de una bobina para el posterior cálculo de la
longitud enrollada en una bobina, está basada en la reflexión de ondas acústicas
gobernadas por un sensor de ultrasonidos.
Si la velocidad de propagación del sonido en el medio es conocida, y el tiempo
tomado por las ondas acústicas para viajar desde la fuente de emisión al objeto o
superficie, la distancia de la fuente al objeto o superficie puede calcularse.
Éste es el principio de la medida de esta aplicación.
Aquí el medio de las ondas acústicas es el aire, y las ondas acústicas usadas son
ultrasónicas inaudibles al oído humano.
Asumiendo que la expresión de la velocidad de propagación del sonido en el aire es
dependiente de la temperatura:
c = 331,4 + 0,61·T
(6)
T=temperatura del aire en ºC
Una vez explicada la manera de hallar la distancia entre el sensor y el objeto o
superficie, y teniendo en cuenta la expresión (x), podemos hallar una expresión que nos
describa como hallar esta distancia:
d=
c·t
2
(7)
d=distancia entre sensor y objeto o superficie en m.
c= velocidad de propagación del sonido en el aire en m/s.
t=tiempo transcurrido entre envío de pulso y recepción del pulso en s.
La expresión (7) queda dividida por 2, ya que el tiempo que controlamos es la ida
más la vuelta del pulso enviado y por tanto corresponde al doble de la distancia que
realmente queremos conocer.
10
1.4
Tecnología de cálculo
1.4.1 Ultrasonidos
Los ultrasonidos son ondas acústicas, y por tanto de tipo mecánico, que se propagan
por todos los materiales, mediante el movimiento armónico de sus moléculas. Se llaman
así porque su frecuencia de vibración está por encima de la frecuencia de las ondas
audibles –se consideran audibles las frecuencias inferiores a 20 KHz-.
1.4.2 Aplicaciones de los ultrasonidos
Existen numerosas aplicaciones que utilizan las vibraciones ultrasónicas en medios
sólidos, líquidos o gaseosos. Es frecuente determinar distancias o espesores de materiales,
velocidad de fluidos, densidad de materiales, concentración de disoluciones, etc.
En medicina se usan con fines terapéuticos (hipertermia, litotricia) o en la industria
para activar procesos de naturaleza física (filtros, aglomerantes) o química (aceleración de
reacciones, limpieza de piezas).
Es muy conocida la ecografía ultrasónica como una técnica que facilita el diagnóstico.
También son muy conocidas las aplicaciones marinas de los ultrasonidos (SONAR), donde
son usadas para trazar mapas del fondo marino, detectar bancos de peces, u otros objetos.
En la industria, los ultrasonidos resultan muy adecuados para medir las características
físicas de productos o materiales y determinar, en su caso, la existencia de defectos internos –
por ej. poros, grietas, calidad de las uniones, etc.-.
1.4.3 ¿Por que ultrasonidos?
En este apartado justificaremos porque decidimos usar como tecnología de cálculo
para nuestra aplicación concreta, los ultrasonidos:
- No existe contacto directo con la superficie u objeto a medir.
- No audible para el oído humano, por lo que no percibiremos polución por ruido.
- Elementos emisores/receptores de reducido tamaño, incluida su circuitería de control
- Fácil manejo y fiable capacidad de detección.
11
2
Sistema de sensado
2.1
Sensor de ultrasonidos
2.1.1 Modelo SRF04 de Devantech
Hemos optado por elegir como sensor de ultrasonidos una pareja emisor/receptor
compacta, con su correspondiente circuitería de control ya incorporada en la misma placa.
Además la propia pareja, se encarga de usar una codificación de los pulsos, para
evitar falsos ecos, así como proporcionarnos un pulso con ancho proporcional a la distancia
medida.
Tras comparar las parejas emisor/receptor existentes en el mercado, decidimos usar
el modelo SRF04 Ultrasonic Range Finder de Devantech. Los motivos, que nos hacen
decidir por este modelo y marca son los siguientes:
- Dimensiones: tiene un reducido tamaño.
- Consumo: bajo, para mismas prestaciones que otros fabricantes.
- Rango de medida: amplio.
- Complejidad de uso: fácil, se maneja con tan solo 2 pines (exceptuando
alimentación).
Todas las características técnicas están detalladas en el Anexo A.
12
2.1.2 Características de funcionamiento
Funcionamiento:
Lo que hace el controlador incorporado en el sensor SRF04, es emitir una ráfaga de
impulsos y a continuación empieza a contar el tiempo que tarda en llegar el eco. Este
tiempo se traduce en un pulso de eco, de anchura proporcional a la distancia a la que se
encuentra el objeto.
El procedimiento a seguir para la medición, es el siguiente:
1- Mandar una señal de arranque en el pin 3 del SRF04 (Entrada Disparo). El pulso
de disparo tiene que tener una anchura mínima de 10 us.
2- Leer la anchura del impulso que nos proporciona el pin 2(Salida Eco). En caso
de que no se produzca ningún eco, por que no se encuentra un objeto, el pulso de eco tiene
una longitud aproximada de 36 ms.
Hay que dejar un retardo de 10 ms desde que se hace una lectura hasta que se
realiza la siguiente, con el fin de que el circuito se estabilice.
Diagrama de tiempos:
13
2.1.3 Caracterización del sensor
2.1.3.1 Introducción
Los sensores son dispositivos electrónicos que recogen la información del
ambiente, o bien se ayudan del ambiente como medio de transmisión y actúan como
transductores, convirtiendo la forma de energía asociada con la información que se desea
obtener, en una forma en que se pueda procesar fácilmente. La forma de energía
típicamente involucrada en los procesos de sensado incluye química, eléctrica, magnética,
mecánica, radiante y térmica.
Tradicionalmente se han desarrollado los dispositivos usando técnicas de ensayo-yerror (trial-and-error) en lugar de siguiendo un acercamiento científico profundo.
Muchas de las tecnologías existentes utilizan mezclas complejas de varios
materiales diferentes, la funcionalidad de los cuales todavía no es conocida o bien
entendida. Además, no se entienden totalmente los mecanismos de degradación o
funcionamiento no ideal de los materiales, que llevan al envejecimiento y a un
funcionamiento distinto al esperado de un sensor en la mayoría de los casos.
El conocimiento básico de los mecanismos dándose cuenta de su conducta es
necesario para la explotación del potencial de materiales y métodos existentes y así obtener
fiabilidad, bajo coste y precisión.
Todo lo expuesto al principio de este apartado, nos lleva a tener que realizar
pruebas de funcionamiento y analizar la respuesta de nuestro sensor. Mas en nuestro caso,
el sensor utilizado no ha sido concebido para aplicaciones que requieran mucha precisión
en la respuesta sino mas bien para detección de objetos.
La medida del radio de una bobina de producto enrollado de manera precisa, es
necesaria para un posterior cálculo de longitud de material enrollado preciso y que no
exceda los límites de error prefijados por el usuario del sistema de medición.
Para conseguir movernos entorno a los límites de error en la medida del radio de la
bobina de producto enrollado, es necesario conocer la precisión de nuestro sensor y
determinar si es factible para nuestra aplicación.
En nuestro caso el fabricante de nuestro sensor no nos proporciona ningún dato
referente a la precisión, por lo que será tarea nuestra determinar el error que comete al
realizar las medidas.
La tarea no es otra que observar como se comporta nuestro sensor y corregir su
funcionamiento de manera adecuada, es decir caracterizarlo respecto a la distancia que
mide.
14
2.1.3.2 Objetivo
Realizaremos una serie de medidas con el objeto de analizarlas, y por último
minimizar o eliminar el error que existe respecto los datos proporcionados por el fabricante
en relación a la respuesta que este nos da.
Más concretamente realizaremos mil muestras de distancia por cada medida
incluida en el rango de trabajo, y separadas entre ellas 0,5mm. Como nuestro rango de
trabajo está comprendido tan solo entre 20 y 62cm se realizarán un total de ochenta y
cuatro medidas, con mil muestras por cada medida. Por cada medida también se anotará la
temperatura ambiente, para una revisión de la velocidad de propagación del sonido en el
aire según se vio en la expresión (6).
Una vez obtenidos todos los datos habrá que realizar un estudio estadístico sobre
las muestras de cada medida, ver que tendencia siguen y cuantificar el error que comete el
sensor siempre respecto a la medida real. Con toda esta información decidiremos que
acciones serán necesarias llevar a cabo, para que ese error no esté presente en la medida
final.
El principio utilizado para la medida de distancia así como el funcionamiento y
características del sensor, ya fue explicado en el apartado 2.1.2.
2.1.3.3 Solución adoptada
Decidimos usar el propio sensor a caracterizar, el microcontrolador que será usado
en la aplicación final para la cual se redacta el presente proyecto y un computador que
disponga de puerto serie basado en el estándar RS-232 con su interfase adecuada. El enlace
entre los distintos bloques puede verse representado en el diagrama de la Figura 4.
Una vez enumerados los elementos básicos para llevar a cabo la caracterización, lo
dividiremos en bloques con el objeto de entrar más en detalle en su descripción por
separado. La clasificación de los bloques se realiza de la siguiente manera:
-
Sensor
Modulo de control
Modulo de interfase y adquisición
((((((((
))))))))
Modulo de adquisición
Modulo de control
Sensor
PORTB
µC
USART
Interfase
Figura 4. Diagrama de bloques
15
PUERTO
SERIE
RS-232
2.1.3.3.1
Sensor
En este apartado explicaremos todos los elementos referentes al sensor (fijación,
desplazamiento, aislamiento) excepto sus características físicas y de funcionamiento.
La fijación del sensor se realiza sobre una pequeña plancha de hierro, que a su vez
va fijada a una lámina metálica. La unión entre el sensor y la plancha de hierro y entre la
plancha de hierro y la lámina metálica se realiza con goma natural, además de una fijación
mecánica con tornillos. Se puede ver gráficamente en la Figura 5.
Esta goma minimizará el nivel de ruido transmitido mecánicamente (vibraciones),
que se transmitan a través del perfil de aluminio que fija la lámina metálica y este. Las
aplicaciones de la goma natural para el control de vibraciones son populares por su bajo
costo, fácil aplicación y efectividad en un gran rango de frecuencias.
Figura 5. Detalle de fijaciones mecánicas y su aislamiento.
También hemos utilizado un perfil de aluminio por el que se desplazará esa lámina
metálica. La lámina tiene mecanizados dos tornillos para fijarla el sensor a la altura a la
que se desee. El detalle del perfil de aluminio junto con el conjunto sensor, plancha y
lámina puede verse en la Figura 6.
Figura 6. Mecanismo de ajuste de altura del sensor.
16
El perfil de aluminio va montado sobre la plataforma de una guía lineal, que nos
permitirá desplazar el sensor respecto de una parte fija que hará la función de obstáculo o
referencia a medir.
La guía lineal dispone de dos ejes por los que se desplaza la plataforma. Los
desplazamientos serán de distancias conocidas, ya que la guía lineal lleva incorporada en el
lateral una regla (Figura 7). Además de conocer la magnitud de los desplazamientos,
también conocemos la distancia hasta la parte fija que nos será de gran ayuda al tomar las
muestras.
Figura 7. Elementos de la guía lineal.
Otro elemento que hemos utilizado en la caracterización y referido al sensor, es la
lana de fibra de vidrio. Se ha colocado en la base del perfil de aluminio, y fuera del lóbulo
de emisión de nuestro sensor1(Figura 8).
Tiene por objeto filtrar los ecos debidos a propagaciones de señal por caminos
distintos de la línea recta, y que por tanto aportarían un valor erróneo de distancia mayor al
real.
Sabemos que la lana de fibra de vidrio se usa tanto como aislante acústico como
térmico por su alto coeficiente de absorción, gracias a la disposición interna de sus fibras.
1
Ver Anexo A
17
Figura 8. Aislamiento con lana de fibra de vidrio.
18
2.1.3.3.2
Modulo de control
En este apartado explicaremos todo lo referente al elemento que controla todo el
procedimiento de caracterización, que es el microcontrolador. Se explicará como realiza el
control del sensor y el envío de datos al computador y los recursos que utiliza para ello.
2.1.3.3.2.1
Control del sensor
Nuestro sensor requiere dos entradas/salidas libres en el microcontrolador, tanto
como para iniciar (trigger) la operación de cálculo de distancia como para retornar un
ancho de pulso proporcional a la distancia medida.
Para el inicio de disparo del sensor usamos una salida del PORTB, en concreto la
RB1 (línea 1 del PORTB).
Para la recepción del ancho de pulso proporcional a la distancia medida,
configuramos la línea 0 del PORTB (RB0/INT) como entrada. Todas las líneas de este
puerto de E/S tienen la peculiaridad de que un cambio de estado del elemento conectado a
ella, producen una interrupción. Al producirse la interrupción se entra en la rutina de
servicio a la interrupción, en adelante RSI (si se configura para ello).
Además esta línea (RB0/INT) y todas las del puerto, permiten ser configuradas para
detectar tanto flancos de subida como de bajada, para después entrar en la RSI. Esto nos
será útil para detectar el inicio y el fin del ancho de pulso mandado por el sensor.
Otro recurso que nos ofrece el microcontrolador y que también usaremos para la
caracterización es el Timer1. Este se encargará de medir el tiempo del ancho de pulso
retornado por el sensor. El rango del ancho de pulso retornado por el sensor para la
caracterización, esta comprendido entre 1160µs…3596µs.
La expresión que sigue el Timer1 es la siguiente:
t medido = TCY ·(216 − TMR1)·N
(8)
Donde
TCY = tiempo del ciclo de instrucción.
TMR1 = valor del registro de cuentas, dividido en {TMR1H,TMR1L}.
N = Valor del preescaler o predivisor.
Se utiliza este timer porqué es el único de 16 bits en el microcontrolador, y nos
permite contar hasta 65536 cuentas con el preescaler a 1. Si además usamos un cuarzo de
fOSC=20MHz conseguimos un tic de 0,05µs, que supone tener un ciclo de instrucción
0,2µs. Esta cuenta nos permitirá ser más precisos en la cuenta del ancho de pulso retornado
por el sensor, ya que es un tic pequeño.
19
2.1.3.3.2.2
Envío de datos
Una vez tenemos capturado el valor del Timer1 por medio del registro
TMR1={TMR1H,TMR1L}de 16 bits, que a su vez esta divido en 2 Bytes, debemos
transmitirlo al computador para tratarlo.
Para la transmisión de los datos, el microcontrolador dispone de un periférico de
comunicación serie. Este periférico se llama USART(Universal Synchronous
Asynchronous Receiver Transmitter).
El modo de funcionamiento que utilizaremos sobre la USART y sus características:
- Tx/Rx asíncrona.
- Full-duplex: existe una línea de Tx y otra de Rx.
- Envío de datos de 8bits.
- 1 bit de Start y otro de Stop.
- Velocidad de transmisión configurable.
El procedimiento que se sigue para realizar la transmisión de los 16 bits que se
compone el registro que contiene el valor de la cuenta del Timer1 es el siguiente:
Inicio
transmisión
Byte
TMR1H
transm.?
No
Si
Transmisión
byte TMR1H
Transmisión
byte TMR1L
No
No
Transmisión
realizada?
Transmisión
realizada?
Si
Si
Fin
transmisión
Figura 9. Diagrama de transmisión
20
La configuración de los registros asociados a la transmisión asíncrona con USART
serán comentados en el Anexo G, que incluye el código en ensamblador.
El funcionamiento de la transmisión utilizada y todo los registros que intervienen
están explicados con más detalle en el apartado 10 del datasheet de nuestro
microcontrolador (Anexo C).
2.1.3.3.3
Modulo de interfase y adquisición
La misión de la interfase en la caracterización del sensor es la de adaptar los niveles
de tensión entre el microcontrolador y el estándar RS-232 del puerto serie de nuestro
computador.
Existen módulos compactos de interfase entre señales de microcontrolador y por
ejemplo el puerto serie de un computador. En todos los casos el precio de estos módulos
resulta relativamente caro (alrededor de 4€). Además este modulo requiere de cinco
capacidades electrolíticas (0,35€). Como no se usará en ninguna otra parte del proyecto,
decidimos construir uno.
El circuito de la Figura 10 muestra el circuito que substituye al modulo compacto
de interfase de comunicación, que como puede observarse se ha realizado con pocos
componentes y de bajo precio (total 0,5€). Comparando el precio del modulo compacto
con el de los componentes, resulta 8 veces más caro el modulo compacto junto con sus
capacidades.
Figura 10. Interfase TTL a RS-232
21
Los terminales TD y RD van conectados directamente al microcontrolador,
concretamente a las líneas RC6 y RC7 del PORTC. Estas líneas son las que usa la USART
para comunicarse.
Por otro lado los terminales RxD, TxD y Gnd van conectados directamente al
puerto serie por medio de un conector DB9.
Conectamos RxD al pin 2 del conector y que se corresponde a recepción de datos
en el estándar RS-232. TxD irá conectado a envío de datos (pin 3 del RS-232) y por último
Gnd irá conectado al pin 5 junto con todas las masas del circuito de interfase.
Con la interfase de adaptación de niveles de tensión, ya estamos dispuestos para la
recepción de datos al modulo de adquisición desde el microcontrolador. Con los datos ya
memorizados del modulo de adquisición, usaremos una serie de herramientas de software
para finalmente obtener unos resultados experimentales
La primera herramienta software que utilizamos, es para la adquisición de datos
recibidos por el puerto serie. Estos datos no son otros que el valor del registro TMR1,
primero su byte más significativo (MSB) y después el menos significativo (LSB).
Esta herramienta capturará los datos del puerto serie que configuremos, y los
guardará en un archivo de texto común *.txt. El programa Terminal hay que configurarlo
debidamente, con todo lo referente a velocidad de recepción, bits de stop, etc. Las figuras
que mostramos a continuación, muestran una captura del programa así como los
parámetros que podemos configurar.
Figura 11. Presentación inicial del programa Terminal.
22
Figura 12. Parámetros de comunicación configurables
Una vez hemos capturado los valores transmitidos por el microcontrolador, los
trasladamos a una hoja de cálculo.
23
2.1.3.4 Resultados experimentales
Partimos de la información contenida en la hoja de cálculo.
La hoja de cálculo nos permitirá aplicar sobre las muestras varios tipos de
herramientas estadísticas. Otra herramienta interesante que nos ofrece, es la creación de
gráficos que nos pueden aportar mucha información (distribución, errores, desviaciones,
etc.).
La primera información que decidimos obtener de cada una de las medidas, fue
hacer la media de todas la muestras. Una vez obtenida la media optamos por calcular cual
era la desviación estándar, cuya expresión es la siguiente:
σ=
1 n
·∑ ( xi − x ) 2
n i =1
(9)
donde n =numero de muestras
xi =valor de la muestra i
x =valor medio de todas las muestras de cada medida
El cálculo de la desviación estándar no nos proporcionó mucha información
concluyente sobre nuestras muestras. Esto es debido a que la desviación estándar nos dice
cuánto tienden a alejarse las muestras del promedio. De hecho específicamente las
desviación estándar es "la media de lejanía de las muestras respecto de la media".
Pero la falta de información era porque no mostraba si las diferencias respecto la
media eran positivas o negativas. Tan solo cuanto se alejaban de esta los valores en
general.
Las dos herramientas estadísticas utilizadas hasta ahora, nos sirvieron para hacernos
una idea inicial del error de nuestro sensor.
Con los datos de que disponíamos en ese momento también obtuvimos el error
medio en cada una de las medidas. Ese error medio estaba comprendido entre 0,85 y 1,1cm
entre todas las medidas.
Pero observamos un rango en el que ese error medio tomaba valores muy elevados
con respecto a los demás. Concretamente el rango implicado era entre 30 y 45cm. El error
medio en este rango sobrepasaba los 2,5cm de error, dado que existían errores medios en
algunas de las medidas de hasta 12cm.
Llegados a este punto decidimos investigar las muestras de este rango de medidas y
ver que ocurría. Para obtener más información sobre las muestras de las medidas
implicadas había que aplicar otras herramientas más concretas.
Una de las herramientas que nos fue útil, fue la aplicación de la moda. Ya que su
definición es el valor que ocurre con mayor frecuencia; es decir, el valor más repetido.
24
Aplicando la moda pretendíamos ver cuales eran los valores de las muestras que
más se repetían, y así poder sacar más conclusiones. El valor de la moda nos confirmó que
el valor que más se repetía, tenía un error incluido en el rango de 0,85 y 1,1cm. Esto se
cumplió para cada una de las medidas.
¿Pero que tanto por ciento de muestras incluía esa valor de moda, de las mil por
medida?. Pues bien la herramienta que respondía a esa pregunta era la frecuencia.
Para cada una de las medidas comprendidas entre 30 y 45cm, calculamos el error de
cada muestra. Después buscamos que error se repetía más entre todas las muestras. La
Tabla 1, muestra los valores utilizados para el calculo de la frecuencia. Hemos tomado el
caso de una medida de 30,5cm y las 30 primeras muestras (la columna “Error” esta
redondeada a un decimal).
NºMuestra Error
Veces
que se
repite
Error
respecto
medida real
1
0,8
0
0
2
0,8
0
0,1
3
0,8
0
0,2
4
0,8
0
0,3
5
0,8
0
0,4
6
0,8
0
0,5
7
0,8
0
0,6
8
0,8
11
0,7
9
0,8
819
0,8
10
0,8
1
0,9
11
0,8
0
1
12
0,8
7
1,1
13
0,8
4
1,2
14
0,8
4
1,3
15
0,8
0
1,4
16
0,8
0
1,5
17
0,8
0
1,6
18
0,8
0
1,7
19
0,8
0
1,8
20
0,8
0
1,9
21
0,8
0
2
22
0,8
0
2,1
23
0,8
0
2,2
24
0,8
0
2,3
25
0,8
0
2,4
2,5
26
0,8
11
27
0,8
59
2,6
28
0,8
2
2,7
29
0,8
0
2,8
30
0,8
0
2,9
Tabla 1. Distribución de errores en las muestras.
25
Con la tabla anterior podemos trazar unos gráficos muy representativos, y que
aportan mucha información sobre la distribución de errores.
Medida real=30,5 Moda=31,27
Error respecto medida real(cm)
14
12
10
8
6
4
2
0
-2
0
200
400
600
800
1000
Nº de muestra
Grafico 1. Error para cada una de las muestras.
900
800
N muestras repetidas
700
600
500
400
300
200
100
0
0
2
4
6
8
10
12
14
Error respecto medida real(cm)
Grafico 2. Muestras repetidas para cada valor de error.
A pesar de tener algunos errores entre 12 y 14cm (Grafico 1), el error que en más
muestras se repite para esta medida es de 0,8cm (Tabla 1). El Grafico 2 muestra que aun
habiendo errores elevados en algunas muestras, un tanto por ciento muy alto de muestras
tienen un error dentro del rango normal (0,8…1,1cm).
Ello significa que podemos y debemos filtrar esos errores, que se repiten en un
tanto por ciento muy bajo.
26
El origen de tener esos errores tan elevados en tan solo ese rango de medidas, lo
desconocemos. Realizamos una serie de modificaciones tanto software como hardware,
para tratar de eliminarlo o minimizarlo. Pero el error persistió:
-Modificaciones software:
· Aumento del tiempo entre medidas de distancia, para descartar que el
sensor no tuviera tiempo suficiente para estabilizarse y medir
correctamente.
- Modificaciones hardware:
· Incremento de distancia del soporte vertical del sensor (Figura 6) con
respecto a guía lineal, para evitar posible rebotes por las características
físicas donde estaba fijada la guía.
De entre todos los datos obtenidos y tratados en la caracterización, hemos
adjuntado 20 tablas de 20 medidas distintas en las que se muestra los errores cometidos de
las 50 primeras muestras. Los cálculos de la moda y la frecuencia y valor de esos errores
son referidos al total de 1000 muestras (Anexo G).
2.1.3.5 Conclusiones
Con toda la información obtenida con la caracterización del sensor, podemos y
debemos saber el error de medida medio que comete el sensor. Este error es siempre
referido al rango en el que nos hemos limitado durante la caracterización, en el cual se ha
mantenido bastante lineal.
Por tanto podemos asegurar que para un rango de entre 20-62cm, el sensor comete
un error medio de entre todas las medidas realizadas de 0,9cm. Además también hemos
podido comprobar que es capaz de detectar cambios de 5mm en la medición de la
distancia.
27
2.2
Hardware de control
2.2.1 Microcontrolador
Tras comparar varias de las familias que nos ofrecen cada uno de los fabricantes, y
después de comparar prestaciones mínimas y necesarias, nos decantamos por un
microcontrolador de 8 bits.
El fabricante por el que nos decantamos es Microchip, y mas concretamente por un
microcontrolador de gama media 16F87x. Dentro de esta gama, hay un modelo 16F876
que inicialmente cubre todas nuestras necesidades.
La elección de este modelo, nos permite realizar el prototipo con un buen tamaño
de memoria dentro de su gama. En el caso de haber excedente de memoria, una vez el
dispositivo se produjera en serie, siempre se podría recurrir a otro modelo, el 16F873, que
es idéntico al anterior (encapsulado, prestaciones…) pero con la mitad de memoria.
Nos decidimos por Microchip por los siguientes motivos:
- Marca mundialmente reconocida, lo que implica facilidad a la hora de encontrar
en cualquier tienda de electrónica.
- Diferentes gamas, y cada gama perfectamente detallada.
- Programación ‘ISP (In System Programming)’, es decir, nos permite programar el
chip sin necesidad de extraerlo de su zócalo.
- Dispone de software de libre distribución, para su programación.
- Buena relación precio-prestaciones.
Las principales características del 16F876 son las siguientes:
- Amplio rango de tensiones de alimentación: 2,2…5,5V.
- Bajo consumo.
- Memoria de programa: 8 Kbytes tipo Flash.
- Memoria de datos: 256 Bytes tipo EEPROM y 368 Bytes tipo RAM.
- Comunicación serie con periféricos (SPI).
2.2.2 Descripción de placas
El presente prototipo esta formado por tres placas individuales, e interconectadas
entresí. Cada una de ellas tiene una función distinta:
-
Placa de control
Placa de visualización
Decidimos hacerlas por separado, para conseguir una mejor integración y para que
ocupen un espacio mínimo en la caja donde irán alojadas. Todos los esquemas de las
distintas placas están incluidos en el Anexo E.
28
2.2.2.1 Placa de control
Es la placa que contiene el microcontrolador, y por tanto llevara el control sobre los
periféricos (sensor de ultrasonidos y los 4 displays de 7 segmentos).
Además del microcontrolador contiene un cristal de cuarzo y sus respectivas
capacidades2. Tal y como recomienda el fabricante del microcontrolador, se conectara el
cristal y las capacidades en configuración Colpitts.
Figura 16. Configuración Colpitts para cristal de cuarzo
Por otra parte contiene un conector de 14 pins, que interconexionará con la placa de
visualización. Por medio de esta interconexión mandamos tanto señales para la activación
de cada unos de los leds de los displays(a…g) por PORTC (7…1) mediante resistencia3,
como las señales de orden de activar cada uno de los displays, por PORTA (3…0).
Utilizamos otros dos pins para mandar +5V y GND.
Figura 17. Ensamblaje final de la placa de control
2
3
Ver Anexo C
Estas resistencias regulan el brillo de los displays 7 segmentos
29
2.2.2.2 Placa de visualización de resultados
Esta aloja los 4 displays de 7 segmentos encargados de representar el resultado final
de los cálculos, que realiza el microcontrolador (longitud enrollada). Al igual que en la
placa de control esta placa dispone de un conector de 14 pins, por el que recibe las ordenes
del microcontrolador mediante cable plano.
La selección de cada uno de los displays se hace mediante un transistor PNP y
resistencia4 en la base del transistor, también integrados en esta placa (Ver Anexo x).
Figura 18. Ensamblaje final de la placa de visualización
4
Resistencias en la base del transistor PNP, actúan como polarizadoras.
30
2.3
Software de control
2.3.1 Descripción del programa
Toda la programación del proyecto se ha realizado íntegramente en lenguaje
ensamblador del fabricante del microcontrolador, es decir Microchip. Aunque es un
lenguaje que no ofrece mucha funcionalidad a la hora de programar, no hemos hecho con
herramientas y librerías para realizar funciones matemáticas u otras.
Para una mejor descripción del programa de nuestro proyecto, dividiremos el
programa en tres grandes bloques que nos proporcionaran una mayor comprensión:
-
Gestión del sensor de ultrasonidos
Cálculos
Representación de resultados
Aún desglosado en tres bloques diferenciados, existe una función común a todos.
Se trata de la inicialización de todos los datos que se manejan a lo largo del programa,
llamada “Inicializ”
2.3.1.1 Gestión del sensor de ultrasonidos
Con todos los datos inicializados, el punto de partida de la ejecución del programa
y por tanto de la gestión del sensor es la pulsación de “Start”.
Lo siguiente es el envío de un pulso lo suficientemente ancho (ver apartado 2.1.2)
al sensor, a modo de inicio de medición “Trigger”. Una vez enviado el pulso, lo que
hacemos es esperar y medir el pulso de recepción por medio de RB0/INT (“ECHO”).
La medición del ancho de este pulso de recepción se realiza por medio de TMR1 y
con la ayuda de la activación de una interrupción por RB0/INT. Dentro de la rutina de
servicio a la interrupción (en adelante RSI) se realiza el inicio/paro de dicho timer.
En la Figura 19, se muestra un pequeño diagrama de flujo que muestra de manera
más clara, el proceso de la obtención del ancho de pulso.
31
Envío pulso
“Trigger”
NO
¿Se recibe
“ECHO”
en H?
SI
Iniciar
TMR1
NO
¿Se recibe
“ECHO”
en L?
SI
Parar
TMR1
Figura 19. Diagrama de la gestión del sensor
32
2.3.1.2 Cálculos
Para los consiguientes cálculos que debíamos realizar a partir del dato de partida
(ancho de pulso “ECHO”), requeríamos de una cierta precisión. El conjunto de
instrucciones RISC5 que ejecutaba nuestro microcontrolador era limitado y no contemplaba
la posibilidad de manejar variables no enteras o de coma flotante.
Este problema lo solucionamos con la inserción de una librería que nos proporciona
el fabricante, y que nos permite tanto convertir enteros a coma flotante como realizar
operaciones entre datos en coma flotante. El estándar para representación de datos en coma
flotante utilizado, es el IEEE 754. Más detalles de las rutinas que acepta así como la forma
de realizar las conversiones están incluidas en el Anexo D.
Desde la obtención del dato de partida hasta el resultado total en metros, se realiza
todos los cálculos pertinentes con el formato en coma flotante.
El diagrama que representa la secuencia de ejecución de todas las funciones
referidas a cálculos, es el siguiente:
Obtención
ancho pulso
“ECHO”
Conversión de
cuentas a us
Revisión de c
Conversión
us a cm
Cálculo
radio
NO
Tenemos
el Ro?
SI
Almacena R
Cálculo
vueltas K
Cálculo
L(long.enroll)
Figura 20. Secuencia de ejecución de funciones de cálculo
5
Reduced Instruction Set Code
33
2.3.1.3 Representación de resultados
Este bloque es el encargado de tomar el dato final generado por el bloque
“Cálculos”, es decir la longitud total enrollada. El dato se transforma de manera que
represente el número deseado en los cuatro displays 7 segmentos.
Toma longitud
total enrollada
Conversión
binario a BCD
Envío pulso
“Trigger”
Ordenar
dígitos
Conversión
HEX a valor a
representar
Envío valor
dígitos a
display
Figura 21. Preparación y representación de datos
Se introduce un retardo de 10ms entre los envíos de valor de cada display para que
sea visible por el ojo humano, y reducir el molesto parpadeo.
Nótese que una vez realizado el envío del valor correspondiente a cada display, se
inicia de nuevo el ciclo con un nuevo “Envío pulso Trigger” hacia el sensor.
Cada una de las funciones que se ejecutan, están debidamente comentadas en el
código fuente (PFC.asm) del proyecto en el Anexo F.
34
2.4
Fuentes de error
2.4.1 Error debido al microprocesador
Al realizar la medición de la anchura de la señal ‘ECHO’ recibido del sensor de
ultrasonidos, con el cual determinamos la distancia que hay entre el sensor y la bobina de
tejido no hay que pasar por alto algunos retardos que se producen.
El primer retardo es debido a que en el fin de la señal ‘ECHO’, es decir en la
transición de nivel alto a bajo, nuestro microcontrolador se enterará de esta transición
mediante la interrupción producida a través del ‘PORTB’ adecuadamente configurado.
Pues bien, debido a esta interrupción entraremos en la rutina de servicio a la interrupción,
pero tenemos un retardo de 3·TCY a 4·TCY, desde que se produce la interrupción hasta
que realmente entramos en la rutina de servicio.
Si ponemos un ejemplo numérico a este retardo:
Para un cristal de cuarzo con f osc = 4MHz → Tosc = 0.25µs → TCY = 4·Tosc = 1µs
El retardo máximo es 4µs , a tener en cuenta, ya que el rango de anchura
aproximado para la señal ‘ECHO’ está comprendida entre 100us-18ms y nos provoca un
error a tener en cuenta.
Otra medida para obtener la máxima precisión en la medida de la anchura de este
‘ECHO’ que tan sensible es a retardos, es el hecho de ajustar al valor mínimo el
‘preescaler’ del timer que contará ese tiempo. De esta manera conseguimos que la cuenta
se incremente a cada ciclo maquina, y no cada dos o más tal como nos permite el
‘preescaler’.
El error que cometemos al realizar la cuenta con el timer, es de ± 1 cuenta:
1 cuenta= TCY = 4·Tosc = 1µs (Reloj a 4MHz)
Como que el fabricante del sensor de ultrasonidos nos indica que para transformar
la medida del ancho de pulso de la señal ‘ECHO’ (us) a distancia entre emisor/receptor y
obstáculo (cm) con la siguiente expresión:
d=
t  cm 


58  µs 
(7’)
d=distancia entre emisor/receptor y obstáculo (cm)
t=ancho de pulso de la señal ‘ECHO’ ( µs)
La expresión (7’), resulta de hacer una aproximación de la expresión (7), y donde se
aproxima c= 347m/s valor correspondiente a 25,57º C. Si se substituye este valor de
temperatura en la expresión (7). Hecha esta aclaración, demostraremos de donde resulta la
constante de valor 58:
m
1s
100cm
347 cm
347 ·
·
=
·
s 1000000µs 1m
10000 µs
35
luego
347
t
d = 10000 ·t =
2
58
De la expresión (7’) podemos extraer que aumento de distancia supone tener 1µs
más de ancho de pulso, o bien si es el error que cometemos en la cuenta con el timer:
1µs à d= 58 −1 =0,1724cm
2.4.2 Error debido al sensor de ultrasonidos
Es el error que más costará de cuantificar, pues el fabricante no nos indica la
sensibilidad respecto a la distancia medida y en cambio si nos da la sensibilidad referida a
la detección. Es decir, nos especifica a que ángulo es capaz de detectar con respecto a la
distancia, lo cual es poca información para nuestra aplicación.
Otro error existente en el emisor/receptor de ultrasonidos, esta vez debido a la
posición física de este es el producido por no estar bien centrado verticalmente con la
bobina de producto ya enrollado. Como se observa en la Figura 5, si el sensor de
ultrasonidos no está correctamente centrado, se medirá una distancia del radio de producto
enrollado errónea. El campo de actuación del pulso que se emite desde nuestro sensor tiene
forma cónica. El eco que se recibe como respuesta a la reflexión del sonido indica la
presencia del objeto más cercano (caso ideal).
Figura 22. Posición correcta e incorrecta del sensor de ultrasonidos
36
2.4.3 Influencia de los errores
Según especificaciones del fabricante de tejido de PVC, el error máximo que
podemos cometer en la medida es de un ±5%. Este error máximo supone que sobre la
longitud máxima enrollada por proceso (1500m), podamos cometer un error final de ±75m.
En la Tabla 2, se muestra la influencia del error que nos permite el fabricante para
distintas longitudes de tejido enrolladas.
Error
5%
-5%
5%
-5%
5%
-5%
5%
-5%
5%
-5%
Longitud enrollada(m) Radio real(cm) Inc.R(cm) Capas
1575
52,56
1,15
23
1500
51,41
1425
50,24
-1,17 -23,4
1050
43,9
0,9
18
1000
43
950
42
-1
-20
525
33
0,57
11,4
500
32,43
475
31,81
-0,62 -12,4
105
20,57
0,19
3,8
100
20,38
95
20,18
-0,2
-4
52,5
18,43
0,11
2,2
50
18,32
47,5
18,21
-0,11
-2,2
Tabla 2. Influencia del error permitido sobre tejido enrollado
Se puede ver que conforme aumenta la longitud enrollada, mayor es el error que
podemos cometer en la medida del radio y consecuentemente mayor será el número de
capas de error.
El motivo por el cual el fabricante puede permitirse un error que a primera vista
puede parecer excesivo, es porque no producen los metros de tejido de PVC bajo pedido,
sinó que producen cantidades grandes y sobre el pedido ajustan el ancho y largo a
conveniencia del cliente.
Una vez expuestos los errores con los que nos encontraremos al realizar la medida,
y para que esta influencia sobre el cálculo final de la longitud enrollada en la bobina sea
mínima, realizamos las siguientes actuaciones por el siguiente orden de prioridad:
1.- Caracterización del sensor de ultrasonidos y corrección sobre valores teóricos
suministrados por el fabricante.
2.- Suma de los tiempos de retardos, tales como atención de rutina a la interrupción
y otros tiempos de instrucciones que se sucedan.
3.- Hacer una corrección de temperatura, la cual influye en la velocidad de
propagación del sonido en el aire.
La actuación que sin ninguna duda es más crítica en el cálculo de la longitud de
tejido enrollado, es la caracterización del sensor.
37
3
Resultados experimentales
Para exponer los resultados obtenidos en la prueba de nuestro proyecto, los
distinguiremos entre pruebas en laboratorio y pruebas in situ.
3.1
Pruebas en laboratorio
Para estas pruebas se toma la mesa a modo de soporte del sensor. Para simular el
Ro (radio inicial) se usa una pequeña tabla que se mantendrá fija una vez se pulse ‘Start’.
Para obtener los consecutivos radios (R), se pondrá esta misma tabla a alturas fijas y
conocidas. De esta manera podemos comparar la medida teórica con la medida real y
calculada instantáneamente. Estas pruebas nos mostraron que conforme disminuía la
distancia entre sensor y obstáculo, en efecto la longitud representada en los displays
aumentaba. Pero con estas pruebas no podíamos determinar ni valorar el error que se
cometía en el valor final representado. Habíamos utilizado métodos poco científicos para
situar correctamente el sensor así como para la colocación de los obstáculos a modo de
radio.
Con la poca utilidad de los datos obtenidos de las pruebas en laboratorio, decidimos
recuperar los resultados que obtuvimos en la caracterización del sensor. Recordemos que
para la caracterización se tomaron mil muestras de ochenta y cuatro distancias distintas,
todo ello realizado con elementos precisos y adecuados. Con todos los datos conseguimos
extraer el valor medio del error que cometía nuestro sensor en la medida de la distancia
(dato inicial de cálculo).
3.2
Pruebas in situ
Estas pruebas se realizaron en las instalaciones del cliente. En este caso las pruebas
eran reales y en el entorno para el cual fue realizado este proyecto.
Esto requería una buena alineación del sensor con respecto al cilindro enrollador,
para que los resultados fueran satisfactorios. En la Figura 23, se muestra la alineación del
sensor para posicionarlo con el mismo eje de ordenadas que el eje enrollador mediante
unos pesos. Otro mecanismo que nos ayudó a obtener un buen posicionamiento del sensor,
fueron unos tornillos que nos permitían tanto el giro como la inclinación (ver Figura 24)
de la parte móvil que sujeta el sensor.
Finalmente podemos ver (Figura 25) el sensor montado y funcionando, y los cuatro
displays de 7 segmentos representando la longitud enrollada en aquel instante.
38
Figura 23. Posicionamiento en eje de ordenadas
Parte fija
Giro
Parte móvil
Inclinación
Figura 24. Grados de libertad parte móvil
Figura 25. Medición y representación resultado
39
Una vez iniciamos el calculo de la longitud enrollada, enseguida nos damos cuenta
que el valor que representan los displays oscila mucho y se hace ilegible. En cuanto al
error es difícil determinar su cuantía, pues resulta difícil tomar datos con tanta oscilación
(en algunos casos hasta veinte metros de diferencia).
Inicialmente atribuimos estas oscilaciones al ruido ambiental de la factoría y a las
vibraciones transmitidas mecánicamente. Decidimos repetir de nuevo las pruebas.
Aprovechando las nuevas pruebas aplicamos algunas medidas para reducir y/o eliminar el
problema que creíamos tener. Exactamente aplicamos los siguientes cambios respecto la
primera prueba:
1.- Centrado del sensor longitudinalmente en el carrobota (ver Figura 26):
Se observa que de los extremos del cilindro enrollador, el tejido va menos tensado
que del centro y que por tanto nos daba error en la medida.
2.- Aislamiento del sensor (ver Figura 27):
Sea aísla sin invadir el lóbulo de actuación del sensor (ver Anexo A) y para reducir
el ruido ambiental.
3.- Alimentación de la fuente de alimentación desde S.A.I6:
Esto nos proporcionaba alimentación filtrada y segura, y que reducía el ruido
electromagnético.
Al retomar de nuevo las pruebas con las mejoras aplicadas, la representación del
resultado se hizo más legible. Aún siendo más legible, las oscilaciones persistían.
Otra prueba que optamos por realizar fue hacer la medición sobre una superficie
plana (pruebas en laboratorio) pero esta vez en un entorno industrial. Al intercalar la
superficie plana mientras se calculaban el valor de los radios consecutivos, hacía que la
representación dejara de oscilar. Con esta prueba descartábamos que el ruido y las
vibraciones fueran la causa directa de esa oscilación.
Se realizó la prueba durante el tiempo suficiente para que el producto enrollado
teórico superara los 1500m. Esto suponía que el radio se hacia mayor, y que por tanto la
distancia entre el sensor y el producto era cada vez menor.
Este hecho nos permitió observar que la oscilación en la representación de
resultados disminuía conforme aumentaba el radio.
El problema en la medida del radio, era que el cilindro enrollador no era
perfectamente cilíndrico y uniforme. Esto suponía tener un vaivén vertical que hacía que
oscilara la medida.
6
Sistema de Alimentación Ininterrumpida
40
Figura 26. Centrado longitudinal del sensor
Figura 27. Aislamiento del sensor
41
4
Conclusiones
Nos damos cuenta de que ni el ruido ni las vibraciones son el motivo más
influyente para que las medidas sean erróneas.
Podemos asegurar que la principal causa de las oscilaciones en la representación de
la medida (con el calculo de radio que le precede) son causadas por el vaivén del cilindro
enrollador. Y lo aseguramos después de haber realizado cambios y pruebas en el montaje
inicial que nos lo confirman (ver Apartado 3.2).
Extraída esta conclusión, podemos afirmar que esta aplicación de medida de
distancia mediante ultrasonidos no es valida para esta aplicación concreta. O en su defecto
seria valida para cilindros enrolladores perfectamente uniformes.
Para minimizar la influencia del vaivén del cilindro enrollador, podría usarse la
aplicación en anchos de tejido más pequeños. Ello implicaría un cilindro enrollador mas
corto y con menos posibilidad de producirse vaivén. Este supuesto provocaría un vaivén
menor que minimizaría la oscilación en la medida. En la Figura 30, podemos ver un
cilindro ideal (negro) y un cilindro una cierta deformación en el centro (rojo).
Figura 30. Cilindro ideal y real
Aun tratándose de un sensor de ultrasonidos de bajo coste utilizado en robótica para
detección, se han obtenido resultados realmente buenos. Se ha conseguido determinar el
error medio que comete en la medida de la distancia, para un rango determinado de
medidas (caracterización). No menos importante es el hecho de haber podido probar y ver
su comportamiento en un entorno industrial, el cual ha sido menos desfavorable de lo
esperado inicialmente (afectación ruido, vibraciones…).
Tras realizar pruebas eliminando el error sistemático que obtuvimos tras realizar la
caracterización, podemos concretar sobre la respuesta final de nuestro sensor con los
siguientes datos:
-
Rango: 20-62cm
Resolución: 1mm
Error sistemático eliminado por software: 0,9cm
Error medio en Rango 20-62cm: -1,5mm
Los datos anteriores se obtuvieron realizando una nueva adquisición, es decir,
tomando otras 1000 muestras de cada una de las medidas. Esta nueva adquisición de datos
se realizó teniendo en cuenta el error que obtuvimos en la caracterización.
42
Hay que destacar que los datos de respuesta final que hemos obtenido para nuestro
sensor, no son válidos para otro sensor idéntico. Aun teniendo la misma estructura y
ensamblaje cabe esperar respuestas distintas, pero si pueden ser unos buenos datos de
partida al empezar a manejar dicho sensor.
Una posible aplicación de este sensor en el campo de la robótica y conociendo su
respuesta, podría ser la de robots futbolistas. En esta aplicación se requiere tanto detección
como medición hasta obstáculos con un cierto grado de precisión (detección otros
jugadores, distancia hasta balón, etc.). A su favor juega el ser un sensor asequible que con
un correcto estudio de respuesta, se pueden conseguir resultados satisfactorios.
En general el desarrollo del proyecto nos ha servido para ver todo el proceso que
conlleva de principio a fin; diseño hardware, software y por ultimo pruebas reales. A lo
largo de la creación de cada una de las partes, nos hemos encontrado con problemas no
contemplados en la idea inicial que teníamos pero que hemos ido resolviendo.
43
5
Referencias
[1]
José Mª Angulo Usategui,Susana Romero Yesa,Ignacio Angulo Martínez MICROBÓTICA,
Tecnología, Aplicaciones y Montaje Práctico
Thomson
José Mª Angulo Usategui,Susana Romero Yesa,Ignacio Angulo Martínez
MICROCONTROLADORES PIC, Diseño práctico de aplicaciones Segunda Parte
McGraw Hill
Stefan Kocis and Zdenko Figura
Ultrasonic measurements and technologies
Chapman & Hall Ister Science
http://www.ieee-uffc.org/ulmain.asp?view=software
http://www.iai.csic.es/users/sam/asp/enlaces_sam.asp#Item27
http://www.robotbuilder.co.uk/Resources/Articles/138.aspx
http://www.intel.com/design/mcs51/docs_mcs51.htm
http://hamjudo.com/sonar/
http://www.pages.drexel.edu/~kws23/tutorials/ultrasonic/ultrasonic.html
http://www.sensorsmag.com/articles/0399/0399_28/main.shtml
http://mdubuc.freeshell.org/Robotics/Tips.html#srf04
http://www.ic-prog.com/
http://www.microchip.com
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
[13]
44
6.
Presupuesto
Descripción
Sensor SRF04
PIC16F876
R 1/4W
C 15pF
XTAL 20MHz
D 1N4148
S Pulsador
X Conector 14pins
DISP LC4351-11
Q 2N5401
Precio Unitario(€) Cantidad Total(€)
34,8
1
34,8
8,7
1
8,7
0,05
11
0,55
0,1
2
0,2
3,9
1
3,9
0,07
1
0,07
1,3
2
2,6
2
2
4
1,4
4
5,6
0,16
4
0,64
Total
61,06 €
45
Anexo A: Devantech SRF04
46
Ingeniería de Microsistemas Programados S.L Alda. Mazarredo Nº 47 –1º Dpto 2 48009 Bilba – Vizcaya
(Spain) Tfno/Fax: 94 4230651
www.microcontroladores.com
[email protected]
1.- DESCRIPCION
El módulo SRF04 consiste en un medidor ultrasónico de distancias de bajo costo
desarrollado por la firma DEVANTECH Ltd. Emplea un microcontrolador PIC12C508 que realiza
las funciones de control y dos capsulas ultrasónicas de 40KHz. Se muestra en la figura 1.
El rango de medidas es desde unos 3 cm hasta unos 3m aproximadamente. Medidas por
debajo de los 3 cm provocan una serie de errores derivados del acoplamiento entre las propias
cápsulas emisor-receptor del módulo. En este caso es muy difícil distinguir si la señal recibida es
consecuencia de dicho acoplamiento o del eco recibido. Por otra parte es posible medir distancias
superiores a los 3 m, pero nos podemos encontrar con problemas derivados de la dispersión del
haz ultrasónico o de múltiples rebotes que pudieran generarse.
Tal y como se muestra en el diagrama de tiempos de la figura 2, el modo de empleo es
muy sencillo. Externamente se aplica, por parte del usuario, un pulso de disparo o trigger. Se inicia
la secuencia. El módulo transmite un tren de pulsos o “burst” de 8 ciclos a 40KHz. En ese
momento la señal de salida ECO pasa a nivel “1”. Cuando la cápsula receptora recibe la señal
transmitida como consecuencia de haber rebotado en un objeto (eco), esta salida pasa de nuevo a
nivel “0”. El usuario debe medir la duración del pulso de esta señal, es decir, el tiempo en que la
señal eco se mantiene a “1”.
Con objeto de que el módulo se estabilice, se debe dejar un lapsus de tiempo de unos
10mS mínimo entre el momento en que la señal de eco pasa a “0” y un nuevo pulso de disparo
que inicie el siguiente ciclo o medida.
La duración del pulso eco de salida varía entre 100µS y 18mS, en función de la distancia entre las
cápsulas del módulo y el objeto. La velocidad del sonido es de 29.15 µS/cm que, como realiza un
recorrido de ida y vuelta, queda establecida en 58.30µS/cm. Así pues el rango mínimo que se
puede medir es de 1.7 cm (100µS/58) y el máximo de 310 cm (18mS/58).
HOJA TECNICA: Medidor Ultrasónico SRF04
47
Ingeniería de Microsistemas Programados S.LAlda. Mazarredo Nº 47 –1º Dpto 2 48009 Bilbao – Vizcaya
(Spain) Tfno/Fax: 94 4230651
www.microcontroladores.com
[email protected]
2.- CARACTERISTICAS TECNICAS
PARAMETRO
Dimensiones del circuito
Tensión de alimentación
Frecuencia de trabajo
Rango máximo
Rango mínimo
Duración mínima del pulso de disparo (nivel TTL)
Duración del pulso eco de salida (nivel TTL)
Tiempo mínimo de espera entre una medida y el inicio de otra
VALOR
43 x 20 x 17
5
40
3
3
10
100-18000
10
UNIDAD
mm
Vcc
KHz
m
cm
µS
µS
mS
3. CONEXIONADO
+5Vcc
ECO
Disparo
N.C.
GND
Tensión positiva de alimentación
Salida del pulso cuya anchura determina el
tiempo del recorrido de la señal ultrasónica
Entrada de inicio de una nueva medida. Se
aplica un pulso con una duración mínima
de 10Ms
Línea sin conexión. Se emplea en la fase
de fabricación y comprobación del propio
módulo. No conectar nada.
Tierra de alimentación.
El módulo emplea tan sólo 4 conexiones que se pueden realizar soldando directamente 4
cables o bien mediante un conector de 5 vías.
HOJA TECNICA: Medidor ultrasónico SRF04
48
Ingeniería de Microsistemas Programados S.L Alda. Mazarredo Nº 47 –1º Dpto 2 48009 Bilbao –
Vizcaya (Spain) Tfno/Fax: 94 4230651
www.microcontroladores.com
[email protected]
4.- AJUSTES El módulo SRF04 viene perfectamente ajustado y calibrado de fábrica, por
lo que no necesita de ningún tipo de ajuste. Su funcionamiento se puede verificar aplicando una
serie de pulsos por la entrada de disparo. Con ayuda de un osciloscopio se puede medir la
anchura de la señal eco de salida. Esta anchura, representada en µS y dividida entre 58.30 nos
permite calcular la distancia del objeto.
5.- APLICACIONES
El módulo SRF04 es capaz de generar una señal lógica de salida cuya duración determina
la distancia de un objeto. Las aplicaciones son numerosas, citamos unas cuantas a modos de
ejemplo:
·Aplicaciones de control conde se deba actuar en función de la distancia o tamaño de
objetos diversos.
·Alarmas activadas cuando el intruso se aproxima a una determinada distancia
·Microbótica en donde es necesario que se actúe en función de la distancia que separa al
robot de cualquier otro objeto
Patrón de emisión
HOJA TECNICA: Medidor ultrasónico SRF04
49
Anexo B: LC4351-11 datasheet
50
51
52
53
54
55
Anexo C: PIC16F876 datasheet
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
Anexo D: Estándar IEEE754 para
Microchip
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
Anexo E: Esquemas y circuitos
impresos
120
121
122
PLACA DE CONTROL
Cara superior (componentes)
Cara inferior (pistas)
123
PLACA DE VISUALIZACIÓN
Cara superior (componentes)
Cara inferior (pistas)
124
Anexo F: Código fuente
125
list P=16F876
include <p16F876.inc>
include "math16.inc"
__config
_HS_OSC&_WDT_OFF&_PWRTE_ON&_BODEN_OFF&_CP_OFF&_LVP_OFF&_DEBUG_OFF&_WRT_ENABLE
_OFF
#define Trigger
PORTB,1
#define
Start PORTB,5
#define
ECHO PORTB,0
;Pulso de disparo a sensor
;Inicio de calculos
;Pulso de recepción a RB0/INT("ECHO")
;******************************
cblock 0x70
;COMMON RAM
tmp_TMR1H,tmp_TMR1L,d1,Flag,tmp_STATUS,H_byte,L_byte,count,tempo,conta,PDel0,
PDel1,count1,temp,REXP,RARGB0
endc
;*******************************
cblock
0x50
TEXP,TARGB0,TARGB1,TEMPEXP,TEMPARG0,TEMPARG1,Flag_Ro,Flag_R,RoEXP,RoARGB0,RoA
RGB1,C_Datos,KEXP,KARG0,KARG1,RARGB1
endc
;******************************
cblock
0X60
l_ejeEXP,l_ejeARG0,l_ejeARG1,a_cmEXP,a_cmARG0,a_cmARG1,lt_ARG0,lt_ARG1,d
isplay,digit4,digit3,digit2,digit1,R0,R1,R2
ENDC
;******************************
cblock 0x4C
Rev_LEXP,Rev_LARGB0,Rev_LARGB1
endc
;******************************
;*******Declaracion de constantes*******
;***************************************
T
equ 0x14
;Temperatura ambiente(ºC)
EPi
A0Pi
A1Pi
equ 0x80
equ 0x49
equ 0x11
;Exponente Pi)
;ARG0 Pi
)Pi=0x804911(MFF)
;ARG1 Pi
)
E2Pi
A02Pi
A12Pi
equ 0x81
equ 0x49
equ 0x11
;Exponente 2*Pi)
;ARG0 2*Pi
)2*Pi=0x814911(MFF)
;ARG1 2*Pi
)
Val2
equ 0x80
;Valor EXP representacion MFF(nº2), el resto 0x00
a_cm
;l_eje
l_eje
;l_eje
PUNTERO
EError
A0Error
A1Error
equ
equ
equ
equ
equ
equ
equ
equ
;Inversa del grueso del tejido(cm)
;Longitud d sensor a eje cilindro enrollador(cm)->69cm
;Longitud d sensor a eje cilindro enrollador(cm)->62cm
;Longitud d sensor a eje cilindro enrollador(cm)->78cm
0x15
0x46
0x3E
0x4E
0x00
0x7E
0x66
0x66
;Error en medida d dist. comete sensor(a restar 0.9cm)
; 0,9=0x7E6666 en MFF
;
126
;*********Constantes del display 7seg.********
ZERO EQU
H'7E'
;
___
___
UNO
EQU
H'0C'
; |
|
|
|
DOS
EQU
H'B6'
;
--... --TRES EQU
H'9E'
; |___|
|___|
CUATRO EQU
H'CC'
; digit4
digit1 ->Contiene valor a mandar
CINCO EQU
H'DA'
;
SEIS EQU
H'FA'
;PORTC(Selecc nºrepresentar)
SIETE EQU
H'0E'
OCHO EQU
H'FE'
NUEVE EQU
H'CE'
BLANK EQU
H'00'
;------------------------------DISP1
EQU
B'11111110'
DISP2
EQU
B'11111101'
DISP3
EQU
B'11111011'
;PORTA(Seleccion display)
DISP4
EQU
B'11110111'
DISPOFF
EQU
B'11111111'
;***************************************
org
goto
0x00
MAIN
org
goto
0x04
INTERRUPT
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%PROGRAMA PRINCIPAL%%%%%%%%%%%%%%%%%%%
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
MAIN
banksel 0
call Inicializ
banksel 0
call Esp_pulsa
;***********************************************************************
*
VUELVE
banksel 0
;Selecc. banco asociado a PORTA,B,C
_
bsf
Trigger
;Pulso de disparo a sensor por RB1 _| |_
call Delay_20us
;Ancho del pulso de disparo a sensor
bcf
Trigger
;Fin de pulso
movlw 0x90
;Hab.INT's por RB0/INT y GIE=1
movwf INTCON
;************BUCLE ESPERA PARA TRANSICIÓN L-H y H-L*********************
BUCLE_ESP
btfss Flag,0
goto BUCLE_ESP
;Esperar RB0/INT -> Bucle d espera
;*****************************************************************
bcf Flag,0
;Inicializacion Flag avisa calculo ancho pulso finaliz.
clrf TMR1H
;Limpiar Timer1
clrf TMR1L
;Limpiar Timer1
clrf INTCON
;Deshab.INT's y limpieza flags
banksel OPTION_REG
bsf
OPTION_REG,INTEDG ;Flanco 0->1 en INT
banksel 0
call Ctas_us
;Conversión de las ctas. del TMR1 a us
call
Rev_c
;Revision d la vel.prog.sonido en aire por Tª
call Dist_R
;Medida de distancia del radio(Ro o R)
call Grab_datos ;Grabacion de datos
2322ciclos=464.4us(Obtener Ro)
btfss Flag_R,0
;Testea si hemos obtenido R
127
goto
call
call
call
call
call
call
goto
VUELVE
Rev_L
K_vueltas
L_enroll
B2_BCD
Ord_digits
CONV_HEX_DIS
VUELVE
;Obtención de medida de R
;Revisión de L por L'=pi*R
;Calculo nºvueltas en eje enrollador
;Calculo longitud enrollada
;Conversion del valor de L de bin a BCD
;Prepara valores para digitos(4,3,2,1)
;Conv.de digitos de hex a disp. y envío a display
;Comienza d nuevo proceso
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;********DEVUELVE EL No A REPRESENTAR EN EL DISPLAY(1,2,3 o 4)**************
No_repre
addwf PCL,1
retlw ZERO
retlw UNO
retlw DOS
retlw TRES
retlw CUATRO
retlw CINCO
retlw SEIS
retlw SIETE
retlw OCHO
retlw NUEVE
;****************************************************************************
;***********SELECC. DE DISPLAY A REPRESENTAR****************
Sel_disp
addwf PCL,1
retlw DISP4
retlw DISP3
retlw DISP2
retlw DISP1
;****************************************************************************
;*******************INICIALIZACIONES******************
;*****************************************************
Inicializ
clrf Flag
;Inicializa.flag flanco ascen./descen
clrf Flag_Ro
;Inicializa.flag si Ro grabado.
clrf Flag_R
;Inicializa.flag si hay R calculado
clrf PORTA
;Salidas a '0'
clrf PORTB
;E/S a '0'
clrf PORTC
;Salidas a '0'
clrf TMR1H
;Limpiar Timer1-H
clrf TMR1L
;Limpiar Timer1-L
;//////////Conversion a FLOAT de Longitud eje////////
movlw l_eje
;dist. entre sensor y eje enrollador
movwf AARGB1
CLRF AARGB0
CLRF AEXP
CALL FLO1624
;Conv. l_eje de int a float
MOVF AEXP,W
;Almacena. en vbles
MOVWF l_ejeEXP
MOVF AARGB0,W
MOVWF l_ejeARG0
MOVF AARGB1,W
128
MOVWF l_ejeARG1
;////////////Conv. de grosor de tejido a FLOAT////////
movlw a_cm
;Grosor de tela en cm
movwf AARGB1
clrf AARGB0
call FLO1624
;Conv. de a_cm de int a float
MOVF AEXP,W
;Almacena. en vbles
MOVWF a_cmEXP
MOVF AARGB0,W
MOVWF a_cmARG0
MOVF AARGB1,W
MOVWF a_cmARG1
;/////////////Conv.temperatura int a float/////////
movlw T
movwf AARGB1
clrf AARGB0
CLRF AEXP
call FLO1624
;Temperatura de int a float
MOVF AEXP,W
;Almacena. en vbles
MOVWF TEMPEXP
MOVF AARGB0,W
MOVWF TEMPARG0
MOVF AARGB1,W
MOVWF TEMPARG1
;//////////Config PORT's////////////
banksel TRISA
;Selecc.banco 1
movlw 0x21
movwf TRISB
;I-RB0,RB5 O-El resto
movlw 0x00
movwf TRISA
;Puerto A como salidas
movlw 0x00
movwf TRISC
;Puerto C como salidas
bsf
ADCON1,PCFG1
;Forzamos a PORTA Digital I/O
bsf
ADCON1,PCFG2
;Forzamos a PORTA Digital I/O
return
;***************************************************************
;*****************Espera de pulsacion puls.INICIO**********
_
Esp_pulsa
btfss Start
;Espera pulsador inicio en H _|
goto $-1
;
_
btfsc Start
;Espera pulsador inicio en L |_
goto $-1
return
;**********************************************************
;************RUTINA DE SERVICIO A LA INTERRUPCIÓN***********
;***********************************************************
INTERRUPT
swapf STATUS,w
;(1)
movwf tmp_STATUS ;(1)salvar contexto
movlw 0x01
;(1)
xorwf T1CON,f
;(1)Activ./Desact Timer1
btfsc T1CON,0
;(1)
goto Camb_Flanco ;(2)
movf TMR1H,w
;Copia de valor temporal
movwf tmp_TMR1H
;de Timer1-H
movf TMR1L,w
;Copia de valor temporal
movwf tmp_TMR1L
;de Timer1-L
129
bcf INTCON,INTF
bsf Flag,0
bcf INTCON,INTE
goto FIN
;(1)Limpieza de flag INT
;(1)Flag a 1->Cambio flanco ancho d pulso
;(1)Deshab.INT
;(2)
Camb_Flanco
banksel OPTION_REG
;(2)
bcf
OPTION_REG,INTEDG ;(1)Cambio INT a flanco descen. 1->0
bcf INTCON,INTF
;(1)Limpieza flag de INT
bsf
INTCON,GIE
;(1)
banksel T1CON
goto BUCLE_ESP
;(2)
FIN
swapf tmp_STATUS,w
;(1)recuperar contexto
movwf STATUS
;(1)
retfie
;(2)
;***********************************************************************
;*************RUTINA DE RETARDO PARA ENVIO DE PULSO DE INICIO A SENSOR*******
;****************************************************************************
Delay_20us
movlw 0x1F
;(1) 0x1F=31
movwf d1
;(1)
Delay_20us_0
decfsz d1,f
;(1)
goto Delay_20us_0 ;(2)
nop
;(1)
nop
;(1)
return
;(2)-->
;1+1+3*31+1+1+1+2=100ciclos=20us(20MHz)
;****************************************************************************
;********************Conversion de cuentas de Timer1 a us**************
;**********************************************************************
Ctas_us
movf tmp_TMR1H,W ;)Recuperacion de datos de Timer(cuentas)
movwf AARGB0
;
movf tmp_TMR1L,W ;
movwf AARGB1
;
CLRF AEXP
;)
call FLO24
;Conv.valor del Timer1 de int a float
movlw 0x7C
;
movwf BEXP
;
movlw 0x4C
;Valor 0.2 expres.en MICROCHIP FLOAT
FORMAT
movwf BARGB0
;0,2=0x7C4CCC
movlw 0xCC
;
movwf BARGB1
;
call FPM24
;Cuentas Timer1 a us(cuentas*0,2)
MOVF AEXP,W
;)
MOVWF TEXP
;
MOVF AARGB1,W
;Valor en us del Timer1 expre. en MFF
MOVWF TARGB1
;
MOVF AARGB0,W
;
MOVWF TARGB0
;)
RETURN
;*************************************************************************
130
;*********Revisión de vel.propag.sonido en el aire depen. de Temp.***********
;****************************c(T)********************************************
Rev_c movf TEMPEXP,W
;Recuperacion datos temperatura(float)
movwf AEXP
movf TEMPARG0,W
movwf AARGB0
movf TEMPARG1,W
movwf AARGB1
;///////0.61*T/////
movlw 0x7E
;Valor=0.61
movwf BEXP
;expresado en
movlw 0x1C
;formato MFF
movwf BARGB0
;Microchip
movlw 0x29
;Float
movwf BARGB1
;Format
call FPM24
;///////331.4+0.61*T///////
movlw 0x87
;Valor=331.4
movwf BEXP
;expresado en
movlw 0x25
;formato MFF
movwf BARGB0
;Microchip
movlw 0xB3
;Float
movwf BARGB1
;Format
call FPA24
RETURN
;*****************************************************************
;***********Calculo Longitud enrollada*********************
;**********************************************************
L_enroll
movlw E2Pi
;
movwf BEXP
;Recupera.
movlw A02Pi
;valor almacen.
movwf BARGB0
;de 2*pi
movlw A12Pi
;en MFF
movwf BARGB1
;
CALL FPM24
;2*Pi*K
movlw 0x85
;dIVIDIR ENTRE 100 PARA RESULTADO
movwf BEXP
;TOTAL EN m
movlw 0x48
;0x854800=100dec.(MFF)
MOVWF BARGB0
CLRF BARGB1
CALL FPD24
;(2*Pi*K)/100
movf AEXP,W
;Resultado a vbles.temp
movwf TEXP
movf AARGB0,W
movwf TARGB0
movf AARGB1,W
movwf TARGB1
;//////////////////////////////////////////////////////////
movf a_cmEXP,W
;Recuperación parametros
movwf BEXP
movf a_cmARG0,W
movwf BARGB0
movf a_cmARG1,W
movwf BARGB1
MOVF KEXP,W
MOVWF AEXP
MOVF KARG0,W
MOVWF AARGB0
MOVF KARG1,W
MOVWF AARGB1
131
CALL FPD24
; K*a -> AARG's
;//////////////////////////////////////////
movlw Val2
;Carga de valor 2 en MFF en BARG's
movwf BEXP
clrf BARGB1
clrf BARGB0
;//////////////////////////////////////////
call FPD24
;(K*a)/2
MOVF RoEXP,W
;Carga Ro en BARG's
MOVWF BEXP
MOVF RoARGB0,W
MOVWF BARGB0
MOVF RoARGB1,W
MOVWF BARGB1
call FPA24
;Ro+(K*a)/2
MOVF TEXP,W
;Carga 2*Pi*K en BARG's
MOVWF BEXP
MOVF TARGB0,W
MOVWF BARGB0
MOVF TARGB1,W
MOVWF BARGB1
call FPM24
;L=2*Pi*K(Ro+(K*a)/2)
MOVF Rev_LEXP,W
;Carga L' en BARG's
MOVWF BEXP
MOVF Rev_LARGB0,W
MOVWF BARGB0
MOVF Rev_LARGB1,W
MOVWF BARGB1
call FPA24
;L=L+L'
nop
nop
call INT2416
;Pasamos el valor a entero
movf AARGB0,W
MOVWF lt_ARG0
;Byte H long.total
movf AARGB1,W
MOVWF lt_ARG1
;Byte L long.total
nop
RETURN
;**********************************************************
;**************Calculo de distancia medida y Radio*****************
;******************************************************************
;////// (c*t)/10000 ///////
Dist_R
movf TEXP,W
;Recup.de valor TMR1 en us
movwf BEXP
movf TARGB0,W
;Recup.de valor TMR1 en us
movwf BARGB0
movf TARGB1,W
;Recup.de valor TMR1 en us
movwf BARGB1
call FPM24
;AARG'S*BARG'S=c*t -> AARGS'S
MOVLW 0X8C
;
movwf BEXP
;
MOVLW 0X1C
;Valor 10000 en MFF
MOVWF BARGB0
;
MOVLW 0X40 ;
MOVWF BARGB1
;
CALL FPD24
;AARG'S/BARG'S=(c*t)/10000 -> AARG's(cm)
;///// (ANS)/2 ////
movlw 0x80
movwf BEXP
clrf BARGB0
132
clrf BARGB1
call FPD24
;Retorna valor dist.medida AEXP,AARGB0,AARGB1
movlw EError
;Recup.de valor error en cm
movwf BEXP
movlw A0Error
;Recup.de valor error en cm
movwf BARGB0
movlw A1Error
;Recup.de valor error en cm
movwf BARGB1
call FPS24
;Revision de -0,9cm en dist.medida
call INV_PAR
;Cambia AARG's a BARG's
;//////////Calculo del Radio medido//////////
movf l_ejeEXP,W
;Recupera valor l_eje
movwf AEXP
movf l_ejeARG0,W
movwf AARGB0
movf l_ejeARG1,W
movwf AARGB1
CALL FPS24
;Medida del radio(R o Ro)
RETURN
;*************************************************************
;*****************Revision de L(L'=pi*R)**********************
;*************************************************************
Rev_L
movf REXP,w
;Recuperacion datos R
movwf AEXP
movf RARGB0,w
movwf AARGB0
movf RARGB1,w
movwf AARGB1
movlw EPi
;Recuperacion datos valor PI
movwf BEXP
movlw A0Pi
movwf BARGB0
movlw A1Pi
movwf BARGB1
call FPM24
;L'=pi*R
movlw 0x85
;dIVIDIR ENTRE 100 PARA RESULTADO
movwf BEXP
;TOTAL EN m
movlw 0x48
;0x854800=100dec.(MFF)
MOVWF BARGB0
CLRF BARGB1
CALL FPD24
movf AEXP,w
;Guarda valor de L' en MFF
movwf Rev_LEXP
movf AARGB0,w
movwf Rev_LARGB0
movf AARGB1,w
movwf Rev_LARGB1
return
;***********************************************************
;****************Grabación de datos*************************
;***********************************************************
Grab_datos btfss Flag_Ro,0
;Se grabó Ro(radio inicial)?
goto Grab_Ro
;No.Grabar Ro
bsf
Flag_R,0
movf AEXP,w
;
movwf REXP
;
movf AARGB0,w
;Grabacion de R
movwf RARGB0
;
133
movf AARGB1,w
;
movwf RARGB1
;
goto
listo
Grab_Ro
movf AEXP,w
movwf RoEXP
movf AARGB0,w
movwf RoARGB0
movf AARGB1,w
movwf RoARGB1
bsf
Flag_Ro,0
;Activacion flag grab. de Ro
listo
RETURN
;***********************************************************
;*************Calculo nºvueltas eje enrollador***************
;***********************************************************
K_vueltas
movf RoEXP,w
;Paso de parametros de Ro
movwf BEXP
movf RoARGB0,w
movwf BARGB0
movf RoARGB1,w
movwf BARGB1
movf REXP,w
;Paso de parametros R
movwf AEXP
movf RARGB0,w
movwf AARGB0
movf RARGB1,w
movwf AARGB1
call FPS24
;Resta de R-Ro
movf a_cmEXP,W
;Recuperación parametros grosor tela
movwf BEXP
movf a_cmARG0,W
movwf BARGB0
movf a_cmARG1,W
movwf BARGB1
call FPM24
;Calculo:(R-Ro)/a ->K(Vueltas)
movf AEXP,W
;Resultado a vbles.K(Vueltas)
movwf KEXP
movf AARGB0,W
movwf KARG0
movf AARGB1,W
movwf KARG1
RETURN
;***********************************************************
;*******************INVERSION PARAMETROS A->B****************
;*************************************************************
INV_PAR
movf AEXP,w
movwf BEXP
movf AARGB0,w
movwf BARGB0
movf AARGB1,w
movwf BARGB1
RETURN
;**************************************************************
134
;////////CONVERSION DE BINARIO A BCD/////////////
;*************************************************
B2_BCD
loop16
bcf STATUS,0 ; clear the carry bit
movlw .16
movwf count1
clrf R0
clrf R1
clrf R2
rlf lt_ARG1, F
rlf lt_ARG0, F
rlf R2, F
rlf R1, F
rlf R0, F
;
decfsz count1, F
goto adjDEC
RETLW 0
;
adjDEC
adjBCD
movlw R2
movwf FSR
call adjBCD
movlw R1
movwf FSR
call adjBCD
movlw R0
movwf FSR
call adjBCD
goto loop16
movlw 3
addwf 0,W
movwf temp
btfsc temp,3 ; test if result > 7
movwf 0
movlw 30
addwf 0,W
movwf temp
btfsc temp,7 ; test if result > 7
movwf 0 ; save as MSD
RETLW 0
;*************************************************
;***********ORDENA VALOR PARA DIGITOS(digit4,3,2,1)*********
;**********************************************************
Ord_digits
MOVF R1,w
movwf tempo
SWAPF
tempo
;4MSb<->4LSb
movlw 0x0f
andwf tempo
;0000xxxx -> digit4
movf tempo,w
movwf digit4
;Valor digito 4
MOVF R1,w
movwf tempo
movlw 0x0f
andwf tempo
;0000xxxx -> digit3
movf tempo,w
movwf digit3
;Valor digito 3
;////////////////////////////////////////////////
135
MOVF R2,w
movwf tempo
SWAPF
tempo
;4MSb<->4LSb
movlw 0x0f
andwf tempo
;0000xxxx -> digit2
movf tempo,w
movwf digit2
;Valor digito 2
MOVF R2,w
movwf tempo
movlw 0x0f
andwf tempo
;0000xxxx -> digit1
movf tempo,w
movwf digit1
;Valor digito 1
return
;************************************************
;***********CONVERSION HEX A DISPLAY***************
CONV_HEX_DIS
movlw digit4
movwf FSR
movlw H'04'
movwf conta ;Carga el valor del contador
;para convertir digitos
SIGUI_HEX
movf PUNTERO,0
call No_repre
movwf PUNTERO
incf FSR,1
decfsz
conta,1
goto SIGUI_HEX
;***************************************************
;//////////ENVIO A DISP. 7 SEGMENTOS///////
movlw digit4
movwf FSR
;Toma @base
;movlw
H'03'
clrf conta ;Inicializ.contador
SIGUI_DISP
;movf PUNTERO,W
;movwf
PORTC
;Carga de dato para
PORTC
;incf
movf
call
movwf
movf
movwf
incf
movf
call
FSR,1
conta,w
Sel_disp
PORTA
PUNTERO,W
PORTC
FSR,1
conta,w
Retardo_10ms
disp.
incf conta,1
btfss conta,2
goto SIGUI_DISP
;movlw
0x00
;movwf
PORTC
RETURN
;//////////////////////////////////////////
136
;Selecc display
;Carga de dato para PORTC
;Retardo entre repre.de cada
;----------------Rutina de retardo de 10ms(20MHz)-------------------;------------------------------------------------------------Retardo_10ms
movlw
.55
; 1 set number of repetitions (B)
movwf
PDel0
; 1 |
PLoop1
movlw
.181
; 1 set number of repetitions (A)
movwf
PDel1
; 1 |
PLoop2
clrwdt
; 1 clear watchdog
clrwdt
; 1 cycle delay
decfsz
PDel1, 1 ; 1 + (1) is the time over? (A)
goto
PLoop2
; 2 no, loop
decfsz
PDel0, 1 ; 1 + (1) is the time over? (B)
goto
PLoop1
; 2 no, loop
return
; 2+2 Done
;-------------------------------------------------------------
;///////////////////RUTINAS CON VARIABLES FLOAT/////////////////////////////
;***************************************************************************
;***************************************************************************
;
Integer to float conversion
;
AARGB1
Input:
16 bit 2's complement integer right justified in AARGB0,
;
Use:
CALL
;
Output: 24 bit floating point number in AEXP, AARGB0, AARGB1
;
Result: AARG
;
;
Max Timing:
11+72 = 83 clks
11+77 = 88 clks
;
;
Min Timing:
7+14 = 21 clks
7+18 = 25 clks
;
PM: 11+26 = 37
FLO1624 or
<--
CALL
FLO24
FLOAT( AARG )
SAT = 0
SAT = 1
AARG = 0
DM: 6
;---------------------------------------------------------------------------FLO1624
FLO24
and add bias
MOVLW
D'15'+EXPBIAS
MOVWF
MOVF
MOVWF
BTFSS
GOTO
COMF
EXP
AARGB0,W
SIGN
AARGB0,MSB
NRM2424
AARGB1,F
COMF
INCF
BTFSC
INCF
AARGB0,F
AARGB1,F
_Z
AARGB0,F
; initialize exponent
; test sign
; if < 0, negate and set MSB
in SIGN
;****************************************************************************
;
Normalization routine
137
;
;
Input:
;
;
24 bit unnormalized floating point number in AEXP, AARGB0, AARGB1,
with sign in SIGN,MSB and other bits zero.
Use:
CALL
NRM2424 or
CALL
NRM24
Output: 24 bit normalized floating point number in AEXP, AARGB0, AARGB1
;
Result: AARG
<--
NORMALIZE( AARG )
;
;
Max Timing:
10+6+7*7+7 = 72 clks
SAT = 0
10+6+7*7+1+11 = 77 clks SAT = 1
;
;
Min Timing:
14 clks
5+9+4 = 18 clks
;
PM: 26
AARG = 0
DM: 6
;---------------------------------------------------------------------------NRM2424
NRM24
NORM2424
NORM2424A
FIXSIGN24
CLRF
MOVF
BTFSS
GOTO
MOVF
MOVWF
BTFSC
GOTO
CLRF
BSF
TEMP
AARGB0,W
_Z
NORM2424
AARGB1,W
AARGB0
_Z
RES024
AARGB1
TEMP,3
; clear exponent decrement
; test if highbyte=0
MOVF
SUBWF
BTFSS
BTFSS
GOTO
TEMP,W
EXP,F
_Z
_C
SETFUN24
BCF
_C
; clear carry bit
BTFSC
GOTO
RLF
RLF
DECFSZ
GOTO
AARGB0,MSB
FIXSIGN24
AARGB1,F
AARGB0,F
EXP,F
NORM2424A
; if MSB=1, normalization done
GOTO
SETFUN24
BTFSS
BCF
SIGN,MSB
AARGB0,MSB
RETLW
0
; if so, shift 8 bits by move
; if highbyte=0, result=0
; otherwise, shift left and
; decrement EXP
; underflow if EXP=0
; clear explicit MSB if
positive
RES024
CLRF
CLRF
CLRF
CLRF
RETLW
AARGB0
AARGB1
AARGB2
EXP
0
138
; result equals zero
; clear extended byte
;****************************************************************************
;****************************************************************************
;
Integer to float conversion
;
Input:
AARGB1, AARGB2
24 bit 2's complement integer right justified in AARGB0,
;
Use:
CALL
;
Output: 24 bit floating point number in AEXP, AARGB0, AARGB1
;
Result: AARG
;
;
;
Max Timing:
14+94 = 108 clks
14+103 = 117 clks
14+109 = 123 clks
RND = 0
RND = 1, SAT = 0
RND = 1, SAT = 1
;
;
Min Timing:
6+28 = 34 clks
6+22 = 28 clks
AARG = 0
;
PM: 14+51 = 65
FLO2424
<--
FLOAT( AARG )
DM: 7
;---------------------------------------------------------------------------FLO2424
and add bias
MOVLW
D'23'+EXPBIAS
; initialize exponent
MOVWF
CLRF
BTFSS
GOTO
COMF
COMF
COMF
INCF
BTFSC
INCF
BTFSC
INCF
BSF
EXP
SIGN
AARGB0,MSB
; test sign
NRM3224
AARGB2,F ; if < 0, negate and set MSB in SIGN
AARGB1,F
AARGB0,F
AARGB2,F
_Z
AARGB1,F
_Z
AARGB0,F
SIGN,MSB
;****************************************************************************
******************
;
;
;
;
;
Normalization routine
Input:
32 bit unnormalized floating point number in AEXP, AARGB0, AARGB1,
AARGB2, with sign in SIGN,MSB
Use:
CALL
NRM3224
Output: 24 bit normalized floating point number in AEXP, AARGB0, AARGB1
;
Result: AARG
<--
NORMALIZE( AARG )
;
;
;
Max Timing:
21+6+7*8+7+4 = 94 clks RND = 0
21+6+7*8+20+4 = 103 clks
RND = 1, SAT = 0
21+6+7*8+19+11 = 109 clks
RND = 1, SAT = 1
;
;
Min Timing:
22+6 = 28 clks
5+9+4+4 = 22 clks
139
AARG = 0
;
PM: 51
DM: 7
;---------------------------------------------------------------------------NRM3224
decrement
CLRF
TEMP
; clear exponent
MOVF
BTFSS
GOTO
MOVF
MOVWF
MOVF
MOVWF
CLRF
BSF
AARGB0,W
_Z
NORM3224
AARGB1,W
AARGB0
AARGB2,W
AARGB1
AARGB2
TEMP,3
; test if highbyte=0
MOVF
BTFSS
GOTO
MOVF
MOVWF
CLRF
BCF
AARGB0,W
_Z
NORM3224
AARGB1,W
AARGB0
AARGB1
TEMP,3
; test if highbyte=0
BSF
TEMP,4
MOVF
BTFSC
GOTO
AARGB0,W
_Z
RES024
MOVF
SUBWF
BTFSS
BTFSS
GOTO
TEMP,W
EXP,F
_Z
_C
SETFUN24
BCF
_C
BTFSC
GOTO
RLF
RLF
RLF
DECFSZ
GOTO
GOTO
AARGB0,MSB
NRMRND3224
AARGB2,F
AARGB1,F
AARGB0,F
EXP,F
NORM3224A
SETFUN24
; if so, shift 8 bits by move
; increase decrement
by 8
; if so, shift 8 bits by move
; increase decrement
by 8
NORM3224
NORM3224A
NRMRND3224
; if highbyte=0, result=0
; clear carry bit
BTFSC
BTFSS
GOTO
BTFSS
GOTO
INCF
BTFSC
INCF
FPFLAGS,RND
AARGB1,LSB
FIXSIGN24
AARGB2,MSB
FIXSIGN24
AARGB1,F
_Z
AARGB0,F
BTFSS
GOTO
RRF
_Z
FIXSIGN24
AARGB0,F
140
; if MSB=1, normalization done
; otherwise, shift left and
; decrement EXP
; underflow if EXP=0
; round if next bit is set
; has rounding caused carryout?
; if so, right shift
RRF
INCF
BTFSC
GOTO
GOTO
AARGB1,F
EXP,F
_Z
SETFOV24
FIXSIGN24
; check for overflow
;****************************************************************************
;****************************************************************************
;
Float to integer conversion
;
Input:
24 bit floating point number in AEXP, AARGB0, AARGB1
;
Use:
CALL
;
AARGB1
Output: 16 bit 2's complement integer right justified in AARGB0,
;
Result: AARG
;
;
;
Max Timing:
29+6*6+5+13 = 83 clks
29+6*6+5+19 = 89 clks
29+6*6+5+22 = 92 clks
;
Min Timing:
18+5+7 = 30 clks
;
PM: 63
INT2416
<--
or
CALL
INT24
INT( AARG )
RND = 0
RND = 1, SAT = 0
RND = 1, SAT = 1
DM: 6
;--------------------------------------------------------------------------------------------INT2416
INT24
MOVF
BTFSC
RETLW
MOVF
MOVWF
BSF
EXP,W
_Z
0x00
AARGB0,W
SIGN
AARGB0,MSB
; test for zero argument
MOVLW
SUBWF
BTFSS
GOTO
COMF
INCF
EXPBIAS+D'15'
EXP,F
EXP,MSB
SETIOV16
EXP,F
EXP,F
; remove bias from EXP
MOVLW
SUBWF
BTFSS
GOTO
MOVWF
RLF
MOVF
MOVWF
CLRF
8
EXP,W
_C
TSHIFT2416
EXP
AARGB1,F
AARGB0,W
AARGB1
AARGB0
MOVLW
SUBWF
BTFSS
GOTO
8
EXP,W
_C
TSHIFT2416
141
; save sign in SIGN
; make MSB explicit
; do byte shift if EXP >= 8
; rotate next bit for rounding
; do byte shift if EXP >= 8
MOVWF
RLF
CLRF
MOVF
BTFSS
BCF
GOTO
EXP
AARGB1,F
AARGB1
EXP,W
_Z
TSHIFT2416
MOVF
BTFSC
GOTO
EXP,W
_Z
SHIFT2416OK
SHIFT2416
BCF
RRF
RRF
DECFSZ
GOTO
_C
AARGB0,F
AARGB1,F
EXP,F
SHIFT2416
SHIFT2416OK
BTFSC
BTFSS
GOTO
BTFSS
GOTO
INCF
BTFSC
INCF
; rotate next bit for rounding
_C
SHIFT2416OK
; shift completed if EXP = 0
; right shift by EXP
FPFLAGS,RND
AARGB1,LSB
INT2416OK
_C
; round if next bit is set
INT2416OK
AARGB1,F
_Z
AARGB0,F
BTFSC
GOTO
AARGB0,MSB
SETIOV16
; test for overflow
INT2416OK
BTFSS
RETLW
COMF
COMF
INCF
BTFSC
INCF
RETLW
SIGN,MSB
0
AARGB1,F
AARGB0,F
AARGB1,F
_Z
AARGB0,F
0
; if sign bit set, negate
SETIOV16
BSF
BTFSS
RETLW
FPFLAGS,IOV
FPFLAGS,SAT
0xFF
CLRF
BTFSS
MOVLW
MOVWF
MOVWF
RLF
RRF
RETLW
AARGB0
SIGN,MSB
0xFF
AARGB0
AARGB1
SIGN,F
AARGB0,F
0xFF
142
; set integer overflow flag
; test for saturation
; return error code in WREG
; saturate to largest two's
; complement 16 bit integer
; SIGN = 0, 0x 7F FF
; SIGN = 1, 0x 80 00
; return error code in WREG
;****************************************************************************
;****************************************************************************
;
Float to integer conversion
;
Input:
24 bit floating point number in AEXP, AARGB0, AARGB1
;
Use:
CALL
INT2424
;
Output: 24 bit 2's complement integer right justified in AARGB0,
AARGB1, AARGB2
;
Result: AARG
<--
INT( AARG )
;
;
;
Max Timing:
41+6*7+6+16 = 105 clks
41+6*7+6+24 = 113 clks
41+6*7+6+26 = 115 clks
;
Min Timing:
5 clks
;
PM: 82
RND = 0
RND = 1, SAT = 0
RND = 1, SAT = 1
DM: 6
;---------------------------------------------------------------------------INT2424
CLRF
AARGB2
MOVF
EXP,W
; test for zero argument
BTFSC
_Z
RETLW
0x00
MOVF
MOVWF
BSF
AARGB0,W
SIGN
AARGB0,MSB
; save sign in SIGN
MOVLW
SUBWF
BTFSS
GOTO
COMF
INCF
EXPBIAS+D'23'
EXP,F
EXP,MSB
SETIOV24
EXP,F
EXP,F
; remove bias from EXP
MOVLW
SUBWF
BTFSS
GOTO
MOVWF
RLF
MOVF
MOVWF
MOVF
MOVWF
CLRF
8
EXP,W
_C
TSHIFT2424
EXP
AARGB2,F
AARGB1,W
AARGB2
AARGB0,W
AARGB1
AARGB0
MOVLW
SUBWF
BTFSS
GOTO
MOVWF
RLF
MOVF
MOVWF
CLRF
8
;do another byte shift if EXP >= 8
EXP,W
_C
TSHIFT2424
EXP
AARGB2,F
; rotate next bit for rounding
AARGB1,W
AARGB2
AARGB1
143
; make MSB explicit
; do byte shift if EXP >= 8
; rotate next bit for rounding
MOVLW
SUBWF
BTFSS
GOTO
MOVWF
RLF
CLRF
MOVF
BTFSS
BCF
GOTO
8
; do another byte shift if EXP >= 8
EXP,W
_C
TSHIFT2424
EXP
AARGB2,F
; rotate next bit for rounding
AARGB2
EXP,W
_Z
_C
SHIFT2424OK
TSHIFT2424
MOVF
BTFSC
GOTO
EXP,W
_Z
SHIFT2424OK
SHIFT2424
BCF
RRF
RRF
RRF
DECFSZ
GOTO
_C
AARGB0,F
AARGB1,F
AARGB2,F
EXP,F
SHIFT2424
BTFSC
BTFSS
GOTO
BTFSS
GOTO
INCF
BTFSC
INCF
BTFSC
INCF
BTFSC
GOTO
FPFLAGS,RND
AARGB2,LSB
INT2424OK
_C
INT2424OK
AARGB2,F
_Z
AARGB1,F
_Z
AARGB0,F
AARGB0,MSB
SETIOV24
INT2424OK
BTFSS
RETLW
COMF
COMF
COMF
INCF
BTFSC
INCF
BTFSC
INCF
RETLW
SIGN,MSB
0
AARGB0,F
AARGB1,F
AARGB2,F
AARGB2,F
_Z
AARGB1,F
_Z
AARGB0,F
0
IRES024
CLRF
CLRF
CLRF
RETLW
AARGB0
AARGB1
AARGB2
0
SETIOV24
BSF
BTFSS
RETLW
FPFLAGS,IOV
FPFLAGS,SAT
0xFF
CLRF
BTFSS
MOVLW
AARGB0
SIGN,MSB
0xFF
SHIFT2424OK
144
; shift completed if EXP = 0
; right shift by EXP
; test for overflow
; if sign bit set, negate
; integer result equals zero
; set integer overflow flag
; test for saturation
; return error code in WREG
; saturate to largest two's
; complement 24 bit integer
MOVWF
MOVWF
MOVWF
RLF
RRF
RETLW
AARGB0
AARGB1
AARGB2
SIGN,F
AARGB0,F
0xFF
; SIGN = 0, 0x 7F FF FF
; SIGN = 1, 0x 80 00 00
; return error code in WREG
;****************************************************************************
;****************************************************************************
;
Floating Point Multiply
;
;
Input:
24 bit floating point number in AEXP, AARGB0, AARGB1
24 bit floating point number in BEXP, BARGB0, BARGB1
;
Use:
CALL
;
Output: 24 bit floating point product in AEXP, AARGB0, AARGB1
;
Result: AARG
;
;
;
Max Timing:
25+15*16+15+18 = 298 clks
25+15*16+15+29 = 309 clks
25+15*16+15+33 = 313 clks
RND = 0
RND = 1, SAT = 0
RND = 1, SAT = 1
;
;
Min Timing:
6+5 = 11 clks
24+15*11+14+15 = 218 clks
AARG * BARG = 0
;
PM: 80
FPM24
<--
AARG * BARG
DM: 11
;--------------------------------------------------------------------------------------------FPM24
MOVF
BTFSS
MOVF
BTFSC
GOTO
AEXP,W
_Z
BEXP,W
_Z
RES024
M24BNE0
MOVF
XORWF
MOVWF
AARGB0,W
BARGB0,W
SIGN
MOVF
ADDWF
MOVLW
BTFSS
GOTO
BEXP,W
EXP,F
EXPBIAS-1
_C
MTUN24
SUBWF
BTFSC
GOTO
GOTO
EXP,F
_C
SETFOV24
MOK24
SUBWF
BTFSS
GOTO
EXP,F
_C
SETFUN24
MOVF
AARGB0,W
MTUN24
MOK24
145
; test for zero arguments
; save sign in SIGN
; set multiply overflow flag
MOVWF
MOVF
MOVWF
BSF
BCF
CLRF
CLRF
MOVLW
MOVWF
AARGB2
AARGB1,W
AARGB3
AARGB2,MSB
BARGB0,MSB
_C
AARGB0
AARGB1
D'16'
TEMP
MLOOP24
BTFSS
GOTO
AARGB3,LSB
MNOADD24
MADD24
MOVF
ADDWF
MOVF
BTFSC
INCFSZ
ADDWF
BARGB1,W
AARGB1,F
BARGB0,W
_C
BARGB0,W
AARGB0,F
MNOADD24
RRF
RRF
RRF
RRF
BCF
DECFSZ
GOTO
AARGB0,F
AARGB1,F
AARGB2,F
AARGB3,F
_C
TEMP,F
MLOOP24
BTFSC
GOTO
RLF
RLF
RLF
DECF
AARGB0,MSB
MROUND24
AARGB2,F
AARGB1,F
AARGB0,F
EXP,F
BTFSC
BTFSS
GOTO
BTFSS
GOTO
INCF
BTFSC
INCF
FPFLAGS,RND
AARGB1,LSB
MUL24OK
AARGB2,MSB
MUL24OK
AARGB1,F
_Z
AARGB0,F
BTFSS
GOTO
RRF
RRF
INCF
BTFSC
GOTO
_Z
MUL24OK
AARGB0,F
AARGB1,F
EXP,F
_Z
SETFOV24
BTFSS
BCF
SIGN,MSB
AARGB0,MSB
RETLW
0
BSF
BTFSS
FPFLAGS,FOV
FPFLAGS,SAT
BSF
MROUND24
MUL24OK
SETFOV24
146
; move result to AARG
; make argument MSB's explicit
;clear initial partial product
; initialize counter
; test next bit
; check for postnormalization
; round if next bit is set
; has rounding caused carryout?
; if so, right shift
; check for overflow
;clear explicit MSB if positive
; set floating point underflag
; test for saturation
RETLW
0xFF
; return error code in
MOVLW
MOVWF
MOVWF
MOVWF
RLF
RRF
RETLW
0xFF
AEXP
; saturate to largest floating
AARGB0
; point number = 0x FF 7F FF
AARGB1
; modulo the appropriate sign bit
SIGN,F
AARGB0,F
0xFF
; return error code in WREG
WREG
;****************************************************************************
;****************************************************************************
;
Floating Point Divide
;
;
Input:
24 bit floating point dividend in AEXP, AARGB0, AARGB1
24 bit floating point divisor in BEXP, BARGB0, BARGB1
;
Use:
CALL
;
Output: 24 bit floating point quotient in AEXP, AARGB0, AARGB1
;
Result: AARG
;
;
;
Max Timing:
32+13+15*26+25+12 = 472 clks
32+13+15*26+25+34 = 494 clks
32+13+15*26+25+38 = 498 clks
;
Min Timing:
7+5 = 12 clks
;
PM: 120
FPD24
<--
AARG / BARG
RND = 0
RND = 1, SAT = 0
RND = 1, SAT = 1
DM: 11
;--------------------------------------------------------------------------------------------FPD24
zero
D24BNE0
TALIGN24
MOVF
BEXP,W
BTFSC
GOTO
_Z
SETFDZ24
MOVF
BTFSC
GOTO
AEXP,W
_Z
RES024
MOVF
XORWF
MOVWF
BSF
BSF
AARGB0,W
BARGB0,W
SIGN
AARGB0,MSB
BARGB0,MSB
CLRF
MOVF
MOVWF
MOVF
MOVWF
TEMP
AARGB0,W
AARGB2
AARGB1,W
AARGB3
MOVF
SUBWF
MOVF
BTFSS
BARGB1,W
AARGB3, f
BARGB0,W
_C
147
; test for divide by
; save sign in SIGN
; make argument MSB's explicit
; clear align increment
; test for alignment
INCFSZ
SUBWF
BARGB0,W
AARGB2, f
CLRF
CLRF
AARGB2
AARGB3
BTFSS
GOTO
_C
DALIGN24OK
BCF
RRF
RRF
RRF
MOVLW
MOVWF
_C
AARGB0,F
AARGB1,F
AARGB2,F
0x01
TEMP
DALIGN24OK
MOVF
SUBWF
BTFSS
GOTO
BEXP,W
EXP,F
_C
ALTB24
AGEB24
MOVLW
ADDWF
ADDWF
BTFSC
GOTO
GOTO
EXPBIAS-1
TEMP,W
EXP,F
_C
SETFOV24
DARGOK24
; set overflow flag
MOVLW
ADDWF
ADDWF
BTFSS
GOTO
EXPBIAS-1
TEMP,W
EXP,F
_C
SETFUN24
; set underflow flag
DARGOK24
MOVLW
MOVWF
D'16'
TEMPB1
DLOOP24
RLF
RLF
RLF
RLF
RLF
AARGB3,F
AARGB2,F
AARGB1,F
AARGB0,F
TEMP,F
; left shift
MOVF
SUBWF
MOVF
BTFSS
INCFSZ
SUBWF
BARGB1,W
AARGB1,F
BARGB0,W
_C
BARGB0,W
AARGB0,F
; subtract
RLF
IORWF
BARGB0,W
TEMP,F
BTFSS
GOTO
TEMP,LSB
DREST24
BSF
GOTO
AARGB3,LSB
DOK24
MOVF
ADDWF
BARGB1,W
AARGB1,F
ALTB24
DREST24
148
; align if necessary
; save align increment
; compare AEXP and BEXP
; initialize counter
; test for restore
; restore if necessary
MOVF
BTFSC
INCF
ADDWF
BCF
BARGB0,W
_C
BARGB0,W
AARGB0,F
AARGB3,LSB
DOK24
DECFSZ
GOTO
TEMPB1,F
DLOOP24
DROUND24
BTFSC
BTFSS
GOTO
BCF
RLF
RLF
RLF
FPFLAGS,RND
AARGB3,LSB
DIV24OK
_C
AARGB1,F
AARGB0,F
TEMP,F
MOVF
SUBWF
MOVF
BTFSS
INCFSZ
SUBWF
BARGB1,W
AARGB1,F
BARGB0,W
_C
BARGB0,W
AARGB0,F
RLF
IORWF
ANDLW
BARGB0,W
TEMP,W
0x01
ADDWF
BTFSC
INCF
AARGB3,F
_C
AARGB2,F
BTFSS
GOTO
RRF
RRF
INCF
BTFSC
GOTO
_Z
DIV24OK
AARGB2,F
AARGB3,F
EXP,F
_Z
SETFOV24
BTFSS
BCF
SIGN,MSB
AARGB2,MSB
MOVF
MOVWF
MOVF
MOVWF
AARGB2,W
AARGB0
AARGB3,W
AARGB1
RETLW
0
BSF
BTFSS
RETLW
FPFLAGS,FUN
FPFLAGS,SAT
0xFF
MOVLW
MOVWF
CLRF
CLRF
RLF
RRF
RETLW
0x01
; saturate to smallest floating
AEXP
; point number = 0x 01 00 00
AARGB0
; modulo the appropriate sign bit
AARGB1
SIGN,F
AARGB0,F
0xFF
; return error code in WREG
DIV24OK
SETFUN24
149
; compute next significant bit
; for rounding
; subtract
; test if rounding caused carryout
; test for overflow
; clear explicit MSB if positive
; move result to AARG
; set floating point underflag
; test for saturation
; return error code in WREG
SETFDZ24
BSF
RETLW
FPFLAGS,FDZ
0xFF
; set divide by zero flag
;****************************************************************************
;****************************************************************************
;
Floating Point Subtract
;
;
Input:
24 bit floating point number in AEXP, AARGB0, AARGB1
24 bit floating point number in BEXP, BARGB0, BARGB1
;
Use:
CALL FPS24
;
Output: 24 bit floating point sum in AEXP, AARGB0, AARGB1
;
Result: AARG
;
;
;
Max Timing:
2+197 = 199 clks
2+208 = 210 clks
2+213 = 215 clks
;
Min Timing:
2+12 = 14 clks
;
PM: 2+112 = 114
<--
AARG - BARG
RND = 0
RND = 1, SAT = 0
RND = 1, SAT = 1
DM: 11
;---------------------------------------------------------------------------FPS24
MOVLW
XORWF
0x80
BARGB0,F
;****************************************************************************
;
Floating Point Add
;
;
Input:
24 bit floating point number in AEXP, AARGB0, AARGB1
24 bit floating point number in BEXP, BARGB0, BARGB1
;
Use:
CALL FPA24
;
Output: 24 bit floating point sum in AEXP, AARGB0, AARGB1
;
Result: AARG
;
;
= 0
;
= 1
Max Timing:
;
Min Timing:
;
PM: 112
<--
AARG - BARG
25+28+6*6+5+31+72 = 197 clks
25+28+6*6+5+42+72 = 208 clks
RND = 0
RND = 1, SAT
25+28+6*6+5+42+77 = 213 clks
RND = 1, SAT
8+4 = 12 clks
DM: 11
;---------------------------------------------------------------------------FPA24
MOVF
XORWF
MOVWF
CLRF
CLRF
AARGB0,W ; exclusive or of signs in TEMP
BARGB0,W
TEMP
AARGB2
BARGB2
150
; clear extended byte
USEA24
ALIGNB24
MOVF
SUBWF
BTFSS
GOTO
AEXP,W
BEXP,W
_C
USEA24
MOVF
MOVWF
MOVF
MOVWF
MOVF
MOVWF
BEXP,W
AARGB4
AEXP,W
BEXP
AARGB4,W
AEXP
MOVF
MOVWF
MOVF
MOVWF
MOVF
MOVWF
BARGB0,W
AARGB4
AARGB0,W
BARGB0
AARGB4,W
AARGB0
MOVF
MOVWF
MOVF
MOVWF
MOVF
MOVWF
BARGB1,W
AARGB4
AARGB1,W
BARGB1
AARGB4,W
AARGB1
MOVF
BTFSC
RETLW
BEXP,W
_Z
0x00
MOVF
MOVWF
BSF
BSF
AARGB0,W
SIGN
AARGB0,MSB
BARGB0,MSB
MOVF
SUBWF
MOVWF
BTFSC
GOTO
BEXP,W
AEXP,W
BEXP
_Z
ALIGNED24
MOVLW
SUBWF
BTFSS
GOTO
MOVWF
MOVF
MOVWF
MOVF
MOVWF
CLRF
8
BEXP,W
_C
ALIGNB24
BEXP
BARGB1,W
BARGB2
BARGB0,W
BARGB1
BARGB0
MOVLW
SUBWF
BTFSS
GOTO
MOVF
MOVWF
RETLW
8
BEXP,W
_C ; if BEXP >= 8, BARG = 0 relative to AARG
ALIGNB24
SIGN,W
AARGB0
0x00
MOVF
BEXP,W
151
; use AARG if AEXP >= BEXP
; use BARG if AEXP < BEXP
; therefore, swap AARG and BARG
; return AARG if BARG = 0
; save sign in SIGN
; make MSB's explicit
; compute shift count in BEXP
; if BEXP >= 8, do byte shift
; keep for postnormalization
; already aligned if BEXP = 0
BTFSC
GOTO
_Z
ALIGNED24
ALOOPB24
BCF
RRF
RRF
RRF
DECFSZ
GOTO
_C
BARGB0,F
BARGB1,F
BARGB2,F
BEXP,F
ALOOPB24
; right shift by BEXP
ALIGNED24
BTFSS
GOTO
COMF
COMF
COMF
INCF
BTFSC
INCF
BTFSC
INCF
TEMP,MSB
AOK24
BARGB2,F
BARGB1,F
BARGB0,F
BARGB2,F
_Z
BARGB1,F
_Z
BARGB0,F
MOVF
ADDWF
MOVF
BTFSC
INCFSZ
ADDWF
MOVF
BTFSC
INCFSZ
ADDWF
BARGB2,W
AARGB2,F
BARGB1,W
_C
BARGB1,W
AARGB1,F
BARGB0,W
_C
BARGB0,W
AARGB0,F
BTFSC
GOTO
BTFSS
GOTO
TEMP,MSB
ACOMP24
_C
NRMRND3224
RRF
RRF
RRF
INCFSZ
GOTO
GOTO
AARGB0,F ; shift right and increment EXP
AARGB1,F
AARGB2,F
AEXP,F
NRMRND3224
SETFOV24
BTFSC
GOTO
COMF
COMF
COMF
INCF
BTFSC
INCF
BTFSC
INCF
_C
NRM3224 ; normalize and fix sign
AARGB2,F
AARGB1,F ; negate, toggle sign bit and
AARGB0,F ; then normalize
AARGB2,F
_Z
AARGB1,F
_Z
AARGB0,F
; negate if signs opposite
AOK24
ACOMP24
MOVLW
0x80
XORWF
SIGN,F
GOTO
NRM24
;////////////////////////////////////////////////////////////////////////////
end
152
;
RCS Header $Id: math16.inc 2.4 1997/02/11 16:58:49 F.J.Testa Exp $
;
$Revision: 2.4 $
;
MATH16 INCLUDE FILE
;****************************************************************************
;
;
GENERAL MATH LIBRARY DEFINITIONS
;
;
general literal constants
;
define assembler constants
B0
B1
B2
B3
B4
B5
B6
B7
equ
equ
equ
equ
equ
equ
equ
equ
0
1
2
3
4
5
6
7
MSB
LSB
equ
equ
7
0
;
define commonly used bits
;
STATUS bit definitions
#define
#define
_C
_Z
STATUS,0
STATUS,2
;
;
general register variables
;
ACCB7
equ
0x20
ACCB6
equ
0x21
ACCB5
equ
0x22
ACCB4
equ
0x23
ACCB3
equ
0x24
ACCB2
equ
0x25
ACCB1
equ
0x26
ACCB0
equ
0x27
ACC
equ
0x27
; most significant byte of contiguous 8 byte
accumulator
;
SIGN
equ
0x29
; save location for sign in MSB
;
TEMPB3
equ
0x30
TEMPB2
equ
0x31
TEMPB1
equ
0x32
TEMPB0
equ
0x33
TEMP
equ
0x33
; temporary storage
;
;
binary operation arguments
;
AARGB7
equ
0x20
AARGB6
equ
0x21
AARGB5
equ
0x22
153
AARGB4
equ
0x23
AARGB3
equ
0x24
AARGB2
equ
0x25
AARGB1
equ
0x26
AARGB0
equ
0x27
AARG
equ
0x27
; most significant byte of argument A
;
BARGB3
equ
0x2B
BARGB2
equ
0x2C
BARGB1
equ
0x2D
BARGB0
equ
0x2E
BARG
equ
0x2E
; most significant byte of argument B
;
;
Note that AARG and ACC reference the same storage locations
;
;****************************************************************************
*****************
;
;
FIXED POINT SPECIFIC DEFINITIONS
;
;
remainder storage
;
REMB3
equ
0x20
REMB2
equ
0x21
REMB1
equ
0x22
REMB0
equ
0x23
; most significant byte of remainder
LOOPCOUNT
equ
0x34
; loop counter
;
;****************************************************************************
*****************
;
;
FLOATING POINT SPECIFIC DEFINITIONS
;
;
literal constants
;
EXPBIAS
equ
D'127'
;
;
biased exponents
;
EXP
equ
0x28
; 8 bit biased exponent
AEXP
equ
0x28
; 8 bit biased exponent for argument A
BEXP
equ
0x2F
; 8 bit biased exponent for argument B
;
;
floating point library exception flags
;
FPFLAGS
equ
0x2A
; floating point library exception flags
IOV
equ
0
; bit0 = integer overflow flag
FOV
equ
1
; bit1 = floating point overflow flag
FUN
equ
2
; bit2 = floating point underflow flag
FDZ
equ
3
; bit3 = floating point divide by zero flag
NAN
equ
4
; bit4 = not-a-number exception flag
DOM
equ
5
; bit5 = domain error exception flag
154
RND
truncation
equ
6
; bit6 = floating point rounding flag, 0 =
; 1 = unbiased rounding to nearest LSB
SAT
terminate on
equ
7
; bit7 = floating point saturate flag, 0 =
; exception without saturation, 1 = terminate
on
; exception with saturation to appropriate
value
;****************************************************************************
******************
;
ELEMENTARY FUNCTION MEMORY
CEXP
equ
0x35
CARGB0
equ
0x36
CARGB1
equ
0x37
CARGB2
equ
0x38
CARGB3
equ
0x39
DEXP
equ
0x3A
DARGB0
equ
0x3B
DARGB1
equ
0x3C
DARGB2
equ
0x3D
DARGB3
equ
0x3E
EEXP
equ
0x3F
EARGB0
equ
0x40
EARGB1
equ
0x41
EARGB2
equ
0x42
EARGB3
equ
0x43
ZARGB0
equ
0x44
ZARGB1
equ
0x45
ZARGB2
equ
0x46
ZARGB3
equ
0x47
RANDB0
equ
0x48
155
RANDB1
equ
0x49
RANDB2
equ
0x4A
RANDB3
equ
0x4B
;****************************************************************************
******************
;
24 BIT FLOATING POINT CONSTANTS
;
Machine precision
MACHEP24EXP equ
0x6F
MACHEP24B0
equ
0x00
MACHEP24B1
equ
0x00
;
Maximum argument to EXP24
MAXLOG24EXP equ
0x85
MAXLOG24B0
equ
0x31
MAXLOG24B1
equ
0x72
;
; 88.7228391117 = log(2**128)
Minimum argument to EXP24
MINLOG24EXP equ
0x85
MINLOG24B0
equ
0xAE
MINLOG24B1
equ
0xAC
;
; 1.52587890625e-5 = 2**-16
; -87.3365447506 = log(2**-126)
Maximum argument to EXP1024
MAXLOG1024EXP
equ
0x84
MAXLOG1024B0
equ
0x1A
MAXLOG1024B1
equ
0x21
;
Minimum argument to EXP1024
MINLOG1024EXP
equ
0x84
MINLOG1024B0
equ
0x97
MINLOG1024B1
equ
0xB8
;
; -37.9297794537 = log10(2**-126)
Maximum representable number before overflow
MAXNUM24EXP equ
0xFF
MAXNUM24B0
equ
0x7F
MAXNUM24B1
equ
0xFF
;
; 38.531839445 = log10(2**128)
; 6.80554349248E38 = (2**128) * (2 - 2**-15)
Minimum representable number before underflow
156
MINNUM24EXP equ
0x01
MINNUM24B0
equ
0x00
MINNUM24B1
equ
0x00
;
; 1.17549435082E-38 = (2**-126) * 1
Loss threshhold for argument to SIN24 and COS24
LOSSTHR24EXP
equ
LOSSTHR24B0 equ
0x00
LOSSTHR24B1 equ
0x00
0x8B
; 4096 = sqrt(2**24)
;****************************************************************************
******************
;
32 BIT FLOATING POINT CONSTANTS
;
Machine precision
MACHEP32EXP equ
0x67
MACHEP32B0
equ
0x00
MACHEP32B1
equ
0x00
MACHEP32B2
equ
0x00
;
Maximum argument to EXP32
MAXLOG32EXP equ
0x85
MAXLOG32B0
equ
0x31
MAXLOG32B1
equ
0x72
MAXLOG32B2
equ
0x18
;
; 88.7228391117 = log(2**128)
Minimum argument to EXP32
MINLOG32EXP equ
0x85
MINLOG32B0
equ
0xAE
MINLOG32B1
equ
0xAC
MINLOG32B2
equ
0x50
;
; 5.96046447754E-8 = 2**-24
; -87.3365447506 = log(2**-126)
Maximum argument to EXP1032
MAXLOG1032EXP
equ
0x84
MAXLOG1032B0
equ
0x1A
MAXLOG1032B1
equ
0x20
MAXLOG1032B2
equ
0x9B
;
; 38.531839445 = log10(2**128)
Minimum argument to EXP1032
157
MINLOG1032EXP
equ
0x84
MINLOG1032B0
equ
0x97
MINLOG1032B1
equ
0xB8
MINLOG1032B2
equ
0x18
;
Maximum representable number before overflow
MAXNUM32EXP equ
0xFF
MAXNUM32B0
equ
0x7F
MAXNUM32B1
equ
0xFF
MAXNUM32B2
equ
0xFF
;
; 6.80564774407E38 = (2**128) * (2 - 2**-23)
Minimum representable number before underflow
MINNUM32EXP equ
0x01
MINNUM32B0
equ
0x00
MINNUM32B1
equ
0x00
MINNUM32B2
equ
0x00
;
; -37.9297794537 = log10(2**-126)
; 1.17549435082E-38 = (2**-126) * 1
Loss threshhold for argument to SIN32 and COS32
LOSSTHR32EXP
equ
LOSSTHR32B0 equ
0x00
LOSSTHR32B1 equ
0x00
LOSSTHR32B2 equ
0x00
0x8B
; 4096 = sqrt(2**24)
158
Anexo G: Caracterización del sensor
159
Código fuente: Carac.asm
list P=16F876
include <p16F876.inc>
__config
_HS_OSC&_WDT_OFF&_PWRTE_ON&_BODEN_OFF&_CP_OFF&_LVP_OFF&_DEBUG_OFF&_WRT_ENABLE
_OFF
#define Trigger
PORTB,1
;Pulso de disparo a sensor
;******************************
cblock 0x70
d1,d2,tmp_STATUS,Flag_Cont2,Flag,Flag1,EE_Direc,tmp_TMR1H,tmp_TMR1L,Cont
_FL,Cont_FH,Flag_Cont,Flag_Cont1,tmp_DatoL,tmp_DatoH,Flag2
endc
;******************************
cblock
0x60 ;Variables contador envios por puerto serie
d3,d4,d3_2
endc
;*****************************
org
0x00
goto INICIO
org
goto
0x04
INTERRUPT
INICIO
banksel 0
call CONFIG_B2
clrf PORTA
;Salidas a '0'
clrf PORTB
;E/S a '0'
clrf PORTC
;Salidas a '0'
clrf TMR1H
;Limpiar Timer1
clrf TMR1L
;Limpiar Timer1
bsf
T1CON,T1CKPS0
;Preescaler de Timer1 a 2
bcf Flag,0 ;Inicializa. Flag aviso de calculo de ancho d pulso finaliz.
bcf Flag1,0
;Inicialización
bcf
Flag2,0
;Inicialización Flag de fin de transmisión
banksel TRISA
;Selecc.banco 1
movlw 0x21
movwf TRISB
;I-RB0,RB5 O-El resto
movlw 0x00
movwf TRISA
;Puerto A como salidas
movlw 0x80
movwf TRISC
;Puerto C como salidas, excepto RC7/Rx
bcf
OPTION_REG,NOT_RBPU ;Pull-up int. hab. en puertoB
bsf
OPTION_REG,INTEDG ;Flanco 0->1 en INT
clrf INTCON
;INICIALIZACION INTs_Int.'s y flags de int.'s a '0'
;********************CONFIG. DE LA USART**************************
movlw
movwf
movlw
movwf
0x81
;Config 9600baud
SPBRG
b'00100100' ;Config.USART
TXSTA
160
banksel TXREG
movlw b'10000000' ;Config de USART
movwf RCSTA
;*******************************************************************
;*********************ESPERA A QUE RB<5> SEA PULSADO*********************
bsf
INTCON,RBIE
;Habilitar int. por cambio en PORTB
movfw PORTB
sleep
;En sleep hasta recibir pulso por cambio en PORTB
nop
bcf INTCON,RBIF
;Limpia flag de int.en PORTB acontecida
banksel
OPTION_REG
bsf
OPTION_REG,NOT_RBPU
;************************************************************************
VUELVE
banksel 0
;Selecc. banco asociado a PORTA,B,C
_
bsf
Trigger
;Pulso de disparo a sensor por RB1 _| |_
call Delay_20us
bcf
Trigger
;Fin de pulso
movlw 0x90
;Hab.INT's por RB0/INT y GIE=1
movwf INTCON
goto BUCLE_ESP
;************RUTINA DE SERVICIO A LA INTERRUPCIÓN******************
INTERRUPT
swapf STATUS,w
;(1)
movwf tmp_STATUS ;(1)salvar contexto
movlw 0x01
;(1)
xorwf T1CON,f
;(1)Activ./Desact Timer1
btfsc T1CON,0
;(1)
goto Camb_Flanco ;(2)
movf TMR1H,w
;Copia de valor temporal
movwf tmp_TMR1H
;de Timer1-H
movf TMR1L,w
;Copia de valor temporal
movwf tmp_TMR1L
;de Timer1-L
bcf INTCON,INTF
;(1)Limpieza de flag INT
bsf Flag,0
;(1)Flag 1->Cambiado flanco medir ancho d pulso
bcf INTCON,INTE
;(1)Deshab.INT
goto FIN
;(2)
Camb_Flanco
banksel OPTION_REG ;(2)
bcf
OPTION_REG,INTEDG ;(1)Cambio a INT por flanco descen.
bcf INTCON,INTF
;(1)Limpieza flag de INT
bsf
INTCON,GIE
;(1)
banksel T1CON
goto BUCLE_ESP
;(2)
FIN
swapf tmp_STATUS,w
;(1)recuperar contexto
movwf STATUS
;(1)
retfie
;(2)
;***********************************************************************
;********RUTINA DE RETARDO PARA ENVIO DE PULSO DE INICIO A SENSOR************
Delay_20us
movlw 0x1F
;(1) 0x1F=31
movwf d1
;(1)
Delay_20us_0
decfsz d1,f
goto Delay_20us_0 ;(2)
161
;(1)
nop
;(1)
nop
;(1)
return
;(2
;***************************************************************************
;************BUCLE ESPERA PARA TRANSICIÓN L-H*********************
BUCLE_ESP
btfss Flag,0
goto BUCLE_ESP
;Esperar RB0/INT -> Bucle d espera
;*****************************************************************
bcf Flag,0
;Inicializ Flag calculo ancho d pulso finaliz.
clrf TMR1H
;Limpiar Timer1
clrf TMR1L
;Limpiar Timer1
banksel OPTION_REG
bsf
OPTION_REG,INTEDG ;Flanco 0->1 en INT
;***************CONTROL DEL CONTADOR DE DATOS ENVIADOS POR USART*************
banksel 0
bcf
STATUS,Z
;Limpieza de flag Z
btfsc Flag_Cont,0 ;Testea si p.baja se hizo 0
goto FFlag_Cont ;Si se hizo 0 en ultima pasada,H=H-1 L=FF
decf Cont_FL
;Sinó decrementar p.baja contador
btfsc STATUS,Z
;Se ha hecho zero?
call ICont_FH
;Activar flag control
goto TX_DATO
ICont_FH
incf Flag_Cont,f ;Se hace 0 p.baja, activamos flag de control
btfss Flag_Cont1,0
return
bsf
Flag_Cont2,0 ;Flag si contador se ha hecho 0
goto TX_DATO
FFlag_Cont
bcf
decf
STATUS,Z
Cont_FH,f
;Limpieza de flag Z
;Decre. part alta
;Si en ultima actualiz. del contador fué 0 p.baja
;Mira si se ha hecho zero Cont_FH
btfss STATUS,Z
goto sigue
bsf
Flag_Cont1,0 ;Si se ha hecho 0, activa flag de control
sigue
movlw 0xFF
;Sinó decre. p.alta
movwf Cont_FL
;Valor màxim a p.baja
clrf Flag_Cont
;Limpiar flag
goto TX_DATO
;****************************************************************************
;*******************INICIALIZACION DE VARIABLES*********************
CONFIG_B2
movlw 0x03
;Valor del contador
movwf Cont_FH
;de envios
movlw 0xE7
;por USART
movwf Cont_FL
;
bcf Flag_Cont,0
;
bcf Flag_Cont1,0 ;Flag finalización de envios por USART
bcf
Flag_Cont2,0
;
return
;****************************************************************************
;*******************TRANSMISION SERIE ASINCRONA******************************
TX_DATO
banksel 0
bcf
PIR1,TXIF
;Restaura flag de transmisor
btfsc Flag1,0
;Testea si, se transmitió byte alto?
goto Dato_L
;Si
movf tmp_TMR1H,w ;No.Preparación de dato a transmitir
bsf
Flag1,0
162
goto TRANSM
Dato_L
movf tmp_TMR1L,w
bcf
Flag1,0
bsf
Flag2,0
goto TRANSM
TRANSM
movwf TXREG
;Mueve dato a transmitir
banksel TXSTA
;Selecc. banco 1
TX_DATO_W
btfss TXSTA,TRMT ;¿Byte transmitido?
goto TX_DATO_W
;No.Esperar
banksel
TMR1L
btfsc Flag2,0
;Testea si finaliz. transmisiónde 16bits
goto RETARDO
;Tiempo hasta siguiente medida
call Delay_datos ;Tiempo entre envio de byte's
goto TX_DATO
;************************************************************************
;******RUTINA DE RETARDO ENTRE ENVIO DE BYTE Y BYTE***********
Delay_datos
;4993 cycles
movlw 0xE6
movwf d3
movlw 0x04
movwf d4
Delay_datos_0
decfsz
d3, f
goto $+2
decfsz
d4, f
goto Delay_datos_0
goto
nop
;3 cycles
$+1
;4 cycles (including call)
return
;**RUTINA DE RETARDO ENTRE CAPTURA DE TIEMPO Y SIGUIENTE TRIGGER DE SENSOR**
RETARDO
bcf
Flag2,0
movlw 0x1E
movwf d1
movlw 0x4F
movwf d2
Delay_10ms_0
decfsz
d1, f
goto $+2
decfsz
d2, f
goto Delay_10ms_0
;3 cycles
goto $+1
nop
;4 cycles (including call)
btfss Flag_Cont2,0 ;Si se hizo cero parte alta del contador
goto VUELVE
;ir al fin
;****************************************************************************
end
163
Resultados de la caracterización
Medida real=28,5 Moda=29,38
Error respecto medida real(cm)
140
120
100
80
60
40
20
0
-20
0
200
400
600
800
1000
-40
Nº de muestra(N)
750,00
650,00
N Muestras repetidas
550,00
450,00
350,00
250,00
150,00
50,00
-50,00
0
1
2
3
4
5
6
7
8
9
10 11 12 13 14 15 16 17 18 19 20
Error respecto medida real(cm)
164
Error respecto medida real (cm)
Medida real=38 Moda=38,84
14
12
10
8
6
4
2
0
0
200
400
600
800
1000
Nº de muestra (N)
300
N muestras repetidas
250
200
150
100
50
0
0
2
4
6
8
10
-50
Error respecto medida real (cm)
165
12
14
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real Error x muestra Veces repite Error
27,82009064
1,32009064
1,3
0
0
29,14105955
2,64105955
2,6
0
0,1
27,34162946
0,84162946
0,8
0
0,2
29,14452666
2,64452666
2,6
2
0,3
27,34162946
0,84162946
0,8
31
0,4
27,36936634
0,86936634
0,9
0
0,5
27,34162946
0,84162946
0,8
0
0,6
27,37283345
0,87283345
0,9
0
0,7
28,70420369
2,20420369
2,2
26
0,8
27,37283345
0,87283345
0,9
707
0,9
29,14105955
2,64105955
2,6
0
1
27,34162946
0,84162946
0,8
0
1,1
28,25347939
1,75347939
1,8
8
1,2
29,11678978
2,61678978
2,6
26
1,3
27,36936634
0,86936634
0,9
0
1,4
28,70420369
2,20420369
2,2
0
1,5
27,36936634
0,86936634
0,9
4
1,6
29,14105955
2,64105955
2,6
21
1,7
27,33816235
0,83816235
0,8
26
1,8
28,25347939
1,75347939
1,8
0
1,9
26,93597759
0,43597759
0,4
0
2
27,36936634
0,86936634
0,9
3
2,1
26,93251048
0,43251048
0,4
10
2,2
27,37283345
0,87283345
0,9
2
2,3
27,36936634
0,86936634
0,9
0
2,4
27,37283345
0,87283345
0,9
12
2,5
27,36589923
0,86589923
0,9
34
2,6
27,37283345
0,87283345
0,9
7
2,7
28,25347939
1,75347939
1,8
0
2,8
27,34162946
0,84162946
0,8
0
2,9
27,36936634
0,86936634
0,9
0
3
29,11332267
2,61332267
2,6
0
3,1
27,33816235
0,83816235
0,8
0
3,2
29,14105955
2,64105955
2,6
0
3,3
28,22920962
1,72920962
1,7
0
3,4
29,14105955
2,64105955
2,6
0
3,5
29,11332267
2,61332267
2,6
0
3,6
26,92904337
0,42904337
0,4
0
3,7
29,11332267
2,61332267
2,6
0
3,8
27,33816235
0,83816235
0,8
0
3,9
34,4630734
7,9630734
8
0
4
28,22574251
1,72574251
1,7
0
4,1
29,14105955
2,64105955
2,6
0
4,2
29,24160574
2,74160574
2,7
0
4,3
27,33469524
0,83469524
0,8
0
4,4
39,79202147
13,29202147
13,3
0
4,5
28,22920962
1,72920962
1,7
0
4,6
29,14105955
2,64105955
2,6
0
4,7
28,9850396
2,4850396
2,5
0
4,8
27,33816235
0,83816235
0,8
0
4,9
166
Medida real
26,5
Moda
27,36243212
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real
29,37682303
0,87682303
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,37682303
0,87682303
29,37682303
0,87682303
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,37682303
0,87682303
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,37682303
0,87682303
29,37682303
0,87682303
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,37682303
0,87682303
29,38029014
0,88029014
29,38029014
0,88029014
29,37682303
0,87682303
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,38375725
0,88375725
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,38029014
0,88029014
29,38375725
0,88375725
29,38029014
0,88029014
29,38029014
0,88029014
29,38375725
0,88375725
29,38029014
0,88029014
29,37682303
0,87682303
29,38029014
0,88029014
29,38029014
0,88029014
Error x muestra
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
0,9
167
Veces repite
141,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
719,00
1,00
0,00
0,00
0,00
1,00
4,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
14,00
60,00
0,00
0,00
1,00
0,00
8,00
0,00
3,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
Error
0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
Medida real
28,5
Moda
29,3802901
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real
31,2814517
0,78145172
31,2814517
0,78145172
31,2779986
0,77799864
31,2849048
0,7849048
31,2779986
0,77799864
31,2814517
0,78145172
31,2779986
0,77799864
31,2745456
0,77454556
31,2849048
0,7849048
31,2745456
0,77454556
31,2814517
0,78145172
31,2814517
0,78145172
31,2710925
0,77109248
31,2814517
0,78145172
31,2745456
0,77454556
31,2814517
0,78145172
31,2779986
0,77799864
31,2745456
0,77454556
31,2814517
0,78145172
31,2779986
0,77799864
31,2814517
0,78145172
31,2814517
0,78145172
31,2745456
0,77454556
31,2814517
0,78145172
31,2779986
0,77799864
31,2779986
0,77799864
31,2779986
0,77799864
31,2745456
0,77454556
31,2814517
0,78145172
31,2745456
0,77454556
31,2814517
0,78145172
31,2814517
0,78145172
31,2745456
0,77454556
31,2814517
0,78145172
31,2745456
0,77454556
31,2814517
0,78145172
31,2779986
0,77799864
31,2710925
0,77109248
31,2814517
0,78145172
31,2745456
0,77454556
31,2779986
0,77799864
31,2745456
0,77454556
31,2710925
0,77109248
31,2710925
0,77109248
31,2710925
0,77109248
31,2710925
0,77109248
31,2710925
0,77109248
31,2745456
0,77454556
31,2676394
0,7676394
31,2710925
0,77109248
Error x muestra Frecuencia Error
0,8
0
0
0,8
0
0,1
0,8
0
0,2
0,8
0
0,3
0,8
0
0,4
0,8
0
0,5
0,8
0
0,6
0,8
11
0,7
0,8
819
0,8
0,8
1
0,9
0,8
0
1
0,8
7
1,1
0,8
4
1,2
0,8
4
1,3
0,8
0
1,4
0,8
0
1,5
0,8
0
1,6
0,8
0
1,7
0,8
0
1,8
0,8
0
1,9
0,8
0
2
0,8
0
2,1
0,8
0
2,2
0,8
0
2,3
0,8
0
2,4
0,8
11
2,5
0,8
59
2,6
0,8
2
2,7
0,8
0
2,8
0,8
0
2,9
0,8
0
3
0,8
1
3,1
0,8
0
3,2
0,8
0
3,3
0,8
0
3,4
0,8
0
3,5
0,8
0
3,6
0,8
0
3,7
0,8
0
3,8
0,8
0
3,9
0,8
0
4
0,8
0
4,1
0,8
0
4,2
0,8
0
4,3
0,8
0
4,4
0,8
0
4,5
0,8
0
4,6
0,8
0
4,7
0,8
0
4,8
0,8
0
4,9
168
Medida real
30,5
Moda
31,2710925
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real Error x muestra Frecuencia Error Medida real
32,31737572
0,81737572
0,8
0
0
31,5
Moda
32,31392264
0,81392264
0,8
0
0,1
32,3208288
0,8208288
0,8
0
0,2 32,26212644
32,31737572
0,81737572
0,8
2
0,3
32,31392264
0,81392264
0,8
25
0,4
32,31737572
0,81737572
0,8
0
0,5
32,31392264
0,81392264
0,8
0
0,6
32,3208288
0,8208288
0,8
53
0,7
32,31737572
0,81737572
0,8
503
0,8
32,31392264
0,81392264
0,8
7
0,9
32,32428188
0,82428188
0,8
0
1
32,31392264
0,81392264
0,8
3
1,1
32,31737572
0,81737572
0,8
0
1,2
32,31737572
0,81737572
0,8
0
1,3
32,31392264
0,81392264
0,8
0
1,4
32,3208288
0,8208288
0,8
0
1,5
32,31737572
0,81737572
0,8
1
1,6
32,31392264
0,81392264
0,8
0
1,7
32,3208288
0,8208288
0,8
0
1,8
32,31392264
0,81392264
0,8
0
1,9
32,31392264
0,81392264
0,8
1
2
32,31737572
0,81737572
0,8
0
2,1
32,31392264
0,81392264
0,8
12
2,2
32,3208288
0,8208288
0,8
0
2,3
32,31737572
0,81737572
0,8
0
2,4
32,31046956
0,81046956
0,8
85
2,5
32,31737572
0,81737572
0,8
18
2,6
32,31392264
0,81392264
0,8
3
2,7
32,31737572
0,81737572
0,8
0
2,8
32,31737572
0,81737572
0,8
0
2,9
32,31046956
0,81046956
0,8
0
3
32,31737572
0,81737572
0,8
0
3,1
32,31737572
0,81737572
0,8
0
3,2
32,31392264
0,81392264
0,8
0
3,3
32,31737572
0,81737572
0,8
0
3,4
32,31046956
0,81046956
0,8
0
3,5
32,31737572
0,81737572
0,8
0
3,6
32,31392264
0,81392264
0,8
0
3,7
32,30701648
0,80701648
0,8
0
3,8
32,3208288
0,8208288
0,8
0
3,9
32,31046956
0,81046956
0,8
0
4
32,31392264
0,81392264
0,8
0
4,1
32,31392264
0,81392264
0,8
0
4,2
32,30701648
0,80701648
0,8
0
4,3
32,31392264
0,81392264
0,8
0
4,4
32,31046956
0,81046956
0,8
0
4,5
32,31046956
0,81046956
0,8
0
4,6
32,31737572
0,81737572
0,8
0
4,7
32,31046956
0,81046956
0,8
0
4,8
32,31392264
0,81392264
0,8
0
4,9
169
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real Error x muestra Frecuencia Error Medida real
34,2839275
0,7839275
0,8
0
0
33,5
Moda
34,2770189
0,7770189
0,8
0
0,1
34,2735646
0,7735646
0,8
0
0,2
34,27
34,2839275
0,7839275
0,8
5
0,3
34,2735646
0,7735646
0,8
4
0,4
34,2735646
0,7735646
0,8
29
0,5
34,2804732
0,7804732
0,8
0
0,6
34,2735646
0,7735646
0,8
1
0,7
34,2804732
0,7804732
0,8
584
0,8
34,2804732
0,7804732
0,8
3
0,9
34,2770189
0,7770189
0,8
1
1
34,2839275
0,7839275
0,8
0
1,1
34,2804732
0,7804732
0,8
24
1,2
34,2735646
0,7735646
0,8
1
1,3
34,2839275
0,7839275
0,8
3
1,4
34,2770189
0,7770189
0,8
0
1,5
34,2735646
0,7735646
0,8
0
1,6
34,2735646
0,7735646
0,8
4
1,7
34,2701103
0,7701103
0,8
2
1,8
34,2735646
0,7735646
0,8
0
1,9
34,2701103
0,7701103
0,8
0
2
34,2701103
0,7701103
0,8
0
2,1
34,2735646
0,7735646
0,8
7
2,2
34,2735646
0,7735646
0,8
3
2,3
34,2701103
0,7701103
0,8
0
2,4
34,2735646
0,7735646
0,8
1
2,5
34,2701103
0,7701103
0,8
0
2,6
34,2735646
0,7735646
0,8
0
2,7
34,2735646
0,7735646
0,8
0
2,8
34,2735646
0,7735646
0,8
0
2,9
34,2735646
0,7735646
0,8
0
3
34,2701103
0,7701103
0,8
0
3,1
34,2735646
0,7735646
0,8
0
3,2
34,2735646
0,7735646
0,8
0
3,3
34,2701103
0,7701103
0,8
0
3,4
34,2701103
0,7701103
0,8
0
3,5
34,2735646
0,7735646
0,8
0
3,6
34,2701103
0,7701103
0,8
0
3,7
34,2701103
0,7701103
0,8
0
3,8
34,2701103
0,7701103
0,8
0
3,9
34,2735646
0,7735646
0,8
0
4
34,2735646
0,7735646
0,8
0
4,1
34,2701103
0,7701103
0,8
0
4,2
34,2701103
0,7701103
0,8
0
4,3
34,2701103
0,7701103
0,8
0
4,4
34,2701103
0,7701103
0,8
0
4,5
34,2735646
0,7735646
0,8
0
4,6
34,2701103
0,7701103
0,8
0
4,7
34,2701103
0,7701103
0,8
0
4,8
34,2701103
0,7701103
0,8
0
4,9
170
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
39,2511795
38,3637555
38,8074675
39,6948915
38,3637555
38,3637555
39,6948915
39,254646
38,3568225
39,6948915
39,254646
38,360289
38,3637555
39,254646
39,247713
38,3568225
39,6948915
39,2511795
38,360289
39,6948915
39,254646
38,360289
38,3637555
39,6948915
39,2511795
38,360289
39,6948915
39,2511795
38,3568225
39,6948915
39,2511795
38,360289
38,360289
39,6948915
39,247713
38,360289
39,6948915
39,2511795
38,3568225
39,691425
39,254646
39,247713
39,247713
39,6948915
39,247713
38,3568225
39,254646
39,254646
39,247713
39,254646
Error medida real
1,2511795
0,3637555
0,8074675
1,6948915
0,3637555
0,3637555
1,6948915
1,254646
0,3568225
1,6948915
1,254646
0,360289
0,3637555
1,254646
1,247713
0,3568225
1,6948915
1,2511795
0,360289
1,6948915
1,254646
0,360289
0,3637555
1,6948915
1,2511795
0,360289
1,6948915
1,2511795
0,3568225
1,6948915
1,2511795
0,360289
0,360289
1,6948915
1,247713
0,360289
1,6948915
1,2511795
0,3568225
1,691425
1,254646
1,247713
1,247713
1,6948915
1,247713
0,3568225
1,254646
1,254646
1,247713
1,254646
Error x muestra
1,3
0,4
0,8
1,7
0,4
0,4
1,7
1,3
0,4
1,7
1,3
0,4
0,4
1,3
1,2
0,4
1,7
1,3
0,4
1,7
1,3
0,4
0,4
1,7
1,3
0,4
1,7
1,3
0,4
1,7
1,3
0,4
0,4
1,7
1,2
0,4
1,7
1,3
0,4
1,7
1,3
1,2
1,2
1,7
1,2
0,4
1,3
1,3
1,2
1,3
171
Frecuencia
0
0
0
0
0
92
8
2
0
270
57
29
0
41
129
25
0
0
90
0
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Error
0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
Medida real
38
Moda
38,845599
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
42,2601015
42,2601015
42,2601015
42,263568
42,2601015
42,2601015
42,2601015
41,979315
41,979315
52,628403
52,628403
52,628403
52,6318695
53,141445
51,3700635
53,1449115
53,058249
53,058249
52,6873335
51,7999095
51,7999095
51,803376
51,803376
51,7999095
51,7999095
51,7999095
51,7999095
51,7999095
51,7999095
51,7999095
51,7999095
51,7999095
51,7999095
51,7999095
52,2297555
51,803376
52,2297555
51,7999095
51,7999095
51,7999095
51,7999095
52,2297555
52,9299885
42,2809005
42,2878335
42,284367
42,2809005
42,2809005
42,2878335
42,2809005
Error medida real
1,2601015
1,2601015
1,2601015
1,263568
1,2601015
1,2601015
1,2601015
0,979315
0,979315
11,628403
11,628403
11,628403
11,6318695
12,141445
10,3700635
12,1449115
12,058249
12,058249
11,6873335
10,7999095
10,7999095
10,803376
10,803376
10,7999095
10,7999095
10,7999095
10,7999095
10,7999095
10,7999095
10,7999095
10,7999095
10,7999095
10,7999095
10,7999095
11,2297555
10,803376
11,2297555
10,7999095
10,7999095
10,7999095
10,7999095
11,2297555
11,9299885
1,2809005
1,2878335
1,284367
1,2809005
1,2809005
1,2878335
1,2809005
Error x muestra
1,3
1,3
1,3
1,3
1,3
1,3
1,3
1
1
11,6
11,6
11,6
11,6
12,1
10,4
12,1
12,1
12,1
11,7
10,8
10,8
10,8
10,8
10,8
10,8
10,8
10,8
10,8
10,8
10,8
10,8
10,8
10,8
10,8
11,2
10,8
11,2
10,8
10,8
10,8
10,8
11,2
11,9
1,3
1,3
1,3
1,3
1,3
1,3
1,3
172
Frecuencia Error
0
0
0
0,1
0
0,2
0
0,3
0
0,4
0
0,5
0
0,6
0
0,7
0
0,8
22
0,9
12
1
0
1,1
0
1,2
722
1,3
29
1,4
7
1,5
0
1,6
0
1,7
0
1,8
1
1,9
0
2
0
2,1
0
2,2
0
2,3
0
2,4
0
2,5
0
2,6
0
2,7
0
2,8
0
2,9
0
3
0
3,1
0
3,2
0
3,3
0
3,4
0
3,5
0
3,6
0
3,7
0
3,8
0
3,9
0
4
0
4,1
0
4,2
0
4,3
0
4,4
0
4,5
0
4,6
0
4,7
0
4,8
0
4,9
Medida real
41
Moda
42,2601015
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
42,839007
51,713247
51,7097805
51,838041
51,8415075
43,476843
52,3476165
53,6648865
53,66142
52,351083
53,612889
42,9672675
53,238507
51,886572
53,4846285
52,34415
51,8415075
52,7289315
52,725465
52,3476165
53,6648865
53,66142
54,1224645
51,838041
52,725465
52,725465
52,351083
43,3832475
54,118998
53,6094225
51,838041
52,725465
51,838041
54,1224645
43,012332
54,118998
51,8345745
51,838041
52,725465
52,351083
54,118998
53,66142
54,118998
51,8345745
52,1188275
52,725465
52,3476165
43,012332
53,66142
53,605956
Error medida real
0,839007
9,713247
9,7097805
9,838041
9,8415075
1,476843
10,3476165
11,6648865
11,66142
10,351083
11,612889
0,9672675
11,238507
9,886572
11,4846285
10,34415
9,8415075
10,7289315
10,725465
10,3476165
11,6648865
11,66142
12,1224645
9,838041
10,725465
10,725465
10,351083
1,3832475
12,118998
11,6094225
9,838041
10,725465
9,838041
12,1224645
1,012332
12,118998
9,8345745
9,838041
10,725465
10,351083
12,118998
11,66142
12,118998
9,8345745
10,1188275
10,725465
10,3476165
1,012332
11,66142
11,605956
Error x muestra
0,8
9,7
9,7
9,8
9,8
1,5
10,3
11,7
11,7
10,4
11,6
1
11,2
9,9
11,5
10,3
9,8
10,7
10,7
10,3
11,7
11,7
12,1
9,8
10,7
10,7
10,4
1,4
12,1
11,6
9,8
10,7
9,8
12,1
1
12,1
9,8
9,8
10,7
10,4
12,1
11,7
12,1
9,8
10,1
10,7
10,3
1
11,7
11,6
173
Frecuencia
0,00
0,00
0,00
0,00
0,00
0,00
14,00
0,00
429,00
32,00
23,00
0,00
8,00
239,00
16,00
13,00
0,00
0,00
0,00
1,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
Error
0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
Medida real
42
Moda
43,2792525
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real Error x muestra
44,3469345
0,8469345
0,8
54,9890895
11,4890895
11,5
54,992556
11,492556
11,5
44,0418825
0,5418825
0,5
43,643235
0,143235
0,1
44,3469345
0,8469345
0,8
54,992556
11,492556
11,5
44,343468
0,843468
0,8
44,350401
0,850401
0,9
44,350401
0,850401
0,9
44,343468
0,843468
0,8
44,3400015
0,8400015
0,8
44,350401
0,850401
0,9
44,350401
0,850401
0,9
44,3469345
0,8469345
0,8
44,3400015
0,8400015
0,8
44,350401
0,850401
0,9
44,350401
0,850401
0,9
44,343468
0,843468
0,8
44,3400015
0,8400015
0,8
44,343468
0,843468
0,8
44,3538675
0,8538675
0,9
44,3469345
0,8469345
0,8
44,343468
0,843468
0,8
44,3400015
0,8400015
0,8
44,3538675
0,8538675
0,9
44,350401
0,850401
0,9
44,343468
0,843468
0,8
44,3400015
0,8400015
0,8
44,3469345
0,8469345
0,8
44,350401
0,850401
0,9
44,3469345
0,8469345
0,8
44,3400015
0,8400015
0,8
44,3469345
0,8469345
0,8
44,350401
0,850401
0,9
44,343468
0,843468
0,8
44,3400015
0,8400015
0,8
44,3400015
0,8400015
0,8
44,350401
0,850401
0,9
44,3469345
0,8469345
0,8
44,3400015
0,8400015
0,8
44,3400015
0,8400015
0,8
44,350401
0,850401
0,9
44,3469345
0,8469345
0,8
44,343468
0,843468
0,8
44,336535
0,836535
0,8
44,3469345
0,8469345
0,8
44,3469345
0,8469345
0,8
44,3469345
0,8469345
0,8
43,899756
0,399756
0,4
174
Frecuencia
0,00
1,00
0,00
0,00
35,00
1,00
0,00
0,00
43,00
351,00
0,00
95,00
0,00
108,00
1,00
12,00
0,00
36,00
18,00
3,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
Error Medida real
0
43,5
Moda
0,1
0,2
44,385066
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real Error x muestra
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7198857
0,7198857
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7198857
0,7198857
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7198857
0,7198857
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7267894
0,72678942
0,7
45,7233376
0,72333756
0,7
45,7267894
0,72678942
0,7
45,7267894
0,72678942
0,7
45,7267894
0,72678942
0,7
45,7267894
0,72678942
0,7
45,7267894
0,72678942
0,7
45,7267894
0,72678942
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7267894
0,72678942
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7267894
0,72678942
0,7
45,7233376
0,72333756
0,7
45,7233376
0,72333756
0,7
45,7198857
0,7198857
0,7
45,7233376
0,72333756
0,7
175
Frecuencia
0,00
0,00
0,00
0,00
3,00
0,00
0,00
663,00
5,00
35,00
0,00
0,00
0,00
0,00
0,00
8,00
102,00
21,00
22,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
Error Medida real
0
45
Moda
0,1
0,2 45,72333756
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real Error x muestra
47,6509909
1,15099094
1,2
47,2332421
0,73324207
0,7
47,3609835
0,86098346
0,9
47,2332421
0,73324207
0,7
48,1170744
1,61707439
1,6
48,1170744
1,61707439
1,6
48,5382757
2,03827573
2
47,6544434
1,15444341
1,2
47,2435995
0,74359948
0,7
47,2332421
0,73324207
0,7
47,2332421
0,73324207
0,7
47,2435995
0,74359948
0,7
47,2435995
0,74359948
0,7
47,2366945
0,73669454
0,7
48,1136219
1,61362192
1,6
48,1170744
1,61707439
1,6
47,2366945
0,73669454
0,7
47,2366945
0,73669454
0,7
47,6509909
1,15099094
1,2
48,0756448
1,57564475
1,6
48,1170744
1,61707439
1,6
47,2366945
0,73669454
0,7
47,2366945
0,73669454
0,7
47,6509909
1,15099094
1,2
48,0721923
1,57219228
1,6
48,1170744
1,61707439
1,6
47,2366945
0,73669454
0,7
47,2332421
0,73324207
0,7
47,6475385
1,14753847
1,1
48,1170744
1,61707439
1,6
47,2366945
0,73669454
0,7
47,6544434
1,15444341
1,2
47,2366945
0,73669454
0,7
47,2366945
0,73669454
0,7
47,2297896
0,7297896
0,7
47,2332421
0,73324207
0,7
48,1239793
1,62397933
1,6
47,240147
0,74014701
0,7
48,1205269
1,62052686
1,6
47,2297896
0,7297896
0,7
47,1952649
0,6952649
0,7
47,6544434
1,15444341
1,2
47,240147
0,74014701
0,7
47,2332421
0,73324207
0,7
47,2332421
0,73324207
0,7
47,2366945
0,73669454
0,7
47,240147
0,74014701
0,7
47,2366945
0,73669454
0,7
47,2297896
0,7297896
0,7
47,2332421
0,73324207
0,7
176
Frecuencia
0,00
0,00
0,00
0,00
2,00
4,00
0,00
547,00
151,00
7,00
9,00
30,00
47,00
0,00
5,00
0,00
139,00
4,00
2,00
0,00
23,00
2,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
Error Medida real
0
46,5
Moda
0,1
0,2 47,24359948
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real Error x muestra
49,314429
0,814429
0,8
49,2970965
0,7970965
0,8
49,29363
0,79363
0,8
49,2901635
0,7901635
0,8
49,2970965
0,7970965
0,8
49,3040295
0,8040295
0,8
49,300563
0,800563
0,8
49,2970965
0,7970965
0,8
49,2901635
0,7901635
0,8
49,2970965
0,7970965
0,8
49,307496
0,807496
0,8
49,300563
0,800563
0,8
49,2970965
0,7970965
0,8
49,2901635
0,7901635
0,8
49,29363
0,79363
0,8
49,3040295
0,8040295
0,8
49,2970965
0,7970965
0,8
49,29363
0,79363
0,8
49,3040295
0,8040295
0,8
49,286697
0,786697
0,8
49,2970965
0,7970965
0,8
49,29363
0,79363
0,8
49,2901635
0,7901635
0,8
49,300563
0,800563
0,8
49,3040295
0,8040295
0,8
49,29363
0,79363
0,8
49,300563
0,800563
0,8
49,2970965
0,7970965
0,8
49,2970965
0,7970965
0,8
49,279764
0,779764
0,8
49,2832305
0,7832305
0,8
49,279764
0,779764
0,8
49,279764
0,779764
0,8
49,279764
0,779764
0,8
49,2832305
0,7832305
0,8
49,2832305
0,7832305
0,8
49,279764
0,779764
0,8
49,279764
0,779764
0,8
49,279764
0,779764
0,8
49,300563
0,800563
0,8
49,2970965
0,7970965
0,8
49,2970965
0,7970965
0,8
49,279764
0,779764
0,8
49,2832305
0,7832305
0,8
49,2832305
0,7832305
0,8
49,2762975
0,7762975
0,8
50,1706545
1,6706545
1,7
50,160255
1,660255
1,7
50,160255
1,660255
1,7
50,1637215
1,6637215
1,7
177
Frecuencia
0,00
0,00
0,00
0,00
10,00
4,00
2,00
0,00
729,00
109,00
1,00
2,00
0,00
8,00
1,00
1,00
0,00
122,00
0,00
1,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
Error Medida real
0
48,5
Moda
0,1
0,2
49,335228
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real Error x muestra
52,6867825
0,6867825
0,7
52,6971363
0,69713625
0,7
52,6902338
0,69023375
0,7
52,6867825
0,6867825
0,7
52,6833313
0,68333125
0,7
52,6867825
0,6867825
0,7
52,65227
0,65227
0,7
52,6971363
0,69713625
0,7
53,577205
1,577205
1,6
52,6902338
0,69023375
0,7
52,6867825
0,6867825
0,7
52,6867825
0,6867825
0,7
52,6902338
0,69023375
0,7
52,693685
0,693685
0,7
52,693685
0,693685
0,7
52,6867825
0,6867825
0,7
52,6902338
0,69023375
0,7
52,6833313
0,68333125
0,7
52,6867825
0,6867825
0,7
52,693685
0,693685
0,7
52,693685
0,693685
0,7
52,6902338
0,69023375
0,7
52,6902338
0,69023375
0,7
52,6867825
0,6867825
0,7
52,6833313
0,68333125
0,7
52,6867825
0,6867825
0,7
52,6902338
0,69023375
0,7
52,6902338
0,69023375
0,7
52,6902338
0,69023375
0,7
52,6867825
0,6867825
0,7
52,6833313
0,68333125
0,7
52,6833313
0,68333125
0,7
52,6902338
0,69023375
0,7
52,6902338
0,69023375
0,7
52,6902338
0,69023375
0,7
52,6867825
0,6867825
0,7
52,6833313
0,68333125
0,7
52,6833313
0,68333125
0,7
52,6867825
0,6867825
0,7
52,6902338
0,69023375
0,7
52,6902338
0,69023375
0,7
53,5737538
1,57375375
1,6
52,6764288
0,67642875
0,7
52,7281975
0,7281975
0,7
52,7247463
0,72474625
0,7
53,6117175
1,6117175
1,6
53,5668513
1,56685125
1,6
53,5668513
1,56685125
1,6
52,7281975
0,7281975
0,7
52,2829863
0,28298625
0,3
178
Frecuencia
0,00
0,00
21,00
9,00
0,00
0,00
21,00
710,00
9,00
0,00
0,00
14,00
3,00
0,00
0,00
13,00
191,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
2,00
7,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
Error Medida real
0
52
Moda
0,1
0,2
52,6867825
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real
55,0888525
1,5888525
55,5306125
2,0306125
54,20878375
0,70878375
54,2053325
0,7053325
54,20878375
0,70878375
54,6470925
1,1470925
54,20878375
0,70878375
54,64364125
1,14364125
54,20878375
0,70878375
54,20878375
0,70878375
54,6470925
1,1470925
54,20878375
0,70878375
54,64364125
1,14364125
54,21568625
0,71568625
54,21568625
0,71568625
54,21568625
0,71568625
54,21568625
0,71568625
54,21568625
0,71568625
54,212235
0,712235
54,21568625
0,71568625
54,21568625
0,71568625
54,63673875
1,13673875
55,52371
2,02371
54,21568625
0,71568625
54,63673875
1,13673875
55,52025875
2,02025875
55,52025875
2,02025875
55,52025875
2,02025875
55,09230375
1,59230375
55,52025875
2,02025875
55,09230375
1,59230375
55,0612425
1,5612425
54,18117375
0,68117375
54,18807625
0,68807625
54,1915275
0,6915275
54,1915275
0,6915275
54,18807625
0,68807625
54,184625
0,684625
54,18117375
0,68117375
54,18117375
0,68117375
54,1777225
0,6777225
54,184625
0,684625
54,18807625
0,68807625
54,18807625
0,68807625
54,184625
0,684625
54,18117375
0,68117375
54,18117375
0,68117375
54,18117375
0,68117375
54,18117375
0,68117375
54,18807625
0,68807625
Error x muestra
1,6
2
0,7
0,7
0,7
1,1
0,7
1,1
0,7
0,7
1,1
0,7
1,1
0,7
0,7
0,7
0,7
0,7
0,7
0,7
0,7
1,1
2
0,7
1,1
2
2
2
1,6
2
1,6
1,6
0,7
0,7
0,7
0,7
0,7
0,7
0,7
0,7
0,7
0,7
0,7
0,7
0,7
0,7
0,7
0,7
0,7
0,7
179
Frecuencia
0,00
0,00
0,00
0,00
0,00
0,00
33,00
570,00
0,00
0,00
0,00
33,00
21,00
0,00
0,00
116,00
156,00
0,00
0,00
0,00
69,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
Error Medida real
0
53,5
Moda
0,1
0,2 54,1639175
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real Error x muestra
55,23321186
0,73321186
0,7
56,11688802
1,61688802
1,6
56,11343616
1,61343616
1,6
56,1099843
1,6099843
1,6
56,1099843
1,6099843
1,6
56,11343616
1,61343616
1,6
55,65433878
1,15433878
1,2
55,65779064
1,15779064
1,2
55,6612425
1,1612425
1,2
55,23321186
0,73321186
0,7
55,23321186
0,73321186
0,7
55,22630814
0,72630814
0,7
56,1099843
1,6099843
1,6
55,22630814
0,72630814
0,7
55,22630814
0,72630814
0,7
55,22976
0,72976
0,7
55,65433878
1,15433878
1,2
55,65779064
1,15779064
1,2
55,65779064
1,15779064
1,2
55,23321186
0,73321186
0,7
55,22976
0,72976
0,7
56,11343616
1,61343616
1,6
56,10653244
1,60653244
1,6
56,1099843
1,6099843
1,6
55,22285628
0,72285628
0,7
55,22976
0,72976
0,7
55,65433878
1,15433878
1,2
55,65433878
1,15433878
1,2
55,23321186
0,73321186
0,7
55,22976
0,72976
0,7
56,11343616
1,61343616
1,6
56,1099843
1,6099843
1,6
56,10653244
1,60653244
1,6
56,10653244
1,60653244
1,6
56,11343616
1,61343616
1,6
56,53801494
2,03801494
2
55,22630814
0,72630814
0,7
55,22630814
0,72630814
0,7
55,65433878
1,15433878
1,2
55,65088692
1,15088692
1,2
56,53111122
2,03111122
2
56,53456308
2,03456308
2
56,1099843
1,6099843
1,6
56,10653244
1,60653244
1,6
56,53111122
2,03111122
2
56,53801494
2,03801494
2
55,22630814
0,72630814
0,7
55,65433878
1,15433878
1,2
55,23321186
0,73321186
0,7
55,22630814
0,72630814
0,7
180
Frecuencia
0,00
0,00
0,00
13,00
0,00
0,00
0,00
580,00
28,00
0,00
0,00
9,00
16,00
0,00
0,00
46,00
248,00
0,00
0,00
0,00
43,00
3,00
0,00
0,00
0,00
14,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
Error Medida real
0
54,5
Moda
0,1
0,2 55,22285628
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real Error x muestra
56,67709284
0,67709284
0,7
57,10489656
1,10489656
1,1
57,10834659
1,10834659
1,1
57,10834659
1,10834659
1,1
56,68054287
0,68054287
0,7
57,10489656
1,10489656
1,1
56,67709284
0,67709284
0,7
57,10489656
1,10489656
1,1
57,98465421
1,98465421
2
57,98465421
1,98465421
2
56,67364281
0,67364281
0,7
57,97775415
1,97775415
2
57,98465421
1,98465421
2
57,9950043
1,9950043
2
57,11179662
1,11179662
1,1
57,10144653
1,10144653
1,1
57,10144653
1,10144653
1,1
57,10489656
1,10489656
1,1
56,67364281
0,67364281
0,7
56,67019278
0,67019278
0,7
56,66674275
0,66674275
0,7
56,67019278
0,67019278
0,7
56,67364281
0,67364281
0,7
57,10144653
1,10144653
1,1
57,10489656
1,10489656
1,1
57,10834659
1,10834659
1,1
57,10834659
1,10834659
1,1
56,68054287
0,68054287
0,7
56,67364281
0,67364281
0,7
56,67364281
0,67364281
0,7
56,67019278
0,67019278
0,7
56,67019278
0,67019278
0,7
56,67019278
0,67019278
0,7
56,67019278
0,67019278
0,7
56,67709284
0,67709284
0,7
56,68054287
0,68054287
0,7
56,6839929
0,6839929
0,7
56,68054287
0,68054287
0,7
56,6839929
0,6839929
0,7
56,67709284
0,67709284
0,7
56,67709284
0,67709284
0,7
56,67364281
0,67364281
0,7
56,67364281
0,67364281
0,7
56,67019278
0,67019278
0,7
56,67019278
0,67019278
0,7
56,67364281
0,67364281
0,7
56,67709284
0,67709284
0,7
57,56375055
1,56375055
1,6
57,56030052
1,56030052
1,6
57,56030052
1,56030052
1,6
181
Frecuencia
0,00
0,00
0,00
0,00
0,00
0,00
0,00
530,00
0,00
0,00
0,00
88,00
62,00
0,00
0,00
54,00
156,00
0,00
0,00
0,00
110,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
Error Medida real
0
56
Moda
0,1
0,2 56,72194323
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real Error x muestra
57,67415151
0,67415151
0,7
58,55735919
1,55735919
1,6
58,56080922
1,56080922
1,6
58,55045913
1,55045913
1,6
58,60220958
1,60220958
1,6
58,59875955
1,59875955
1,6
58,59530952
1,59530952
1,6
58,59530952
1,59530952
1,6
59,0300133
2,0300133
2
57,71210184
0,71210184
0,7
57,66035139
0,66035139
0,7
57,66035139
0,66035139
0,7
57,67070148
0,67070148
0,7
57,67415151
0,67415151
0,7
57,67415151
0,67415151
0,7
57,67415151
0,67415151
0,7
57,67070148
0,67070148
0,7
57,66725145
0,66725145
0,7
57,66725145
0,66725145
0,7
57,66380142
0,66380142
0,7
57,66035139
0,66035139
0,7
57,66380142
0,66380142
0,7
57,66035139
0,66035139
0,7
57,66725145
0,66725145
0,7
57,66725145
0,66725145
0,7
57,67070148
0,67070148
0,7
57,67415151
0,67415151
0,7
57,67070148
0,67070148
0,7
57,67070148
0,67070148
0,7
57,66725145
0,66725145
0,7
57,66725145
0,66725145
0,7
57,66380142
0,66380142
0,7
57,66725145
0,66725145
0,7
57,66725145
0,66725145
0,7
57,66380142
0,66380142
0,7
57,66725145
0,66725145
0,7
58,10195523
1,10195523
1,1
58,0985052
1,0985052
1,1
58,09505517
1,09505517
1,1
58,09505517
1,09505517
1,1
58,09505517
1,09505517
1,1
57,66035139
0,66035139
0,7
57,66035139
0,66035139
0,7
58,54355907
1,54355907
1,5
58,54355907
1,54355907
1,5
58,54355907
1,54355907
1,5
58,97136279
1,97136279
2
58,97136279
1,97136279
2
58,10195523
1,10195523
1,1
58,0985052
1,0985052
1,1
182
Frecuencia
1,00
0,00
0,00
0,00
0,00
0,00
33,00
609,00
0,00
0,00
0,00
131,00
1,00
0,00
0,00
65,00
98,00
0,00
0,00
0,00
61,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
Error Medida real
0
57
Moda
0,1
0,2
57,6500013
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real Error x muestra
59,58183166
1,08183166
1,1
59,13340706
0,63340706
0,6
58,69878014
0,19878014
0,2
58,69878014
0,19878014
0,2
58,69533072
0,19533072
0,2
59,13340706
0,63340706
0,6
60,89606068
2,39606068
2,4
60,00955974
1,50955974
1,5
60,00955974
1,50955974
1,5
60,00955974
1,50955974
1,5
60,01300916
1,51300916
1,5
60,01645858
1,51645858
1,5
59,13685648
0,63685648
0,6
58,69878014
0,19878014
0,2
58,69878014
0,19878014
0,2
58,69878014
0,19878014
0,2
59,13340706
0,63340706
0,6
59,13340706
0,63340706
0,6
59,13340706
0,63340706
0,6
59,13340706
0,63340706
0,6
60,01300916
1,51300916
1,5
60,00955974
1,50955974
1,5
59,12650822
0,62650822
0,6
59,1230588
0,6230588
0,6
60,00955974
1,50955974
1,5
59,12995764
0,62995764
0,6
59,13340706
0,63340706
0,6
59,13685648
0,63685648
0,6
58,69878014
0,19878014
0,2
59,13340706
0,63340706
0,6
59,13340706
0,63340706
0,6
59,13340706
0,63340706
0,6
59,13340706
0,63340706
0,6
59,12995764
0,62995764
0,6
59,12650822
0,62650822
0,6
59,1230588
0,6230588
0,6
59,11615996
0,61615996
0,6
59,99576206
1,49576206
1,5
59,11615996
0,61615996
0,6
59,12650822
0,62650822
0,6
59,12650822
0,62650822
0,6
60,01645858
1,51645858
1,5
59,13340706
0,63340706
0,6
59,13340706
0,63340706
0,6
60,01645858
1,51645858
1,5
60,01300916
1,51300916
1,5
60,01300916
1,51300916
1,5
59,12650822
0,62650822
0,6
59,12650822
0,62650822
0,6
59,12650822
0,62650822
0,6
183
Frecuencia
9,00
0,00
39,00
0,00
0,00
0,00
128,00
196,00
0,00
0,00
0,00
216,00
0,00
0,00
0,00
216,00
23,00
0,00
0,00
0,00
111,00
0,00
0,00
0,00
62,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
Error Medida real
0
58,5
Moda
0,1
0,2 59,59217992
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real Error x muestra
61,10992472
1,10992472
1,1
61,11337414
1,11337414
1,1
61,56524816
1,56524816
1,6
61,10992472
1,10992472
1,1
61,10992472
1,10992472
1,1
61,11337414
1,11337414
1,1
61,1064753
1,1064753
1,1
61,99297624
1,99297624
2
62,4517491
2,4517491
2,5
62,4517491
2,4517491
2,5
62,45519852
2,45519852
2,5
61,572147
1,572147
1,6
61,57559642
1,57559642
1,6
61,572147
1,572147
1,6
60,68909548
0,68909548
0,7
60,2441203
0,2441203
0,2
60,23377204
0,23377204
0,2
60,23377204
0,23377204
0,2
61,11337414
1,11337414
1,1
61,1237224
1,1237224
1,1
61,572147
1,572147
1,6
61,12027298
1,12027298
1,1
61,56869758
1,56869758
1,6
62,4517491
2,4517491
2,5
62,44829968
2,44829968
2,4
62,4517491
2,4517491
2,5
61,56524816
1,56524816
1,6
61,56524816
1,56524816
1,6
60,68219664
0,68219664
0,7
60,68564606
0,68564606
0,7
60,68909548
0,68909548
0,7
60,68909548
0,68909548
0,7
60,68909548
0,68909548
0,7
60,6925449
0,6925449
0,7
60,69599432
0,69599432
0,7
60,69599432
0,69599432
0,7
60,69599432
0,69599432
0,7
60,6925449
0,6925449
0,7
60,6925449
0,6925449
0,7
60,6925449
0,6925449
0,7
60,68909548
0,68909548
0,7
60,68909548
0,68909548
0,7
60,68909548
0,68909548
0,7
60,68564606
0,68564606
0,7
60,68564606
0,68564606
0,7
60,68219664
0,68219664
0,7
60,68219664
0,68219664
0,7
60,67874722
0,67874722
0,7
60,67874722
0,67874722
0,7
60,67874722
0,67874722
0,7
184
Frecuencia
0,00
0,00
84,00
15,00
0,00
0,00
121,00
259,00
0,00
0,00
0,00
115,00
15,00
0,00
0,00
59,00
195,00
0,00
0,00
0,00
66,00
0,00
0,00
0,00
27,00
44,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
Error Medida real
0
60
Moda
0,1
0,2 60,67874722
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
Muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Medida
Error medida real Error x muestra
62,6677975
0,6677975
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,6677975
0,6677975
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,6677975
0,6677975
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,6677975
0,6677975
0,7
62,6677975
0,6677975
0,7
62,6677975
0,6677975
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,6677975
0,6677975
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,660895
0,660895
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,6677975
0,6677975
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,6677975
0,6677975
0,7
62,66434625
0,66434625
0,7
62,66434625
0,66434625
0,7
62,6677975
0,6677975
0,7
62,6677975
0,6677975
0,7
62,660895
0,660895
0,7
63,54096375
1,54096375
1,5
63,54096375
1,54096375
1,5
63,54096375
1,54096375
1,5
63,54786625
1,54786625
1,5
62,65744375
0,65744375
0,7
62,66434625
0,66434625
0,7
62,6677975
0,6677975
0,7
63,54096375
1,54096375
1,5
63,5375125
1,5375125
1,5
63,54096375
1,54096375
1,5
185
Frecuencia
69,00
0,00
23,00
11,00
2,00
2,00
0,00
262,00
0,00
0,00
0,00
135,00
152,00
0,00
0,00
98,00
124,00
0,00
0,00
0,00
85,00
3,00
0,00
0,00
13,00
21,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
0,00
Error Medida real
0
62
Moda
0,1
0,2 62,66434625
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
2,1
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9
3
3,1
3,2
3,3
3,4
3,5
3,6
3,7
3,8
3,9
4
4,1
4,2
4,3
4,4
4,5
4,6
4,7
4,8
4,9
Descargar