DSP Lab 02 – Implementação de uma biblioteca e teste do display OLED 96×16

Neste Lab iremos descrever o processo de implementação de uma biblioteca de caracteres para comunicação com o display OLED de 96×16 pixels, que utiliza o controlador SSD1306, montado na placa de desenvolvimento eZDSP C5515.

Plataforma eZDSP C5515

Display OLED

Displays OLED (Organic Led Emitter Diode) são feitos de um tipo de material orgânico (contêm carbono) que emite luz quando excitado por uma corrente elétrica. A imagem abaixo, retirada do site allaboutcircuits.com, ilustra as camadas de construção de um display OLED.

Camadas de um display OLED

Estes displays não necessitam de uma retro iluminação e filtros para luz assim como é necessário nos displays de LCD comuns, o que os torna mais eficientes, simples de produzir e mais leves, além da possibilidade de serem construídos de forma flexível ou dobrável. A figura abaixo ilustra este modelo de display na forma flexível.

Display OLED flexível

Os displays de OLED apresentam as seguintes vantagens em relação aos de LCD:

  • Maior qualidade de imagem – Melhor contraste, alto brilho, ótimo ângulo de visão, grande variedade de cores e uma maior taxa de atualização.
  • Baixo consumo de energia.
  • Fácil construção que permite telas mais finas, flexíveis e transparentes.
  • Melhor durabilidade – São mais duráveis e podem opera em uma maior faixa de temperatura por não apresentar o cristal líquido em sua construção.
O Display montado na eZDSP

A ferramenta para desenvolvimento com DSP’s eZDSP C5515 da Spectrum Digital possui um display OLED de 96×16 pixels, comunicação via protocolo I2C, montado na placa principal para testes de comunicação serial e como uma forma de visualização de variáveis e interface com o usuário.

Nos códigos originais disponibilizados pela Spectrum Digital para manipulação do display, não era possível escrever uma cadeia de strings e envia-los para o controlador SSD1306 de uma forma intuitiva. Ao invés disso, uma combinação de 4 bytes deveria ser escrita e enviada ao display para a montagem dos caracteres, bit a bit, individualmente na tela. A imagem abaixo ilustra uma parte do algoritmo original para a combinação dos bytes na escrita de um caractere.

Snap Shot Combinação bytes

Outro fator que dificultou a interação com o display foi que a sequência de bytes, como na imagem acima, originalmente era escrita na ordem invertida da montagem do caractere.

Enviando um caractere para o Display OLED

O display apresenta uma configuração de 96×16 pixels (96 colunas x 16 linhas) onde podemos indicar 2 linhas de textos de 96×8 pixels cada uma que são chamados de PAGE 0 e PAGE 1 pelo datasheet do controlador SSD1306. A imagem abaixo ilustra o tipo de endereçamento do ponteiro de memória do display no modo horizontal para uma tela de 128×68 pixels.

Imagem Page display

Para mostrar um caractere por inteiro e com boa nitidez, o display necessita de 5 bytes de dados dispostos em 8 linhas que formam uma PAGE na memória do display. A imagem abaixo ilustra a formatação básica de uma PAGE de memória do controlador SSD1306.

Construção do Page no display

Na elaboração desta biblioteca foi necessária uma ferramenta que gerasse a combinação padrão dos caracteres no mesmo momento em que eles eram montados. Para isso, algumas formulas e arranjos de formatação condicional de células foram elaborados no Excel como forma de facilitar a construção da biblioteca. O Gif abaixo ilustra o funcionamento desta planilha que pode ser baixada neste link.

GIF do codificador de 5 bytes

Diante da imagem acima, observamos então que para o caractere 2 ser mostrado no display nós precisamos enviar a sequência {0x42, 0x61, 0x51, 0x49, 0x46} ao controlador. Assim, os pixels de cada banco serão ligados individualmente como na imagem.

Utilizando o mesmo método e considerando os outros caracteres mais utilizados, um vetor com a sequência de cada caractere foi elaborado com a ajuda da planilha descrita acima. Na imagem abaixo podemos observar uma parte deste vetor.

Vetor de caracteres

Para imprimir um caractere no display, apenas chamamos a função text() e passamos como parâmetro o que queremos visualizar na tela, assim como é visualizado na imagem abaixo.

Função text()

No corpo da função text(), os caracteres que são passados como parâmetro tem o seu tamanho dimensionado. Dentro do laço for() cada caractere é passado como parâmetro para a função display_char() na ordem invertida (do último para o primeiro caractere). Esta função pode ser observada na imagem abaixo.

Corpo da função text()

Na função display_char() cada caractere recebido é convertido para inteiro, subtraído em 32 unidades que é o número decimal de começo dos caracteres na tabela ASCII e o resultado é multiplicado por 5 devido a cada caractere em nossa tabela ser composto por 5 bytes de dados, como já descrito acima. A composição desta função pode ser verificada na imagem abaixo.

Função display_char()

A operação descrita acima gera um número que é o index de busca no vetor de caracteres. Por exemplo.

– Número decimal para a letra A na tabela ASCII -> 65

– Valor da variável index -> index = (65 – 32) *5 = 165

Se contarmos 165 bytes de dados no vetor font[] estaremos apontando para o primeiro byte que formará a letra A. Estes 5 bytes são passados dentro do laço for() para a função OSD9616_send() que envia os dados no barramento I2C do DSP.

Algoritmo e testes

O algoritmo base para este teste foi retirado do arquivo original de testes da plataforma de desenvolvimento eZDSP da Spectrum Digital. As funções inseridas e o vetor de caracteres construído já foram descritos acima. O algoritmo se encontra descrito abaixo. Créditos e comentários traduzidos foram inseridos para melhor compreensão.
[crayon-667051b77f395442330574/]

