Author Topic: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE  (Read 57317 times)

0 Members and 1 Guest are viewing this topic.

Offline Belcboo

  • The Communiter-
  • *
  • Posts: 1338
  • ¦ॠ¦ вεłсвφφ ¦ॠ¦
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #15 on: February 18, 2011, 09:48:56 pm »
Se usa el puerto serie hasta donde recuerdo, pero tal vez naruto nos ilumina con algún circuito que podamos fabricar para poder programar PICs... a mi la verdad, me interesa bastante este tema...

Si pudieras recomendarme algún diagrama que vos estés seguro de que funcione para programar PIC's te estaría súper agradecido.

Offline Jarmandaros

  • -*-Miembro Eterno-*-
  • The Communiter-
  • *****
  • Posts: 3873
  • -^- Despicable Member -^-
    • Jarmandaros Blog
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #16 on: February 18, 2011, 09:55:23 pm »
en mi opinion me hubiese interesado mas por un proyecto de robotica, algo asi como un brazo mecanico programable  :roll: eso del reloj es muy simplista pero es solo mi opinion

[youtube]4E052SKE28Q[/youtube]
Queres Vender o Comprar un producto X? unite al grupo del Tiangue! en Facebook, solo necesitas una cuenta en FB. EL Tiangue!
Visita mi Blog

Offline Belcboo

  • The Communiter-
  • *
  • Posts: 1338
  • ¦ॠ¦ вεłсвφφ ¦ॠ¦
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #17 on: February 18, 2011, 09:58:18 pm »
en mi opinion me hubiese interesado mas por un proyecto de robotica, algo asi como un brazo mecanico programable  :roll: eso del reloj es muy simplista pero es solo mi opinion

Pues creo que para los pollos (como yo x_x ), sería mejor comenzar por pasitos chiquitos, además, lo que interesa es aprender las cosas básicas de programación de PICs, ya después con el tiempo, pero más que todo con la practica, creo que se podría comenzar algo ya más "avanzado"...

Pero a ver como avanza este proyecto :)

Offline Jarmandaros

  • -*-Miembro Eterno-*-
  • The Communiter-
  • *****
  • Posts: 3873
  • -^- Despicable Member -^-
    • Jarmandaros Blog
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #18 on: February 18, 2011, 10:01:53 pm »
Pues creo que para los pollos (como yo x_x ), sería mejor comenzar por pasitos chiquitos, además, lo que interesa es aprender las cosas básicas de programación de PICs, ya después con el tiempo, pero más que todo con la practica, creo que se podría comenzar algo ya más "avanzado"...

Pero a ver como avanza este proyecto :)

awe, por ese lado tenes razon XD

entonces don naruto, tiene un gran reto primero con el lenguaje de programacion de los PICs y segundo con los grabadores de PICs antes de ponernos a trevesiar XD
Queres Vender o Comprar un producto X? unite al grupo del Tiangue! en Facebook, solo necesitas una cuenta en FB. EL Tiangue!
Visita mi Blog

Offline smrenderos

  • MiembrosReales
  • *
  • Posts: 17
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #19 on: February 19, 2011, 12:10:39 am »
Buena idea naruto  :thumbsup:

La simulacion la podemos hacer en Proteus y la programacion en Mplab(ensamblador) o mikroC

Configuracion de pines:
RB0 a RB3 ----> decoder
RB4 a Rb7 ----> selector de display
puertoA ----> control de hora

Si usamos oscilador externo creo que a 4MHz estaria bien (no pasa de $5) y los dos ceramicos de 22pF

en mi opinion me hubiese interesado mas por un proyecto de robotica, algo asi como un brazo mecanico programable  :roll: eso del reloj es muy simplista pero es solo mi opinion

Despues seguimos con un proyecto de robotica  :thumbsup: la idea del reloj es la mejor porque todos podemos participar simulandolo(si no podes comprar los elementos), en cambio con algo de robotica nos encontramos con la parte mecanica, los motores.. y para empezar con micros la idea de naruto esta buena


« Last Edit: February 19, 2011, 12:13:04 am by smrenderos »

Offline vlad

  • Global Moderator
  • The Communiter-
  • *
  • Posts: 6351
    • Qualium.net
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #20 on: February 19, 2011, 08:36:47 am »
No veo porque preocuparse por la precisión del oscilador de un reloj que para comenzar no va a sincronizar inicialmente la hora con un servidor NTP o similar.

