Ir ao conteúdo
  • Cadastre-se

Arduino Como fazer digitalRead direto no registrador


Posts recomendados

Pessoal, to fazendo a leitura de uma roda fonica com arduino e, por conta da rpm elevada do bixão (por volta de 7 mil rpms) preciso fazer os digitalWrite e ler o sensor da forma mais rápida o possível

 

Ja otimizei o código substituindo os digitalWrite por PORTB=B11000100(exemplo)

também fiz uma máscara de váriavel para aumentar a frequencia da leitura do ADC, trocando o prescaler de 128 por 16 conforme a tabelaadc_prescaler.png.e980ab63796a70b2978122b3a9e3ab52.png

mas, queria saber como fazer um digitalRead usando comandos do registrador.

 

O que eu consegui encontrar foi usando o comando DDRX onde o x é a letra das portas, no caso do arduino:

DDRD para portas de 0 a 7

DDRB para portas de 8 a 13

PINX para a porta em questão

 

 Mas, novamente, volto a perguntar. Como fazer digitalRead direto nos registradores para ganhar "tempo"?

Link para o comentário
Compartilhar em outros sites

@lucianolcoa ,

 

Tá meio confuso para mim ....

 

Você fala em ADC, mas pede uma leitura digital ..... afinal, aonde entra o conversor A/D nisso tudo ?

Outra coisa, se você multiplicou o sample por 8, a sua resolução vai cair de 10 bits para 8 bits ou até menos, veja se isso não é problema para você.

 

E o que significa fazer um digitalRead nos registradores ?????? Até onde eu saiba, posso fazer um Read direto nos pinos de I/O, mas juro que não entendo isso que você quer fazer ....

 

Sei que existem bibliotecas otimizadas para FAST I/O com o Arduíno, procure por elas....

 

Paulo 

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

@aphawk  É mais de "verões passados" Que muitas vezes eu chegava aqui com uma duvida e a galera achava que eu não havia pesquisado antes.

 

Expliquei que consegui declarar i digitalWrite direto no registrador, o que andei lendo por ahe que é 42x mais rápido que so colocar digitalWrite

e também mudei o prescaler para fazer a leitura do adc mais rápido.

 

Mas queria saber como declara digitalRead direto no registrador. Essa é a duvida em questão.

 

digitalRead no registrador seria "rebaixar" a linguagem do arduino.

 

Em vez de digitar 

int b= digitalRead(8);

eu colocar um código em c que fasse isso mais rápido.

Vi num blog que o comando para isso seria:

//exemplo para o pino 8

DDRB=B11000001;
PORTB=B11000001;
bool x=(PINB &(1<<PINB0)

 

Link para o comentário
Compartilhar em outros sites

@lucianolcoa ,

 

Sim, tratamento de I/O e interrupção nativa da linguagem do Arduíno é terrivelmente deficiente.

 

Essas instruções DDRB e PORTB definem os pinos que te interessam como entrada, mas também definem outros pinos como saída !

 

Tem de saber quais pinos estão sendo usados como entrada e quais estão sendo usados como saída, aí você "monta" esses comandos da forma correta, e pode usar esse tipo de comando no final, lendo o PINB.

 

Para que quiser saber mais :

https://www.arduino.cc/en/Reference/PortManipulation

 

Paulo

 

 

  • Curtir 1
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...