Ir ao conteúdo
  • Cadastre-se

Interrupção TIMER1


CIS

Posts recomendados

Pessoal, como fazer com que a interrupção do timer1 funcione da seguinte maneira.

inicia com um pino em nivel logico 1 por cinco segundos.

apos este tempo desliga o pino e aguarda 2 horas para ativar o pino novamente por cinco segundos.

estou a utilizar o MICKROC, PIC 12F675, oscilador interno 4MHz, mclr ativo e saida GPIO.F0(pino 7).

consigo, fazer com que ele inicie desligado e ativa o pino por cinco segundos duas horas depois, mas quero fazer ele iniciar ligado...

conto com essa ajuda de vocês... ja tente diversos if e for , mas não tenho conseguido...

Link para o comentário
Compartilhar em outros sites

inicia com um pino em nivel logico 1 por cinco segundos.

apos este tempo desliga o pino e aguarda 2 horas para ativar o pino novamente por cinco segundos.

.

Uma saída em nível alto e apos 2 horas novamente em nivel alto, ambas acionadas apenas por 5s seria isso?

Eu uso o Timer0 em Vez do Timer1

Link para o comentário
Compartilhar em outros sites

Uma saída em nível alto e apos 2 horas novamente em nivel alto, ambas acionadas apenas por 5s seria isso?

Eu uso o Timer0 em Vez do Timer1

você tem um exemplo com o timer 0. é exatamente isso, uma saida em nivel logico 1 por 5 segundos e depois de duas horas por 5 segundos novamente... isso num ciclo infinito, enquanto houver alimentação do circuito..

das umas dicas ai... valeu.

Link para o comentário
Compartilhar em outros sites

Primeiro habilite o timer0, adicione o valor de 55 "0x37h" ao prescaler

Depois faça isso:

______________________________________

Dim tempo as long // adapte para seu compilador

Loop:

IF TMR0 = 250

tempo = tempo + 1 // Cada incremento em 0,05s

TMR0 = 0

INTCON.TOIF = 0 // Habita para uma nova interrupção

_____________________________________________-

// Para ter 1 segundo, o tempo deve ser igual a 20. 20 x 0,05 = 1s

// Para 1 minuto, 60 x 20 = tempo deve ser 1200

// Para 1 hora, 60 x 1200 = tempo = 72000

//Basta fazer as contas :

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

IF tempo = 144000 // 2 horas

saida = 1

IF tempo = 144100 // 2 horas e 5 s

saida = 0

tempo = 0

Goto Loop:

End

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

Link para o comentário
Compartilhar em outros sites

Em Basic eu não sei, mas em C seria simplesmente no início do programa configurar pra ligar o Pino depois do MAIN, tipo assim:

Void Main

{

Output_high(pin_b4); \\ iniciaria em nível alto, e depois ficaria sujeito apenas aos seus comandos e estouros do timer.

While (1)

{

;;

}

}

Ai ele já iniciaria ligado e depois desligaria quando você bem entendesse.

Tô certo?

Ou viajei?

Ou não entendi o que você quis dizer?? .... rsrsrs

Link para o comentário
Compartilhar em outros sites

Em Basic eu não sei, mas em C seria simplesmente no início do programa configurar pra ligar o Pino depois do MAIN, tipo assim:

Void Main

{

Output_high(pin_b4); \\ iniciaria em nível alto, e depois ficaria sujeito apenas aos seus comandos e estouros do timer.

While (1)

{

;;

}

}

Ai ele já iniciaria ligado e depois desligaria quando você bem entendesse.

Tô certo?

Ou viajei?

Ou não entendi o que você quis dizer?? .... rsrsrs

você ta certo sim... o que me pareceu estar em BASIC e o codigo do amigo rafael...

eu programo em C, no mickroC...

então, para iniciar a saida ligada, ele deve estar no main() ou dentro da interrupção...eu devo desligar ela de que forma, manualmente ou testando com if a variavel que sera incrementada na interrupção

tipo

void main() {

GPIO.F0 = 1;

delay_ms(5000);

GPIO.F0 = 0;

...

}

ou

void interrupt () {

if(variavel == x ) {

GPIO.F0 = 1;

delay_ms(5000);

GPIO.F0 = 0;

...

}

}

qual você indicaria??? como seria melhor....

Link para o comentário
Compartilhar em outros sites

Eu programo em CCS

O certo é esse abaixo

void main() {

GPIO.F0 = 1;

delay_ms(5000);

GPIO.F0 = 0;

...

}

