Bom dia pessoal!

Estou atualmente trabalhando em um projeto que envolve a leitura de um sensor e requer uma contagem precisa de interrupções. O código que estou utilizando usa uma interrupção de hardware para contar eventos específicos. No entanto, percebi que a leitura do sensor está causando atrasos e impactando a precisão da contagem de interrupções.

No código apresentado, uma interrupção é acionada a partir de um timer e a função de interrupção (onTimer) é chamada. A contagem de interrupções ocorre nessa função, mas a leitura do sensor também está incorporada, o que pode estar resultando em atrasos.

Gostaria de saber se existe uma maneira mais eficaz e precisa de realizar essa contagem de interrupções, levando em consideração a necessidade de uma leitura precisa do sensor. Como posso otimizar o código para garantir uma contagem de interrupções precisa, mesmo quando há interações frequentes com a leitura do sensor?

Exibições: 165

Anexos

Responder esta

Respostas a este tópico

Olá.

  Que sensor é esse ?

  O arquivo veio meio truncado, ou eu não entendi, tem um setup() dentro de outro.

  O convencional é somente incrementar na interrupção. 

  Depois que vc atinge seu objetivo transfere esse valor pra outra variável e zera o contador. Esse negócio de subitrair ficou meio esquisito..

  

Boa tarde.

Este seu código que você postou, compila?

Rv mineirin

Bom dia RV, Eduardo
Na correria para simplificar e focar neste problema o código ficou esquisito. Eu refiz ele, está em anexo.

Testando o Código:

Para testar o mau funcionamento da interrupção ao ligar a leitura do sensor ACS712 20A (Leitura de carga AC), siga estas etapas:

  1. Carregue o código em seu microcontrolador (ESP32).

  2. Abra a comunicação serial com o microcontrolador (baud rate de 115200).

  3. O código inicia com a leitura da corrente desabilitada (ReadcorrentEnabled = false). Portanto, você não verá leituras de corrente até habilitá-las.

  4. Envie o comando '1' via comunicação serial. Isso habilitará a leitura da corrente e as interrupções começarão a ser contadas.

  5. Observe o valor da corrente RMS na comunicação serial. Ele deve refletir a corrente medida pelo sensor ACS712 20A após a média.

  6. Observe o LED conectado ao pino 2. Ele piscará a cada interrupção, o que pode ser útil para verificar a precisão das interrupções.

  7. Para desativar a leitura da corrente e interrupções, envie o comando '0' via comunicação serial.

Anexo do código

Anexos

Boa tarde.

acho que entendi o seu codigo.

Mas voce está baseando no piscar do LED para verificar a velocidade do interrupt?

veja, se a rotina de ler o analógico estiver desativada, o LED vai piscar em uma velocidade muito alta mesmo.

Mas se a rotina estiver ativada, o LED vai piscar somente 1 vez a cada segundo, porque existe um delay de 1 ms dentro do "for", mas o "for" roda 1000 vezes. então voce terá um delay de 1000 ms, e só depois deste tempo é que o LED é chaveado.

Modifiquei seu codigo colocando o piscar do LED dentro da rotina de interrupt, e assim ele vai piscar muitíssimo rápido seja com ou sem leitura do analógico.

veja na simulação:

https://wokwi.com/projects/376056185027520513

Boa noite RV, minha ideia é fazer um cronômetro e ao mesmo tempo ler a corrente. Mas ao colocar a variável para decrementar dentro do onTImer() ela não decrementar. Fiz dessa forma:

https://wokwi.com/projects/376154763877508097

Não tinha usado este simulador antes. No esp32 físico funcionou legal agora na simulação não, mas vale para você ver o código.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço