VERSÃO 2 - inf.furb.brmaw/asm51/VgaManual.pdf · (MODO MICROCONTROLADOR). kbd String +...

26
t[email protected] WWW.BASIC4EVER.COM DATASHEET DO MÓDULO ser2VGA VERSÃO 2.0 09/2011

Transcript of VERSÃO 2 - inf.furb.brmaw/asm51/VgaManual.pdf · (MODO MICROCONTROLADOR). kbd String +...

[email protected]

WWW.BASIC4EVER.COM

DATASHEET DO MÓDULO ser2VGA

VERSÃO 2.0

09/2011

[email protected]

WWW.BASIC4EVER.COM

Módulo ser2VGA O módulo ser2VGA é um módulo embarcado que habilita seu micro controlador

através da USART, ter acesso aos dados retornados de um teclado PS2 e mouse PS2.

Também permite você enviar comandos ou dados para um monitor VGA. Basta apenas

conectar o mouse, teclado e monitor com entrada VGA, definir algumas configurações

padrões (via teclado) e pronto.

Características

� USART TTL 3.3V ou 5V (divisor);

� Alimentação principal 5V;

� Barrapinos;

� Furos 4mm para fixação da placa;

� Pino de RESET;

� Fácil de instalar;

� Reconhece os comandos padrão VT100 (pode ser um terminal burro para LINUX

EMBARCADO).

[email protected]

WWW.BASIC4EVER.COM

Interface com o monitor VGA – Configuração Conecte o módulo ao monitor VGA, o teclado PS2 e o mouse PS2, então alimente em

5V e você verá a seguinte tela:

O quadrado à esquerda corresponde ao cursor e o quadrado à direita corresponde ao

ponteiro do mouse. Há teclas que permitem configurar o uso do ser2VGA, segue

descrição da seqüência de teclas:

• CTRL_F3 = define a cor do texto (incrementa);

DEFAULT: BRANCO

• CTRL_SHIFT_F3 =define a cor de texto (decrementa);

DEFAULT: BRANCO

• CTRL_ALT_F3= define a cor de background do VGA (incrementa);

DEFAULT: PRETO

[email protected]

WWW.BASIC4EVER.COM

• CTRL_SHIFT_ALT_F3= define a cor background do VGA (decrementa);

DEFAULT: BRANCO

• CTRL_F4 = define o tipo do cursor (HIDDEN, BLINK, UNDERLINE...);

DEFAULT: BLOCK, BLINK LENTO

• CTRL_F6 = desabilita BACKSPACE para linguagem BASIC;

DEFAULT: TRUE

• CTRL_F8 = salva as configurações selecionadas;

• CTRL_F9 = habilite ou desabilita modo LINE WRAP (continuar texto na linha

seguinte quando atinge a última coluna);

DEFAULT: HABILITADO

• CTRL_ALT_F9 = adiciona LF ou não quando pressionar tecla CR;

DEFAULT: DESABILITADO

• CTRL_F11 = exibe linha e coluna do ponteiro do mouse na linha última linha;

DEFAULT: DESABILITADO

• CTRL_F12 = libera o módulo entre comunicação com um sistema operacional com

terminal (SHELL) padrão VT100 ou micro controlador;

DEFAULT: DESABILITADO

• CTRL_ALT_F10 = permite alterar o baud rate de comunicação entre o micro

controlador e o módulo (são eles, 300, 1200, 2400, 4800, 9600, 19200, 38400,

57600, 115200);

DEFAULT: 9600

Observações:

• Após alterar uma configuração não esqueça em salvar na memória não volátil,

utilize a seqüência de teclas CTRL_F8, então resete o módulo;

• Para efeitos de localização do ponteiro do mouse, você pode habilitar na parte

inferior do monitor a exibição das coordenadas do ponteiro do mouse, utilize

a seqüência de teclas CTRL_F11.

• Caso tenhas liberado o módulo para comunicação com um sistema

operacional que utilize terminal (SHELL) padrão VT100, você não verá a

