Olá a todos... tenho um contador de rpm usando "attachInterrupt" no ESP8266 (ESP12E,)

Funciona muito bem sem servidor web, porém com servidor, ao ar um refresh na página o contador simplesmente para, nem mesmo na serial tenho alguma mensagem, o Wifi e outras funções continuam funcionando.

A pagina que coloquei usa XML  (FFS - arquivos na EEprom) e se eu deixar atualizar somente o XML (leitura do valor na pagina) funcina normal, mas se der um refresh na pagina o contador para.

Já fiz vários testes e mesmo com pagina normal (fora da eeprom) mesmo que não seja a pagina do contador de RPM, só de dar um refresh na pagina trava o contador.... muito estranho.

Pesquisando na internet vi q tem algo haver com: ICACHE_RAM_ATTR  mas não consegui fazer funcionar.

Todos os arquivos estão em anexo, agradeço qualquer ajuda !!!.

RPM_SERVER.rar

ps: Já tentei outras maneiras de contar RPM, com e sem interrupção, mas sempre tem algum problema, ou lentidão na pagina, ou erro na leitura, esse foi o melhor que consegui, mas tem esse erro.

Exibições: 466

Anexos

Responder esta

Respostas a este tópico

olá Hélio.

      Há alguns problemas na sua implementação, especificamente ao gerenciamento de como as IRQs  são tratadas.

      Então ajustei seu código para eliminar estes problemas (o código está disponível no final do post).  A forma como ajustei, é a mais adequada para praticamente qualquer necessidade semelhante. Acredito que apenas olhando o código vc irá entender.

      Mas também havia um erro "bobo", e este erro é que travava até  mesmo a exibição na Serial  e te deixou muito "cabreiro".  Se vc não descobrir que erro era esse (tem duas sutilezas nele e por isso pode não ser tão evidente),  então eu mostro aqui no post.

      Veja as seguintes observações importantes:

      1) eu não alterei em nada toda a parte de gerenciamento do WiFi e respectivo Server, ou qualquer conteúdo HTML e similares (XML, JS, etc).

      2)  Hélio  não altere  a forma como funciona a função "RPS_count_ISR".  Esta função vc pode ver na figura a seguir:

(clique na figura para "zoom")

      3) na função "getRPM",  Hélio  não altere  as partes marcadas em amarelo que mostro na figura a seguir:

(clique na figura para "zoom")

      Se vc tiver alguma dúvida sobre estes pontos, fique à vontade para perguntar.

      Ah, dei uma organizada no código apenas pra que ficasse mais fácil de trabalhar nele (preste atenção na ordem que as funções estão no código, pois isto é importante).

      O código ajustado está aqui:   "RPM_SERVER_02.zip"

      Observe que o conteúdo da pasta "data"  (arquivos HTML e afins),  é exatamente o mesmo que vc postou, ou seja não alterei nada ali.

      Espero ter ajudado.

      Abrçs,

      Elcids

Muitíssimo obrigado amigo Elcids.

Não tenho muito conhecimento e tento fazer meio que na "rosca grossa". Passei a noite acordado e agora de manhã havia encontrado um código que consegui fazer funcionar junto com minha pagina.

Percebi em seu código e nesse aqui : https://electronics.stackexchange.com/questions/415385/4-pin-pc-fan...   que eu não estava colocando nada dentro da void ICACHE_RAM_ATTR... e também não estava colocando "noInterrupts",

Como eu disse, não tenho conhecimento pra isso.
Verifiquei os arquivos que vc postou, e dá até inveja da organização, comentários e seu conhecimento.


Mais uma vez, muito obrigado pelo seu tempo e pela boa vontade em ajudar.
Acho que vou usar o seu código, esta muito bem explicado.

Deus lhe pague.

Olá novamente Elcids... só um detalhe, quando o motor para, o contador mantem sua ultima leitura, e o ideal seria zerar, pra saber que o motor esta parado.

Tentei fazer a alteração no código mas não consegui.

Se puder ajudar novamente, desde já agradeço.

olá Hélio.

      Realmente teve esse bug, pois esqueci de fazer o tratamento quando o Sensor de RPM  pára de enviar os pulsos.

      A forma adequada de fazer isso é simples:  acrescentar um "Timeout" para a amostragem da RPM,  e que já implementei no seu código (o arquivo está disponível no final do post).

      O valor deste "Timeout" pode ser setado facilmente no código, conforme mostro na figura a seguir:

(clique na figura para "zoom")

      Observe que está especificado em mili-segundos, e que deixei o "Timeoutsetado para  4 segundos (por isso o valor "4000").  Altere este valor conforme vc achar necessário.  Porém atente que se vc deixar um valor muito pequeno, poderá sofrer com interação da página HTML,  pois sabemos que a parte do WiFi consome tempo considerável (principalmente quando as páginas são enviadas via "Server").  O valor do "Timeout" que deixei de 4 segundos,  acredito que irá trazer um bom resultado. Mas ajuste se vc achar conveniente.

      O gerenciamento do "Timeout" está na própria função "getRPM", e por isso ajustei a mesma para que ainda se mantivesse simples, e vc pode vê-la na figura a seguir:

(clique na figura para "zoom")

      O arquivo atualizado é este:   RPM_SERVER_03.zip

      Aguardo seu OK, sinalizando que está funcional.

      Abrçs

      Elcids

SIm amigo, funcionando 100%, por curiosidade alterei o valor do  Timeout entre 1000 e 4000, e funciona corrretamente. ficou perfeito.

Mais uma vez, obrigado pela suia boa vontade.

Bom dia, 

Projeto muito interessante! Gostei. Quero testá-lo no ESP32. Deve funcionar, sem modificações, não é?

Parabéns para Hélio e Elcids. 

olá Murta.

      Eu dirigiria os méritos apenas para o Hélio, pois eu apenas ajudei em uma pequena parte.

      Sobre compilar para o ESP32,  acho que pode ser feito diretamente sim.  Mas talvez vc tenha apenas que mudar no código,  o nome de uma ou duas bibliotecas nos "#include".

      Abrçs,

      Elcids

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço