Autor Tema: RELOJ CON PIC  (Leído 18246 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Helena

  • PIC10
  • *
  • Mensajes: 30
RELOJ CON PIC
« en: 22 de Enero de 2007, 16:17:44 »
Hola Chicos,

Alguno de ustedes sabe de algún ejemplo para realizar un reloj con pic?  es que pienso hacer uno pero necesito ideas.

Muchas gracias

Besos

Helena

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: RELOJ CON PIC
« Respuesta #1 en: 22 de Enero de 2007, 16:27:26 »
Hola Elena!
¿Te referis a ejemplos de codigo en BASIC o a el hard?
Si es respecto del codigo (supongo que se trata de eso por donde posteaste), para hacer un reloj generalmente se utiliza un timer, que incremente una variable cada cierto tiempo. Basandote en ese valor, incrementas los segundos, horas, minutos y eventualmente la fecha, indicador de AM/PM, etc.
Tambien es una buena idea dotarlo de alguna(s) alarma(s), no te parece?

Segui preguntando, que seguro algun forista tiene un reloj armado y te puede ayudar.
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: RELOJ CON PIC
« Respuesta #2 en: 22 de Enero de 2007, 16:31:27 »
yo voy por usar un RTC es mas efectivo no hay nada mas fiable que eso
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: RELOJ CON PIC
« Respuesta #3 en: 22 de Enero de 2007, 16:52:02 »
Hola Navaismo!
Si, un DS1307 o similar es sencillo de usar, y muy presiso. Pero a lo mejor Helena esta empezando y el tema del I2C puede complicarle el proyecto, no?

Con un codigo parecido a este, y "mile" actualizado en la interrupcion, estaria basicamente andando el reloj. Falta por supuesto las rutinas de puesta en hora, etc.

Código: [Seleccionar]
If mile = 3993 Then
mile = 0
segu = segu + 1
If segu > 59 Then
segu = 1
minu = minu + 1
If minu > 59 Then
minu = 0
hora = hora + 1
If hora > 23 Then
hora = 0
minuaire = 0
' dia = dia + 1
' If dia = 8 Then
' dia = 1
' Endif
Endif
Endif
Endif
Endif
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado Helena

  • PIC10
  • *
  • Mensajes: 30
Re: RELOJ CON PIC
« Respuesta #4 en: 22 de Enero de 2007, 16:55:07 »
Hola aitopes,

Pues la idea es hacerlo con display de 7 segmentos uno para la hora, otro para los minutos y el ultimo para los segundos, lo quiero hacer en picbasic pero necesito de ideas o mejor aún el ejemplo de algún codigo para tomarlo como base y empezar. Me agrada mucho esto de relojes y temporizadores pero por ahora quiero comenzar con u  reloj.

Gracias a todos por sus ideas

Besos

Helena



Hola Elena!
¿Te referis a ejemplos de codigo en BASIC o a el hard?
Si es respecto del codigo (supongo que se trata de eso por donde posteaste), para hacer un reloj generalmente se utiliza un timer, que incremente una variable cada cierto tiempo. Basandote en ese valor, incrementas los segundos, horas, minutos y eventualmente la fecha, indicador de AM/PM, etc.
Tambien es una buena idea dotarlo de alguna(s) alarma(s), no te parece?

Segui preguntando, que seguro algun forista tiene un reloj armado y te puede ayudar.

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: RELOJ CON PIC
« Respuesta #5 en: 22 de Enero de 2007, 17:08:03 »
¿Haz realizado algún contador?
¿Con algún contador de 4 bits?
74F194 o 96 o 64 (no recuerdo).

Si lo haz hecho entonces el código que colocó Aitopes es muy ilustrativo.
Pregunto lo de los contadores porque asi tienes una idea de cómo se debe hacer en programación; además de todo lo que colocó aitopes, deberás colocar los bits necesarios en el puerto para poder activar las combinaciones de los displays.

Date una vuelta por aquí:
http://www.todopic.com.ar/foros/index.php?topic=3613.0

Es un compendio de ejemplos para Basic por Lordlafebre, quizá haya algún ejemplo de reloj (existe el de BCD a 7 segmentos que también lo necesitas).

Suerte.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: RELOJ CON PIC
« Respuesta #6 en: 22 de Enero de 2007, 17:12:09 »
Hola:

No hay ejemplos de relojes en los que he puesto, pero me parece que si hay uno que indica un contador utilizando un Display multiplexado, el tema es que decidas como mismo lo quieres, si debera ser preciso mejor opta por un RTC, pero eso ya depende deti, define bien que es lo que quieres para poder ayudarte.

Desconectado Helena

  • PIC10
  • *
  • Mensajes: 30
Re: RELOJ CON PIC
« Respuesta #7 en: 22 de Enero de 2007, 20:41:35 »
Hola Lord y a todos

Pues gracias por las respuestas que me han dado, la idea es hacer un reloj tomando como base de tiempo el cristal interno o externo del pic no estoy buscando una presicion alta por ahora, quiero tener la idea de como hacerlo para las horas, minutos y segundos en displays de 7 segmentos y una alarma que suene a la hora fijada. Lo del DS1307 me parece muy interesante pero creo que debo partir de lo bàsico "ustedes que creen?" para ir avanzando poco a poco pero con seguridad.

Chicos son muy amables por su atencion.

Besos

Helena :g)



Hola:

No hay ejemplos de relojes en los que he puesto, pero me parece que si hay uno que indica un contador utilizando un Display multiplexado, el tema es que decidas como mismo lo quieres, si debera ser preciso mejor opta por un RTC, pero eso ya depende deti, define bien que es lo que quieres para poder ayudarte.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: RELOJ CON PIC
« Respuesta #8 en: 22 de Enero de 2007, 21:25:09 »
Hola en lo personal considero mas facil usar el i2c que por software no da problemas a usar el timer del pic que es mas complicado.

Un ejemplo rapido es usar un FOR que vaya de 0 a 60 con pausa de un segundo cada que el for termine incremente la variable minutos la variable minutos cuando llegue a 60 incremente la varaible hora y cuando hora llegue a 24 todos a cero y vuelve el ciclo

suponiendo PBP
Código: [Seleccionar]
segs var byte
mins var byte
hora var byte

mins=0
hora=0

cuenta:

  for segs=0 to 59
   pause 1000
  next segs

 mins=mins+1

if mins > 59 then
 mins = 0
hora = hora+1
endif

if hora > 23 then
 hora = 0
 mins = 0
endif

goto cuenta

« Última modificación: 22 de Enero de 2007, 22:22:10 por navaismo »
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: RELOJ CON PIC
« Respuesta #9 en: 22 de Enero de 2007, 21:27:33 »
Hola Helena, es muy importante comenzar con ejemplos bien simple, para ir encontrando errores...  supuestamente ya construiste un simple destalledor  de led?
le fuiste cambiando los tiempos de destello?  sensaste un interruptor?...

si la respuesta es si... pues entonces manos a la obra con el reloj!  :D

Un abrazo!

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado Helena

  • PIC10
  • *
  • Mensajes: 30
Re: RELOJ CON PIC
« Respuesta #10 en: 22 de Enero de 2007, 21:41:08 »
Hola todopic,

Primero gracias por tener en cuenta mi mensaje, y a tu pregunta es un rotundo "SI" estoy con esto de los pics hace ratito y tengo mi cuarto lleno de esquemas, libros, boards en fin... te puedes imaginar!. El foro ha sido para mi de gran ayuda y he aprendido desde cero con ustedes y quiero llegar a dominar este lenguaje de programacion para poder "codearme" con los expertos que son ustedes.

De nuevo gracias todopic y al foro.

Besos

Helena :g)



Hola Helena, es muy importante comenzar con ejemplos bien simple, para ir encontrando errores...  supuestamente ya construiste un simple destalledor  de led?
le fuiste cambiando los tiempos de destello?  sensaste un interruptor?...

si la respuesta es si... pues entonces manos a la obra con el reloj!  :D

Un abrazo!

Norberto

Desconectado electronando

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 427
Re: RELOJ CON PIC
« Respuesta #11 en: 22 de Enero de 2007, 23:55:35 »
si en lo q quieres es presicion debes usar uno con el ds1307 creo q lord puso un ejemplo que estaba bastante entendible aunque no sepas usar tanto el i2c esta solo para armarlo no me acuerdo nomas en que parte esta ese ejemplo  :)

Desconectado psykhon

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 823
Re: RELOJ CON PIC
« Respuesta #12 en: 23 de Enero de 2007, 00:23:14 »
este anda lindo, echo en proton y corrige las fallas del crystal
Código: [Seleccionar]
'*****************************************************************************************
'*  Name    : PicReloj.BAS                                                               *
'*  Author  : Lisandro  (psykhon@yahoo.com)                                         *
'*  Notice  : Copyright (c) 2006                                                         *
'*          : All Rights Reserved                                                        *
'*  Date    : 02/08/2006                                                                 *
'*  Version : 1.3                                                                        *
'*  Notes   : se mejora la precision de la hora, se programa _                           *
'*          : el tmr0 con un preescalador de 256  como lo _                              *
'*          : explica la formula_                                                        *
'* (reloj de intrucciones) / (preescaler de tmr0 * tmr) = overflows en 1 seg             *
'*1,000,000,000 uS / (65,536 uS / TMRO overflow) = 15,258.78906 overflows for 1,000 S.   *
'* luego solo resta subdividir por 16000 y esto d un margen teorico de error de          *
'* 51,711.99345  (ver http://www.picbasic.co.uk/forum/showthread.php?t=2129)             *
'*****************************************************************************************