posição da linha e coluna onde se encontra o ponteiro do mouse e também o

mouse será desabilitado;

• A primeira linha é 00 e a última é 39;

• A primeira coluna é 00 e a última é 79;

[email protected]

WWW.BASIC4EVER.COM

• Mude o tipo de cursor para não confundir com o ponteiro de mouse;

• O cursor é posicionado na linha 00 e coluna 00;

• Ao mexer na configuração do ser2VGA, você verá o texto no monitor VGA.

[email protected]

WWW.BASIC4EVER.COM

Interface com o teclado PS2 - Protocolo

Ao ligar o módulo, o teclado PS2 inicializará e acenderá o LED NUM-LOCK. Toda vez

que você pressionar uma tecla, o módulo mandará para o seu micro controlador o código

da tecla no seguinte formato. (MODO MICROCONTROLADOR).

kbd String + códigoTeclaString + byte 0 (NULL)

Exemplo:

Digamos que se você pressionar a tecla ‘a’, na serial do módulo (TXD) será enviada a

seguinte sequência:

kbd000061 pelo byte 0

Onde kbd identifica que a mensagem veio do teclado PS2 e 000061 são os códigos que

você deve monitorar segundo a tabela abaixo:

códigoTeclaString Tecla Correspondente

Kbd000061+ byte 0 a

kbd000062+ byte 0 b

kbd000063+ byte 0 c

kbd000064+ byte 0 d

kbd000065+ byte 0 e

kbd000066+ byte 0 f

kbd000067+ byte 0 g

kbd000068+ byte 0 h

kbd000069+ byte 0 i

kbd00006A+ byte 0 j

kbd00006B+ byte 0 k

kbd00006C+ byte 0 l

kbd00006D+ byte 0 m

kbd00006E+ byte 0 m

[email protected]

WWW.BASIC4EVER.COM

kbd00006F+ byte 0 o

kbd000070+ byte 0 p

kbd000071+ byte 0 q

kbd000072+ byte 0 r

kbd000073+ byte 0 s

kbd000074+ byte 0 t

kbd000075+ byte 0 u

kbd000076+ byte 0 v

kbd000077+ byte 0 w

kbd000078+ byte 0 x

kbd000079+ byte 0 y

kbd00007A+ byte 0 z

kbd000041+ byte 0 A

kbd000042+ byte 0 B

kbd000043+ byte 0 C

kbd000044+ byte 0 D

kbd000045+ byte 0 E

kbd000046+ byte 0 F

kbd000047+ byte 0 G

kbd000048+ byte 0 H

kbd000049+ byte 0 I

kbd00004A+ byte 0 J

kbd00004B+ byte 0 K

kbd00004C+ byte 0 L

kbd00004D+ byte 0 M

kbd00004E+ byte 0 N

kbd00004F+ byte 0 O

kbd000050+ byte 0 P

kbd000051+ byte 0 Q

kbd000052+ byte 0 R

kbd000053+ byte 0 S

kbd000054+ byte 0 T

kbd000055+ byte 0 U

kbd000056+ byte 0 V

[email protected]

WWW.BASIC4EVER.COM

kbd000057+ byte 0 W

kbd000058+ byte 0 X

kbd000059+ byte 0 Y

kbd00005A+ byte 0 Z

kbd0000D0+ byte 0 F1

kbd0000D1+ byte 0 F2

kbd0000D2+ byte 0 F3

kbd0000D3+ byte 0 F4

kbd0000D4+ byte 0 F5

kbd0000D5+ byte 0 F6

kbd0000D6+ byte 0 F7

kbd0000D7+ byte 0 F8

kbd0000D8+ byte 0 F9

kbd0000D9+ byte 0 F10

kbd0000DA+ byte 0 F11

kbd0000DB+ byte 0 F12

kbd1B5B44+ byte 0 FLECHA ESQUERDA

kbd1B5B43+ byte 0 FLECHA DIREITA

kbd1B5B41+ byte 0 FLECHA CIMA

kbd1B5B42+ byte 0 FLECHA BAIXO

kbd00007E+ byte 0 ~

kbd000021+ byte 0 !

kbd000040+ byte 0 @

kbd000023+ byte 0 #

kbd000024+ byte 0 $

kbd000025+ byte 0 %

kbd00005E+ byte 0 ^

kbd000026+ byte 0 &

kbd00002A+ byte 0 *

kbd000028+ byte 0 (

kbd000029+ byte 0 )

[email protected]

WWW.BASIC4EVER.COM

kbd00005F+ byte 0 _

kbd00002B+ byte 0 +

kbd00007C+ byte 0 |

kbd00007B+ byte 0 {

kbd00007D+ byte 0 }

kbd000022+ byte 0 "

kbd00003C+ byte 0 <

kbd00003E+ byte 0 >

kbd00003F+ byte 0 ?

kbd000060+ byte 0 ̀

kbd00002C+ byte 0 ,

kbd00002E+ byte 0 .

kbd00002F+ byte 0 /

kbd00002D+ byte 0 -

kbd00003D+ byte 0 =

kbd00005C+ byte 0 \

kbd00005B+ byte 0 [

kbd00005D+ byte 0 ]

kbd000027+ byte 0 '

kbd000031+ byte 0 1

kbd000032+ byte 0 2

kbd000033+ byte 0 3

kbd000034+ byte 0 4

kbd000035+ byte 0 5

kbd000036+ byte 0 6

kbd000037+ byte 0 7

kbd000038+ byte 0 8

kbd000039+ byte 0 9

kbd000030+ byte 0 0

kbd000009+ byte 0 TAB

kbd0000CA+ byte 0 INSERT

[email protected]

WWW.BASIC4EVER.COM

kbd00007F+ byte 0 DELETE

kbd0000C4+ byte 0 HOME

kbd0000C5+ byte 0 END

kbd00005F+ byte 0 BACK

kbd0000C6+ byte 0 PG UP

kbd0000C7+ byte 0 PG DOWN

kbd0000DC+ byte 0 PRINTSCREEN

kbd0002DF+ byte 0 PAUSE BREAK

kbd00000D+ byte 0 ENTER

kbd001310+ byte 0 ENTER (COM LF HABILITADO =

CRTL_ALT_F9)

Observações:

• Alguns teclados podem apresentar configurações diferentes, então abra um

emulador de terminal e tecle, então você verá os códigos de cada tecla;

• Nunca ligue o teclado após o módulo ser ligado, o mesmo na será inicializado;

• O software de seu micro controlador preferido deve aguardar pelo delimitador 0

(NULL) e então identificar a tecla pressionada;

• Este protocolo foi criado para facilitar a interação com o seu micro controlador,

você pode optar pelo protocolo VT100 (MODO SISTEMA OPERACIONAL) de

envio de códigos de teclas, ou seja, o código ASCII da tecla é enviado.

[email protected]

WWW.BASIC4EVER.COM

Interface com o mouse PS2 - Protocolo

Ao ligar o módulo, o mouse PS2 inicializará somente se a opção F3 (S.O) estiver como

“NÃO”. Toda vez que você clicar um botão do mouse, ele mandará para o seu micro

controlador, o código do mouse no seguinte formato:

ASCII mseString + 13 + 10 (opcional)

Exemplo:

Digamos que se você click o botão esquerdo do mouse, estando o ponteiro do mouse

na linha 03 e coluna 04, na serial do módulo (TXD) vai ser enviada a seguinte sequência:

String mse000304 seguido do byte 13 e opcionalmente pelo byte 10

Onde mse identifica que mensagem veio do mouse PS2 e 000304 são os códigos

correspondem:

• 00 = botão esquerdo do mouse; (01 caso seja o botão direito)

• 03 = linha do ponteiro do mouse; (HEXADECIMAL)

• 04 = coluna do ponteiro do mouse. (HEXADECIMAL)

Observações:

• Não confundir ponteiro do cursor do mouse com o cursor de posicionamento de

impressão;

