PDA

Ver la versión completa : Programar en ASM



Fernandocasa
10/07/2013, 12:20
Hola a Tod@s.

¿Alguno de vosotros sabe programar en ASM?.

Saludos.

Aunolose
10/07/2013, 16:47
Uff.... cuanto tiempo.

El ensamblador de cada maquina puede ser muy diferente al de otra. ¿de que maquina hablamos? yo dominaba (pasado) el del 8051 e hice algunas cosas con el del PIC, si pones el código podemos mirar a ver lo que sacamos en claro.

Fernandocasa
10/07/2013, 18:24
Hola a Tod@s.

Sigo a vueltas con el reloj digital para la pared.

He encontrado un circuito muy sencillo, más que el primero que encontré. Lo he montado en una protoboard como me aconsejasteis y funciona. El problema es que adelanta unos 4 seg por día, más o menos 2 minutos al mes y quería saber si se puede conseguir más precisión con el programa del pic.

He intentado contactar varias veces con el creador pero no me ha hecho ni caso. Tiene dos programas para el mismo proyecto uno libre que además de dar la hora sale un mensaje de vez en cuando en los displays y el otro de pago, no se si este último será más preciso.
La última vez que intenté contactar con él le dije que estaba interesado en el programa de pago, pero ni por esas.

Ahora no me acuerdo si está montado con 16F84A o con 16F628A.

También encontré otro proyecto, este bastante más complejo, que según los entendidos el programa era una maravilla, contemplaba delays, antirrebotes, etc. no se si se podrá coger parte de un programa para ponérselo al otro.

Saludos.

Aunolose
10/07/2013, 21:34
Sin haberlo probado y lanzándome a la piscina, no debería tener "ningún" error, el que cuentas es muuuuy grande para lo que se puede conseguir, ¿lo hace con un cristal de 32768Hz? ese cristal es muy barato y tiene mucha precisión, lo llevan prácticamente todos los relojes, los digitales seguro y también muchos "analógicos", yo creo que solo no lo llevan los que son analógicos de verdad.

Lo que me suena haber visto es que lo meten al oscilador del Timer1 por las patas que tiene para ello y que no los patas del reloj normal. Como 32768Hz es una potencia de 2, puedes conseguir una resolución muy alta con poco trabajo.

Si el reloj se basa en el cristal del sistema (el de 20Mhz, por ejemplo) entonces la precisión depende de ese reloj, hay la desviación se mide en "partes por millón" y no creí que fuera tan grande como lo que cuentas.

Y otra solución también muy precisa aunque no lo parezca es usar la frecuencia de red, aunque tiene menos resolución, como mucho 1/100 de segundo (si rectificas la señal "de reloj")

Bueno, para no liarte, te recomiendo de todas todas el de 32768Hz, mira esta foto, lo hice recién acabado FP, solo con circuitos digitales, a simple cada y tiene una precisión más alta que el que dices...

En esta se aprecia el cristal que te digo:

92824

Vista trasera:

92825

Vista frontal, sin flash para que se aprecien los leds.
92823

No sé si se entiende, los leds amarillos son los segundos, los rojos los minutos, los verdes las horas, los que están ahora en rojo indican si es AM/PM, y los de arriba si está conectada la alarma o no, la alarma se fija con puentes por detrás.

Fernandocasa
10/07/2013, 21:57
Hola a Tod@s.

El circuito lo he sacado de aquí: 'Almost No Parts' 12/24hrs LED Clock - Jose Pino's Projects and Tidbits. (http://www.josepino.com/microcontroller/anp-1224hr-led-clock1)
La única diferencia es que he puesto condensadores de 33 pF porque en el cristal de 4 Mhz que compré lo pone.

Saludos.

Aunolose
10/07/2013, 22:11
Vale, por lo que veo no está el código ensamblador si no ya ensamblado, el hex, así que habría que hacerlo nuevo...

Podrías hacerlo con el cristal de 32768 directamente, en vez de con el de 4Mhz, como la precisión del reloj es de un minuto, no es necesario que sea muy rápido.

¿sabes programar en Basic? creo que hay Basic para PIC

Soluciones físicas: añadiendo condensadores pequeños al reloj logras modificar un poco su frecuencia, prueba a poner uno de los condensadores más grande o más pequeño a ver si así logras que se ponga bien. No esperes mucho de esta solución, el cambio es pequeño.

Fernandocasa
10/07/2013, 22:27
No, no se prácticamente nada de electrónica, y menos programar.

Un saludo.

Aunolose
11/07/2013, 14:32
Vale, entonces prueba a cambiar uno de los condensadores de 33pF por otro de 22pF, o de 15pF y haces la prueba, tienes que hacer la prueba en las dos patas.

Una cosa que me temo es que el "fallo" sea intencionado para que compres la versión no-demo...


La programación de un reloj no es muy difícil, solo se trata de contar y representar lo que has contado, Por eso es tan sencillo hacerlo con el cristal de 32768hz, lo metes a un temporizador, cuentas eso y tienes un segundo, luego cuentas 60 y tienes un minuto, otros 60 y ya tienes las horas, las horas solo las cuentas hasta 24 y las entonces las pasas a cero.

Es más laborioso resolver la multplexación que hace con los displays.

¿solo lo puedes hacer con ese PIC? es que de esos no tengo ninguno, no hay mucha diferencia de precio con el suelo gastar (el 18F2550) y con ese lo tengo mucho más fácil ya que lo puedo programar por USB sin quitarlo de la placa.

Fernandocasa
11/07/2013, 16:35
Acabo de cambiarle los condensadores por unos de 22 pF, lo dejaré 24 h. a ver cual es la variación.

No tiene que ser necesariamente ese pic. Lo que pasa es que como tengo poco espacio para meterlo todo, este montaje es tan sencillo que me venía de perlas, pero si se cambia el pic por otro, mientras que funcione me vale (teniendo el código hex, claro).

Gracias y un saludo.

Aunolose
11/07/2013, 18:10
Creo que solo tienes que cambiar uno de los condensadores, pero ya que lo has hecho, pues acaba la prueba. Si falla cambia uno solo y si vuelve a fallar, el de la otra pata

Fernandocasa
12/07/2013, 18:25
Hola a Tod@s.

Después de 24 h. creo que se ha adelantado como 1/2 segundo. Lo voy a dejar el fin de semana para tener más tiempo de funcionamiento y poder valorar mejor el desfase que se produzca. La semana que viene te digo como va.

Ayer le mandé otro email al autor, pero me parece que se juntará con los anteriormente mandados.

Muchas gracias.

Saludos.

Aunolose
12/07/2013, 20:05
Si la resolución que tiene es de un minuto, ¿como sabes que se ha adelantado 1/2 segundo? :scratch:

Aunolose
12/07/2013, 20:35
Parece que la última vez que escribió fue en 2010.

Fernandocasa
12/07/2013, 21:08
Si la resolución que tiene es de un minuto, ¿como sabes que se ha adelantado 1/2 segundo? :scratch:

Porque ayer lo sincronicé con el reloj del ordenador y hoy 24 h. después lo he comparado con el ordenador y cambia un poco antes de llegar al segundo de adelanto. Por eso he supuesto que sería 1/2 segundo, décima arriba décima abajo.

Lo dejaré más tiempo y así se sabrá mejor la diferencia que hay de cuando empezó a funcionar.

Saludos.

Aunolose
12/07/2013, 21:16
Medio segundo cada 24h es mucho mejor que antes. sería un minuto a los dos meses.

Mira lo que pone en la traducción de la pagina, va en línea con lo que te digo de aumentar/reducir la capacidad del condensador:



Para mantener la precisión, las conexiones con los condensadores de 22pF XTAL y debe ser lo más corto es posible. Lea las especificaciones del fabricante Xtal.

Es una traducción del google, pero se entiende perfectamente, a lo mejor había pesando mal y no tiene ningún desfase intencionado...


Yo creo que es mejor usar el cristal que te digo, pero es que ahora no tengo tiempo ni material para comprobar que la multiplexación funciona, es decir, que no parpadea, que se enciende el que toca...

Edito: sería un minuto cada 4 meses.

Fernandocasa
12/07/2013, 23:18
Medio segundo cada 24h es mucho mejor que antes. sería un minuto a los dos meses.

Mira lo que pone en la traducción de la pagina, va en línea con lo que te digo de aumentar/reducir la capacidad del condensador:



Es una traducción del google, pero se entiende perfectamente, a lo mejor había pesando mal y no tiene ningún desfase intencionado...


Yo creo que es mejor usar el cristal que te digo, pero es que ahora no tengo tiempo ni material para comprobar que la multiplexación funciona, es decir, que no parpadea, que se enciende el que toca...

Edito: sería un minuto cada 4 meses.

Lo había leído hace tiempo que hay hay que poner los cristales y los condensadores lo más cerca posible al integrado. También he leído que el cristal de 32768hz hay que poner su cápsula conectado a masa.

Ha cambiado bastante, pero sería mejor que atrasara porque así solo hay que adelantar 1 minuto de vez en cuando, de la otra forma hay que adelantar 59 minutos para ponerlo en hora.

Saludos.

Aunolose
13/07/2013, 01:45
Prueba a poner los condensadores de 15pF

Aunolose
16/07/2013, 15:10
Que ya ha pasado el finde ¿que tal ha ido?...

Fernandocasa
16/07/2013, 21:04
Pues me he llevado una gran decepción.

Del jueves al viernes adelantó 1/2 seg., del viernes al lunes adelantó 47 seg. y de ayer a hoy ha adelantado 8 seg., no lleva una patrón ni una lógica. Total en cinco días ha adelantado 56 seg.

Cuando pueda compraré los condensadores de 15 pf y los cambiaré. No se si merecerá la pena seguir con este proyecto o cambiar de circuito.

Saludos.

Aunolose
17/07/2013, 14:35
¿está montado en una board? seguramente sea eso lo que afecta tanto, puedes probar a soldarle un cable al cristal y ponerlo a masa, como coméntaste con el 32768Hz, mientras encuentras otro no pierdes nada.
Pena de tiempo para "zurcachar" con el multiplexado.

Gerard-2
25/07/2013, 20:12
Sin asegurar la estabilidad es muy complicado. Si hay estabilidad igual se podria hacer una rutinita de correccion para el desfase a largo plazo :) ya se que es hacer trampa...
Si el objetivo no es aprender electronica, microcontroladores ni asm siempre tenemos los chinos... ¿?
Si el objetivo es DIY sin pasar por lo anterior o al menos de puntitas...la solucion creo que es picaxe con una pastilla RTC en I2C pero sabiendo que es lo que se programa (basic), de verdad que es muy divertido y facil.

Saludos

Fernandocasa
31/07/2013, 19:12
Hola a Tod@s.

Sigo haciendo pruebas con condensadores de diferentes capacidades. Hoy me ha pasado una cosa curiosa, por lo menos para mí. He puesto un condensador de 33 pf y otro de 22 pf, uno en cada patilla del cristal y se sigue adelantando. He intercambiado los condensadores de posición y el reloj no funciona, extraño ¿no?. ¿Porqué en una posición funciona y cambiando los condensadores no?.

Saludos.

Fernandocasa
31/07/2013, 19:29
Sin asegurar la estabilidad es muy complicado. Si hay estabilidad igual se podria hacer una rutinita de correccion para el desfase a largo plazo :) ya se que es hacer trampa...
Si el objetivo no es aprender electronica, microcontroladores ni asm siempre tenemos los chinos... ¿?
Si el objetivo es DIY sin pasar por lo anterior o al menos de puntitas...la solucion creo que es picaxe con una pastilla RTC en I2C pero sabiendo que es lo que se programa (basic), de verdad que es muy divertido y facil.



Saludos

Me suena a chino todo lo que has dicho. Hombre, siempre queda la satisfacción de haberlo hecho todo uno mismo, pero sin saber corregir nada te atienes a que funcione como lo hizo su creador. Como ya dije antes, tengo poco espacio para poner el reloj y tengo que hacerlo a medida, en una placa superior los displays y en otra inferior todo lo demás.

Si se pudiera corregir esa inexactitud en el reloj sería fantástico, pero claro yo no le se hacer, por eso pedí ayuda. Crees que si hago las placas y lo monto se podría corregir la "inexactitud".

Saludos.

Aunolose
31/07/2013, 21:24
Si construyes la placa lo más probable es que el desfase sea siempre el mismo, es que una protoboard tiene un montón de conexiones que hacen de condensador y captan mucho ruido externo.

¿Has probado los de 15pF?

Creo que cualquier circuito que busques y esté basado en el reloj del sistema (el de 4Mhz), como lo montes en la protoboard, tendrá el mismo problema. Busca alguno que se base en el reloj de 32768khz, o en la frecuencia de red.
En realidad no hay razón para que no funcione, solo se trata de contar, cuando cuentas 4Mhz cuentas mucho y cuando cuentas 50Hz cuentas poco, el caso es que de todos ellos el más fácil de afectar es el de más frecuencia, bueno, el de red no se verá afectado por nada, ahora que lo pienso, no hay nada oscilando. Si se usa el de 32768khz es por que es una frecuencia potencia de 2 y sobre todo por que tiene una frecuencia no muy alta y hace que consuma poco comparado con a los de muchos Mhz.
Y por resumir, intenta montar la placa de otra manera, si la placa es de soldar, rodea las pistas del reloj con un anillo de masa, a modo de "aislante" a ver que pasa.

Edito: Del reloj no, del cristal, las pistas alrededor de los condesadores, el cristal y los pines del PIC

Gerard-2
26/08/2013, 14:46
YA hace dias, cosas del verano.EL tema es muy complicado sin conocimiento de lo que se hace por que no hay feedback inmediato de los resultados conseguidos, eso es lo que quería decir.
Me parece bien lo del "siempre queda la satisfacción de haberlo hecho todo uno mismo" pero mejor que llegar, para mi es el viaje (a Itaca), lease la satisfacción de aprender/entender lo que se está haciendo, claro que eso es por deformación profesional.
Lo del PICAXE era una solucion mas facil para conseguir 'llegar', pero 'viajando' por una senda mas facil.

Las patas del cristal son iguales, no es lo mismo alli donde van conectadas, una va a una salida y la otra a una entrada del microC, por eso la diferencia de modificar la cap de una pata o la otra.

¿Has probado de conectar el blindaje del cristal a masa? aun que sea de forma provisional. Hay condensadores trimer de 10/60 pF mas comodo que andar soldando y desoldando. Suerte.

Fernandocasa
12/09/2013, 15:33
Hola a Tod@s.

Después de muchas pruebas, la mejor combinación de condensadores es uno de 39 pf y otro de 47 pf, adelanta muy muy poco el reloj. Ya he hecho las placas y lo he montado aprovechando las partes mecánicas del reloj estropeado. Si lo ves por fuera parece de fábrica, si lo miras por dentro es otra cosa.

Probé los dos condensadores de 15 pf y adelantaba 15 seg al día. Gracias a todos por vuestra ayuda.

Después de bastante tiempo me contestó al email que le mandé el que diseñó el circuito y me dijo que la diferencia entre el .hex de pago y el demo es que el demo hace publicidad de su página web. Que la inexactitud podría ser por el cristal, ruido de la fuente o poner condensadores de más capacidad.

Saludos.

Aunolose
12/09/2013, 16:49
Enhorabuena ¿que tal unas fotos? :D

¿Las pruebas las hiciste en la placa que has hecho? lo digo por que al cambiar las capacidades parásitas a lo mejor tienes que volver a ajustar los condensadores un poco.

Fernandocasa
12/09/2013, 17:14
Las pruebas las hice en una protoboard. Ahora lo estoy probando una vez montado.

Saludos.

Aunolose
12/09/2013, 18:53
¡Jo, que nivelazo! ha quedado muy bien.

el_chito
13/09/2013, 00:37
joder que bien te a quedado .
haciendo memoria me a venido a la cabeza lo que es capaz de hacer las corrientes parasitarias, recuerdo cuando los monitores del pc eran de tubo y se colocaban los filtros para la corriente estática, pues bien el filtro llevaba una pinza para enganchar en una toma tierra , pues bien en casa donde vivía era edificio antiguo y no había toma tierra en los enchufes , pues ni corto ni perezoso que cogí la pinza y se la enganche a la antena de un radio despertador , pues el puñetero se adelantaba solo una hora , yo echando la culpa a mi hermana que me estaba haciendo alguna pizia ,y luego era la estática , cada vez que apaga el monitor el reloj se adelantaba, jejejejejej .

Gerard-2
27/10/2013, 23:27
Felicidades, ha quedado perfecto.

Fernandocasa
02/11/2013, 22:30
Muchas gracias.

Saludos.