Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Atual ESP32_FreqMeter_0.33.0.ino Antigo NovoTeste08.ino
- // V01 Teste com pcnt
- // V02 teste com timer
- // V03 Teste de interrupt
- // V04 Definicao com escala baseada no prescaler
- // V05 Calculos com interrupt
- // V06 Versão inicial do frequeciimetro com ESP32 nao esta preciso , Seleciona a escala.
- // V07 Modificacoes no loop pra melhorar a escala funcionou bem
- // V07_A Fixando o valor de prescaler em 80 Criada 5a escala
- // V07_B teste de erro na rotina pcnt
- // V08 Sem escala, fixando o prescaler e o timer e contando os overflows
- // V09 Limpando a V08
- // V10 Testes com rotina de contagem de overflow
- // V11 Teste de overflow de pcnt e timer funciona teste com frequenci DE 10 khZ Copia do frequencimetro 2 modificado
- // V12 Resumir e limpar V11 enroscou a partir de 300 KHz
- // V13 Consegui bom resultado deste aqui até 20MHz Usando RMT com referencia de tempo
- // V14 Interrupt de pcnt e contar tempo de RMT
- // V15 Novo teste com RMT
- // V16 Qtde de pulsos entre ocorrencias de interrupt
- // V17 Outro teste de ocorrencias de interrupt
- // V18 Teste com rotina de interrupt com poucas funcoes
- // V19 Teste com esp-timer e interrupt no fim do pulso do esp-timer
- // V20 Teste = V19
- // V20a Preparada para IDF
- // V20aGustavo Sem interrupt de esp-timer
- // V21 Inclusao de LCD com diretivas de compilacao
- // 0.0.21 = V21
- // 0.0.22 Pontuação do numero
- // V23 Teste com 2 rotinas de pontuacao
- // V24 Parametros de ledc calculados Diretivas de compilacao para ARDUINO e IDF
- // V25 Nova rotina de pontuação
- // V26 Usando printf na rotina de pontuacao
- // V27 Teste com IDF Compilou com a IDF do CEI
- // V28 Teste com nova rotina de pontuacao e printf
- // V30 Rotina de teste depois de erro no IDF e limpeza de variaveis desnecessarias e organização
- // V31 Nova Diretiva de compilação ARDUINO Inclusão de LCD ok
- // V32 Novamente com rotinas de LCD Mudanca do formato dos port GPIO
- // V33 Calculo de Resolucao com base na frequencia e duty de 50%, inclusao de LCD I2C com diretiva e teste gpio matrix incluido
- /*
- Desenvolvedores: Rui Viana e Gustavo Murta 08/jul/2020
- Para desenvolver este projeto, foram aproveitadas partes de códigos dos desenvolvedores
- abaixo referenciados.
- O Projeto:
- Um frequencímetro usando ESP32, sem necessidade de escalas e mostrando até 8 dígitos,
- medindo com precisão até 20MHz ou mais.
- Este projeto pode ser compilado com a IDE do arduino ou com o IDF
- Definições:
- #define PCNT_INPUT_SIG_IO GPIO_NUM_34 // Freq Meter Input GPIO 34
- #define LEDC_HS_CH0_GPIO GPIO_NUM_25
- #define PCNT_INPUT_CTRL_IO GPIO_NUM_35 // Count Control GPIO HIGH=count up, LOW=count down GPIO 25
- #define OUTPUT_CONTROL_GPIO GPIO_NUM_32 // Saida do timer GPIO 2
- PORT de entrada do frequencímetro PCNT_INPUT_SIG_IO (GPIO 34)
- PORT de entrada de controle PCNT_INPUT_CTRL_IO (GPIO 35)
- PORT de saída do timer OUTPUT_CONTROL_GPIO (GPIO 32)
- O PORT de entrada de controle (GPIO 35) deve ser ligado ao PORT de saída do timer (GPIO 32).
- Estes são os ports usados no projeto, mas podem ser modificados para sua melhor conveniência.
- O frequencímetro é dividido em 5 partes:
- 1. Contador de pulsos;
- 2. Controle de tempo de contagem;
- 3. Impressão do resultado;
- 4. Espaço para outras funções.
- 5. Gerador de sinais programado para 50.000 Hz
- 1. O contador de pulso usa o pcnt do ESP32.
- O pcnt tem os seguintes parâmetros:
- a. port de entrada;
- b. canal de entrada;
- c. port de controle;
- d. contagem na subida do pulso;
- e. contagem na descida do pulso;
- f. contagem só com o controle em nível elevado;
- g. limite máximo de contagem.
- 2. O Controle de tempo de contagem usa o esp-timer.
- O esp-timer tem o seguinte parâmetro:
- a. controle do tempo;
- 5. Gerador de frequncias para testes usa o ledc
- O ledc tem o seguinte parâmetro:
- a. port de saida;
- b. canal de lcd;
- c. frequencia;
- d. resolucao do ledc;
- e. duty cycle em 50%;
- Funcionamento:
- O port de controle de contagem em nível alto, libera o contador para contar os pulsos que chegam no port de entrada de pulsos.
- Os pulsos são contado tanto na subida quanto na descida do pulso, para melhorar a media de contagem.
- O tempo de contagem é definido pelo esp-timer, e esta' definido em 1 segundo, na variável janela.
- Se a contagem for maior que 20000 pulsos durante o tempo de contagem, ocorre overflow e a cada overflow que ocorre
- e' contabilizado na variável multPulses, e o contador de pulso retorna a zero continuando a contar.
- Quando o tempo de leitura termina, uma rotina é chamada e o valor do no contador de pulsos e' lido e salvo,
- um flag e' ligado indicando que terminou a leitura dos pulsos
- No loop, ao verificar que o flag indica que terminou a leitura dos pulsos, o valor é calculado multiplicando
- o numero de overflow por 20000 e somando ao numero de pulsos restantes e dividindo por 2, pois contou 2 vezes.
- Como o pulsos são contados na subida e na descida, a contagem e´ o dobro da frequência.
- Na frequência é insserido pontos e impressa no serial monitor.
- Os registradores são resetados e o port de controle de entrada é novamente elevado para nível alto e a contagem de
- pulsos se inicia.
- Tem também um gerador de sinais que gera 50.000 Hz, e pode ser usado para testes.
- Este gerador pode ser alterado para gerar frequencias até 40 MHz.
- Usamos o recurso ledc do ESP32 para gerar frequencia que pode ser usada como teste.
- O valor da frequencia base é 50.000 Hz, mas pode ser digitavo outo valor no serial monitor
- O duty foi fixado como 50%
- A resulução é calculada.
- O Port de saida deste gerador é definido na linha #define LEDC_GPIO.
- Atualmente está definido como GPIO 25.
- O compilador usa as diretivas de compilacaoo para selecionar:
- Compilador Arduino ou IDF automatico
- Uso de LCD LCD_ON ou LCD_OFF
- Uso de LCD I2C LCD_I2C_ON ou LCD_I2C_OFF
- Referências:
- author=krzychb https://github.com/espressif/esp-idf/tree/master/examples/peripherals/pcnt
- resposta by Deouss » Thu May 17, 2018 3:07 pm no tópico https://esp32.com/viewtopic.php?t=5734
- Gerador de sinais Gustavo https://github.com/Gustavomurta/ESP32_frequenceMeter/blob/master/ESP32OscilatorV03.ino
- Formatação de numero https://arduino.stackexchange.com/questions/28603/the-most-effective-way-to-format-numbers-on-arduino
- https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/esp_timer.html
- https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/pcnt.html
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement