Ir ao conteúdo
  • Cadastre-se

PIC Como usar um temporizador usando um potenciomentro?


Posts recomendados

😀😀  Estou necessitando de uma exemplo, por favor, caso alguém tenha  ficarei grato.

       Irei usar o Mikroc com o pic16f883. Queria fazer um temporizador com potenciometro, ou seja, quero deixar um pwm ligado de acordo com a variação do mesmo. Ou seja, caso eu pare com o conversor em 2 segundos( relação a tempo) eu tenha um pwm até dois segundos e após isso ele se desliga.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Amigo,melhor escolher 1 tópico só pra focar né? Não queime e veja as etapas que sugiro:

Com calma faça a sequência uma a uma:

  • 0: um led piscar
  • 1: a leitura de uma entrada digital e interfira nas piscadas
  • 2: uma leitura analógica que interfira nas piscadas
  • 3: uma saída pwm com o hw do mc
  • 4: uma leitura analógica que interfira na saída pwm

Pronto... etapa 1 concluída. Agora (ou num futuro):

  • 5: incorpore os conhecimentos acima no seu sistema

Dicas:

  • estude com relativa profundidade apenas o hw (circuito interno) do periférico que te interessa: no caso a entrada analógica , saída pwm, timers (temporizadores)  bem como seus setups.
  • publique a parte do programa em que você tem dúvida e que acha que devia fazer uma coisa e faz outra.
  • pegue exemplos prontos na net ou no help do seu compilador. Copie/cole/adapte/melhore
  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

@.if   Olá!  Eu simplesmente fiz uma pergunta, perdoa-me, como não sou programador eu tenho muitas dificuldades para a construção de algumas coisas. A conversão eu sei,  eu apenas pedi um exemplo, mas você deu a sua resposta e em outro topico meu também, não ajudando em nenhum dos dois. 

         Espero que outra pessoa possa me ajudar, além de você.

Link para o comentário
Compartilhar em outros sites

@Afonso tales ,

 

Perdoe-me , mas estamos aqui para ensinar as pessoas que nos procuram, para que elas mesmas possam resolver os seus problemas.

 

Acreditamos que este sempre foi o melhor caminho, afinal lembre-se do velho ditado : é melhor ensinar a pescar do que ficar dando o peixe ....

 

No site da Mikroelektronika você encontra um Fórum com muita exemplos de uso, faça a sua pesquisa nele.

 

O que você quer é alguém que faça o seu trabalho, pois você nem se deu ao trabalho de postar o esquema, detalhar sobre o PWM , e muito menos colocar o seu programa feito até este momento, para que as pessoas possam pelo

menos ler e imaginar o seu projeto.

 

Acho difícil aparecer alguém disposto a isso, mas quem sabe né .....

 

Paulo

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@aphawk  Obrigado pelo retorno, na realidade eu talvez tenha me expressado mal. Eu

 tenho o programa quase pronto e criei dois topicos devido eu ter que resolver esses dois pontos. Eu postei tudo no outro topico, mas vou postar aqui para que possivelmente você possa me ajudar. 

     No case 1, o motor gira direto até um no pressionamento, mas eu não estou conseguindo ter o controle quando entra a função quatro tempo, ou seja, o motor fica sem o controle. 

   Quando eu pedi um exemplo de temporizador, era para colocar no case dois.

Obs: antes de entrar no case 1, o botão do rb1 recebe ++ e ele transita em tres bits no portc, após para em um dos, terá que clicar no rb2 que seria um enter.

    

 

 

#define t2 portb.rb0      // mapea t2, rb0

#define t1 portb.rb2      // mapea t1, rb2

#define l4 portb.rb4      // mapea L4, rb4

#define l5 portb.rb5      // mapea l5, rb5

 

 

 

#define b1 portb.rb1    // mapea b1 como entrada digital

#define l1 portc.rc4    // mapea L1 como  saida

#define l2 portc.rc5    // mapea L2 como  saida

#define l3 portc.rc6    // mapea L3 como  saida

 

         //             variaveis globais

 

      int pwm2 = 0;

      int pwm1 = 0;               // variavel para o pwm

      unsigned int motor_speed;   // varial controle de velocidade

      char x1=0,x2=0,controle=0;  //variaveis aux botao

      int cont=0;                 // varial aux botao

      char x3 = 0;                // varial aux botao

      char x4 = 0;

      char x5 = 1;

      char x6 = 0;

       //             funcão principal

 

      void main()

   {

 

   //OPTION_REG = 0x80;

   //GIE_bit = 0x01;      //Habilita a interrupção global

   //PEIE_bit = 0x00;     //Desabilita a interrupção por periféricos

   // INTE_bit = 0x01;     //Habilita a interrupção externa

   //INTEDG_bit = 0x00;   //Configura a interrupção por borda de descida

 

 

  trisa0_bit =1;        // define ra0 como entrada

  trisb1_bit = 1;       // define rb1 como entrada

  trisb2_bit = 1;       // define rb2 como entrada

  trisc4_bit = 0;       // define rc4 como saida

  trisb4_bit = 0;       // define rb4 como saida

  trisb5_bit = 0;       // define rb5 como saida

  trisc5_bit = 0;        // define rc5 como saida

  trisc6_bit = 0;       // define rc6 como saida

  trisc3_bit = 0;       // define rc3 como saida

  rc3_bit = 1;          // incia-se rc3 em nivel alto

  rb4_bit = 0;           // incia-se rb4.rb5, em nivel baixo

  rb5_bit = 0;

  rb1_bit = 1;           // incia-se rb1 em nivel alto

  rb2_bit = 1;           // incia-se rb2 em nivel alto

  rc7_bit= 0;

  trisc7_bit= 0;

  trisb6_bit = 0;

  rb6_bit = 0;

 

            //   configuração adc, pwm, e entrada analogica ra0

 

 

   ADCON0 = 1;       // habilita o conversor

   ADCON1 = 0;       // declara ra0 como entrada analocica

   ADC_Init();

 

 

         // incia-se

 

   PWM2_Init(1000);  // pwm em 1kh

   PWM2_Start();     // starta o pwm

   ULPWUIE_bit = 0x00;

   ANSEL =  1;       // registrador entradas analogicas

   ANSELH = 0X00;    // coloca como entrada e saidas p portb

 

   C1ON_bit = 0;      // desabilita os comparadores

   C2ON_bit = 0;

 

 

 

              // loop infinito

 

  while(1)

  {

    cont++;delay_ms(1);  // incremento

    if((b1==0)&&(x1==0)){controle++;x1=1;x4;cont=0;}

    if((b1==1)&&(x1==1)&&(cont>100))x1=0;

 

    if(controle==0)

    {l1=0;l2=0;l3=0;}

 

    if(controle==1) {

 

       l1=1;

 

 

       }

       if((t1==0))       // botao rb2  pressionado? execute:

 

       {

 

 

             x4 = 1;       // varial aux do botao rb0

             rc7_bit =1 ;

             l1 = 1;

             delay_ms(100);

             l1 = 0;

             delay_ms(100);

            }

 

            if(( t2==0)&&( x4==1))

           

            {

           

             // eu queria colocar o controle do motor( quatro tempo) aqui.

             // ao entrar no case 1,  eu seleciono com o botão t1( tecla confirma)

             // e após isso, eu  pressiono t2 e meu motor fica direto até ter

             // um novo toque no mesmo.

           

           

           

           

            }

 

              // botao rb0 pressionar? execute:

                // loop

 

          }

 

 

       if(controle==2){l1=0;l2=1;l3=0;}

       if(controle==3){l1=0;l2=0;l3=1;}

       if(controle==4)controle=0;

      

      

      

      

      

 

 

        //    Aqui esta o controle do motor: ao  pressionar o motor, ele liga

        //    e ao solta-lo, ele desliga e tenho o controle do duty.

       

       

       

       

     if((t2==0)&&(x2==0))

       {

         l4=1;l5=1; x2=1; x3 = 1;

 

         }

 

      if((t2==1)&&(x2==1))

 

        {

           l4=0;l5=0;x2=0; x3 = 0;

 

        }

 

        if((pwm2 ==0)&&(x3==1))

        {

 

         motor_speed = ADC_Read(0);

        PWM2_Set_Duty(motor_speed >> 2);

 

          delay_ms(50) ;

 

 

        }

 

        if((pwm2 ==0)&&(x3==0))

         {

 

             motor_speed = 0x00;

             PWM2_Set_Duty(motor_speed = 0);

 

 

 

        }

 

 

 

 

}

}

 

 

@aphawk   Eu estou tentando fazer um exemplo somente para essa função de quatro tempos e em passos eu ir juntando os dois programas. Esse eu consegui desliga-lo, porém, ao pressionar o botão novamente eu não consigo ativa-lo novamente.

 

o que acha?

 

 

  # define botao_start portb.rb0


     unsigned int x;
     unsigned int motor_speed;
     char pwm2;
     char x3 = 0;
     char x4 = 1;
                    void motor_para(){ //rotina deliga motor

                      x++;
                      if(x>=1)
                      delay_ms(1);
                      rb5_bit = 0;
                      x = 0;

                 }

                     void motor_gira(){ //rotina liga motor
                     x++;
                     if(x>=0)
                     delay_ms(1);
                      while(botao_start==0);
                      rb5_bit = 1;
                       x3=1;

                 }
                     void controle_motor()
                     {

                        if( x3= 1)
                          delay_ms(1);
                          while(botao_start==0);
                          motor_speed = ADC_Read(0);
                          PWM2_Set_Duty(motor_speed >> 2);

                       }
                       


                    // void controle_off()


  
     
   void main() {

   ADCON0 = 1;       // habilita o conversor
   ADCON1 = 0;       // declara ra0 como entrada analocica
   ADC_Init();
   
   PWM2_Init(1000);  // pwm em 1kh
   PWM2_Start();     // starta o pwm
   ULPWUIE_bit = 0x00;
   ANSEL =  1;       // registrador entradas analogicas
   ANSELH = 0X00;    // coloca como entrada e saidas p portb

   C1ON_bit = 0;      // desabilita os comparadores
   C2ON_bit = 0;

   
   trisb0_bit = 1;
   trisb5_bit = 0;
   rb0_bit    = 1;
   rb5_bit    = 0;

   while(1){
   

              if (botao_start==0 && x==1){ // se o botao start acionado,motor estiver lig
                  delay_ms(5);
                  while(botao_start==0);
                  motor_para();
                            //rotina - motor desliga

                           }
                           
                if (botao_start==0 && x==0){ //se o botao start acionado,motor estiver deslig
                 delay_ms(5);
                  while(botao_start==0);
                  motor_gira();
                    // rotina - motor liga
                  
                           }

                  if( pwm2==0 && x3==1)
                  {
                     controle_motor();

                    }
           }
           }

Link para o comentário
Compartilhar em outros sites

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