TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: ponyony en 24 de Febrero de 2006, 19:22:00

Título: Duracion pausa
Publicado por: ponyony en 24 de Febrero de 2006, 19:22:00
Hola, estoy intentando hacer una pausa de 18H y otra de 6H pero no me permite poner pausas tan grandes, como podria poner una pausa de 18Horas ?
Título: RE: Duracion pausa
Publicado por: Artifox en 24 de Febrero de 2006, 21:14:00
GUAU... esas pausas nunca las habia pensado... la verdad que para mi la unica forma es que te hagas pausas secuenciales del mayor tiempo posible, es decir configurar 6*60 pausas de 1 minuto... o algo asi... lo malo es que dificilmente encontraras una buena precision ene el tiempo.

Otra buena opcion seria usar una RTC, es decir un reloj externo, el cual esta preparado para funcionar independientemente y uno le pregunta que hora es cada vez que uno necesite. Lo que puedes hacer es quedarte preguntando desde una hora hasta que pase todo el tiempo que necesitas. A mi parecer esto es mas facil...

Suerte RebotadoRebotado
Título: RE: Duracion pausa
Publicado por: LordLafebre en 24 de Febrero de 2006, 21:26:00
Hola:

Coincido con Victor, el Relojn de tiempo real (RTC) es la mejor opcion para esas labores, asi lo configuras y desde el pic cada cierto tiempo compruebas la hora para que realices la operacion que necesites, eso de hacer ese tipos de pausas con el pic como que no van bien, en que lo quieres aplicar?
Título: RE: Duracion pausa
Publicado por: ponyony en 24 de Febrero de 2006, 21:32:00
Pos estoy haciendo un circuitillo el cual me activa y descativa unos reles, se podria decir como un automatismo, queria intentar hacerlo con pausas ya que mi nivel no es muy alto y no se como hacerlo con un reloj externo, pero habra que mirarlo, si me echais un cable Giño
Título: RE: Duracion pausa
Publicado por: LordLafebre en 24 de Febrero de 2006, 21:50:00
Hola:

Para eso estamos... puedes utilizar el conocidisimo DS1307 que es un RTC por I2C... si te pare ce bien ese te puedo colga un ejemplo... Sonrisa Gigante
Título: RE: Duracion pausa
Publicado por: ponyony en 24 de Febrero de 2006, 22:30:00
pues me harias un gran favor Giño haver si consigo montar esto Giño jejeej lo que no tengo ni idea como leer los datos pero ya mirare haver Giño
Título: RE: Duracion pausa
Publicado por: LordLafebre en 24 de Febrero de 2006, 23:25:00
Hola:

Por eso no te preocupes, te pondre un ejemplo en el que lo puedas entender, es sencillo utilizas solamente la funcion I2Cread e I2Cwrite, ahora aqui son las 00:28 am como a las 11:30 am de aqui tendras listo tu ejemplo...

PD: vi tu perfil, es verdad eso de tu edad...? invasor Sonrisa Gigante
Título: RE: Duracion pausa
Publicado por: ponyony en 25 de Febrero de 2006, 07:38:00
ok muchisimas gracias Giño yo ire provando cosas haver que tal Giño gracias por la ayuda Flash
Título: RE: Duracion pausa
Publicado por: LordLafebre en 25 de Febrero de 2006, 11:04:00
Hola:

Aqui esta lo prometido:

Este es el código:

Codigo:
CPIN  Var Portb.7                 ;pin señal de reloj I2C
DPIN  Var Portb.6                 ;pin de datos I2C

segu    var byte   ;definir tamaño de variable segundos 1 a 255
minu    var byte                    ;variable para los minutos
hora    var byte                    ;variable para las horas
diaS    var byte                    ;variable día de la semana
diaF    var byte                    ;variable día fecha del mes
mes     var byte                    ;variable mes
anio    var byte                    ;variable año de 2 dígitos

dato    VAR BYTE                 ;variable para almacenar dato leído
actualizado VAR BIT              ;variable para almacenar un 1 o 0

goto grabarRTC   ;si es la 1ra vez que corre ir a grabar RTC
                                   ;caso contrario solo leer el RTC
INICIO:  
    I2CREAD DPIN,CPIN,%11010000,0,[segu]   ;leer los datos de mem. 0,            
    I2CREAD DPIN,CPIN,%11010000,1,[minu]   ;1,2,..y guardarlos en sus
    I2CREAD DPIN,CPIN,%11010000,2,[hora]   ;respectivas variables
    I2CREAD DPIN,CPIN,%11010000,3,[diaS]
    I2CREAD DPIN,CPIN,%11010000,4,[diaF]            
    I2CREAD DPIN,CPIN,%11010000,5,[mes]
    I2CREAD DPIN,CPIN,%11010000,6,[anio]
         
    lcdout $fe,1,hex2 hora,":",hex2 minu,":",hex2 segu   ;mostrar la
                          ;hora minuto y segundos en 2 dígitos (HEX2)
lcdout $fe,$c0                      ; saltar a la 2da línea del LCD
    if diaS=$1 then lcdout "Dom."    ;mostrar día de la semana
    if diaS=$2 then lcdout "Lun."
    if diaS=$3 then lcdout "Mar."
    if diaS=$4 then lcdout "Mie."
    if diaS=$5 then lcdout "Jue."
    if diaS=$6 then lcdout "Vie."
    if diaS=$7 then lcdout "Sab."

lcdout $fe,$c5,hex2 diaF,"/"          ;mostrar el día del mes /
lcdout $fe,$cB,"/20",hex2 anio        ; mostrar año /20 + 04

lcdout $fe,$c8                       ;pasar a la casilla 8
    if mes=$1 then lcdout "ene"       ;mostrar el mes
    if mes=$2 then lcdout "feb"
    if mes=$3 then lcdout "mar"
    if mes=$4 then lcdout "abr"
    if mes=$5 then lcdout "may"
    if mes=$6 then lcdout "jun"
    if mes=$7 then lcdout "jul"
    if mes=$8 then lcdout "ago"
    if mes=$9 then lcdout "sep"
    if mes=$10 then lcdout "oct"
    if mes=$11 then lcdout "nov"
    if mes=$12 then lcdout "dic"
PAUSE 500                            ;esperar 0,5 segundo
   
goto inicio                         ;volver a leer los datos

; ************************ subrutina grabar *********************
grabarRTC:
     
I2CWRITE DPIN,CPIN,%11010000,0,[$00]   ;setear 00 segundos
    Pause 10                     ;retardo para finalizar grabación
I2CWRITE DPIN,CPIN,%11010000,1,[$59]   ;setear 30 minutos
    Pause 10  
I2CWRITE DPIN,CPIN,%11010000,2,[$18]    ;setear las 13 horas
    Pause 10  
I2CWRITE DPIN,CPIN,%11010000,3,[$3]    ;setear día lunes ,D=1,L=2
    Pause 10                              ;M=3 , M=4, J=5, V=6, S=7
I2CWRITE DPIN,CPIN,%11010000,4,[$8]    ;setear día 27 del mes
    Pause 10  
I2CWRITE DPIN,CPIN,%11010000,5,[$11]    ;setear mes septiembre
    Pause 50  
I2CWRITE DPIN,CPIN,%11010000,6,[$05]    ;setear año  04
    Pause 10
I2CWRITE DPIN,CPIN,%11010000,7,[$10]   ;control %00010000 para
    Pause 10                           ;encender el led cada 1 seg.
goto inicio                 ;ir a presentar los datos en el LCD

end


y este el circuito:



Espero que te sirva, SUERTE...!!!
Título: RE: Duracion pausa
Publicado por: ponyony en 25 de Febrero de 2006, 17:15:00
muchisimas gracias compi, lo que yo uso un PIC16F84 y no me interesa mostrar nada en LCD tansolo seria comprovar la hora y si esa hora es la misma ala que le he indicado poner un portB a High para activarme un rele Giño jejej es que veo mucho codigo aki y el lcd y otro pic Giño haver si se podria solo la comprovacion Giño
Título: RE: Duracion pausa
Publicado por: ponyony en 25 de Febrero de 2006, 18:24:00
ok Giño me lo he stado mirando una y otra vez y ya entiendo el codigo Giño jejeej probare a resolver como interconectarlo y mirar como compararlo Giño seguro que algo sacaremos Giño si quieres agregame asi si necesito algo te pregunto por aki o por MSN Giño ponyony@hotmail.com Giño

saludos

                Pony
Título: RE: Duracion pausa
Publicado por: LordLafebre en 25 de Febrero de 2006, 22:20:00
Hola:

Lo del pic no es problema, ese codigo funciona igual para cualquiera... Sonrisa Gigante
Título: RE: Duracion pausa
Publicado por: ponyony en 28 de Febrero de 2006, 16:44:00
vamos a ver que no se que le pasa que me quedao enganchao Giño ya me va todo los reles botones etc.. me falla la comprovacion de la hora, hice unos calculos para determianr la hora que seria, aqui os dejo el codigo del reloj ( un 1307) y mi codigo de calculo, en el codigo solo sale la configuracion del reloj y la deteccion de la hora, es que no pongo todo xq es muy largo osea quiero que mireis donde me equivoco o que me falla del codigo. Giño yo creo que es en el calculo que creo que me devolvera "0" en Vez de "00" que serian las 12 de la noche Giño haver si lo entendeis :P

"----------------- RELOJ --------------------------------------------------------------------------
   
                CPIN  Var Porta.0                   "pin señal de reloj I2C

      DPIN  Var Porta.1                   "pin de datos I2C

 
      segu    var byte                    "definir tamaño de variable segundos 1 a 255

      minu    var byte                    "variable para los minutos

      hora    var byte                    "variable para las horas

      diaS    var byte                    "variable día de la semana

      diaF    var byte                    "variable día fecha del mes

      mes     var byte                    "variable mes

      anio    var byte                    "variable año de 2 dígitos



      dato    VAR BYTE                    "variable para almacenar dato leído

      actualizado VAR BIT                 "variable para almacenar un 1 o 0
"---------------------------------------------------------------------------------------------------------      
      B   var byte          " variable para almacenar la hora que se ha de apagar

      A   var byte               " la hora actual

      Zn   var byte          " Hora final ala que se ah de desactivar

      X    var byte          " Lugar donde guardar un calculo

      goto grabarRTC                      "si es la 1ra vez que corre ir a grabar RTC
"--------------------------------------------------------------------------------------------------------

grabarRTC:

     
      I2CWRITE DPIN,CPIN,%11010000,0,[$00]    "setear 00 segundos

          Pause 10                                "retardo para finalizar grabación

      I2CWRITE DPIN,CPIN,%11010000,1,[$59]    "setear 30 minutos

          Pause 10  

      I2CWRITE DPIN,CPIN,%11010000,2,[$23]    "setear las 13 horas

          Pause 10  

      I2CWRITE DPIN,CPIN,%11010000,3,[$3]     "setear día lunes ,D=1,L=2
 
          Pause 10                                "M=3 , M=4, J=5, V=6, S=7

      I2CWRITE DPIN,CPIN,%11010000,4,[$8]     "setear día 27 del mes

          Pause 10  

      I2CWRITE DPIN,CPIN,%11010000,5,[$11]    "setear mes septiembre

          Pause 50  

      I2CWRITE DPIN,CPIN,%11010000,6,[$05]    "setear año  04

          Pause 10

      I2CWRITE DPIN,CPIN,%11010000,7,[$10]   "control %00010000 para

          Pause 10                               "encender el led cada 1 seg.

      goto inicio                            "Salta a Inicio

INICIO:  

          I2CREAD DPIN,CPIN,%11010000,0,[segu]   "leer los datos de mem. 0,            

         I2CREAD DPIN,CPIN,%11010000,1,[minu]   "1,2,..y guardarlos en sus

          I2CREAD DPIN,CPIN,%11010000,2,[hora]   "respectivas variables

          I2CREAD DPIN,CPIN,%11010000,3,[diaS]

          I2CREAD DPIN,CPIN,%11010000,4,[diaF]            
   
          I2CREAD DPIN,CPIN,%11010000,5,[mes]

          I2CREAD DPIN,CPIN,%11010000,6,[anio]
   
      goto start
Start:

testC1:
          I2CREAD DPIN,CPIN,%11010000,2,[hora] "Lee que hora es ( 2 digitos ) y lo gurada en "hora"

          If PORTB.7 = 1 then reset   "Si es PORTB.7 esta a "1" saltamos a reset

          B = 1                             "Numero de horas de la pausa
          A = hora                           "La hora actual
          X = A + B                          "Calculo de horar
          If X >= 24 then calculo  
calculo:       Zn = X - 24                        "Si X es mas grande o igual que 24 le restamos 24
          If X < 24 then sigue
sigue:         Zn = X                             "si X es mas pequeña que 24 se queda igual

          if hora <> Zn then testC1 "Comprueva si la hora es "X" donde "X" la hora que quieres que se apague si no lo es salta a testC1

          High 1      " Desactiva el rele 1
          High 2      " Desactiva el rele 2
               High 3      " Desactiva el rele 3
               High 4      " Desactiva el rele 4

Título: RE: Duracion pausa
Publicado por: LordLafebre en 28 de Febrero de 2006, 16:56:00
Hola:

Pues no me queda claro que es lo que quieres hacer, pero te doy la idea de como lo haría, en el momento que el boton es precionado almaceno en variables el valor de la hora de ese instante luego le sumo una hora y voy comparando el valor que lee ese momento el RTC con el valor calculado para la pausa de 1 hora... asi lo haria... digo.. es mi humilde opinión...
Título: RE: Duracion pausa
Publicado por: ponyony en 28 de Febrero de 2006, 17:29:00
vale, es lo que ago pero mira si tu lees y son las 18h osea (18) entonces si le sumo 18 por que quiero que la pausa sea de 18 horas la suma seria 36 y eso no es ninguna hora, por eso ago esa operacion 36 - 24 = 12 se tendria que desactivar a las 12 en el caso de que sea inferior como aki son las 01 y quieres 12 horas de retardo 12+1 = 13 se tendria que apagar a las 13 osea la 1 del medio dia, por eso ago esa operacion lo que luego no me lo calcula bien.... osea no me desactiva nada... queria hacer que se visualizaran los 2 primeros digitos en 2 seven segments pero lo veo muy chungo... xq ahora mismo no veo la hora en lcd ni nada.... y lo tengo puesto para que sean las 23:59 y en 1 minuto sean las 00:00 y asi ver si se desactiva, porque solo compruevo las horas no minutos osea 1 retraso de 1 hora pero si son las 23:59 a la que marque 00 lo considera 1 hora pero no me lo desactiva... no se si es xq sacara un 0 en vez de 00 no se :S
Título: RE: Duracion pausa
Publicado por: LordLafebre en 28 de Febrero de 2006, 19:02:00
Hola:

intenta algo como esto:

"aqui lees la hora y el minuto en el que se presionó el pulsante

Codigo:
if PORTB.5 = 1 then
    I2CREAD DPIN,CPIN,%11010000,1,[minuguardado]
    I2CREAD DPIN,CPIN,%11010000,2,[horaguardado]
    horaguardado = horaguardado + 18
    if horaguardado >= 24 then
        horaguardado = horaguardado - 24
    endif
endif

" asi puedes comparar o comprobar el tiempo

loop:
    I2CREAD DPIN,CPIN,%11010000,1,[minu]
    I2CREAD DPIN,CPIN,%11010000,2,[hora]
    if ((horaguardado=hora) and (minuguardado=minu)) then
        " aqui puedes accionar lo que quieras
        "es aqui cuando se ha cumplido la pausa de 18 horas.
        "ejemplo:
    endif
goto loop


Asi puedes comparar las dos horas y hacer la accion que tu quieras cuando el tiempo de la pausa a transcurrido.
Título: RE: Duracion pausa
Publicado por: ponyony en 01 de Marzo de 2006, 07:35:00
muchas gracias, esta noche me pondre haver si lo saco Giño jeje ya te dire algo, mi segundo objetivo es mostrar la hora en seven segments Giño lo veo chunguillo pero weno :P
Título: RE: Duracion pausa
Publicado por: Y@el en 01 de Marzo de 2006, 07:50:00
Me permito meter mi cuchara.... Bueno Antes que nada usaria un PIC16F628
Es mas propongo esto Lord....

Antes que nada Plantearia las cosas de esta manera.

Para el control de Tiempo, bueno... El DS1307... esta muy bien
Y particularmente yo usaria su Pulso como int Externa. Para el chequeo de datos (ON/OFF Reles)

Para la hacer la configuracion de la Alarma mediante un programa en VB :-D
Claro que aca parovecharia la Int por USART.

Que te parece algo como un programita en VB, que envia al Pic solo una secuencia de datos via RS232.... ejemp:

Codigo:

Basicamente hay 2 Comandos "S" y "CH"
Si es "S" .Setea Alarma
"S","E",X1,Y1,"A",X2,Y2       "Donde A1:Hora prendido... A2:Hora Apagado
                                            "S = Set Alarm
                                            "E=Hora Encendido;X1,Y1  :Indica Hora ejmp : 14:30
                                            "A=Hora Apagado;   x2,y2  :Indica Hora Apagado
Si es "C". Cambia Hora
"C",X,Y,Z                        "C = Set Hora
                                            "X,Y,Z . Hora Actual.. Ejm: 14:30:22



Con esto asegurarias el cambio de la Hora de la Alarma.

Bueno... Ahora vayamos a dar soluciones y no solo a complicar las cosas.
Por lo pronto voy a estar masticando mi propuesta... y ver como la resuelvo... xD
xD...

bueno bytes.

Título: RE: Duracion pausa
Publicado por: ponyony en 01 de Marzo de 2006, 13:21:00
mira, el objetivo de este circuito que estoy haciendo es una palca domotica que controla 4 reles con 2 programaciones, es para un control de unos focos ventuiladores tec... que se hand e encender 18 horas y 6 apagdas y el segundo prograam 12 horas y 12 apagadas, esto mismo lot engoe cho atraves del puerto paralelo, pero mi objetivo es hacerlo independiente del PC ya que no quierot ener el PC encendido 1 año.... ya que esto ha de hacerlo cada dia hasta que decida quitarlo, por eso em decidi hacerlo en pic y no atraves del Puerto paralelo que ese circuito ya lo hice y tengo todo en VB echo y control atarves de internet y via Http Giño
Título: RE: Duracion pausa
Publicado por: Y@el en 01 de Marzo de 2006, 15:48:00
Bueno cual es el codigo... y me parece q esta en MikropicBasic. y no pbp

y con respecto a lo de la hora, es para que tu equipo sea configurable, sin tener que sacarlo. Y no lo hace dependiente de la PC.

ya que la hora sirve para que la actulices nada más.

O una pequeña cosita.

Como se supone que vas a activar el Reloj en Tiempo real.

Por Programa.

y si es asi... Como vas a configurar la fecha inicial.

o piensas colocarle la fecha y luego inmediatamente ponerle en el ckto.

Pero esto implicaria que cada vez q se prenda este con la misma fecha...

Pero imaginamos que esta en la EEPROM un flag indicativo...

Bueno...

Se que tu idea es buena.... Yo solo te planteaba un pequeño PUSH... al programa, para que por medio de algo simple puedas configurar el sistema y Setear las alarmas, sin necesidad, de otras cosas.

Otro detalle.

no se olviden que el DS1307 regresa la hora en BCD, asi que al momento de restar la hora tengan cuidado con los Hexadecimales..

ya que por ejemplo 20H - 12 H no es 10H....

bytes
Título: RE: Duracion pausa
Publicado por: ponyony en 01 de Marzo de 2006, 15:49:00
creo que el problema es la capacidad del pic :P hay algun pic que tenga mas capacidad con mismo patillaje para que peuda grabar el programa sin tener que cambiar todo? jeje espero que si, uso un PIC16F84A
Título: RE: Duracion pausa
Publicado por: Y@el en 01 de Marzo de 2006, 15:51:00
El pic16f628, tiene el doble de capacidad que el 84 y cuesta igual
Título: RE: Duracion pausa
Publicado por: LordLafebre en 01 de Marzo de 2006, 15:51:00
Hola:

ese error es porque estas exediendo del máximo de memoria que tiene el Pic... ya estas sobrepasando la memoria asi que o depuras el código o consigues otro micro... Sonrisa Gigante
Título: RE: Duracion pausa
Publicado por: ponyony en 01 de Marzo de 2006, 16:00:00
claro, mi intencion es setearlo una vez y ya esta, xq dara = realmente la hora que sea por que tu quieres que eso funcione apartir de cuando tu lo enciendas es decir desde que lo enciendes se ha de apagar en 18h osea que dara = la hora que sea por que calculara la hora a partir de la que tiene Giño entonces, la comprobacion de la hora no me sirve con el codigo que tengo?
Título: RE: Duracion pausa
Publicado por: LordLafebre en 01 de Marzo de 2006, 16:05:00
Hola:

solo basta con setear una ves el RTC, a este tambien lo puedes energizar con una pila CR2032 que aun asi le cortes la alimentacion el RTC va a segir trabajando (siempre y cuando este con la pila) el codigo que te pase si sirve pare eso, solo graba una ves el RTC la primera ves que corre el programa, luego solo lo lee.
Título: RE: Duracion pausa
Publicado por: ponyony en 01 de Marzo de 2006, 16:11:00
no osea me refiero, que da= osea si le quito la alimentacion se supone que perdera la hora y entonces volvera a grabar la que tiene seteada cuando programe el pic, pero eso no es problema, pero el codigo que em dijistes para leer la hora y calcular cuando se habia de apagar es correcto? osea lo digo como ha dicho eso de que estan en Hex.

La hora me da= xq si son las 23:00 y lo enciendo aunque el reloj interno realmente marque las 04:30 se apagaria al cabo de 18h que seria lo mismo que marcase las 23:00 las 18H las cumple sea la hora que sea Giño lo que importa es que aga la cuenta de 18h apartir de cuando lo enciendes ( la hora la he usado simplemete para hacer un retardo de 18h no uso realmente la hora ) Giño
Título: RE: Duracion pausa
Publicado por: LordLafebre en 01 de Marzo de 2006, 16:13:00
Hola:

Lee el mensaje anterior, ya lo edite.
Título: RE: Duracion pausa
Publicado por: ponyony en 01 de Marzo de 2006, 17:08:00
Si uso el PIC16F648 mejor no? tengo 3 veces mas que el PIC16f84 no? y el patillaje y el montaje es el mismo? osea con un cristal de 4M no?
Título: RE: Duracion pausa
Publicado por: LordLafebre en 01 de Marzo de 2006, 18:25:00
Hola:

Si, ese te sirve sin problemas, tiene el mismo pinout, que el 84A, ademas tiene oscilador interno y puedes desabilitar el reset externo, por lo que tendrias mas pines para utilizar que el 84A... Sonrisa Gigante