CONFIG XT_OSC , WDT_OFF , PWRTE_ON , BODEN_OFF , LVP_OFF , PWRTE_ON , CP_OFF
 
Device = 16F628a
XTAL = 4
CMCON = 7                      'establece las lineas como digitales

Declare LCD_TYPE 0             'caracterial
Declare LCD_DTPIN PORTb.4
Declare LCD_ENPIN PORTB.3
Declare LCD_RSPIN PORTB.0
Declare LCD_INTERFACE 4        ' bus de datos multiplexado a 4 pines
Declare LCD_LINES 2            ' numero de lineas de


DIM WBotonA AS BYTE             ' Workspace para la instruccion BUTTON, botonA
DIM WBotonB AS BYTE             ' Workspace para la instruccion BUTTON, botonB
Declare BUTTON_DELAY = 1500     ' no presente en documentacion, define la demora de repeticion del boton

dim Segundos as byte
dim Minutos as byte
Dim Horas as byte
dim Alarma as bit             'almacena si debe sonar la alarma o no
dim wtimer as word            'subdivisor del tmr0
Dim HoraAlarma as byte        'almacena la hora fijada para la alarma
Dim MinutoAlarma as byte      'almacena el minuto fijado para la alarma
symbol TiempoAlerta = 30      'constante que indica cuanto tiempo suena la alarma
dim wTiempoAlerta as byte


symbol PinAlarma = porta.2    'indica en que pin esta conectado el parlante           

dim Parpadeo as bit           'almacena cuando parpadea el valor selec en pantalla
Dim Registro as byte          'almacena que registro se esta actualizando_
                              ' 1 hora, 2  minuto, 3 hora alarma, 4 minuto alarma 

'inicializacion de variables
segundos = 0                 
minutos = 0
horas = 0
horaalarma = 0
MinutoAlarma = 0
registro = 1         
alarma = 0                   ' seteo la alarma como apagada                   
wtimer = 15625               'medio segundo (4mhx xtal)   

OPTION_REG = %10000111       'desabilita pull-ups, prescale TMR0 by 256
INTCON = 0                   'desabilita interrupciones                 
TrisA = %11111 ' input        ' seteo los dos primeros pines del PORTA como entradas

cls                           'limpio la pantalla


Main:
if intcon.2=0 then goto main    ' chekeo desbordamiento de tmr0 por polling

intcon.2 =  0                   'borro el flag de desbordamiento

wtimer = wtimer - 1024

if wtimer < 1024 then

    Segundos = segundos + 1     'Incremento los segundos

    if segundos = 60 then      'Si los segundos = 60 incremento los minutos y pongo a 0 los segundos
        segundos = 0
        gosub IncrementarMinutos
        cls                    ' limpio la pantalla
    endif

    gosub MostrarHora

    if horas = horaalarma and minutos = minutoalarma and alarma = 1 then gosub SonarAlarma

    wtimer = wtimer + 15625

else

    'rutinas para verificar si se presiona algun boton, si es "mode" se va a edicion,_
    'si es set se enciende la alarma

    BUTTON porta.0 , 1 , 255 , 250 , wbotona, 0 , NoBotonA
    gosub modoedicion

    NoBotonA:
    BUTTON porta.1 , 1 , 255 , 250 , wbotona, 0 , NoBotonB

    if alarma = 1 then      'si la alarma esta encendida la apaga y viceversa
        alarma = 0
    else
        alarma = 1
        wTiempoAlerta = 0   'resetea el tiempo que suena la alarma
    end if   
       
    NoBotonB:
end if

goto main

ModoEdicion:
if intcon.2=0 then goto modoedicion    ' chekeo desbordamiento de tmr0 por polling
intcon.2 =  0                   'borro el flag de desbordamiento

wtimer = wtimer - 1024

