terça-feira, 1 de setembro de 2020

Usando displays LCD com o controlador LCD do PIC16F1933.

       O microcontrolador PIC16F1933 tem um controlador dedicado para acionar diretamente displays LCD. Este controlador pode acionar os segmentos do LCD diretamente, usando um terminal por segmento, ou de forma multiplexada, usando um terminal para vários segmentos. Por ter somente 19 terminais disponíveis para o acionamento de LCDs, melhor usar este controlador no modo multiplexado, especialmente no modo com 1/4 duty e 1/3 bias. A tensão de acionamento do LCD pode ser fornecida pela referência interna de 1,024V multiplicada por 3 ou pela tensão de alimentação do PIC16F1933.
        O display usado é o GDV04520, tem 6 dígitos, opera em 3,3V com 1/4 duty e 1/3 bias, tem 16 pinos e é um pouco mais largo que um IC com encapsulamento DIP.


Display LCD GDV04520 de 7 segmentos e 6 dígitos visto de cima. É um pouco mais largo que um IC com encapsulamento DIP de 16 pinos.


Display LCD visto de baixo.

Pinagem do LCD GDV04520.

Inicialização do controlador LCD
Registro LCDCON (LCD CONTROL REGISTER) com o valor 0x8B: LCD driver enabled and enabled in Sleep mode, clock source LFINTOSC, 1/4 multiplex.

Registro LCDPS (LCD PHASE REGISTER) com o valor 0x01:Type-A phase changes within each common type, 1/3 Bias mode, 1:2 LCD Prescaler Selection bits.

Registro LCDREF (LCD REFERENCE VOLTAGE CONTROL REGISTER) com o valor 0xCE: Internal LCD Reference is enabled and powered by a 3.072V output of the FVR, VLCD3PE, VLCD2PE e VLCD1PE conectados aos rspectivos terminais externos.

Registro LCDCST (LCD CONTRAST CONTROL REGISTER) com o valor 0x00: máximo contraste.

Registro LCDRL (LCD REFERENCE LADDER CONTROL REGISTERS) com o valor 0x50: Internal LCD Reference Ladder is powered in Low-Power mode.

Registros LCDSE0 e LCDSE1 (LCD SEGMENT ENABLE REGISTERS) com os valors 0xBF e 0x37: segment enabled to RA1, RA5, RA4, RC2, RA7, RA6, RB0, RB7, RA0, RC5 , RC6 and RC7.


O mapeamento dos segmentos do LCD ficam assim:
     bit:  7  6  5  4  3  2  1  0
Registro:
LCDDATA0  3B -- 2A 2B 1A 1B 0A 0B
LCDDATA1  -- -- 5A 5B -- A4 4B 3A
LCDDATA3  3G -- 2F 2G 1F 1G 0F 0G
LCDDATA4  -- -- 5F 5G -- 4F 4G 3F
LCDDATA6  3C -- 2E 2C 1E 1C 0E 0C
LCDDATA7  -- -- 5E 5C -- 4E 4C 3E
LCDDATA9  3P -- 2D 2P 1D 1P 0D 0P
LCDDATA10 -- -- 5D 5P -- 4D 4P 3D

Sendo 1 para segmento ligado e 0, desligado.

Display em ação mostrando a tensão do IC INA219.



Saída do COM0.




Saída típica de um dos segmentos.


sexta-feira, 19 de julho de 2019

Tela LCD WaveShare para Raspberry Pi.

        Comprei esta tela LCD da WaveShare para Raspberry Pi 2A/2B/3A/3B/3B+, de 7 polegadas e resolução de 1024x600 com interface touch-screen. É alimentada com 5V somente.
       Esta tela é feita para encaixar um Raspberry Pi atrás mas pode ser usada sozinha como um monitor normal com interface HDMI, não possuindo no entanto interface de áudio.


Tela LCD WaveShare. 7" com resolução de 1024x600 e interface HDMI.

          Como o Raspberry Pi fica com a face superior voltada para esta placa, há um segundo conector que é um espelhamento do conector do Raspberry Pi. Este conector não vem montado, assim deve-se soldar uma barra de pinos do tipo SMD. Foi feito também uma adaptação para a placa do RTC para que o barramento I²C ficasse facilmente disponível.

Tela vista por trás. Note a placa do RTC adaptada no conector da placa que um espelhamento do conector do Raspberry Pi.

Raspberry Pi3B+.
Raspberry Pi3B+, lado inferior.
       Atrás da tela se encontram os botões de interface para o controle dos parâmetros da mesma, como brilho e contraste.

Detalhe dos botões da interface da tela.

       O RTC usado foi o bem preciso DS3231, que pode ser encontrado em uma minúscula placa onde há uma bateria de lítio. Para adaptar esta placa foi retirado o conector e mudada a posição da bateria de forma a diminuir a espessura do conjunto. Foi posta uma fita de poliamida para isolamento elétrico.

RTC baseado no IC DS3231 antes da adaptação.
Detalhes do RTC adaptado no conector da placa da tela LCD. Note que os pinos da interface SPI não foram montados pois estes são usados na interface touch-screen.
Raspberry Pi3B+ encaixado atrás da tela LCD. Servem também aí o Pi3B e Pi2B.
        Para alimentar o conjunto, foi usado uma fonte chaveada de 12V/2A e um conversor DC/DC de 5V com dois conectores micro USB para alimentar a tela LCD e o Raspberry Pi. Pode-se usar somente um conector USB mas preferi alimentar ambos.

Conversor DC-DC de 5V com os conectores microUSB.

        O Raspberry Pi 3B+ nativamente pode carregar o sistema operacional a partir de um pendrive ou um conversor USB/Sata quando não há um cartão microSD instalado. Pode também carregar via ethernet. Alguns anos atrás, comprei 2 SSD da Apacer de 8GB pois estavam muito baratos. Para ligá-los no Raspberry Pi, usei uma placa de case USB/SATA cujo conector foi retirado e soldado um cabo USB diretamente.

SSD de 8GB da Apacer.

Conversor USB/SATA com cabeamento modificado para ser usado no SSD.
        O consumo da energia foi medido com a o backlight da tela LCD a 50% e rodando o comando:
$ stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 7200s
Assim o consumo de energia do Raspberri Pi 3B+ vai ao máximo, totalizando quase 9W.

Corrente consumida.

Tensão na saída do regulador.

       O conjunto foi montado em um estojo/capa para notepad com teclado embutido.


Tela LCD e Raspberry Pi 3B+ montados.

Tela LCD.


segunda-feira, 24 de junho de 2019

Modificação para usar antena externa no Raspberry Pi3.

       O Raspberry Pi3 vem com uma interface wireless onboard cuja antena também é onboard. Mas em alguns casos, é necessário uma antena externa com maior ganho ou quando a placa do Raspberry Pi3 é instalada em um gabinete metálico. Para tal modificação, pode-se soldar um cabo diretamente à placa ou como preferi fazer soldar um conector U.FL.

Conector Hirose U.FL comumente encontrada em placas Wi-Fi de notebooks.
Visão geral do lado inferior da placa do Raspberry Pi3.
        Para fazer esta modificação é necessário raspar duas pequenas áreas na para inferior da placa do Raspberry Pi3 bem como trocar a posição de um capacitor, sendo que esta troca é parte mais difícil pois este capacitor é absurdamente pequeno, cerca de 1/4 de uma pulga!
       O conector U.FL foi retirado de uma placa Wi-Fi de notebook.


Detalhe da placa com as áreas raspadas.

Conector soldado. Note o capacitor que foi trocado de posição. Além de muito pequeno, fica muito próximo a outro componente dificultando ainda mais seu reposicionamento.

Cabo conectado. Deve-se ter cuidado para que o conector do cabo não encoste na parte de baixo do conector do Raspberry Pi3, pois fechará um curto entre GND e +3,3V.
Visão geral do cabo conectado (Pigtail U.FL SMA Macho).


terça-feira, 14 de maio de 2019

Display OSRAM SCD55103A, complemento da postagem anterior

        O display OSRAM SCD55103A é a versão de 10 caracteres do display SCD5583A do post anterior, usando a mesma interface serial síncrona e tendo a mesma pinagem e protocolo de comunicação.

Display SCD55103A visto com um display SCD5583A e um PIC16F876 mostrando o mesmo tamanho.


Display SCD55103A visto por baixo. Note que tem a mesma pinagem do display SCD5583A.

Display SCD55103A acima do Display SCD5583A, note o menor espaçamento dos caracteres.

quarta-feira, 17 de abril de 2019

Display OSRAM SCD5583A.

        O display OSRAM SCD5583A é um display de matriz de LEDs 5x5 verdes de 8 caracteres que opera em 5V.
       Este display usa uma interface serial síncrona, mas ao contrário dos displays similares mostrados em posts anteriores, os caracteres devem ser desenhados bit a bit, ou seja, sem um decodificador ASCII, além disso, sua matriz de LEDs é de 5x5 tornando-o bem mais barato por usar menos LEDs. Com uma interface serial, o projeto fica bem mais simples, podendo usar um PIC12F1822 para controlar este display diretamente e ainda se ter uma interface I²C para ler os registros do IC INA219 por exemplo.


Display SCD5583A visto com um PIC16F876 mostrando como este display é compacto.

Display SCD5583A visto por baixo. Note que tem o mesmo espaçamento de um DIP de 28 pinos.
Placa com o display SCD5583A e um PIC12F1822. Note que usando uma interface serial, a placa fica tremendamente mais simples.
Display SCD5583A em ação com um acrílico fumê.
Comparação entre o display OSRAM SCD5583A (acima) e o Siemens HDSP2114S (abaixo). Note a diferença nos caracteres com uma matriz 5x5 e 7x5.
Sinal do pino CLK I/O do SCD5583A, usado para sincronizar outras unidades.








