quinta-feira, março 22, 2018

Placa PQDB - Parte 1

Vamos dar uma pausa nos projetos com o Franzininho e ver uma outra placa brasileira: a PQDB (Pão de Queijo Development Board). A placa PQDB é uma placa didática, de projeto aberto, para uso com o Arduino e placas compatíveis.




Uma descrição detalhada da PQDB pode ser vista no site Embarcados. Resumindo, a placa possui os seguintes periféricos:
  • LED RGB
  • Display de 7 segmentos, com quatro dígitos, ligado através de um shift register 74HC595
  • LCD alfanumérico de 2 linhas de 16 caracteres, também ligado ao 74HC595
  • Teclado
  • Potenciômetro
  • LDR (resistor sensor a luz)
  • LM35 (sensor de temperatura)
  • Buzzer
  • Relógio de tempo real (DS1307) com bateria backup
Um conector permite espetar diretamente um Arduino Uno ou uma placa com conector compatível (operando a 5 ou 3,3V).

Ela lembra um pouco a Multifunction Shield que vimos no passado. Ela possui um conjunto maior de periféricos, mas não tem os conectores de expansão. Porém tem a vantagem de ser face simples e de projeto aberto, o que permite inclusive a fabricação artesanal.

O principal objetivo desta placa é no ensino de programação embarcada; um livro foi escrito para auxiliar isto.

Eu comprei a placa em formato de kit na campanha no Catarse. No próximo post vai ter um vídeo da montagem e demonstração, por enquanto vou apenas mencionar algumas dificuldades que encontrei.

Compartilhamento de Pinos

Não é uma grande dificuldade, mas alguns pinos do Arduino e do shift register 74HC595 são usados para mais de uma função. É preciso estar atento para efeitos colaterais, como o LED RGB acender quando o display de 7 segmentos é utilizado.

Usando a Referência Interna do ADC do Arduino

Como vimos com o Franzininho, para obter uma leitura razoável do LM35 deve-se usar a referência interna de 1,1V do Arduino. Nos meus primeiros testes a impressão é que ela não funcionava, o valores lidos continuavam correspondendo à referência padrão da alimentação (5V no meu caso).

Esta página tem informações bem completas sobre o ADC do Arduino. Um ponto que não está explícito nela é que a referência selecionada é conectada ao pino AREF (o que significa que se você for usar uma referência externa não pode selecionar as outras referências para não coloca-la em curto). No Arduino é seguida uma recomendação do fabricante e colocado um capacitor no pino AREF. Quando a referência é mudada de DEFAULT parta INTERNAL, demora um certo tempo para que esta capacitor descarregue e a referência caia dos 5V para 1,1V.

Então basta colocar um delay após o analogReference? Não... Neste ponto eu tive que olhar o código fonte do runtime do Arduino. A função analogReference não muda a referência, apenas a registra em uma variável interna. A seleção da referência (e da entrada) é feita em analogRead. O jeito foi fazer uma chamada dummy a analogRead e da uma pausa depois dela.

Na Dúvida, Use um Multímetro

O display LCD da PQDB simplesmente se recusava a funcionar. Eu fiquei umas duas horas examinando o meu código, que é uma adaptação do que usei com o Franzininho. Aí eu resolvi fazer um programa de teste para acionar um a um os sinais e medir com um multímetro diretamente no conector do display. Para minha surpresa, alguns sinais estavam ligeiramente negativos em relação ao sinal de terra do conector. Após o susto, percebi que poderia ser algo errado com o sinal de terra e examinei com atenção a trilha ligada a ele.

Clique e encontre o erro
Neste caso não adianta mexer no software, foi preciso pegar o ferro de solda.

Bateria Obrigatória

Mais um caso de procurar bug em software correto. O DS1307 (relógio de tempo real) exige a presença da bateria para funcionar corretamente. Para ser mais preciso, o datasheet fala que para operar sem bateria o pino correspondente deve ser ligado ao terra. Deixar o pino desconectado (como ocorre na PQDB quando você não instala a bateria) causa funcionamento incorreto (no meu caso ele nunca reconhecia o endereço I2C).

Um comentário:

Anônimo disse...

Trilha partida não é mole. Nunca esperamos isto de uma placa nova (rs!)