Autor Tópico: Microcontroladores PIC  (Lida 57619 vezes)

Description:

0 Membros e 11 Visitantes estão vendo este tópico.

Offline ShopCNC

  • ShopCNC
  • CNCMASTER
  • ******
  • Posts: 1110
  • Sexo: Masculino
  • ShopCNC
    • ShopCNC
  • Cidade - UF: Varginha - MG
  • Nome:: ShopCNC
  • Profissão: E-Commerce
Re: Microcontroladores PIC
« Resposta #165 Online: 17 de Dezembro de 2007, 21:17 »
Ismael,

Voce precisa usar a entrada de Clock do contador interno do PIC, se não voce não vai ter velocidade suficiente para ler o encoder ...

Offline ismael

  • Hobby
  • ****
  • Posts: 623
Re: Microcontroladores PIC
« Resposta #166 Online: 17 de Dezembro de 2007, 21:19 »
Ele conta só crescente vc pode girar horario ou antiorario que ele só aumenta.

Abraço ismael.

Offline ismael

  • Hobby
  • ****
  • Posts: 623
Re: Microcontroladores PIC
« Resposta #167 Online: 17 de Dezembro de 2007, 21:22 »
Vcs tem um exemplo em C para me enviar e analisar?

Obrigado Ismael

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Microcontroladores PIC
« Resposta #168 Online: 17 de Dezembro de 2007, 21:23 »
Ele conta só crescente vc pode girar horario ou antiorario que ele só aumenta.

Como eu suspeitava ... o problema é o que mencionei:

... para determinar a contagem, crescente ou decrescente, vc deve amostrar o estado de um canal no instante da transição, ascendente ou descendente do outro canal ...

Offline ismael

  • Hobby
  • ****
  • Posts: 623
Re: Microcontroladores PIC
« Resposta #169 Online: 17 de Dezembro de 2007, 21:30 »
Vc tem um exemplo em C para me enviar?

Desde já agradeço.

Offline ismael

  • Hobby
  • ****
  • Posts: 623
Re: Microcontroladores PIC
« Resposta #170 Online: 17 de Dezembro de 2007, 21:34 »
Segue anexo como esta feito o programa.

Offline ShopCNC

  • ShopCNC
  • CNCMASTER
  • ******
  • Posts: 1110
  • Sexo: Masculino
  • ShopCNC
    • ShopCNC
  • Cidade - UF: Varginha - MG
  • Nome:: ShopCNC
  • Profissão: E-Commerce
Re: Microcontroladores PIC
« Resposta #171 Online: 18 de Dezembro de 2007, 01:13 »
Ismael,

Não analizei seu programa inteiro mas neste trecho eu achei um erro, pode ter mais ... mas da uma olhada nisto :

Errado em Bold e correto em vermelho.
Nota: Supondo que fase 1 esta em portA bit 1 e fase dois em portA bit 0 ...



void teste( )
{
   if((test_bit(porta,1)==0)&&(test_bit(porta,0)==0))//00 = 0
    {
         leitura = 0;
         display();
         do
         {
            display();
            if((test_bit(porta,1)==1)&&(test_bit(porta,0)==0))//2            {
               crescente( );
               leitura = 1;
            }
            if((test_bit(porta,1)==0)&&(test_bit(porta,0)==1)) //1
            if((test_bit(porta,1)==1)&&(test_bit(porta,0)==1)) //1    
         {
               decrescente( );
               leitura = 1;
            }

Offline ShopCNC

  • ShopCNC
  • CNCMASTER
  • ******
  • Posts: 1110
  • Sexo: Masculino
  • ShopCNC
    • ShopCNC
  • Cidade - UF: Varginha - MG
  • Nome:: ShopCNC
  • Profissão: E-Commerce
Re: Microcontroladores PIC
« Resposta #172 Online: 18 de Dezembro de 2007, 01:32 »
Ismael,

Eu resumiria esta sub-rotina (teste) em apenas isto abaixo, não entendi porque voce repetiu o processo tantas vezes  ???


void teste( )
{
   if((test_bit(porta,1)==0){
    leitura = 0;
    display();
     do{
        display();
        if((test_bit(porta,1)==1)&&(test_bit(porta,0)==0)){
         crescente( );
       leitura = 1;            }
           }         
      if((test_bit(porta,1)==1)&&(test_bit(porta,0)==1)){
       decrescente( );
       leitura = 1;
      }
     }while ( leitura == 0);
     leitura = 0;
   }
}
« Última modificação: 18 de Dezembro de 2007, 01:35 por Mac_RC »

Offline ShopCNC

  • ShopCNC
  • CNCMASTER
  • ******
  • Posts: 1110
  • Sexo: Masculino
  • ShopCNC
    • ShopCNC
  • Cidade - UF: Varginha - MG
  • Nome:: ShopCNC
  • Profissão: E-Commerce
Re: Microcontroladores PIC
« Resposta #173 Online: 18 de Dezembro de 2007, 06:44 »
Ismael,

Tem outro problema que verifiquei em sua rotina, você só vai conseguir ler pulsos maiores que 8 ms (Fmax =125hz), por causa de sua rotina de display ...
Ela gasta no mínimo 8ms para ser executada e qualquer pulso menor que 8ms não será captado pela rotina de teste ... sem contar os tropeços com as fases do encoder ...

Para resolver este problema eu faria a rotina de "teste" por interrupção ...

É só utilizar a fase 1 ligada ao pino de interrupt externo e gerar uma interrupção sempre que houver um flanco positivo neste pino ...

A rotina de interrupção ficaria bem "simprinha" e rápida, ex:


void teste(void) interrupt{

if(test_bit(porta,1)==0) return;                   // fase 1 - só para garantir que não foi gerado por ruido
if(test_bit(porta,0)==0) crescente();         // fase 2
else decrescente();
}


Desta forma você vai conseguir ler pulsos na casa dos microsegundos e sem tropeços... um ganho bem significativo, não acha ? Sem contar que fica bem mais profissional !
Para usar é só adequar ao seu compilador e liberar os devidos bits da interrupção ... amistend ?


Retira também as chamadas para display de dentro das sub-rotinas crescente / decrescente e tambem da para melhorar a velocidade delas encadeando os "IFs",  ex:

void crescente( ){

  unidade++;     
  if(unidade==10){
    unidade=0;
    dezena++;
    if(dezena==10){
      dezena=0;
      centena++;
      if(centena==10){
        centena=0;
        milhar++;
        if(milhar==10) milhar=0;                     
      }
    }
  }
}


Desta forma sua rotina não vai perder tempo testando dezena, centena e milhar, sempre que for executada ... só vai fazer o necessario e sair ...

Repita com a sub-rotina decrescente !


abraços
Reinaldo Cavalheri

Offline Tverm

  • Hobby
  • ****
  • Posts: 452
  • Sexo: Masculino
  • Portugal
Re: Microcontroladores PIC
« Resposta #174 Online: 18 de Dezembro de 2007, 07:28 »
Se não foce interrupção o que seria dos programadores de Micro.
hehehe:):):)

Diz o micro para o programa:
-Ups espera ai um bocado que eu tenho mais que fazer...

Bom dia a todos eu vou Dormir pois trabalhei toda a noite e ja não sei mais o que digo. Hehehehe :P ;D ;) :)

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Microcontroladores PIC
« Resposta #175 Online: 18 de Dezembro de 2007, 08:07 »
O PDF anexo é boa referência e o algoritmo usa um método alternativo, vale uma espiada:

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Microcontroladores PIC
« Resposta #176 Online: 18 de Dezembro de 2007, 08:10 »
Se não foce interrupção o que seria dos programadores de Micro.hehehe:):):)

Poderiam dormir mais e melhor ...  ;D

Poucas coisas são mais problemáticas que interrupções mal administradas ...

Offline ShopCNC

  • ShopCNC
  • CNCMASTER
  • ******
  • Posts: 1110
  • Sexo: Masculino
  • ShopCNC
    • ShopCNC
  • Cidade - UF: Varginha - MG
  • Nome:: ShopCNC
  • Profissão: E-Commerce
Re: Microcontroladores PIC
« Resposta #177 Online: 18 de Dezembro de 2007, 08:21 »
O PDF anexo é boa referência e o algoritmo usa um método alternativo, vale uma espiada:

Assim fica até mais rapida, em assembler não tem as "firulas" do compilador "C" ...

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Microcontroladores PIC
« Resposta #178 Online: 18 de Dezembro de 2007, 08:24 »
Para resolver este problema eu faria a rotina de "teste" por interrupção ...

Perfeitamente.

O serviço da interrupção deve tratar apenas do essencial e indispensável*, ou seja determinar o sentido de rotação e incrementar / decrementar o contador, a rotina principal que cuide da atualização do display ...

*isto é válido para qualquer circunstância !

Este é talvez o equívoco mais grave e frequente no que se refere a interrupções ...

O outro, igualmente grave e frequente é fazer um prog sem conhecer as características do hardware ... algo fora do alcance da minha limitadíssima compreensão ...


PS: nada pessoal, viu Ismael ? Tô só aproveitando o gancho pra comentar pontos que acho muito relevantes ...

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Microcontroladores PIC
« Resposta #179 Online: 18 de Dezembro de 2007, 08:26 »
Assim fica até mais rapida, em assembler não tem as "firulas" do compilador "C" ...

Pois é, mais rápida, mais simples, mais tudo ... esta é uma aplicação onde o emprego do assembly, pelo menos na rotina de interrupção, se justifica amplamente ...

 

/** * */