terça-feira, 13 de novembro de 2018

Aproveitamento uma fonte de alimentação do PlayStation3 com medidor baseado no INA226.

       Ganhei um PS3 Fat estragado (RLOD) que não tem mais conserto. Nesta versão de hardware, a fonte vem em uma subcaixa de plástico. Ela tem entrada universal (100~240Vac) com PFC ativo e fornece até 23A @ 12Vdc. Tem ainda uma saída auxiliar de 5Vdc e um sinal de controle que habilita/desabilita a saída de 12 Vdc. Infelizmente não achei seu esquemático.

Placa da fonte vista de cima (ref. EADP-300AP).
Placa da fonte vista de baixo. Adicionei os postes metálicos de parafusos e os poste de plástico tive que furar a placa.

        Para aproveitar esta fonte, fiz uma placa que tem um PIC12F1840 para controlar a habilitação da saída de 12V bem como mostrar a medição de tensão e corrente realizada pelo INA226 em um display OLED de 128x64 pixels. O INA226 mede a corrente através de um shunt de 0,001Ω da própria fonte. Retirei os conectores das saídas de 12V e 5V. No lugar do conector de 12V foi soldado diretamente a fiação de saída e no lugar do conector de 5V, foi ligado um fio para alimentar esta placa de controle bem como o fio de controle da saída de 12V.

Detalhe mostrando a placa de controle fixada em um dos postes metálicos.
Placa de controle vista de lado.


Esquemático. Note que neste caso, o INA226 mede a corrente pelo lado baixo, razão pela qual não pode ser usado o INA219.


Detalhe mostrado os fios esmaltados atravessando a placa da fonte e que ligam os sinais IN+, IN-, GND e VBUS do INA226.
Detalhe mostrando onde foram ligados os sinais IN+, IN-, GND e VBUS do INA226.
Detalhe dos opto acopladores de controle, proteção e realimentação.
Foram usados vários fios para suportar 20A.
Fonte ligada mas com a saída desabilitada. Note que infelizmente o offset de corrente ficou bem alto devido a distância entre os terminais do INA226 e o shunt.

Saída habilitada e sem carga. A medição de tensão do INA226 é bem precisa mas o offset de corrente continua muito alto.
Com uma lâmpada dicróica ligada como carga. A diferença de tensão ocorre porque o múltimetro está medindo no conector de saída, depois do shunt.
Medindo a corrente com o múltimetro. Ao contrário da tensão, a corrente precisa ser calibrada através de uma constante em um dos registros do INA226.

Display Sharp LS013B4DN04 (Memory LCD) com o PIC16F1825.

        Em um post anterior, foi mostrado o Memory LCD LS013B4DN04 da Sharp. Notar que este display está obsoleto agora, tendo como alternativos LS010B7DH04 ou LS013B7DH03, ambos com 128x128 pixels, mas a lógica de acionamento e pinagem continuam as mesmas.
         Foi um grande desafio fazer este display funcionar com o PIC16F1825, pois este possui pouca memória RAM, insuficiente para criar um buffer de memória requerida para o uso deste display: 12 bytes para cada uma das 96 linhas totalizando 1.152 bytes. Para contornar esta falta de memória, em vez de armazenar no buffer o conteúdo do display, é armazenado somente os caracteres a serem mostrados. Usando uma fonte de 32x12 pixels para os caracteres, tem-se 3 linhas de 8 caracteres totalizando somente 24 bytes. A grande desvantagem deste método é a tremenda dificuldade para mostrar caracteres e gráficos ao mesmo tempo, mas para minhas aplicações já é aceitável mostrar somente caracteres. Tenho muitos projetos para este display devido ao seu consumo de energia ser absurdamente baixo.
        O display usado foi retirado da placa 430BOOST-SHARP96, que é usado nas placas de desenvolvimento dos microcontroladores MSP430 da Texas Instruments.

Placa 430BOOST-SHARP96 vista por cima sem display e com display.
Placa 430BOOST-SHARP96 vista por baixo sem display e com display.
       Para poder usar este display nos meus projetos, montei uma placa onde o mesmo é colado com fita dupla face no lado de cima e embaixo montei o conector ZIF de pitch 0,5mm e 10 pinos e um header de 7 pinos cuja pinagem é a mesma dos displays OLED com interface SPI.



Conector ZIP de pitch 0.5mm de 10 pinos, retirado de uma placa de notebook.
Placa montada com o display fixado por quatro quadradinhos de fita dupla face branca.
Placa vista por baixo. Note a resina epoxi cinza para fixar os fios esmaltados.
Pinagem de um display OLED SPI.

Esquemático. Notar que o sinal D/C não é usado e o RESET é ligado ao DISP, sendo que este sinal controla a habilitação do display (display on/off).



Display em ação com fonte 32x12. Note a orientação vertical dos caracteres.