|
Minichat
Feliz año dos meses tarde!!! Aqui el tiempo pasa mas lento Feliz año 2024. Me embargó la nostalgia al ver que aun existe el foro Feliz Navidad 2023 02/10/2023 Saludos chicos cuanto tiempo, El_ Nene cuanta razon 2023 Saludos! Iniciar sesión despues de 13 años, que recuerdos! y aún así algo te llama para volver a entrar saludos años t años que no entraba a esta pagina Acabo de empezar un nuevo proyecto, a ver si los demás os animais. cuanto tiempo!!! Buen año a todos! Hola Locos Saludos-28-oct-2022 Saludos-28-oct-2022 Aloha. 14/Sept/2022 No veo como enviar mensaje No veo como enviar mensaje Hola 2022!! Buenas Mundo!!! 31/12/21 Buenas tardes.... 25/11/21 Saludos!!! un buen dia para el que lea esto un buen dia para el que lea esto
|
|
Ver tema anterior :: Ver tema siguiente |
Autor |
Mensaje |
Teotekaplan Moderador
País: Sexo: Registrado: 31 marzo 2003 Mensajes: 4124 Ubicación: Madrid
|
Publicado: Vie, 20 May 2005 6:40 pm Asunto: Propeller clock 2: más grande, más fuerte |
|
|
Bueno visto el éxito del otro reloj (que se queda así, ya que es una beta del que propondré ahora) pues quiero iniciar con vosotros otro proyecto de un reloj giratorio pero con grandes novedades.
Será vertical, para colocarlo en la pared del salón de mi casa, y medirá unas 17 pulgadas de diámetro.
Me propongo que la parte interna sea analógica (de agujas, vamos) y en la externa disponer una columna de 8 leds SMD para poder mostrar textos.
Algo como esto:
Bien, Lo primero que quiero advertir para que no haya desilusiones, es que no sé a ciencia cierta hasta qué punto será posible hacer todo lo que pretendo con un simple pic 16F876A funcionando a 20 Mhz. Mi idea es ir planteando aquí el reloj desde cero y viendo si es factible montarlo.
Lo primero es el tamaño. He pensado en un brazo de 22 cm de longitud, que nos da una esfera de 44 cm de diámetro (17,3 pulgadas). Después viendo la imagen, he contado que tiene una resolución de 480 pixels (son 80 caracteres de 6 pixels cada uno).
Centrándonos en esos 480 pixels, vamos a ver si es factible conseguirlos mediante un pic.
Voy a suponer una velocidad de giro de 1500 RPM, que corresponde a 25 Hz, lo que nos evitaría el parpadeo. A esa frecuencia, el brazo tarda en dar una vuelta completa 40 mSeg.
En 40 mSeg hay que meter 480 pixels así que dividiendo nos da un tiempo por cada pixel de 83.3 uSeg. Si tenemos en cuenta que el pic a 20 Mhz ejecuta 5 instrucciones por uSeg, creo que hay margen más que de sobra para que le de tiempo a dibujarlos todos.
Para la parte analógica, 480 pixels también son un buen número, aunque no los usaremos todos. La esfera tiene 60 divisiones, lo que nos da 8 pixels cada división). Para darle un poco más de resolución al segundero, podemos hacer que lo dibuje entre medias, así que nos saldrían 4 pixels.
Como veis números redondos. No es mal comienzo. 83 uSeg de media es tiempo de sobra para encender los led, calcular cuales son los siguientes encender y esperar a que acaben los 83 useg para repetir el ciclo.
Bien, primer punto terminado. Ahora me surge una duda... ¿y si la velocidad del motor no es estable? Ahí existe un problema, ya que si calculamos un tiempo preciso por cada pixel, si el motor gira a más velocidad, habrá completado un giro en menos de los 40 mSeg que necesitamos para dibujar la esfera completa. Si el motor va mas lento, habremos acabado de dibujar ántes que él.
Eso hay que arreglarlo... a ver qué se me ocurre... veamos... El PIC 16F876A tiene un timer1 de 16 bits (cuenta 65536 veces antes de volver a 0 y generar una interrupción). A ese timer se le puede asignar un comparador (CCP1) que nos avisa cuando el valor del timer1 coincide con el almacenado en el comparador.
El timer por defecto va a 1/4 la velocidad del pic,, osea 5 Mhz. Si le configuramos un divisor /8 -esto lo hace el pic- tenemos una frecuencia de 625 Khz que nos da una resolución de 1.6 uSeg.
Vamos, que cada 1.6 uSeg, el timer avanza 1, hasta llegar a 65536.
¿Y de qué nos sirve todo esto? Pongamos un supuesto práctico.
Esperamos que el motor pase por el índice de rotación -acordaros aquel optoacoplador que nos indica principio de un nuevo giro- y ponemos en marcha el timer1. Esperamos hasta el siguiente giro y en ese momento detenemos el timer, o anotamos su valor.
Pongamos que nos sale 26880 . Si lo multiplicamos por 1.6 tenemos 43008 uSeg que es el tiempo que tardó en dar la vuelta el brazo.
El número que nos ha dado (26880) lo dividimos entre 480 -nuestros pixels- nos da 56 . Eso quiere decir que por cada 56 ticks del timer, habremos avanzado un pixel.
Ese valor de tiempo por pixel lo metemos en el registro comparador.
Ahora ese comparador nos proporcionará una interrupción que va a ocurrir exactamente cada 56 ticks, 1 pixel. Si multiplicamos 56*1.6 tendremos un tiempo de pixel de unos 89 useg. Como veis, ajustado a la variación de velocidad.
La secuencia concreta para un giro sería entonces: Pasamos por el índice y ponemos el timer1 a 0. Dibujamos lo que haya que dibujar en la posición 0 (las 12:00) y esperamos que el comparador nos avise 56 ticks después. En ese momento entraremos en una rutina que nos ilumina los led necesarios y calcula cuáles deben iluminarse en el siguiente aviso. Cogemos el valor del comparador y le sumamos otros 56. Recordar que el timer1 y el comparador avanzan a la vez, con lo que cuando el comparador nos haya avisado en el tick56, el timer seguirá avanzando, por eso debemos cambiar el comparador a 56+56 y sucesivamente, para ir pillando al timer1.
Lo que se hace normalmente, según he visto, es calcular el tiempo por cada pixel al inicio del programa. Se espera unos segundos a que la velocidad del motor estabilice y se hace la primera medida. Después, una vez en el modo normal de funcionamiento, se añade un contador de vueltas -por ejemplo 100-, que llama a la rutina de calibración y calcula el nuevo valor del comparador, si ha habido diferencias de velocidad.
Repasemos conceptos a esta hora: 480 pixels de resolución, velocidad media 25 Hz (1500RPM) . Timer con una resolución de 1.6 uSeg y un comparador que nos avisa para dibujar cada pixel.
Espero que esta parte no haya quedado demasiado compleja... leerla un par de veces que creo que es entendible hehehe...
Ahora me viene una curiosidad, y es saber el tamaño que tendrán las letras (bueno... curiosidad no... no me apetece marcarme un reloj donde luego el texto se vea una mierda) XDD.
Recurriremos a las mates de ¿septimo? Sobre PI y las circunferencias.
Quedamos en que el brazo tendría 220 mm de largo, con lo que el pixel más alejado estaría a esa distancia. La longitud de la circunferencia es 2*PI*radio = 1382,3 mm. Divididos entre 480 pixels no da 2,88 mm de ancho en el extremo superior. Por 6 tenemos 17,28 mm por cada carácter.
Yo usaré leds SMD espaciados 2 mm, como el texto lleva 8, tengo 16 mm de altura por cada carácter. El tamaño de la parte inferior es de 220-16=204 mm... longitud... 1281,8... entre 480...2.67 por pixel... 16mm por caracter.
Vamos que de alto 16 mm, y de ancho por arriba 17,3 y por debamo 16mm. Las letras salen cuadradas. Me gusta la idea... sobre todo porque si vamos a la foto del principio, comprobamos que las letras sí son más o menos cuadradas y sí de ese tamaño.
Hoy se ha avanzado bastante... continuará...'Me lo contaron y lo olvidé. Lo vi y lo entendí. Lo hice y lo aprendí.' |
|
Volver arriba |
|
|
Jose_JN modder
País: Sexo: Registrado: 09 noviembre 2002 Mensajes: 1714 Ubicación: JAEN
|
Publicado: Vie, 20 May 2005 7:40 pm Asunto: |
|
|
Está wapo.... pero a mi personalmente me gusta mas el otro diseño (en perpendicular al plano de rotación) porque le dá un aire 3D al texto muy wapo... pero, bienvenido sea todo proyecto
A ver si acabo los examenes y me pongo con mis pinitos... |
|
Volver arriba |
|
|
DuDuDMaN modder
País: Sexo: Registrado: 11 agosto 2004 Mensajes: 361 Ubicación: En UNO de los 69.588.359.698 ordenadores del mundo. (Barcelona)
|
|
Volver arriba |
|
|
Chardo modder
País: Sexo: Registrado: 08 abril 2004 Mensajes: 1112 Ubicación: Tudela(Navarra)
|
Publicado: Vie, 20 May 2005 7:53 pm Asunto: |
|
|
Pues un proyecto muy bueno, la verdad es que este y el otro son muy buenos.
Los dos son muy originales, lo único que no me termina de convencer es que no lo puedas poner al pc
Por lo demás muy bien, la explicación se sigue sin problemas , muy buena
Una cosa, no se que motor utilizarás o si será uno de un ventilador(lo dudo, creo qeu será mucho peso y poco eje) pero quizás tenga el propio rotor monitor de rpm (no se expliacrlo, digo el cable amarillo de los ventiladores de pc)
Te ahorrarias el tener que controlar el tiempo total de giro.
Saludos |
|
Volver arriba |
|
|
toxicgrx modder
País: Sexo: Registrado: 16 noviembre 2003 Mensajes: 1152 Ubicación: (REUS) Tarragona /> Catalunya />
|
Publicado: Vie, 20 May 2005 8:30 pm Asunto: |
|
|
Bueno pues vamos pa lla . Cada vez flipo mas con tus ideas jeje, haber si te inventas la tele pero funcionando con un ventilador. |
|
Volver arriba |
|
|
RaDoN Moderador
País: Sexo: Registrado: 06 diciembre 2002 Mensajes: 1288 Ubicación: Sevilla
|
Publicado: Sab, 21 May 2005 1:10 am Asunto: |
|
|
Tunea el ventilador de tu cuarto !!! ahora en el veranito tiene que quedar wapo jajajaja ... ansioso por que le jinques el diente al proyecto |
|
Volver arriba |
|
|
negrorider modder
País: Sexo: Registrado: 21 marzo 2005 Mensajes: 380
|
Publicado: Sab, 21 May 2005 1:20 am Asunto: |
|
|
joder... cada dia con cosa buenas y originales... me gusta muxo tu/tus ideas |
|
Volver arriba |
|
|
SnR_TFe modder
País: Sexo: Registrado: 07 abril 2004 Mensajes: 794 Ubicación: tenerife(santa cruz):D ya !!
|
Publicado: Sab, 21 May 2005 2:15 am Asunto: |
|
|
otra paranoya mas de programacion de PICs de Teo,pero cada loco con su tema,y este es uno de los del coleguita teo.suerte y a ver si me impresionas mas ke con la V1.0.(ke lo dudo)
salu2 modders |
|
Volver arriba |
|
|
Teotekaplan Moderador
País: Sexo: Registrado: 31 marzo 2003 Mensajes: 4124 Ubicación: Madrid
|
|
Volver arriba |
|
|
Teotekaplan Moderador
País: Sexo: Registrado: 31 marzo 2003 Mensajes: 4124 Ubicación: Madrid
|
Publicado: Sab, 21 May 2005 10:36 am Asunto: ¿Cómo dibujar las agujas? |
|
|
Bueno, unos apuntes rápidos antes de comenzar el día. Necesitamos saber en qué momento hay que dibujar las agujas dependiendo de la hora que sea. ¿Cómo lo conseguimos?
Usaremos un contador asociado al comparador. Aquel que nos activaba una interrupción en las posiciones donde deben ir los pixels. Al inicio del giro nos encontraremos en el pixel 0. Cada interrupción irá incrementando un contador de pixels, de forma que lleguemos hasta el número 479.
Las 12 van en el pixel 0 , las 3 en el 119, las 6 en el 239 y así sucesivamente. Usando un poco de matemáticas...
Código: | pixel_segundos = segundos * 8 (hasta 59*8)
pixel_minutos = minutos * 8 (hasta 59*8)
pixel_horas = horas * 40 (hasta 11*40) |
Esto nos da unas posiciones aproximadas pero no precisas. Por ejemplo a las horas y media, la aguja horaria no estará en medio de las 2 horas... repasando un poco podemos obtener..
Código: | pixel_horas = (horas*40) + (minuto/1.5) (cada hora son 40 pixels, 4 son 6 minutos, 2 son 3 y 1.5 pixels representan un minuto)
pixel_minutos = (minutos*8) + (segundos/7.5) (cada minuto 8 pixels, 4 en 30 seg, 2 en 15 y 1 en 7.5)
pixel_segundos = (segundos*8) + (decimas/1.25) (lo mismo que antes... 1 pixel cada 125 mseg)
|
Suponiendo que sean las 6:15:20.0, las fórmulas nos darían los siguientes resultados
Código: | pixel_horas = 250
pixel_minutos = 122
pixel_segundos = 160
|
Comprobamos una vez más el límite... si la hora fueran las 11:59:59.9 tendríamos unos valores para hh,mm y ss de -respectivamente- 479, 479 y 479. Correcto.
Al inicio del giro, el contador de pixels se pone a cero, incrementándose cada 56 ticks (cada interrupción del comparador). Con sentencias parecidas a
Código: | IF cuenta_pixels = pixel_hora THEN dibujahora();
|
tendríamos las agujas en su sitio.
Hay un tema, que trataremos en su momento con calma, que preocupa a más de uno. Y es si dará tiempo en unos 80 uSeg para hacer todos los cálculos y realizar las tareas correspondientes. Uno de los cálculos que más puede llevar tiempo es calcular precisamente las posiciones de las agujas, ya que la llevar decimales, se generan unas cuantas líneas de código para procesar.
Esto no lo veo realmente un gran problema, ya que la hora sólo cambia una vez por segundo, con lo que calcular la posición constantemente, una vez por cada giro, es una tontería.
Vamos, que realmente la posición de las agujas hay que calcularla únicamente cada vez que el reloj avanza un segundo (o una décima, por culpa del segundero) y no en cada giro del brazo.
Eso ahorra muchiiiiiisimo tiempo. Y es tiempo que tenemos, por ejemplo, para dedicarlo al texto del borde.'Me lo contaron y lo olvidé. Lo vi y lo entendí. Lo hice y lo aprendí.' |
|
Volver arriba |
|
|
juantxorena modder
País: Sexo: Registrado: 02 septiembre 2002 Mensajes: 1396 Ubicación: La Comarca
|
Publicado: Sab, 21 May 2005 12:37 pm Asunto: |
|
|
Supongo que lo habrás pensado, pero se me ha ocurrido que el texto del borde podrían ser los números de las horas (de 1 a 12). No? |
|
Volver arriba |
|
|
AlkuN modder
País: Sexo: Registrado: 20 octubre 2004 Mensajes: 635 Ubicación: Valencia
|
Publicado: Sab, 21 May 2005 12:38 pm Asunto: |
|
|
Joer que bueno...
Creo que eso lo he visto en una rueda de bicicleta con un contador de rpm para que se lea siempre independientemente de la velocidad (hasta un mínimo supongo).
A lo mejor me animo y hago uno pa mi
Con semejante brazo tendrás que compensarlo muy bien.
Venga suerte. |
|
Volver arriba |
|
|
Teotekaplan Moderador
País: Sexo: Registrado: 31 marzo 2003 Mensajes: 4124 Ubicación: Madrid
|
Publicado: Sab, 21 May 2005 1:20 pm Asunto: |
|
|
Si, creo que se llaman POV Toys (Persistence Of Vision Toys)... los vi hace tiempo... hace tiempo que me reclaman uno igual mis sobrimos pa sus bicis... algún día se lo haré... 'Me lo contaron y lo olvidé. Lo vi y lo entendí. Lo hice y lo aprendí.' |
|
Volver arriba |
|
|
Teotekaplan Moderador
País: Sexo: Registrado: 31 marzo 2003 Mensajes: 4124 Ubicación: Madrid
|
|
Volver arriba |
|
|
russh3r modder
País: Sexo: Registrado: 03 noviembre 2004 Mensajes: 152 Ubicación: Reus
|
|
Volver arriba |
|
|
|
|
Este sitio no se hace responsable de ningún daño que cause en su ordenador con la información que en el se expone.Todos los productos y marcas están registrados por sus respectivos propietarios. Prohibida la reproducción total o parcial de los textos e imagenes de esta web sin el consentimiento expreso de su autor. Hardcore-Modding.com 2001-2019 Los comentarios son propiedad de sus autores (ya sean anonimos o registrados). Portal basado en NukeET, RSS
Página Generada en: 1,014 segundos
π |