Total si se desajusta 1 o 2 segundos al año no es nada significativo, tomando en cuenta que hubo un desajuste inicial al programar la hora del reloj.

Offline juanca

  • The Communiter-
  • *
  • Posts: 1112
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #21 on: February 20, 2011, 11:50:50 am »
No veo porque preocuparse por la precisión del oscilador de un reloj que para comenzar no va a sincronizar inicialmente la hora con un servidor NTP o similar.

Total si se desajusta 1 o 2 segundos al año no es nada significativo, tomando en cuenta que hubo un desajuste inicial al programar la hora del reloj.

Puede que si, pero hay razones logicas para usar un cristal para el reloj.


Una de ellas es que los relojes de cuarzo usan un cristal sintonizado a 32768 Hz que equivale a 215 Hz, el cual es al dividirlo en un contador de 215 se obtiene exactamente un segundo, ademas que a esas frecuencias el consumo de energia de el circuito es mas bajo.

Asi que la mejor idea para este circuito seria: Usar el cristal para obtener el tiempo de referencia, y usar el oscilador interno r-c para las operaciones internas de el microcontrolador. Unos cktos que andan en el internet usan el esquema que estoy describiendo. Ademas de la tolerancia de el cristal le agrega mas precision.
Tus derechos comienzan donde terminan tus responsabilidades......

Offline Jaru

  • The Communiter-
  • *
  • Posts: 13252
  • some text
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #22 on: February 20, 2011, 01:10:45 pm »
Puede que si, pero hay razones logicas para usar un cristal para el reloj.


Una de ellas es que los relojes de cuarzo usan un cristal sintonizado a 32768 Hz que equivale a 215 Hz, el cual es al dividirlo en un contador de 215 se obtiene exactamente un segundo, ademas que a esas frecuencias el consumo de energia de el circuito es mas bajo.

Asi que la mejor idea para este circuito seria: Usar el cristal para obtener el tiempo de referencia, y usar el oscilador interno r-c para las operaciones internas de el microcontrolador. Unos cktos que andan en el internet usan el esquema que estoy describiendo. Ademas de la tolerancia de el cristal le agrega mas precision.
solo para aclarar algunas cosas.

cuando usas un microcontrolador, podes usar la misma fuente de oscilacion para todo.
Como dice Vlad, pueda que la presicion del circuito RC interno sea "no tan exacta" como la de un cristal, de todos modos, a la hora de hacer el software, van a ver que para conseguir los cálculos de un segundo tambien se introduce un pequeño error (segun mi ultimo cálculo de al rededor de 0.16%, mas adelante les pongo el programa y la lógica)
en realidad para que no hayan dudas voy a usar un cristal de 4Mhz que es mas que suficiente para un reloj simple.

en mi opinion me hubiese interesado mas por un proyecto de robotica, algo asi como un brazo mecanico programable  :roll: eso del reloj es muy simplista pero es solo mi opinion

[youtube]4E052SKE28Q[/youtube]

si me dice que me lo patrocina usted, podremos entrar en pláticas  :drinks:

ey viejo esta super interesante esto pero tengo una gran duda con que pensas hacer la coneccion del programa al hardware porke yo antes use un logo o usaba una onda que no me acuerdo como se llama o sera que no entendi bien esta onda
talvez algunos no entienden el concepto de un microcontrolador aun.

un microcontrolador es una minicomputadora (olvidense de su case, monitor teclado y mouse)
es un CPU, que ya tiene memoria, puertos de comunicacion y modulos internos de procesamiento especial, todo eso en un pequeño chip, el cual; a traves de una interfaz especial (programador o quemador de microcontrolador) se conecta a una computadora donde se genera, compila y graba el programa hacia el chip microcontrolador.
la conexion del programador a la PC puede ser por puerto serial, paralelo, USB, etc.
el programador que yo tengo en especial es por puerto serial, para cuando lo hice (hace como 5 años, era lo mas fácil de fabricar y barato)
Belcboo anda mas en la jugada porque asi como el lo describe, se necesita un programador como anteriormente se describió para hacer que estos chips funcionen como queramos.

ahorita vamos a comenzar con algo "simple" como un reloj digital, donde la mayor parte de procesamiento y calculos de tiempo se hacen en SOFTWARE.

NOTA: ESTE RELOJ ES UN CIRCUITO INDEPENDIENTE, NO ESTA HECHO PARA ESTAR CONCETADO CON LA PC SIEMPRE, SOLO CUANDO SE PROGRAMA.
imaginense un DVD regrablable, ustedes solo lo "conectan" a la PC ciuando le van a meter informacion, y luego ya grabado (digamos una pelicula) lo sacan y lo usan aparte con su reproductor de dvd.

el microcontrolador, una vez grabado, se conecta al circuito para que cumpla su funcion de control y cálculos.

smrenderos parace el mas experimentado con esto de los PICs

-justo con proteus iba a simular el circuito completo.
-en lugar de ensamblador o C, estoy usando un compilador BASIC (usando el programa PIC SIMULATOR IDE), esta sera la primera parte, luego usando MikroC se puede reescribir el programa para pasarlo a lenguaje C
-la configuracion de pines que has puesto es justo como la habia planeado.
puerto B: selector de display y decoder
puerto A: control de hora

.......

voy a adelantar algo del programa:

El pic consta de registros internos que sirven para controlar, configurar y obtener informacion del mismo.
escribiendo en estos registros, podemos configurar la operacion del PIC, o podemos obtener informacion de su estado actual al momento de revisión.

tiene un registro de 8 bits llamado TIMER0, el cual esta constantemente contando durante el programa este en ejecución, no importa que este haciendo tu programa, el TIMER0 siempre esta contando, cuando llega al limite (255) se reinicia y asi sigue.
hay otro concepto en programacion que se llama INTERRUPCIONES, que son eventos relativamente ajenos a tu programa que desvian el curso del mismo en cualquier momento que éstas se den, hacia otra parte de ejecución de código.

el PIC tiene manejo de INTERRUPCIONES, y una de ellas es el desborde de cuenta de TIMER0, es decir, cuando TIMER0 llegue al limite y pase de nuevo a CERO, se activa la interrupcion de este registro, se salta a una zona de manejo de interrupciones, se revisa si fué el TIMER0 el cual generó la interrupcion, EN ESTE PUNTO SE EJECUTA EL CÓDIGO NECESARIO (por ejemplo incrementar un contador) limpiar la bandera de la interrupción y se regresa automaticmente desde donde el programa saltó cuando se generó la interrupcion.

USANDO UN CRYSTAL  para generar la frecuencia de operación del microcontrolador, el TIMER0 incrementa en uno cada ciclo de programa.
y cada ciclo de programa es 1/4 la frecuencia del oscilador
Si usamos una frecuencia de 4MHz
F = 4Mhz/4 = 1Mhz
es decir incrementa en 1 cada 1us (1/1Mhz)

Si se genera una interrupción en cada desborde del TIMER0, significa que entre una interrupcion y otra pasaran 256 x 1us = 256us

pero nosotros queremos que nuestros eventos sucedan cada segundo (como incrementar el conteo del reloj)

Hay otro registro del PIC donde se puede PRE-ESCALAR el TIMER0, es decir, hacerlo mas lento.
las escalas van de 1:1, 2:1, 4:1, 8:1 ... 256:1 (en potencias de 2)

es decir, EL MAXIMO TIEMPO que podemos obtener entre una interrupcion y otra (para 4Mhz de Cristal) es
256us x 256 = 65.536ms

ese es un valor no muy practico para nuestra base de tiempo.

que tal si hacemos que cuente en intervalos de 50ms, asi podemos acumular un contador y a las 20 interrupciones de 50ms estaremos obteniendo 1 segundo (50ms x 20 = 1segundo)

pero con el simple pre-escaler no podemos hacer que desborde cada 50ms.
lo que se puede hacer es ESCRIBIR UN VALOR en el TIMER0 para que cuando empieze a contar, ya tenga cargada una cantidad y asi FORZARLO a que cuente menos veces, logrando obtener el tiempo que queremos.

pero que valor le cargamos?

asi:

 65.536ms - 50ms = 15.536ms
cuantos conteos de TIMER0 hay en 15.536ms ?

si un conteo ( con pre-escaler de 256 y Cristal de 4MHz) es de: 256us entonces
en 15.536ms hay 15.536ms/256us) = 60.6875 conteos, como los conteos son enteros APROXIMAMOS al valor mas cercano y obtenemos 61

es decir, antes de habilitar las interrupciones le cargamos 61 al TIMER0, con un pre-escaler de 256 y aproximadamente en 49.9ms obtendremos una interrupcion, en la interrupcion aumentamos en 1 nuestro contador del programa (el que contara hasta 20) y de nuevo le sumamos 61 al TIMER0 antes de salir de la rutina de INTERRUPCION, asi para la próxima interrupción le tomara al TIMER0 otros 49.9ms generar una interrupcion nueva y aumentar nuestro contador, para que cuando nuestro contador llegue a 20 habremos calculado 1 segundo (aproximadamente)

calculemos el porcentaje de error con este procedimiento:

256-61 = 195 conteos hara para desbordarse
195 x 256us = 49.920ms tomara entre desborde y desborde
49.920 x 20 (que es lo que contaremos)  = 0.9984 segundos (en realidad no estaremos calculando 1 segundo si no 0.9984 segundos.

entonces el porcentaje de error queda:
((1-0.9984)/1) x100 = 0.16% de error que en ingenieria es un error aceptable  :drinks:

y TODO LO ANTERIOR solo para calcular 1 segundo en el programa  ohyea:

jueee ya no me acordaba como usar el timer0 y el preescaler, casi que me tomo 1 hora ir a leer y ver ejemplos para acordarme como manipularlo y hacerlo contar lo que uno quiera :D

que chivos estos volados
« Last Edit: February 20, 2011, 01:19:17 pm by naruto »
N/A

Offline erudito01

  • MiembrosReales
  • *
  • Posts: 39
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #23 on: February 20, 2011, 08:19:02 pm »

talvez algunos no entienden el concepto de un microcontrolador aun.
no es que no entienda sino que no sabia como se iba hacer la comunicacion eso era simplemente lo que no sabia

Offline davidos

  • Sv Full Member
  • *
  • Posts: 977
  • Que o que ?
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #24 on: February 20, 2011, 09:15:18 pm »
Me recuerdo, que anteriormente, expusistes un proyecto,lo cual me recuerdo no lo terminastes, no es por joder,,,pero para que hacer algo que ya esta inventado.... :)


"El ordenador nació para resolver problemas que antes no existían"[/color

Offline chrly

  • Sv Full Member
  • *
  • Posts: 837
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #25 on: February 20, 2011, 10:57:45 pm »
Me recuerdo, que anteriormente, expusistes un proyecto,lo cual me recuerdo no lo terminastes, no es por joder,,,pero para que hacer algo que ya esta inventado.... :)

comentario asi no ayudan al tema...

yo no iva a comentar pero si no se aporta al tema mejor hay que ahorrarse el comentario.

hacer algo asi no es sencillo ni gratis tienes que saber como hacerlo.

armar un simple juego de luces en una breadboard con un Ic de esto no es un juego de niños debes de tener varias nociones de electronica...

ahora hacer un reloj  x_x

vas a publicar la programacion naruto  :D

saludos espero los update --- :)
Todo lo que hay que aprender...
que cosas...
asusss ordenes jefeeee. XD mi capitan ::yaoming::

Offline Jaru

  • The Communiter-
  • *
  • Posts: 13252
  • some text
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #26 on: February 20, 2011, 11:06:56 pm »
Me recuerdo, que anteriormente, expusistes un proyecto,lo cual me recuerdo no lo terminastes, no es por joder,,,pero para que hacer algo que ya esta inventado.... :)
fijate que tu punto es bueno y comprensible.

Y el tema de el porque se hacen las cosas ya lo hemos discutido por aqui a lo largo de la vida de svc.

Será que uno debe hacer las cosas sólo cuando se las piden?
será que uno debe hacer las cosas sólo cuando se las pagan?
o será que de uno mismo salga querer practicar cosas nuevas, aprender mas cada vez, demostrarse a uno mismo que es capaz de hacer algo tan "simple" como un reloj que me puede venir gratis en un frutsi?

A mi siempre me ha gustado hacer cosas por el puro hecho de la propia satisfacción, por demostrarme a mi mismo que algo he aprendido y que no dependo que alguien me lo imponga para emprender un proyecto.