if wtimer < 1024 then

   ' genera el efecto parpadeo en el lcd sobre el registro seleccionado
    select registro             ' selecciona sobre que registro se etsa haciendo el parpadeo
    case 1                      ' parpadeo sobre las horas
        if parpadeo = 1 then
             print at 1,1,"  "
             Parpadeo = 0
        else
             print at 1,1,dec horas
             parpadeo = 1
        endif
    case 2                      ' parpadeo sobre los minutos
        if parpadeo = 1 then
             print at 1,4,"  "
             Parpadeo = 0
        else
             print at 1,4,dec minutos
             parpadeo = 1
        endif       
     
     case 3                      ' parpadeo sobre la hora de alarma
     print at 2,3, ":"           ' muestro el separador de alarma
        if parpadeo = 1 then
             print at 2,1,"  "
             Parpadeo = 0
        else
             print at 2,1,dec horaalarma
             parpadeo = 1
        endif
               
     case 4                      ' parpadeo sobre los minutos de alarma
        if parpadeo = 1 then
             print at 2,4,"  "
             Parpadeo = 0
        else
             print at 2,4,dec minutoalarma
             parpadeo = 1
        endif             
    endselect       
    wtimer = wtimer + 15625

else
    'control de botones
    BUTTON porta.0 , 1 , 255 , 250 , wbotona, 0 , NoBotonA2  'rutina para detectar el primer boton "mode"
   
    registro = registro + 1     'si se vuelve a apretar el boton incremento registro
    if Registro = 5 then        'y si es 3 lo resetea a 1 y retorna al programa
        registro = 1
        segundos = 0            'cuando se sale de edicion los segundos arrancan en 0
        cls
        return           
    end if   
   
    NoBotona2:                  ' aqui continua la ejecucion si no es presinado el boton A
   
    'rutina para detectar el boton "set" e incrementar el registro seleccionado
    BUTTON porta.1 , 1 , 255 , 250 , wbotona, 0 , NoBotonBE                   
   
    select registro                                      ' controla que registro esta seleccionado
        case 1                           
            horas = horas + 1                            ' incrementa las horas
            if horas >= 24 then horas = 0                ' si el valor es mayor o = que 24 las pone en 0
        case 2
            minutos = minutos + 1                        'incrementa los minutos
            if minutos >= 60 then minutos = 0            'los pone en 0 si son 60 o mas
        case 3
            horaalarma = horaalarma + 1                  'incrementa los minutos
            if horaalarma >= 24 then horaalarma = 0      'los pone en 0 si son 60 o mas
        case 4
            minutoalarma = minutoalarma + 1              'incrementa los minutos
            if minutoalarma >= 60 then minutoalarma = 0  'los pone en 0 si son 60 o mas       
    endselect
 
    nobotonBE:
   
 endif
   
goto modoedicion            ' entra en loop hasta que se abandona

MostrarHora:
    print at 1,1, dec horas    'muestro las horas
    print at 1,3, ":"          'muestro el separador
    print at 1,4, dec minutos  'muestro los minutos
    print at 1,6, ":"          'muestro el separador
    print at 1,7, dec segundos 'muestro los segundos
    if alarma = 1 then
        gosub mostrarAlarma
    else
        print at 2,1, "        "   
    endif   
return

MostrarAlarma:
        print at 2,1, dec Horaalarma
        print at 2,3, ":"
        print at 2,4, dec minutoalarma
return
   
IncrementarMinutos:            'Incremento los minutos, si son 60 los pongo en 0 _
    minutos = minutos + 1      'e incremento las horas
    if minutos = 60 then
        minutos = 0
        gosub Incrementarhoras
    endif
return

IncrementarHoras:             'Incremento las horas y si son 24 las pongo en 0
    Horas = horas + 1
    if horas = 24 then horas = 0
return
       
SonarAlarma:

sound pinalarma,[120,15]                            ' reproduce el sonido de la alarma
wTiempoAlerta = wTiempoAlerta + 1                   'incrementa el valor que controla la duracion de la alarma
if wtiempoalerta = tiempoalerta then alarma = 0     'si pasan los segundos de alarma se apaga la misma

if parpadeo = 0 then                                'rutina que hace parpadear la alarma en el display   
    gosub mostrarAlarma
    parpadeo = 1
else
    print at 2,1, "        "   
    parpadeo = 0
endif   
   
return
No, no se lo que estoy haciendo. Nadie sabe que estoy haciendo. Por eso se llama "Investigacion".

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: RELOJ CON PIC
« Respuesta #13 en: 23 de Enero de 2007, 05:58:17 »
Muy bueno Lisandro!!!! Excelente aporte. ;)
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado Helena

  • PIC10
  • *
  • Mensajes: 30
Re: RELOJ CON PIC
« Respuesta #14 en: 23 de Enero de 2007, 09:49:05 »
Hola psykhon,

Reitero lo mismo excelente aporte, una preguntita este codigo lo puedo llegar a modificar y adaptar para display de 7 segmentos?, o al menos tomar como referencia las rutinas.

Besos

Helena :g)


 

anything