Ir ao conteúdo

Posts recomendados

Postado

Olá amigos , estou com duvida em um desenvolvimento de um projeto eletrônico e gostaria de saber se podem me ajudar.
Estou usando um pic12f675 para fazer um temporizador com inicio de 10 minutos e pula de 5 em 5 minutos ate dar 60 minutos.
O potenciômetro que estou usando e um de 10K ligado no pino 6 AN1 e o acionamento do relé no pino 2 e o botão de start pino 07 com pull up interno quando clica ele aterra o pino

Se puderem me dar uma mão agradeço, pois estou aproveitando um hardware antigo que tenho

Estou programando pelo mikroc

 Desde ja agradeço a colaboração de todos.

  • Curtir 1
  • Membro VIP
Postado

Fácil

  • -Programe um timer para 1 segundo de interrupt e nele incremente ... 1 segundo
void interrupt _1seg()
{
...
segundo++;
}

 

  • -quando passar pelo minuto programado, acione o evento - meu chute é que ele é: relé acionado pelo tempo marcado no pot
if (!(segundo%(10*60))) {rele=1;delay(adc_read(0));rele=0;}
//ou assim if (segundo==600) ... //não sei porque compliquei.. mas vou deixar :o)
if (!(segundo%(15*60))) {rele=1;delay(adc_read(0));rele=0;}
if (!(segundo%(20*60))) {rele=1;delay(adc_read(0));rele=0;}
//...
if (!(segundo%(60*60))) {rele=1;segundo=0;delay(ac_read(0));rele=0;}

Se achar que ctrl-c ctrl-v vai resolver sua vida, receba um cóqui virtual... se bem que já tá quase tudo mastigado.

 

ok boa sorte

8 horas atrás, Roger de Oliveira disse:

so estou procurando quem pode me ajudar

 

  • Curtir 1
Postado
Em 09/01/2022 às 18:47, .if disse:

Fácil

  • -Programe um timer para 1 segundo de interrupt e nele incremente ... 1 segundo
void interrupt _1seg()
{
...
segundo++;
}

 

  • -quando passar pelo minuto programado, acione o evento - meu chute é que ele é: relé acionado pelo tempo marcado no pot
if (!(segundo%(10*60))) {rele=1;delay(adc_read(0));rele=0;}
//ou assim if (segundo==600) ... //não sei porque compliquei.. mas vou deixar :o)
if (!(segundo%(15*60))) {rele=1;delay(adc_read(0));rele=0;}
if (!(segundo%(20*60))) {rele=1;delay(adc_read(0));rele=0;}
//...
if (!(segundo%(60*60))) {rele=1;segundo=0;delay(ac_read(0));rele=0;}

Se achar que ctrl-c ctrl-v vai resolver sua vida, receba um cóqui virtual... se bem que já tá quase tudo mastigado.

Calma amigo , so estou procurando quem pode me ajudar não sou programador e sim desenho pci
Obrigado pela ajuda , vou procurar me aprofundar mais. ;)

  • Curtir 1
  • Confuso 1
Postado
14 horas atrás, Roger de Oliveira disse:

Calma amigo , so estou procurando quem pode me ajudar não sou programador e sim desenho pci
Obrigado pela ajuda , vou procurar me aprofundar mais. ;)

 

KKKKKKKKKKK ué, seu post diz que você está programando pelo MikroC ...... mas se você agora diz que não é programador, então esquece isso....

 

Uma coisa é pedir uma mão, e ela foi dada, mas pelo jeito você precisa é do corpo inteira da pessoa kkkkkkkkkk 😁

 

Paulo

  • Curtir 1
  • Membro VIP
Postado

Perdão amigo @Roger de Oliveira ... aquela foi minha tradicional maneira tosca de ajudar ok?🤪 Admito que foi pouca mas inofensiva. Se achar que deve, mostre o que já fez que a gente tenta fazer você pegar no tranco. 😁. Este mc é muito fácil de programar em c e o mikroc te dá muita coisa mastigada. E por gentileza não queime a etapa do pisca led ok? piscou um led já pode dominar o mundo!

Mas se você estiver a procura de alguém que faça pra você, nada contra. Mas é bom ser sincero.

abç 🙃

  • Curtir 1
Postado

Este e o programa que tenho assistindo umas vídeo aula consegui chegar a isso porém , a dificuldade e implementar o restante 
 

#define TIMER_INTERVALO_MAX 10000 //10segundos (minimo intervalo 1 ms; maximo é 2^32 milisegundos)

volatile unsigned long tick_1ms_count = 0;

volatile unsigned int result = 0;

 

void blink()

{

  GP0_bit = ~GP0_bit;

}

void INTERRUPCAO_HIGH() iv 0x0004 ics ICS_AUTO {

  if(TMR1IF_bit == 1)  //para a interrupção por mudança de estado

   {

     TMR1IF_bit = 0;

     tick_1ms_count++;

    

     //A variável result define o intervalo em que a função blink() será chamada no código;

     //como a variável result pode assumir valor de 0 a 1000, a temporização máxima permanece

     //em 0 a 10 segundos

     if(tick_1ms_count > result)

     {

         //blink();

         tick_1ms_count = 0;

     }

      //recarrega para mais 1 ms;

      TMR1L = 0X83;

      TMR1H = 0XFF;

   }

}

void main()

{

  ANSEL = 0X00;        //Válido somente para PIC12F675

  CMCON = 0X07;         //Comparador OFF

 

  TRISIO0_bit  = 0;

  GP0_bit = 0;

  

//Fosc/4 -> 4MHz/4 -> 1MHz -> Periodo = 1/F -> 1us

 

//TIMER1 - 1MS

/*

   Tempo = CicloMaquina_Periodo * Prescaler *  (Modo - Carga Inicial)

   1000 =   1us * 8 * (65536  - CargaInicial)

   CargaInicial = 65536 - 125   -> 65411  -> hex ->

   TMR1L = 0X83;

   TMR1H = 0XFF;

*/

   T1CON = 0B00110001;

   TMR1L = 0X83;

   TMR1H = 0XFF;

 

 

   //para a interrupção do TIMER1

   GIE_bit = 1;

   PEIE_bit = 1;

   TMR1IE_bit = 1;

   TMR1IF_bit = 1;

  //------------------------------------------

  

  ADC_Init();    

  

  for(;;)

  {

      result = ADC_Read(0);  //função adc do mikroc

      result = result * (TIMER_INTERVALO_MAX/1023.0); //converte para a escala de 0 a 10segundos;

  }

}

  • Curtir 1
  • Membro VIP
Postado

Vou fazer um comentário sobre

15 horas atrás, Roger de Oliveira disse:

 result = ADC_Read(0);  //função adc do mikroc //se a interrupt ocorrer aqui, vai dar um result totalmente diferente...

 result = result * (TIMER_INTERVALO_MAX/1023.0); //converte para a escala de 0 a 10segundos; // deste daqui

portanto coloque variável diferente pro intervalo da piscadela

result = ADC_Read(0);  //função adc do mikroc

tempo = result * (TIMER_INTERVALO_MAX/1023.0); //converte para a escala de 0 a 10segundos;

 

e use tempo pra controlar o .. tempo ou 'dê tempo ao tempo' 🙃

if(tick_1ms_count > tempo)

 

de fato basta fazer

result = ADC_Read(0) * (TIMER_INTERVALO_MAX/1023.0); //converte para a escala de 0 a 10segundos;

 

A questão principal você vai ter que pensar um pouco pois só você conhece as entradas do projeto. Com esta chuvarada minha bola de cristal embaçou😶

 

 

  • Curtir 1
  • Haha 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!