• Nunca ligue o mouse após o módulo ser ligado, o mesmo na será inicializado;

• A primeira linha é 00 e a última é 35;

• A primeira coluna é 00 e a última é 79.

[email protected]

WWW.BASIC4EVER.COM

Interface com o monitor VGA - Protocolo

Ao ligar o módulo, você verá o cursor na linha 00 e coluna 00. A partir desta posição,

tudo o que você mandar para o módulo (RXD), será impresso no monitor. Exemplo, se

você mandar o byte 65 (ver tabela ASCII) para o módulo, verá o “A” ser impresso e o

cursor avançar automaticamente para a posição seguinte.

Se o cursor estiver na última posição da tela e você imprimir um caractere, o monitor

fará um SCROOL.

Você pode mandar um comando em vez de caractere para o monitor, neste caso, deve

começar com o byte 27 (ESC – ver tabela ASCII). Abaixo há a tabela para que você possa

conhecer os comandos, no caso, do padrão VT100.

ESCc Reset terminal to initial state

ESC[?5h Swap foreground/background colors

No swap is done if mode already set

ESC[?6h Set cursor origin mode to relative

ESC[?7h Turns on line wraparound mode

ESC[?20h New line mode causes LF to imply movement

to the first position of next line.

ENTER key sends the two codes CR and LF

ESC[?5l Swap foreground/background colors

No swap is done if mode already reset

ESC[?6l Set cursor origin mode to absolute

ESC[?7l Turns off line wraparound mode

ESC[?20h Line feed mode causes LF to imply only vertical

movement and ENTER sends only CR

ESC[m Turn off character attributes

ESC[0m Turn off character attributes

ESC[1m Turn bold character on (reverse video)

ESC[7m Turn reverse video on

ESC[t;br Set top and bottom scrolling region limits

ESCH Set tabstop at current column position

ESC[g or ESC[0g Clear tabstop at current column position

[email protected]

WWW.BASIC4EVER.COM

ESC[3g Clear all tab stops

ESC[nA Move cursor up n lines

ESC[nB Move cursor down n lines

ESC[nC Move cursor right n columns

ESC[nD Move cursor left n columns

ESC[H or ESC[;H Move cursor to upper left corner

ESC[line;column Move cursor to screen location line, column

ESC[f or ESC[;f Move cursor to upper left corner

ESC[line;column Move cursor to screen location line, column

ESCD Move/scroll window up one line

ESCM Move/scroll window down one line

ESCE Move to start of next line

ESC[K or ESC[0K Clear line from cursor right

ESC[1K Clear line from cursor left

ESC[2K Clear entire line

ESC[J or ESC[0J Clear screen from cursor down

ESC[1J Clear screen from cursor up

ESC[2J Clear entire screen

Esc[nP Delete n characters, default = 1

Esc[n@ Insert n blank characters at cursor, default = 1

ESC[c or ESC[0c Terminal sends "No options" response: ESC[?1;0c

Esc[0n Response: terminal is OK

Esc[5n Report device status

Esc[6n Report cursor position

Esc[Line;ColumnR Response: cursor is at v,h

ESC#8 Screen alignment display

Se o usuário quiser imprimir a mensagem “OLA ” na linha 03, coluna 03 deve mandar

uma palavra de controle para o monitor e logo após a mensagem desejada.

Olhando para tabela VT100, você vê o comando para posicionar o cursor:

ESC[line;columnH

Logo, envie para o módulo (RXD) a seguinte sequência de bytes:

27 91 48 51 59 48 51 72

ESC [ 0 3 ; 0 3 H

[email protected]

WWW.BASIC4EVER.COM

Com isto, você pode observar que o cursor vai se posicionar na linha 03 e coluna 03,

então mande:

79 76 65

O L A

Observações:

• Ao enviar a coordenada da linha 03, veja como uma string, ou seja, o caractere

‘0’ seguido do caractere ‘3’ e não o byte 03;

• O dado impresso sempre será a partir da posição do cursor, mesmo que esteja

HIDDEN.

[email protected]

WWW.BASIC4EVER.COM

TABELA ASCII

[email protected]

WWW.BASIC4EVER.COM

EXEMPLO EM ‘C’ – POSICIONAMENTO DO CURSOR NA LINHA 11, COLUNA 11 E CONSEQUENTEMENTE A

IMPRESSÃO DE UM CONTADOR.

unsigned char TXT[6];

unsigned int contador;

unsigned short i;

void main() {

Usart_Init(9600);

//Aguarda START UP do controlador VGA

delay_ms(3000);

While(1)

{ //Posiciona cursor na linha 11, coluna 11

//40x80 - Resolucao video

//ESC[line;columnH Move cursor to screen location v,h (VT100)

Usart_Write(27);

Usart_Write('[');

//Linha

//11 = 49 ASCII "1"

Usart_Write(49);

Usart_Write(49);

//Separador

Usart_Write(';');

//Coluna

//11 = 49 ASCII "1"

Usart_Write(49);

Usart_Write(49);

//Finalizador

Usart_Write('H');

//Imprime Contador

inttostr(contador,TXT);

for(i=0;i<=5;i++)

Usart_Write(TXT[i]);

contador++;

delay_ms(100);

}

}

[email protected]

WWW.BASIC4EVER.COM

RESULTADO

[email protected]

WWW.BASIC4EVER.COM

EXEMPLO EM ‘C’ – LEITURA DE UMA STRING DO TECLADO E CONSEQUENTEMENTE A IMPRESSÃO DA MESMA

– MODO SISTEMA OPERACIONAL

unsigned char Mensagem[80];

unsigned char dado_lido;

unsigned char received_byte;

void Usart_Write_Text(unsigned char *Texto)

{

while(!(*Texto == 0))

{

Usart_Write(*Texto++);

}

}

//Nova Rotina Leitura Usart que mostra dado lido

//Parametro = numero de caracteres maximo

void Usart_Read_Text_New(unsigned int tam)

{ unsigned char index_caractere;

//Ponteiro dentro do Registro

index_caractere = 0;

//Indica que nenhuma tecla foi pressionada

received_byte = 0;

//Buffer Recepcao

strcpy(Mensagem,"");

//Espera pressionar a tecla Enter para finalizar

while(!(received_byte == 13))

{

//Aguarda pressionar uma tecla

while(Usart_Data_Ready() == 0);

//Le Tecla

received_byte = Usart_Read();

//Se for Backspace

if(received_byte == 8)

{

if(index_caractere > 0)

{

//Se sim, volta

[email protected]

WWW.BASIC4EVER.COM

index_caractere = index_caractere - 1;

//E poe NULL no final

Mensagem[index_caractere] = 0;

//Imprime

Usart_Write(received_byte);

}

}

else

{

if(!(received_byte == 13))

{

//Nao deixa digitar mais que Tam caracteres

if(!(index_caractere==tam))

{

//Transforma em string

//Txt_Cat[0] = received_byte;

//Concatena

//strcat(Mensagem,Txt_Cat);

Mensagem[index_caractere] = received_byte;

//Imprime

index_caractere = index_caractere + 1;

Mensagem[index_caractere] = 0;

//Caso contrario avanca indice

Usart_Write(received_byte);

}

}

}

}

}

void main(){

Usart_Init(9600);

//Indice DB

while(1)

{

Usart_Write_Text("Entre com um texto");

[email protected]

WWW.BASIC4EVER.COM

Usart_write(13);

Usart_write(10);

Usart_Read_Text_New(30);

Usart_write(13);

Usart_write(10);

Usart_Write_Text("Voce digitou");

Usart_write(13);

Usart_write(10);

Usart_Write_Text(mensagem);

Usart_write(13);

Usart_write(10);

}

}

[email protected]

WWW.BASIC4EVER.COM

RESULTADO

[email protected]

WWW.BASIC4EVER.COM

RESULTADO – MODO TEXT COLOR E VGA BACKGROUND COLOR

[email protected]

WWW.BASIC4EVER.COM

Interface com o com a USART

A tensão de trabalho do módulo VGA DEVE ser de 5V, o mesmo é utilizado para

alimentação do teclado PS2 e mouse PS2. Para alimentar o módulo, ligue pino 5 do

header PR1 em +5V e o pino 3 do header PR1 em GND. Veja imagem acima.

Antes de você conectar o seu micro controlador preferido, é necessário respeitar a

tensão dos pinos TXD e RXD do módulo.

Se seu micro controlador estiver trabalhando com TXD e RXD em 3.3V:

• Ligue o TXD do seu micro controlador no RXD do módulo (pino 2 do header

PR1)

• Ligue o RXD do seu micro controlador no TXD do módulo (pino 1 do header

PR1)

• Ligue o GND do seu micro controlador no GND do módulo (pino 3 do header

PR1)

Veja a imagem abaixo.

[email protected]

WWW.BASIC4EVER.COM

Se seu micro controlador estiver trabalhando com TXD e RXD em 5V:

• Ligue o TXD do seu micro controlador no RXD do módulo (pino 2 do header

PR2) (há um divisor de tensão para baixar para tensão para 3.3V) (OPCIONAL)

• Ligue o RXD do seu micro controlador no TXD do módulo (pino 1 do header

PR2)

• Ligue o GND do seu micro controlador no GND do módulo (pino 3 do header

PR2)

Veja a imagem abaixo:

[email protected]

WWW.BASIC4EVER.COM

Para resetar o módulo, o seu micro controlador deve jogar nível HIGH por alguns

milisegundos no pino 4 do header PR1 e então voltar a LOW. Você pode resetar

manualmente também, colocando um jumper e no header PR3 e então removê-lo.

Veja imagem abaixo:

[email protected]

WWW.BASIC4EVER.COM

Esquema elétrico

VIN3

AD

J1

VOUT 2

LM317

U4

10uF C1410uF

390R/1%/0RR13

240R/1%

R6

10uFC1510uF

VCC33

330RR7

D2

ADJ_1

VCC

12

X1

5Mhz

240R

R100

470

R101

240

R102

470

R103

240

R104

470

R105

240

R106

240

R107

12345678 9101112131415

1716

DB1D Connector 15

GND1k

R108

VCC

GND

11

22

3 344

55

66

K1

10K

R109

10K

R110

VCC33

GND

0.1uF

C200

VCC33 GNDA01 A12 A23

4

SCL6

SDA 5

8

WP7

Array

EEPRO

M

MN200

24LC128P

LOCAL_SCL

LOCAL_SDA

LOCAL_SCLLOCAL_SDA

12345

PR1

TX_PRORX_PRO

TX_PRORX_PRO

10KR111

10KR112

VCC33

VCC33

VCC

GND

0.1uFC201

0.1uFC202

0.1uFC203

0.1uFC204

GND

VCC33

BOE/6

P041

P142

P243

P344

P41

P52

P63

P74

P89

P910

P1011

P1112

P1213

P1314

P1415

P1516 P16 19P17 20P18 21P19 22P20 23P21 24P22 25P23 26P24 31P25 32P26 33P27 34P28 35P29 36P30 37P31 38

RES/7 XI 28

XO 29

GND5

GND17

GND27

GND39

VDD1 8

VDD1 18

VDD1 30

VDD1 40

U12

LPC2138

GND

VCC33

CC

B B

EE

Q807BCR135 DTR_PRO

GND

RESET_PRO

RESET_PRO

12

PR3

GND

P0_PRO

P1_PRO

P0_PROP1_PRO

CLK

DATA

11

22

3 344

55

66

K2

10KR811

10KR812

VCC33

VCC33

VCC

GND

P2_PRO

P3_PROCLK

DATA

P2_PROP3_PRO

GND

VCC

DTR_PRO

47KR113

10nF

C205

GND

20K

R66

39K

R55

RX_PRO (5V)

GND

RX_PRO

123

PR2

GNDRX_PRO (5V)TX_PRO