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.
Neste caso não adianta mexer no software, foi preciso pegar o ferro de solda.
Clique e encontre o erro |
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:
Trilha partida não é mole. Nunca esperamos isto de uma placa nova (rs!)
Postar um comentário