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