0% acharam este documento útil (0 voto)
5 visualizações12 páginas

Placa Driver HUB75: Firmware e Comandos

O documento descreve a placa driver de display RGB HUB75, suas revisões e firmware, incluindo detalhes sobre comunicação, programação e funcionamento. Ele especifica os comandos para manipulação do display, como limpeza de canvas, atualização de tela e envio de texto e bitmaps. Além disso, inclui exemplos práticos de uso e requisitos para compilação e programação da placa.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
5 visualizações12 páginas

Placa Driver HUB75: Firmware e Comandos

O documento descreve a placa driver de display RGB HUB75, suas revisões e firmware, incluindo detalhes sobre comunicação, programação e funcionamento. Ele especifica os comandos para manipulação do display, como limpeza de canvas, atualização de tela e envio de texto e bitmaps. Além disso, inclui exemplos práticos de uso e requisitos para compilação e programação da placa.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

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.

Você também pode gostar