Para los que ven esto como un "proyecto inutil que no trae beneficio a la humanidad" veanlo como "un proyecto dicactico que trae beneficio a la propia mente"   :thumbsup:


@chrly

si, voy a poner absolutamente todo, diagrama electronico, diagrama de pistas, archivo de EAGLE, programa en BASIC, ASM, HEX, etc  :drinks:
N/A

Offline davidos

  • Sv Full Member
  • *
  • Posts: 977
  • Que o que ?
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #27 on: February 20, 2011, 11:29:22 pm »
Tienes...la razon... :thumbsup: :drinks: :drinks:


"El ordenador nació para resolver problemas que antes no existían"[/color

Offline Jaru

  • The Communiter-
  • *
  • Posts: 13252
  • some text
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #28 on: February 21, 2011, 01:37:44 am »
va.

El Sr ~ se nos adelanto un poco.

Pues al proyecto se le puede agregar todo lo que uno quiera y se puede complicar todo lo que uno guste.

Ahorita, para hacerlo mas "fácil" se han limitado los elementos electrónicos a usar.

*Estoy de acuerdo en la tabla de conversión, es justo como se trabaja estos problemas de codificación.
*Estoy de acuerdo con el cálculo de la correción de tiempo por la impresición en el cálculo original de tiempo, pero para poder hablar de corregir un pequeño "error" antes seria bueno determinar de cuanto error estamos hablando, por ejemplo, cada cuanto el reloj se atrasará un segundo, o un minuto, y si este error es tolerable o amerita un esfuerzo extra (no es que no quiera trabajar en la correción, me parece buena idea, pero me gustaria ir paso a paso en el diseño, luego podremos corregir errores y optimizar el código)
*Con lo de las latch no estoy de acuerdo porque no lo veo necesario, la técnica de multiplexeo a una frecuencia alta es suficiente para el ojo humano, a menos que tus ojos vean un parpadeo a mas de 100Hz.
muchos circuitos a nivel comercial usan esta técnica y no es como necesario agregarle 4 chips mas al circuito.

No me habia querido meter a programar en ensamblador porque solo esa area es casi otro tema, lo veo mas facil programar de un solo en BASIC o C.
Además que usando lenguajes de alto nivel resultarán mas comprensibles y de fácil lectura al lector
Ya queda a criterio del lector el incursionar mas en el tema del lenguaje ensamblador para microcontroladores PIC.

para hacer cencillo el circuito no consideramos el despliegue de segundos, solo Horas y Minutos (4 displays).
Los segundos si se calculan en el programa, pero no se visualizan

y repito, si queremos hacer mas complicado y con mas funciones el pequeño reloj, lo podemos hacer, pero siendo este un tema nuevo (el de los microcontroladores) para muchos, comenzaremos con algo básico.

Algo que queria hacer notar:

Al utilizar un decodificador de BCD a 7 segmentos, se gana orden en el circuito, y se ahorran lineas de comunicación en hardware, pero perdemos flexibilidad de presentación de datos, por ejemplo.
con el decodificador estamos limitado a su set de despliegue de 0-9 y una que otra letra, en cambio, si tuvieramos completo acceso a cada segmentos de todos los displays, podriamos escribir palabras y hacer animaciones.

Eso lo consideraremos para alguna actualizacion.  :drinks:
« Last Edit: February 21, 2011, 10:01:21 am by naruto »
N/A

Offline Jaru

  • The Communiter-
  • *
  • Posts: 13252
  • some text
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #29 on: February 21, 2011, 02:04:15 pm »
haciendo pruebas ahora, simulé el código que hice para calcular el segundo, y como selleva un error, el reloj se adelanta un segundo casi que cada media hora.

voy a hacerle la correción que bien apuntó el sr (~) 
si recordamos nuestros segundos son mas cortos, un segundo calculado por mi programa (basado en la explicacion de calculo de tiempo anteriormente expuesta) dura: 0.9984 segundos

le agregaré la corrección y lo volvere a simular, les voy a copiar una animacion de la simulacion luego

les dejo esta pregunta:

cual es la mejor forma para que el programa autocorrija su error de tiempo?
« Last Edit: February 21, 2011, 02:07:32 pm by naruto »
N/A