Placa display RGB
Placa driver de display HUB75 + IO digital 12V isolado
Revisões PCBs
PMO00501
v1
Sem ethernet
Utilizada com firmware v1, com comandos via RS232 com baudrate 115200
Utilizada em conjunto com conversor serial ethernet
Requer jumpers para programação DFU
IOs não isolados (não utilizados no firmware v1)
PMO00504
v2
Possui comunicação ethernet (10M)
Header de display 8x2
Possui dip switch para programação DFU
Possui IOs digitais isolados
Possui LED GPIO
Possui memória EEPROM para configurações (CAT24C16WI-GT3)
Utilizado como placa loader
PMO00508
v2
Bordas reduzidas e furação interna
Ethernet 100M full duplex
Altera PN memória (CAT24C16WI-GT3 -> NV24C16DWVLT3G)
firmware
Firmware v1
Comandos são recebidos e respondidos via RS232
Compatível com PMO00501
Utilizado em conjunto com conversor serial ethernet
Compatível com display 128x64 (4 módulos)
Firmware v2
Adicionados comandos de GPIO (EVA)
Adicionados comandos de display:
Clear seletivo
Bitmap colorido
Adicionado
Separado em múltiplos firmwares, para as múltiplas possíveis configurações:
Display 64x64 (2 módulos)
Display 128x32 (2 módulos)
Display 128x64 (4 módulos)
Display 256x64 (8 módulos)
Adam/Eva (sem display)
Variantes de Comando/GPIO para cada firmware
Build
Requisitos: - GNU ARM Embedded toolchain - GNU make
Comando para build de debug:
$ make
Comando para build de release
$ make RELEASE=1
Comando para build com controle via GPIO - TODO
Executar make no diretório firmware compila todos os binários: - display64x64 - display128x32 - display128x64 - display256x64 - eva
Programação da placa via DFU
Requisitos: - dfu-util - Zadig (somente windows)
Jumpers J1 e J2 devem ser inseridos (PMO00501) ou em posição ON (demais PMO)
Conectores RS232 e Ethernet devem estar desplugados.
Ligar a alimentação da placa. Nestas condições, ela entrará em modo DFU.
No windows, é necessário utilizar a ferramenta Zadig para instalação do driver do bootloader STM32.
Para programar, executar em linha de comando:
dfu-util -a 0 -s 0x08000000:leave -D ./[Link]
Funcionamento da placa
Configuração de rede
As configurações de IP e porta para display podem ser alteradas por meio do programa USR-TCP
NOTA: não utilizar como porta de display nenhuma das portas utilizadas por ADAM/EVA: - TCP/502 - TCP/5452 - TCP/5450 - TCP/80
Display
O firmware possui internamente em sua memória um canvas, isto é, um array bidimensional de (DISPLAY_HEIGHT) linhas e (DISPLAY_WIDTH x NUM_DISPLAYS)
colunas de INTs.
Cada um dos elementos deste canvas corresponde a um pixel e contém 8bpp de informação de cor RGB.
Neste canvas pode-se realizar alterações por meio de comandos de envio de texto, bitmaps e sinalizações pré-programadas, bem como limpeza de tela.
(Lembrando que apesar de ser armazenado com valores de cor entre 0x00 e 0xFF, o display não apresenta (neste momento) mais do que um bit por cor (cores
diferentes de 0x00 são colapsadas como 1).)
Nenhuma das alterações de canvas na memória aparece imediatamente no display (físico), é necessário enviar um comando de refresh do display para que a
imagem apresentada no display seja atualizada para a imagem correspondente ao canvas na memória naquele instante.
Nota: É possível apagar partes da tela enviando bitmaps para escrita de cores 0x00. Ver comando de bitmap.
Protocolo de comunicação display
A comunicação com a placa é realizada via socket ou RS232.
No momento o ethernet da placa, por estar em desenvolvimento, é substituído por um conversor externo Ethernet->RS232.
Portanto toda a comunicação deve ser realizada via socket por ora.
conv
As mensagens iniciam e finalizam respectivamente com bytes hexadecimais 0x02 (STX) e 0x03 (ETX).
A placa deve retornar ASCII "OK" em caso de sucesso ou "NOK" em caso de falha no comando (erros mais explicativos -> TODO ).
Nota: Cuidar com informações de tamanho do comando. Caso seja especificado um tamanho de mensagem menor do que o enviado de fato, o display ficará
aguardando o resto dos bytes e não irá interpretar novas mensagens como novas mensagens. Isto é, não existe timeout, por ora.
Limpeza de canvas
STX Comando ETX
0x02 0x40 0x03
Este comando limpa todo o canvas interno do sistema (todos os pixels 0x00000000).
Lembrando que para limpar o display é necessário um envio subsequente de comando de refresh.
Limpeza parcial
STX Comando Offset X Offset Y Size X Size Y ETX
[0x0000 - [0x0000 -
0x02 0x43 [0x00-0xFF] [0x00-0xFF] 0x03
0xFFFF] 0xFFFF]
Nota: Apenas disponível no firmware 2.0 em diante.
Este comando permite apagar uma área retangular do canvas, dada pelos bytes de offset e largura/altura.
Refresh da tela
STX Comando ETX
0x02 0x41 0x03
Atualiza o display conforme o estado do canvas no momento do envio do comando.
Mudança de brilho
STX Comando Intensidade ETX
[0x01 -
0x02 0x42 0x03
0x06]
Altera o brilho da tela conforme o byte de intensidade. Há 6 níveis de brilho para a tela, sendo 0x01 o mais baixo e 0x06 o mais alto. Ao reiniciar o display, o brilho da
tela é configurado em 0x03.
Envio de texto
STX Comando Offset X Offset Y Fonte Red Green Blue Tamanho Texto ETX
[0x0000 - [0x0000 - [0x00- [0x00- [0x00- [0x00- [0x00- Até 255
0x02 0x30 0x03
0xFFFF] 0xFFFF] 0x1C] 0xFF] 0xFF] 0xFF] 0xFF] bytes
Envio de caracteres a serem escritos na tela
Os shorts de offset determinam a posição inicial da linha sobre a qual os caracteres serão desenhados.
Caso a posição inicial esteja fora da tela, nenhum caractere será desenhado.
Caso a posição de caracteres subsequentes ao inicial caiam fora da tela, apenas estes não serão desenhados, total ou parcialmente.
Os caracteres não realizam (neste momento) wrapping de linhas.
Máximo 255 conforme byte de tamanho.
As fontes disponíveis e suas informações de tamanho acima e abaixo da linha onde são desenhados, estão na tabela a seguir:
Código Fonte Ascent Descent
0x00 4x6 5 1
0x01 5x7 6 1
0x02 5x8 7 1
0x03 6x9 7 2
0x04 6x10 8 2
0x05 6x12 10 2
0x06 6x13 11 2
0x07 6x13B 11 2
0x08 6x13O 11 2
0x09 7x13 11 2
0x0A 7x13B 11 2
0x0B 7x13O 11 2
0x0C 7x14 12 2
Código Fonte Ascent Descent
0x0D 7x14B 12 2
0x0E 7x14 12 2
0x0F 8x13 11 2
0x10 8x13B 11 2
0x11 8x13O 11 2
0x12 9x15 12 3
0x13 9x15B 12 3
0x14 9x18 14 4
0x15 9x18B 14 4
0x16 10x20 16 4
0x17 F18 20 6
0x18 F20 22 7
0x19 F22 24 7
0x1A F24 27 8
0x1B F28 30 9
0x1C F30 32 10
Envio de semáforo
STX Comando Offset X Offset Y Semáforo ETX
[0x0000 - [0x0000 -
0x02 0x31 [0x00-0x05] 0x03
0xFFFF] 0xFFFF]
Envio de comando para desenho de semáforos pré-programados na placa.
A posição do offset corresponde ao canto superior esquerdo do semáforo.
Os tamanhos e cores dos semáforos estão apresentados na tabela abaixo:
Código Semáforo Cor
0x00 Seta 16px Verde
0x01 Seta 32px Verde
0x02 Seta 48px Verde
0x03 Xis 16px Vermelho
0x04 Xis 32px Vermelho
0x05 Xis 48px Vermelho
Envio de bitmap
STX Comando Offset X Offset Y Size X Size Y Red Green Blue Tamanho Bitmap ETX
STX Comando Offset X Offset Y Size X Size Y Red Green Blue Tamanho Bitmap ETX
[0x0000 - [0x0000 - [0x00- [0x00- [0x00- [0x00- [0x00- [0x0000- Até 500
0x02 0x32 0x03
0xFFFF] 0xFFFF] 0xFF] 0xFF] 0xFF] 0xFF] 0xFF] 0x01F4] bytes
O comando de bitmap possibilita envio de imagens arbitrárias
Os bytes de offset determinam a posição do canto superior esquerdo do bitmap.
O bitmap enviado funciona por lógica invertido, ou seja, os bits enviados como 1 irão manter a mesma cor que já existia no canvas, enquantos os bits 0 substituirão o
pixel do canvas com a cor do bitmap.
É possível enviar somente uma cor por vez utilizando o bitmap.
Os bytes de tamanho correspondem à quantidade de bytes enviada no bitmap ([Quantidade de pixels na imagem]/8, devido ao empacotamento).
Exemplo: o bitmap abaixo contendo o contorno de um quadrado 4x4
0000
0110
0110
0000
Seria linearizado em uma sequência de bits em ordem de linha depois coluna, e agrupado em bytes: 00000110 01100000.
Estes bytes então seriam enviados em hex como: 0x06 e 0x60. Size X seria 0x04, Size Y 0x04 e tamanho 0x02.
Nota: Se a imagem não couber em bytes sem sobras, deverá ser realizado padding com 1's
Envio de bitmap com cores
STX Comando Offset X Offset Y Size X Size Y Tamanho Bitmap ETX
[0x0000 - [0x0000 - Até 16K
0x02 0x34 [0x00-0xFF] [0x00-0xFF] [0x0000-0x4000] 0x03
0xFFFF] 0xFFFF] bytes
Nota: Apenas disponível no firmware 2.0 em diante.
Neste comando é possível enviar bitmaps com cores.
Este envio é realizado por meio de bytes, cada um contendo as cores para um pixel individual.
Cada pixel possui 4 níveis para cada uma das cores RGB: 00, 01, 10, 11, em ordem ascentente de intensidade.
No byte, as posições RGB se dão no formato 0b00BBGGRR, onde RR são os bits menos significativos.
Neste comando, os bytes de "Tamanho" correspondem à quantidade de pixels da imagem.
Exemplos display
Simples quadrado vazado
024003 0232 0005 0001 04 04 FF FF FF 0002 0660 03 024103
024003 - limpa display
02 32 - comando de bitmap 0005 - 5px para a direita do topo superior esquerdo 0001 - 1px para baixo do topo superior esquerdo 04 - 4px de largura do bitmap 04 - 4px
de altura do bitmap FF FF FF - RGB, cor branca 0002 - o bitmap, compactado, possui dois bytes 06 - primeiro byte do bitmap: 0000 0110 60 - segundo byte do bitmap:
0110 0000 03
024103 - atualiza display
Display 128x64
Texto "Saturno"
texto saturno
02400302300003001D1BFFFFFF0753617475726e6f03024103
Quebrando em partes:
024003 - limpa display
02 30 - comando de texto 0003 - desloca 5 px para direita 001D - desloca a linha onde o texto será escrito 29 px para baixo 1B - seleciona fonte F28 FFFFFF - cor
branca 07 - sete caracteres de texto 53 61 74 75 72 6e 6f - "Saturno" 03
024103 - atualiza display
Display 64x64
Exemplo de semáforos e texto
imagem siga
024003023100100003010302300005003c19ffffff045349474103024103
024003 - limpa display
02
31 - comando de semáforo
0010 - desloca o semáforo 16 px para a direita do topo superior esquerdo
0003 - desloca o semáforo 3 px para baixo do topo superior esquerdo
01 - seleciona semáforo seta verde 32px
03
02
30 - texto
0005 - desloca 5 px para direita
003c - desloca a linha onde o texto será escrito 60 px para baixo
19 - seleciona fonte F22
ffffff - cor branca
04 - 4 letras de texto
53494741 - "SIGA"
03
024103 - atualiza display
imagem pare
024003023100100003040302300005003c19ffffff045041524503024103
024003
02 31 0010 0003 04 03
02 30 0005 003c 19 ffffff 04 50415245 03
024103
Bitmap "S" Saturno
Se queremos exibir a seguinte imagem no display, em cor sólida azul:
S saturno original
Começamos redimensionando a imagem e convertendo para bitmap 1-bit:
64x64_S_black
Visualizado em zeros e uns, essa imagem seria:
1111111111111111111111111111111110000000000000011111111111111111
1111111111111111111111111111000000000000000000000000011111111111
1111111111111111111111111000000000000000000000000000000011111111
1111111111111111111111100000000000000000000000000000000000011111
1111111111111111111110000000000000000000000000000000000000000111
1111111111111111111000000000000000000000000000000000000000000001
1111111111111111110000000000000000000000000000000000000000000000
1111111111111111100000000000000000000000000000000000000000000001
1111111111111111000000000000000000000000000000000000000000000011
1111111111111110000000000000000000000000000000000000000000000111
1111111111111100000000000000000000000000000000000000000000001111
1111111111111000000000000000000000000000000000000000000000011111
1111111111110000000000000000000000000000000000000000000000111111
1111111111110000000000000000000000000000000000000000000001111111
1111111111100000000000000000000000000000000000000000000001111111
1111111111000000000000000000000000000000000000000000000011111111
1111111111000000000000000000000001111000000000000000000111111111
1111111111000000000000000000001111111111110000000000001111111111
1111111110000000000000000000001111111111111111000000011111111111
1111111110000000000000000000001111111111111111110000111111111111
1111111110000000000000000000000111111111111111111111111111111111
1111111110000000000000000000000000111111111111111111111111111111
1111111110000000000000000000000000001111111111111111111111111111
1111111110000000000000000000000000000001111111111111111111111111
1111111110000000000000000000000000000000011111111111111111111111
1111111110000000000000000000000000000000000011111111111111111111
1111111110000000000000000000000000000000000000011111111111111111
1111111111000000000000000000000000000000000000000111111111111111
1111111111000000000000000000000000000000000000000011111111111111
1111111111100000000000000000000000000000000000000000111111111111
1111111111110000000000000000000000000000000000000000011111111111
1111111111110000000000000000000000000000000000000000001111111111
1111111111111100000000000000000000000000000000000000001111111111
1111111111111110000000000000000000000000000000000000000111111111
1111111111111111100000000000000000000000000000000000000011111111
1111111111111111111000000000000000000000000000000000000011111111
1111111111111111111110000000000000000000000000000000000011111111
1111111111111111111111110000000000000000000000000000000011111111
1111111111111111111111111100000000000000000000000000000001111111
1111111111111111111111111111000000000000000000000000000001111111
1111111111111111111111111111110000000000000000000000000001111111
1111111111111111111111111111111100000000000000000000000001111111
1111111111111111111111111111111111000000000000000000000001111111
1111111111110001111111111111111111100000000000000000000011111111
1111111111100000001111111111111111110000000000000000000011111111
1111111111000000000011111111111111110000000000000000000011111111
1111111110000000000000001111111111110000000000000000000011111111
1111111100000000000000000000111111100000000000000000000111111111
1111111100000000000000000000000000000000000000000000000111111111
1111111000000000000000000000000000000000000000000000001111111111
1111110000000000000000000000000000000000000000000000001111111111
1111100000000000000000000000000000000000000000000000011111111111
1111000000000000000000000000000000000000000000000000111111111111
1110000000000000000000000000000000000000000000000001111111111111
1100000000000000000000000000000000000000000000000001111111111111
1000000000000000000000000000000000000000000000000011111111111111
0000000000000000000000000000000000000000000000001111111111111111
1000000000000000000000000000000000000000000000011111111111111111
1110000000000000000000000000000000000000000000111111111111111111
1111110000000000000000000000000000000000000011111111111111111111
1111111100000000000000000000000000000000001111111111111111111111
1111111111100000000000000000000000000000111111111111111111111111
1111111111111110000000000000000000000111111111111111111111111111
1111111111111111111100000000000001111111111111111111111111111111
Se compactarmos cada 8 bits em sua representação hexadecimal, teremos o seguinte
ffffffff8001ffff
fffffff0000007ff
ffffff80000000ff
fffffe000000001f
fffff80000000007
ffffe00000000001
ffffc00000000000
ffff800000000001
ffff000000000003
fffe000000000007
fffc00000000000f
fff800000000001f
fff000000000003f
fff000000000007f
ffe000000000007f
ffc00000000000ff
ffc00000780001ff
ffc00003ffc003ff
ff800003fffc07ff
ff800003ffff0fff
ff800001ffffffff
ff8000003fffffff
ff8000000fffffff
ff80000001ffffff
ff800000007fffff
ff800000000fffff
ff8000000001ffff
ffc0000000007fff
ffc0000000003fff
ffe0000000000fff
fff00000000007ff
fff00000000003ff
fffc0000000003ff
fffe0000000001ff
ffff8000000000ff
ffffe000000000ff
fffff800000000ff
ffffff00000000ff
ffffffc00000007f
fffffff00000007f
fffffffc0000007f
ffffffff0000007f
ffffffffc000007f
fff1ffffe00000ff
ffe03ffff00000ff
ffc00ffff00000ff
ff8000fff00000ff
ff00000fe00001ff
ff000000000001ff
fe000000000003ff
fc000000000003ff
f8000000000007ff
f000000000000fff
e000000000001fff
c000000000001fff
8000000000003fff
000000000000ffff
800000000001ffff
e00000000003ffff
fc000000000fffff
ff000000003fffff
ffe0000000ffffff
fffe000007ffffff
fffff0007fffffff
Por limitações do hercules, vamos quebrar esta imagem em duas. Em um software próprio a imagem poderia ser mandada em um só comando de bitmap. Os
comandos a enviar serão então os seguintes:
024003
0232 0000 0000 40 20 00 55 FF 0100 fffffffffffffffffffffffffffffffffffffffc00003ffffffffe00000000fffffffe00000000fffffff0000000001fffffe00000
0232 0000 0020 40 20 00 55 FF 0100 fff00000000038fffffc0000000001ffffff8000000001ffffff8000000001fffffff000000000ffffffff80000000ffffffff8000
024103
Análise do comando bitmap:
02 - início comando
32 - comando bitmap
0000 - bitmap inicia sem deslocamento lateral da esquerda do display
0020 - bitmap inicia deslocado 32 px para baixo do topo do display
40 20 - 64 px largura 32 px altura
00 55 FF - cor, vermelho nível 0/3, verde nível 1/3 e azul nível 3/3
0100 - tamanho do bitmap 256 bytes
[256 bytes bitmap]
03 - fim
Resultado:
20211123_090355
Alternativamente, podemos querer utilizar de mais de uma cor na imagem. Uma forma de se fazer seria separar a imagem em duas e enviar dois bitmaps de forma a
sobrepor um ao outro, cada um com uma cor.
S_1_64 S_2_64
Esta abordagem funciona bem para imagens simples, mas generaliza mal para imagens muito coloridas, dado que envolve enviar um bitmap para cada cor. Vamos
explorar a utilização do comando de imagem colorida, onde ao invés de compactarmos bits de uma imagem monocromática, temos 4 níveis de intensidade por cor
(R, G, B) e representamos cada pixel da imagem por um byte detalhando estes níveis.
Como o display tem apenas 64 cores à disposição, vamos considerar a seguinte versão da imagem, com cores adaptadas:
S_64_bicolor
De forma similar ao bitmap monocromático, teremos a imagem a seguir:
00000000000000000000000000000000000000000000000000000000000000000030303030303030303030303030300000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000303030303030303030303030303030303030303030303030300000000000000000000000
00000000000000000000000000000000000000000000000000303030303030303030303030303030303030303030303030303030303030300000000000000000
00000000000000000000000000000000000000000000003030303030303030303030303030303030303030303030303030303030303030303030300000000000
00000000000000000000000000000000000000000034303030303030303030303030303030303030303030303030303030303030303030303030303030000000
00000000000000000000000000000000000000343430303030303030303030303030303030303030303030303030303030303030303030303030303030303000
00000000000000000000000000000000000034343430303030303030303030303030303030303030303030303030303030303030303030303030303030303030
00000000000000000000000000000000003434343030303030303030303030303030303030303030303030303030303030303030303030303030303030303000
00000000000000000000000000000000343434343030303030303030303030303030303030303030303030303030303030303030303030303030303030300000
00000000000000000000000000000034343434343030303030303030303030303030303030303030303030303030303030303030303030303030303030000000
00000000000000000000000000003434343434343030303030303030303030303030303030303030303030303030303030303030303030303030303000000000
00000000000000000000000000343434343434343030303030303030303030303030303030303030303030303030303030303030303030303030300000000000
00000000000000000000000034343434343434343030303030303030303030303030303030303030303030303030303030303030303030303030000000000000
00000000000000000000000034343434343434343430303030303030303030303030303030303030303030303030303030303030303030303000000000000000
00000000000000000000003434343434343434343430303030303030303030303030303030303030303030303030303030303030303030303000000000000000
00000000000000000000343434343434343434343434303030303030303030303030303030303030303030303030303030303030303030300000000000000000
00000000000000000000343434343434343434343434343030303030303030303000000000303030303030303030303030303030303030000000000000000000
00000000000000000000343434343434343434343434343434303030303000000000000000000000000030303030303030303030303000000000000000000000
00000000000000000034343434343434343434343434343434343430303000000000000000000000000000000000303030303030300000000000000000000000
00000000000000000034343434343434343434343434343434343434343000000000000000000000000000000000000030303030000000000000000000000000
00000000000000000034343434343434343434343434343434343434343434000000000000000000000000000000000000000000000000000000000000000000
00000000000000000034343434343434343434343434343434343434343434343434000000000000000000000000000000000000000000000000000000000000
00000000000000000034343434343434343434343434343434343434343434343434343400000000000000000000000000000000000000000000000000000000
00000000000000000034343434343434343434343434343434343434343434343434343434343400000000000000000000000000000000000000000000000000
00000000000000000034343434343434343434343434343434343434343434343434343434343434340000000000000000000000000000000000000000000000
00000000000000000034343434343434343434343434343434343434343434343434343434343434343434340000000000000000000000000000000000000000
00000000000000000034343434343434343434343434343434343434343434343434343434343434343434343434340000000000000000000000000000000000
00000000000000000000343434343434343434343434343434343434343434343434343434343434343434343434343434000000000000000000000000000000
00000000000000000000343434343434343434343434343434343434343434343434343434343434343434343434343434340000000000000000000000000000
00000000000000000000003434343434343434343434343434343434343434343434343434343434343434343434343434343434000000000000000000000000
00000000000000000000003434343434343434343434343434343434343434343434343434343434343434343434343434343434000000000000000000000000
00000000000000000000000034343434343434343434343434343434343434343434343434343434343434343434343434343434340000000000000000000000
00000000000000000000000034343434343434343434343434343434343434343434343434343434343434343434343434343434343400000000000000000000
00000000000000000000000000003434343434343434343434343434343434343434343434343434343434343434343434343434343400000000000000000000
00000000000000000000000000000034343434343434343434343434343434343434343434343434343434343434343434343434343434000000000000000000
00000000000000000000000000000000003434343434343434343434343434343434343434343434343434343434343434343434343434340000000000000000
00000000000000000000000000000000000000343434343434343434343434343434343434343434343434343434343434343434343434340000000000000000
00000000000000000000000000000000000000000034343434343434343434343434343434343434343434343434343434343434343434340000000000000000
00000000000000000000000000000000000000000000000034343434343434343434343434343434343434343434343434343434343434340000000000000000
00000000000000000000000000000000000000000000000000003434343434343434343434343434343434343434343434343434343434343400000000000000
00000000000000000000000000000000000000000000000000000000343434343434343434343434343434343434343434343434343434343400000000000000
00000000000000000000000000000000000000000000000000000000000034343434343434343434343434343434343434343434343434343400000000000000
00000000000000000000000000000000000000000000000000000000000000003434343434343434343434343434343434343434343434343400000000000000
00000000000000000000000000000000000000000000000000000000000000000000343434343434343434343434343434343434343434343400000000000000
00000000000000000000000030303000000000000000000000000000000000000000003034343434343434343434343434343434343434340000000000000000
00000000000000000000003030303030303000000000000000000000000000000000000030343434343434343434343434343434343434340000000000000000
00000000000000000000303030303030303030300000000000000000000000000000000030303034343434343434343434343434343434340000000000000000
00000000000000000030303030303030303030303030303000000000000000000000000030303030343434343434343434343434343434340000000000000000
00000000000000003030303030303030303030303030303030303030000000000000003030303030303434343434343434343434343434000000000000000000
00000000000000003030303030303030303030303030303030303030303030303030303030303030303034343434343434343434343434000000000000000000
00000000000000303030303030303030303030303030303030303030303030303030303030303030303030343434343434343434343400000000000000000000
00000000000030303030303030303030303030303030303030303030303030303030303030303030303030303434343434343434343400000000000000000000
00000000003030303030303030303030303030303030303030303030303030303030303030303030303030303434343434343434340000000000000000000000
00000000303030303030303030303030303030303030303030303030303030303030303030303030303030303034343434343434000000000000000000000000
00000030303030303030303030303030303030303030303030303030303030303030303030303030303030303034343434343400000000000000000000000000
00003030303030303030303030303030303030303030303030303030303030303030303030303030303030303034343434343400000000000000000000000000
00303030303030303030303030303030303030303030303030303030303030303030303030303030303030303034343434340000000000000000000000000000
30303030303030303030303030303030303030303030303030303030303030303030303030303030303030303434343400000000000000000000000000000000
00303030303030303030303030303030303030303030303030303030303030303030303030303030303030303434340000000000000000000000000000000000
00000030303030303030303030303030303030303030303030303030303030303030303030303030303030343434000000000000000000000000000000000000
00000000000030303030303030303030303030303030303030303030303030303030303030303030303034340000000000000000000000000000000000000000
00000000000000003030303030303030303030303030303030303030303030303030303030303030303400000000000000000000000000000000000000000000
00000000000000000000003030303030303030303030303030303030303030303030303030303034000000000000000000000000000000000000000000000000
00000000000000000000000000000030303030303030303030303030303030303030303030000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000003030303030303030303030303000000000000000000000000000000000000000000000000000000000000000
Nesta representação cada conjunto de dois algarismos está relacionado à representação hexadecimal do byte de um pixel (0x00, 0x30 ou 0x34).
Visto em bits, seriam:
0x00: 00 00 00 00 (azul nível 0, verde nível 0, vermelho nível 0)
0x30: 00 11 00 00 (azul nível 3, verde nível 0, vermelho nível 0)
0x34: 00 11 01 00 (azul nível 3, verde nível 1, vermelho nível 0)
O comando para enviar esta imagem seria:
024003 02340000000040401000 0000000000000000000000000000000000000000000000000000000000000000003030303030303030303030303030000000000000000000
Display 256x64
Logo saturno grande (não cabe no hercules)
024003 023200000006FF340055FF0679 ffffff8003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000003fffffffffffffffffffffffffffffff
ADAM (IOs digitais)
Portas utilizadas (não podem ser utilizadas no display):
UDP/1025 (ASCII)
UDP/5048 (Search/Config)
TCP/502 (Modbus)
TCP/5452 (XML)
Funções ADAM implementadas:
Adam Apax: comandos de leitura e escrita de entradas e saídas via modbus, alteração de polaridade de entrada, alterações de MAC/IP/Subnet/Gateway e alteração
de senha.
Comandos ASCII:
$01M\r
Comando para modelo ADAM. Exemplo de retorno !016060\r
$01F\r
Comando para versão de firmware. Exemplo de retorno: !01 2.000\r
$016\r
Comando para solicitar status das entradas e saídas. Responde "$010" concatenado a um byte representando as saídas e outro byte representando as entradas.
Exemplo de retorno: !0103F00 onde as saídas estão todas em 1 e as entradas em 0.
0100XX\r
Comando para setar todas as saídas. XX é um uint16_t cujos 6 bits menos significativos correspondem às saídas 0 a 5. #010000 deixa as saídas em 0, #01003F
deixa todas as saídas em 1.
011X0Y\r
Comando para setar a saída de um canal específico. X define o canal (0 a 5) e Y define se é 0 ou 1. Exemplo #011501 deixa a saída 5 em 1.