Conclusão

Neste Lab implementamos uma biblioteca básica para fácil interação com o display OLED de 96×16 pixels utilizando o Code Composer Studio. Além disso, entendemos melhor como é o procedimento de inicialização e os principais comandos a serem enviados para este controlador para que o sistema funcione adequadamente. No futuro, outros protótipos mais avançados serão feitos utilizando este DSP, o display e a biblioteca aqui descrita.




DSP Lab 01 – Configuração do Software CCS e primeiro teste com LED’s

Frente e verso da placa

Frente e verso da placa

Neste Lab trataremos dos passos iniciais no desenvolvimento com a ferramenta TMS320C5515 eZDSPTM USB Stick fabricado pela empresa Spectrum Digital. O DSP (Digital Signal Processor) embarcado nesta aplicação é o TMS320C5515 da Texas Instruments e foi projetado para ser de baixo custo e consumo. Apresentaremos também quatro exemplos envolvendo os LED’s presentes na placa de desenvolvimento.

Introdução

A ferramenta de desenvolvimento TMS320C5515 eZDSPTM USB Stick foi concebida pele TI para ser de baixo consumo e custo, pequenas dimensões e ser alimentada pela USB de um PC, ou seja, nenhuma fonte de alimentação externa é necessária para desenvolver com os periféricos embutidos na placa.

Visão geral - Periféricos placa

Visão geral – Periféricos placa

Uma grande variedade de aplicações pode ser testada nesta placa, incluindo gravação e tratamento de áudio, desenvolvimento de equipamentos médicos portáteis e outros produtos de consumo eletroeletrônicos, industriais e segurança.

Neste contexto, nós vamos utilizar esta ferramenta para estudar várias aplicações. Primeiramente, precisamos nos familiarizar com o CCS e as bibliotecas disponíveis.

Configuração do CCS

O CCS (Code Composer Studio) é o ambiente de desenvolvimento para sistemas embarcados de propriedade da TI (Texas Instruments). Sua instalação já foi descrita na série de Lab’s sobre o microcontrolador MSP430  e inclusive, descrevemos a instalação do suporte a família de DSP’s C55xx.

Configuração do Hardware

A ferramenta que estamos trabalhando precisa ser configurada no CCS para que a IDE possa saber qual compilador utilizar. Após abrir a IDE, siga os passos descritos abaixo para esta configuração.

  • Vá em View -> Target configurations -> click com o botão direito em User Defined -> New Target Configuration -> especifique o nome e o local para salvar esta configuração -> Finish.

Target configuration window

Target configuration window

  • Após clicar em “Finish”, uma nova janela abrirá para inserirmos qual a ferramenta e o emulador à trabalhar. Em Connection selecione “Texas Instruments XDS100v2 USB Debug Probe” e em “Board Device” selecione “USBSTK5515”. Click em “Save”.

Conexão e tipo de placa

Conexão e tipo de placa

A conexão com a placa pode ser testada no botão “Test Connection”. Se toda a configuração foi bem sucedida, uma tela extra abrirá e alguns scripts de teste de comunicação rodarão em sua placa.

Janela de teste

Janela de teste

  • Baixe e descompacte a biblioteca de arquivos da placa, disponibilizada pela Spetrum Digital, em um diretório específico para os projetos que iremos elaborar neste link.
  • Vá em File -> Import -> Existing CCS Eclipse Project -> aponte para o local especificado onde a biblioteca baixada anteriormente se encontra.

Janela para importar os projetos

Janela para importar os projetos

  • Vá em View -> Project Explorer. Uma lista dos exemplos contidos na pasta é destacada a esquerda da IDE. Click on ‘uled’ project.

Jabela project explore

Tabela project explore

Teste da placa

Vários são os periféricos disponíveis nesta placa, como pode ser observado na figura abaixo. Neste Lab iremos trabalhar somente com os Color’s LED.

Descrição periféricos da placa

Descrição periféricos da placa

Um simples teste para verificarmos se todas as configurações iniciais foram bem executadas será descrito nesta seção. Os códigos utilizados são os mesmos inclusos no pacote fornecido pela Spectrum Digital e descritos anteriormente.

Imagem LED's a serem testados

Imagem LED’s a serem testados

Teste: Deslocamento a Direita dos LED’s

Abra o arquivo “main.c” na pasta ‘uled’ -> prssione o botao Debug  na barra de ferramentas (ou pressione F11) -> Aguarde a transferência do firmware para a placa e click no batão Resume . Os 4 LEDs da placa devem piscar da esquerda para a direita, um após o outro, durante 6 ciclos.

O código para este teste se encontra abaixo:
[crayon-667051b780858362288723/]

Teste: Deslocamento a Esquerda dos LED’s

Abra o arquivo “uled_test.c” na pasta do projeto ‘uled’ -> modifique o laço loop como no código abaixo:

[crayon-667051b780864634403147/]

Teste: Contador de 4 bits

Novamente, abra o arquivo “uled_test.c” na pasta do projeto ‘uled’ -> copie e cole o código abaixo e você terá um contador de 4 bits rodando em sua placa de DSP.

[crayon-667051b780868591270175/]

Conclusão

Neste Lab obtivemos sucesso no download da biblioteca e na configuração do CCS para ser compatível com a plataforma eZDSP. Também tivemos êxito no primeiro teste com os LEDs da placa.

Esta é uma poderosa plataforma de desenvolvimento para aplicações em um nível um pouco mais avançado de conhecimento em programação e hardware. Excelentes projetos serão desenvolvidos ao longo desta série de Lab’s com o intuito de despertar o interesse do leitor com as práticas relacionadas ao Processamento Digital de Sinais.