sábado, 18 de fevereiro de 2017

Chave de toque capacitiva com o TTP223N.

        Recentemente, comprei umas plaquinhas com o sensor de toque capacitivo baseado no IC TTP223N-BA6 da Tontek, cuja função é substituir os tradicionais botões mecânicos para interface digital.
     Este IC tem uma entrada ligada a uma pequena área cobreada na placa que mede continuamente a sua capacitância. Ao encostar o dedo nesta área, que é isolada eletricamente, a capacitância é alterada e se passar de certo limite, a saída digital do IC muda de estado, que pode ser ajustada para ativa em nível alto ou baixo. Há também um histerese para evitar acionamentos indevidos, porém a sensibilidade não pode ser alterada.

Á direita, primeira placa que comprei. Á esquerda, uma  placa do lote de 30. ela é menor e mais fácil de colar em painéis plásticos.
Placas vistas do outro lado. Na maior, a área sensora não é isolada por verniz.

Saída ligada ao osciloscópio. Para minhas aplicações, fechei o jumper "A" da placa para que a saída fosse ativa em nível baixo. Note a ausência de glitches.

Desacionamento.

Sinal no terminal sensor.

Detalhe do sinal no terminal sensor.

Teste do módulo sintonizador de rádio FM com o IC RDA5807M.

     Em uma compra da Aliexpress, para aproveitar o frete, mandei vir um módulo de rádio FM baseado no IC RDA5807M. Seu circuito é inacreditavelmente simples, no módulo além do IC propriamente dito há apenas mais dois capacitores e um cristal de 32kHz. Já havia comprado um módulo baseado no IC TDA5767, receptor de rádio FM da NXP, mas nunca consegui fazê-lo funcionar.
        O módulo tem as seguintes características:
Duas bandas de frequência;
Saída de áudio Mono ou Stereo com potência suficiente para acionar um fone de ouvido;
Indicador de força do sinal ( RSSI );
Controle de volume;
Comunicação I²C;
Tensão de alimentação de 1,8V a 3,3V;

Pinagem do módulo.
Módulo montado em uma placa com os headers para o barramento I²C e alimentação à direita e saída de áudio à esquerda. O fio branco é um cabo coaxial que serve como antena.
Firmware que lista todos os endereços I²C: 0x78 é do controlador do display OLED SSD1308 e 0x20 é do RDA5807M, não descobri porque é listado os endereços 0x22 e 0xC0.

Inicialização:

        O RDA5807M possui vários registros de 16 bits. Para iniciá-lo, usei somente os registros 0x02 a 0x05 que são escritos enviando primeiro a parte alta e em seguida a baixa. Estes registros são enviados nesta ordem e em sequência:

Mapa de bits dos  registros 0x02 a 0x05.

RDA5807 REGISTER 0x02 HIGH
Valor: 0xD0

RDA5807 REGISTER 0x02 LOW
Valor: 0x0D

RDA5807 REGISTER 0x03 HIGH
Valor: 0x00
    BAND = 2 (76~108 MHz, world wide)
    Channel Spacing = 100kHz, sendo a frequência de sintonização = (Channel Spacing x Channel_Select + 76000)/1000, que neste caso é 76,0MHz

RDA5807 REGISTER 0x03 LOW
Valor: 0x18

RDA5807 REGISTER 0x04 HIGH
Valor: 0x00

RDA5807 REGISTER 0x04 LOW
Valor: 0x00

RDA5807 REGISTER 0x05 HIGH
Valor: 0x88

RDA5807 REGISTER 0x05 LOW
Valor: 0xA4
Volume = 4 (0 a 15).
Os bits 7 e 5 são reservados mas se não tiverem setados a recepção não funciona, ainda bem que peguei estes valores em um fórum do Arduino, nunca iria descobrir.

Operação:

        Para ler status e valores de operação, mando o firmaware ler os registros 0x0A e 0x0B, que também são lidos nesta ordem e em sequência. Após a leitura, trato os valores para serem mostrados do display.

Mapa de bits dos registros 0x0A e 0x0B.
Status e valores do RDA5807M: Bargraph é do RSSI (nível de recepção), modo da saída de áudio (mono ou stereo), status da sintonia (Tuned ou Seeking), frequência de sintonização, volume da saída de áudio (0 a 15) e os oito zeros são os RDS blocks (Informações de texto transmitidas pela estação FM que ainda não descobri como funciona).

RDA5807M procurando uma estação. Usei o modo de banda que abrange de 76 até 108MHz (world wide). Aqui no Brasil é usado de 88 até 108MHz (100 canais), porém com a migração de estações AM para FM e com o fim de canais de TV analógicos, esta faixa deve aumentar.

        Enviando o comando para procurar estações de rádio acima da frequência atual:
Seta bit SEEKUP de RDA5807 REGISTER 0x02 HIGH (1 = SEEK UP)
Reseta bit TUNE de RDA5807 REGISTER 0x03 LOW (0 = DISABLE TUNE)
Seta bit SEEK de RDA5807 REGISTER 0x02 HIGH (1 = ENABLE SEEK)
Escreve os registros 0x02 a 0x05 novamente

        Enviando o comando para procurar estações de rádio abaixo da frequência atual:
Reseta bit SEEKUP de RDA5807 REGISTER 0x02 HIGH (0 = SEEK DOWN)
Reseta bit TUNE de RDA5807 REGISTER 0x03 LOW (0 = DISABLE TUNE)
Seta bit SEEK de RDA5807 REGISTER 0x02 HIGH (1 = ENABLE SEEK)
Escreve os registros 0x02 a 0x05 novamente

segunda-feira, 13 de fevereiro de 2017

Usando displays de caracteres LCD comuns compatíveis com o contolador HD44780 via barramento I²C com o PCF8574/PCF8574A.

        Há displays de caracteres LCD com interface I²C, como o Winstar WO1602 (controlador Sitronix ST7032), usado no relógio com temperatura e umidade relativa, tema de um post anterior, porém são mais caros e difíceis de encontrar. Mas existe uma maneira de usar displays comuns compatíveis com o controlador Hitachi HD44780 no barramento I²C com o IC PCF8574/PCF8574A. Este IC fornece 8 entradas/saídas digitais através do barramento I²C. Também pode fornecer mais de 20mA no nível baixo por porta, muito útil para ligar LEDs. Esta solução é muito usada nos Arduinos, havendo vários modelos de placa para tal finalidade.

Exemplos de placas com o PCF8574 disponíves.
        Porém, apesar de funcionarem com 3,3V, estas placas não servem para minhas aplicações, pois o display não alcança o contraste necessário porque requer uma diferença de tensão maior, algo entre 4 e 5V. Assim fiz uma placa que tivesse um inversor de baixa potência para que o LCD operasse abaixo dos 5V habituais. Para tal, usei o IC CAT660 da Catalyst (agora ON Semiconductor), compatível com o ICL7660 da Intersil, que converte os 3,3V em -3,3V, resultando em 6,6V totais que passa por um divisor resistivo (trimpot de 1k) que vai para o terminal Vo (ou VLCD) do display.
        Tanto o PCF8574 quanto o PCF8574A operam com clock máximo do barramento I²C de 100kHz. A comunicação com o Display é feita no modo de 4 bits, requerendo duas transmissões por caractere e no fianl de cada transmissão lê-se a posição atual do caractere bem como o busy flag. A leitura do busy flag após cada transmissão permite a operação na máxima velocidade do controlador, além de não causar problemas de temporização em controladores mais lentos. A última porta (P7), é ligada a um MOSFET-N para controlar o backlight oriundo de uma fonte externa.

Placa montada. Note que usei o PCF8574A da Texas Instruments, não o comum PCF8574. Mesma função mas com endereços I²C diferentes, um cuidado a ser tomado no firmware. Testei também com o original PCF8574 da NXP para não haver dúvidas quanto ao funcionamento e compatibilidade.
Esquemático. Note o jumper de seleção de tensão Vo (ou VLCD) que pode ou não usar a tensão fornecida pelo CAT660, quando alimentado por 5V.
Display 16x2 antigo com o HD44780 em operação alimentado com 3,3V, comprovando o funcionamento e compatibilidade do mesmo. Este display não possui backlight.
Vista inferior do mesmo display antigo, mostrando o HD44780 auxiliado por um HD44100 (usado quando se tem mais de 16 caracteres).
Display 20x4 moderno com controlador desconhecido em operação com o mesmo firmware.

        Nota: quase a totalidade do displays de caracteres vendidos atualmente usam ICs compatíveis com o HD44780 da HITACHI (agora RENESAS). Este IC não é mais fabricado, podendo ser encontrado somente em displays bem antigos como mostrado anteriormente, porém outros fabricantes dispõe seus clones ou compatíveis. Segue a lista:

KS0066 SAMSUNG
KS0076 SAMSUNG
KS0070 SAMSUNG
S6A0069 SAMSUNG
LC7985NA SANYO
SED1278 EPSON
NT3881D NOTATEK
SPLC780 SUNPLUS
MSM6222 OKI
NJU6408B NJR
NJU6468 NJR
NJU6470 NJR
UM3881B UMC (Não tenho certeza se é compatível)
T7934 TOSHIBA (Não tenho certeza se é compatível)

Medidor de corrente, tensão e potência com o INA260.

         Testei o recém lançado medidor de corrente, tensão e potência INA260 da Texas Instruments.              Este possui um preciso shunt de 2 miliohms integrado que simplifica muito a montagem, pois o caminho da corrente passa diretamente pelo IC. Ele é parecido com o INA226 em resolução e amostragens porém sem o registro de calibração já que o shunt é integrado.

                INA226          INA260
Tensão          1.25mV LSB      1.25mV LSB
Corrente        1mA LSB         1.25mA LSB
Potência        25mW LSB        10mW LSB

         Pelo fato do caminho de medição de corrente do INA260 passar pelo encapsulamento do mesmo, não foi possível usar uma adaptador TSSOP-DIP, assim tive que soldá-lo diretamente na placa, tendo os mesmos cuidados das montagens anteriores mas sem o shunt, obviamente.

Placa com o INA260 soldado.

        A inicialização e funcionamento é mais simples que os outros ICs desta família de medidores pois não há a constante de calibração do shunt e a leitura dos valores, mesmo usando os parâmetros default, consiste de apenas três valores (tensão, corrente e potência). Usei as mesmas configurações do INA226: média de 512 amostragens, modo de leitura contínuo e tempo de conversão de 140us para corrente e tensão (140us x 2 x 512 = 0,14336s ou quase 7 leituras por segundo). Também não há nenhum tipo de ajuste, pode-se usar apenas os parâmetros default.

INA260 em ação mostrando os três registros. Note que o offset é quase nulo.
Com 12V aplicados e um resistor como carga.

Com o display no modo Zoom x2 (ver postagem sobre o SSD1306). Mais legível mas sem mostrar a potência.
        Fiquei positivamente muito surpreso com os resultados. Já havia ficado com os outros ICs para esta finalidade, mas este é muito preciso e não precisa definir a constante de calibração do shunt como nos outros, dispensando qualquer calibração e ajuste.