porque antes de qualquer coisa ele vai ligar, deixar 5s ligado e depois desligar ai sim começará a contagem do timer e todos os incrementos de variável até chegar no número de horas que você quer pra ligar novamente, resetar as variáveis e recomeça o Loop infinito.

Link para o comentário
Compartilhar em outros sites

Eu achei que duvida era pra calcular o timer, agora se é como usar o timer no mickroC eu não sei.

Pra mim o timer0 é ativo no cabeçalho setando as chaves, depois basta pegar TMR0 diretamente, acredito que no mickroC seja semelhante não precisando de uma rotina de interrupção.

TMR0 é nativo no pic é um contador de 8 bits.

Link para o comentário
Compartilhar em outros sites

Eu programo em CCS

O certo é esse abaixo

void main() {

GPIO.F0 = 1;

delay_ms(5000);

GPIO.F0 = 0;

...

}

porque antes de qualquer coisa ele vai ligar, deixar 5s ligado e depois desligar ai sim começará a contagem do timer e todos os incrementos de variável até chegar no número de horas que você quer pra ligar novamente, resetar as variáveis e recomeça o Loop infinito.

isso quer dizer de esse bloco tanto aparece no inicio void main como dentro da interrupção do timer1 ?

Link para o comentário
Compartilhar em outros sites

CIS, você pode fazer dessa maneira se quiser, o que vai na rotina da interrupção e o contador e habilitar para outro estouro.

void interrupt () {

contador++;

INTCON.TOIF = 0;

TMR0 = 55;

}

O restante vai no seu programa principal, mas eu não faco dessa forma, fazer uma interrupção a cada estouro seria pra outra aplicação, você quer apenas um contador.

Basta você habilitar o timer0 selecionar um prescaler de 256 e uma contagem para TMR0 inicial de 55.

No seu programa principal basta por isso,que no seu caso deve ser "main" e vai dentro de while(1):

OPTION_REG = 0x07;

TMR0 = 55; // ou TMR0 = 0x37;

//While

IF (TMR0 == 250){

contador ++;

TMR0 = 55;

}

IF (contador == 144000){ // 2 horas

GPIO.F0 = 1;

delay_ms(5000);

GPIO.F0 = 0;

contador = 0;

}

}

No caso acima, o TMR0 nunca estoura, eu uso assim. Meu exemplo no outro post não estava 100%, fiz um ajustes hoje...

Caso o seu programa seja muito longo, seria melhor fazer por interrupção ja que no meu exemplo o contador incrementa por instrução.

Link para o comentário
Compartilhar em outros sites

Amigo, para o que você quer, basta iniciar dentro do Void pra "já iniciar ligado" como você disse, ai espera 5 segundos e desliga.

Essa parte é só no void. Não na interrupção. Ai na interrupção, você segue os conselhos do colega acima.

você tá com duas dúvidas diferentes, eu falei sobre uma, o colega sobre a outra.

PS. O que tá no inicio do VOID (fora da interrupção e do While), só executa uma vez, depois fica no laço infinito do While e nas incrementações do contador!

Link para o comentário
Compartilhar em outros sites

beleza, valeu Rafael , to meio apertado no trabalho, mas vou seguir suas instruções assim que tiver um tempinho de folga... ontem tava testando conforme as dicas do chacalgbi e ta dando certo...

muito obrigado a todos pela paciencia...

valeu!!!

então e isso mesmo chacalgbi, ele vai ligar, aguardar e desligar, e so depois começa a contagem e os incrementos da interrupção... não e isso ??

Link para o comentário
Compartilhar em outros sites

beleza, valeu Rafael , to meio apertado no trabalho, mas vou seguir suas instruções assim que tiver um tempinho de folga... ontem tava testando conforme as dicas do chacalgbi e ta dando certo...

muito obrigado a todos pela paciencia...

valeu!!!

então e isso mesmo chacalgbi, ele vai ligar, aguardar e desligar, e so depois começa a contagem e os incrementos da interrupção... não e isso ??

É isso mesmo, pode fazer que dá certo.

Link para o comentário
Compartilhar em outros sites

beleza, deu certo sim....

vou ficar usando a interrupção, porque pretendo agora usar o comparador do pic para controle de temperatura...

atualmente uso uma parte do hardware montado com um LM741, para controlar uma resistencia e o pic esta so por conta de temporizar o sistema...

agora quero fazer com que o pic faça esse trabalho de controlar a resistencia... so não sei muito bem por onde começar... mas vamo estudar né...kkkk

valeu pessoal, valeu mesmo...

não sei direitinho como fazer a configuração do comparador... uma ajudinha ???

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!