Analisador lógico: Analisando sinais digitais

Este post faz parte da série Analisadores lógicos

Introdução

Desta vez, como primeira bancada de testes para utilizar o analisador lógico, vamos interpretar alguns sinais digitais de um registrador de deslocamento (shift register 74HC595) e também a latência de interrupção em um Arduino e ESP32.

Figura 1 – Saleae Logic 8.

O analisador lógico utilizado para efetuar todos testes desta série de artigos será o Saleae Logic 8, que conta com 8 canais digitais/analógicos, 100MS/s de taxa de amostragem e utiliza o software da própria Saleae no computador como interface. Escolhi este analisador lógico para compor minhas ferramentas de trabalho pois ele conta com canais analógicos, funcionando como uma espécie de “mini-osciloscópio”, mas claro que longe de ser um substituto. Isso é extremamente útil para meu tipo de trabalho, onde preciso ver além dos sinais digitais, também monitorar os sinais analógicos que chegam aos pinos ADC do microcontrolador ou até monitorar as fontes de alimentação do circuito, bateria e afins. Em vez de ter que utilizar um osciloscópio separado já que não tenho um MSO, consigo monitorar tudo ao mesmo tempo na mesma tela.

Lembrando que você pode utilizar qualquer modelo de analisador lógico para acompanhar nossos testes.

Atenção: Caso você não consiga ler os detalhes dentro das imagens (valores, medições, tempos, etc), clique com o botão direito do mouse em cima da imagem e clique em “Abrir imagem em uma nova aba” ou “Open image on new tab”. Assim você poderá visualizar a imagem inteira e dar zoom pelo navegador. 

Bancada de teste #1

Este teste consiste em analisar a entrada de dados serial e as saídas do CI 74HC595, para verificar se os valores das saídas estão sendo incrementados de um em um igualmente o valor da entrada serial.

Figura 2 – Analisando o 74HC595.

Após conectar os canais do analisador lógico nos sinais que é preciso monitorar, basta configurar os parâmetros de captura como taxa de amostragem e filtro de ruídos para que possamos obter os dados e analisar!

Figura 3 – Configurações de captura e filtragem.

Figura 4 – Sinais capturados do 74HC595.

Analisando o diagrama capturado na figura 4, podemos confirmar sem problemas que o código do microcontrolador está funcionando corretamente. Após cada pulso no Latch do 74HC595, o valor binário das saídas foi incrementado em 1 e a representação binária do contador também está correta. Nesta análise a ideia é verificar apenas o funcionamento do contador binário e não a temporização e velocidade dos sinais, logo, a análise foi concluída com sucesso!

Bancada de teste #2

Este teste consiste em analisar a latência de interrupção em que o microcontrolador recebe o sinal de um sensor de distância infravermelho e aciona uma saída como resposta ao estímulo, ou seja, queremos saber quanto tempo demora entre o sensor detectar um objeto e o GPIO ser acionado. O teste será feito em um Arduino Mega e um ESP32 para que possamos ver se há diferença entre ambos ou terão tempos iguais.

Em ambos microcontroladores, foram testados primeiramente um código que faz pooling da entrada para controlar a saída e depois outro código que aguarda entrada mudar de estado via interrupção para controlar a saída diretamente via registrador. Vale lembrar que o teste não é para tentar otimizar o código em ter a menor latência possível, mas sim apenas visualizar a latência em diferentes situações para demonstrar a utilização do analisador lógico.

Figura 5 – Sinal visto de longe.

A figura 5 acima mostra a captura de um sinal do sensor e a saída de ambos microcontroladores, olhando dessa distância pensamos que ambos tiveram funcionamento idêntico, porém, ao dar bastante zoom nesses sinais, podemos ver grandes diferenças!

Figura 6 – Sinal do ESP32 com pooling visto de perto.

Figura 7 – Sinal do Arduino com interrupção visto de perto.

Ao aproximar bastante a forma de onda nas figuras 6 e 7, podemos ver a latência diante dos nossos olhos como um passe de mágica. Algo que antes parecia ser “instantâneo”, agora pode ser visto e mensurado. Foram gerados dezenas de pulsos para calcular a latência média nas 4 situações abaixo e os resultados foram:

  • Arduino com pooling: 14.54uS.
  • Arduino com interrupção: 3.55uS.
  • ESP32 com pooling: 6.62uS.
  • ESP32 com interrupção: 1.98uS.

Conclusão

Com o analisador lógico capturando os sinais digitais, fica muito fácil analisar e interpretar o que realmente está acontecendo para que possamos melhorar nossos códigos/circuitos, entender o que tem de errado e também a ordem que as coisas acontecem. Fica claro a sua importância mesmo que com sinais simples, imagine com sinais complexos!

Analisadores lógicos

Analisadores lógicos: Descobrindo suas utilidades Analisador lógico: Decodificando protocolos
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
4 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Xavier Albornoz
Xavier Albornoz
24/11/2024 23:13

Sensacional o conteúdo dos 3 artigos José Morais. PARABÉNS pela explicação clara e a forma lúdica que você explicou o funcionamento. O do PROTOCOLO foi top !!! Esse analisador Saleae Logic 8 … o original … tinha que ser um pouco mais em conta.

Xavier Albornoz
Xavier Albornoz
Reply to  José Morais
25/11/2024 13:11

Eu tenho um basicão … de R$1,99 …rs … 8 canais … que ajuda bem. Mas essa da Saleae é bestial !!! Já o usei para levantar o “protocolo” de uma comunicação SPI e I2C … O resultado foi PER FEI TO !!!!

Home » Hardware » Ferramentas de Desenvolvimento » Analisador lógico: Analisando sinais digitais

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: