Temporizadores [RESOLVIDO]

1. Temporizadores [RESOLVIDO]

Larissa Lais
lady arya

(usa Debian)

Enviado em 18/06/2012 - 08:40h

Olá...

Preciso de ajuda com um temporizador.
Tenho seguinte cenário:

Se apertado um botão irá acender a Led1, e o microcontrolador deve permanecer com o led ligado por 1 hora, terminado essa uma hora, o led apaga, mas eu posso interromper esse processo ao apertar o mesmo botão, o que acionará uma segunda que ficara temporizada por duas horas, ou até que eu acione o botão novamente e volte a estaca zero do programa.

Se alguém puder me ajudar, ficarei muito agradecida.
*-*


  


2. Re: Temporizadores [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 18/06/2012 - 09:59h


Da uma olhada em:

ARQUIVO: time.h
FUNCAO: clock_t clock (void);

No windows CLOCKS_PER_SEC é definido assim:
-------------------------------------------

#define CLOCKS_PER_SEC ((clock_t)1000)

-------------------------------------------

No linux o CLOCKS_PER_SEC é diferente...

Acho que isso ja ajuda a clarear sobre como vc deverá codar ;)



3. Re: Temporizadores [RESOLVIDO]

Larissa Lais
lady arya

(usa Debian)

Enviado em 18/06/2012 - 11:18h

Oi... Tah, mas como eu faria isso??

Eu estou desenvolvendo da seguinte maneira, mas está dando diversos erros, ainda não está pronto, mas o tempo dos Leds que esta sendo um problema.


#include <MC9S08SH8.h>
#include "MCUinit.h"

#define LED1 PTBD_PTBD1
#define LED2 PTBD_PTBD2
#define LED3 PTBD_PTBD3
#define CHAVE PTAD_PTAD0

unsigned int Contador;

struct{

unsigned char _Flagtimer:1;
unsigned char _FlagFimTempo:1;
}Bits2;


#define FlagTimer Bits2._FlagTimer
#define FlagFimTempo Bits2._FlagFimTempo


void teste (void)
{


if(CHAVE==1)
{

LED1=1; /*acende led 1*/

if(FlagTimer==1) /*Contador para 3600 segundos, ou seja, uma 1h*/
{
FlagTimer=0;
Contador++;
if(Contador==3600)
{
FlagFimTempo=1;
}
}

}

}


4. Re: Temporizadores [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 18/06/2012 - 12:59h

Olá eu fiz um pequeno exemplo só para vc pegar a ideia ...

Fiz para windows, pois nao utilizo o linux, esse exemplo executa o bloco a cada 1 HORA.

OBS: No seu codigo vc incrementa ( Contador ) manualmente ... ISTO EH ERRADO PORQUE:

01 - Nao vai funcionar pois em algumas CPUs vai executar( incrementar ) mais LENTO ou mais RAPIDO.

02 - Utilize ( clock() ) pois esse pega a hora exata INDEPENDENTE da velocidade do processador.


#include <time.h>
#include <stdio.h>


clock_t contador = 0;
clock_t hora_increment = (CLOCKS_PER_SEC * 3600);


int main (void)
{
printf ("iniciado\n");

for (;;)
{
contador = clock ();

//-----------------------------------------------------------
// esse executa a cada hora ...
//-----------------------------------------------------------
if ( contador >= hora_increment )
{
hora_increment += (CLOCKS_PER_SEC * 3600 );

printf ("UMA HORA JA SE PASSOU\n");
}

}
return 0;
}



Esse codigo eh so para vc ter uma ideia. OK ?

DETALHE, para sair tecle CTRL + C.


T+.



5. Re: Temporizadores [RESOLVIDO]

Larissa Lais
lady arya

(usa Debian)

Enviado em 18/06/2012 - 13:22h

Valew pela ideia..
Mas o Contador está correto, eu estou programando um Microcontrolador Freescale!
Mas obrigadão!!
Valew pela ajuda!


6. Re: Temporizadores [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 18/06/2012 - 14:59h

"Mas o Contador esta correto, ..."

Então desculpe o meu erro .

Depois teste o seu código em varios Hardwares tipo: NetBook, PC com i7, "WorkStation" e algo dedicado tipo um controlador de um 737.




7. Re: Temporizadores [RESOLVIDO]

Larissa Lais
lady arya

(usa Debian)

Enviado em 19/06/2012 - 11:36h

Valew.. Eu já consegui resolver o problema..
Valew pela ajuda!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts