Você está na página 1de 23

Consequentemente, decidimos adaptar o controlador de vdeo baseado em AVR

construdo por Grant Searle, que por sua vez baseado em um design anterior da Daryl
Rictor .
Esta abordagem teve duas vantagens: requer muito menos circuitos do que o nosso
circuito TTL previsto e foi A oportunidade para eu ter alguma experincia com
AVR-processadores. A idia desta interface de vdeo brilhante: gere todo o tempo no no
hardware, o que pesado devido estranha coluna e s contagens de linhas, mas no
software que est sendo executado em um processador AVR. Usando um processador AVR
suficientemente grande, existe uma RAM suficiente no chip para a RAM de vdeo. Portanto,
uma configurao muito bsica exigiria apenas o processador AVR, um registro de
deslocamento de oito bits, um oscilador de 16 MHz e dois resistores para gerar o sinal de
vdeo a partir de um sinal de sincronizao TTL gerado pelo processador e a sada TTL do
registro de deslocamento.

A imagem cima mostra o esquema para o controlador de vdeo: na parte superior


esquerda, o conector de barramento de 64 pinos para o backplane Z80 pode ser visto. O
74LS85 com o interruptor DIP de quatro posies usado como um decodificador de
endereo IO e gera um sinal de seleo ativo-alto em seu pino 3. Este sinal controla um
LED montado na frente da placa de circuito, bem como a lgica de interface restante.
O circuito do gerador de sinal de vdeo est localizado na parte inferior do esquema.
Consiste no prprio processador AVR, um oscilador TTL de 16 MHz, um registrador de
deslocamento 74LS166 e dois resistores (220 e 2200 Ohms).
A prpria interface de barramento simples: consiste em uma trava 74LS574 octal
que pode ser carregada a partir da CPU Z80 por uma instruo de sada apropriada.
Carregando este registro tambm define um simples flip-flop RS construdo a partir de dois
74LS00 NAND-portes (lado direito). A sada deste flip-flop amostrada pelo processador
AVR para determinar se novos dados chegaram. Por outro lado, o status deste flip-flop pode
ser lido pela CPU Z80 para determinar se o processador AVR j processou os dados
armazenados no 74LS574. Isto realizado por um driver de nibus de oito bits 74LS245.
O circuito restante executa a decodificao de sinal de endereo e controle necessria,
gerando um sinal de habilitao ativo-baixo para o 74LS245 e um sinal de clock para a trava
de oito bits 74LS574.
Por mais simples que esta interface de nibus, no funcionou inicialmente devido a
um erro de fiao. A imagem direita mostra o comportamento durante um acesso de
gravao para a trava de oito bits 74LS574. Os dois traos mostram as entradas ativas e
baixas de ativao de gravao para o porto quad OR 74LS32. Eu miswired estes para
que um acesso de escrita teria afetado o 74LS245, enquanto um acesso de leitura teria
ativado o 74LS574 que exatamente o caminho errado. Esses acessos foram
completamente bloqueados por ORing os sinais resultantes com os sinais / WR e / RD da
CPU Z80. O teste de tela do osciloscpio direita me trouxe no caminho certo - corrigir
esse erro de fiao era uma questo de minutos.

As duas imagens abaixo mostram o carto de controlador de vdeo completo: o


circuito ocupa cerca de metade de um carto Euro (160mm vezes 100mm) (o conector na
parte inferior esquerda na imagem esquerda o adaptador de programao AVR). A fiao
feita tradicionalmente na tecnologia de engate de fios, minha maneira favorita de construir
circuitos digitais. (Eu estou buscando desesperadamente por soquetes de enrolamento de
fio, pois os comerciais ainda disponveis so muito caros para o meu oramento de hobby.
Se voc conhece algum estoque antigo (barato), avise-me. :-))
Embora o cdigo AVR fosse originalmente adequado para um ATmega 32-chip, sua
verso atual foi direcionada para um ATmega 328 que possui um layout diferente relativo a
IO e RAM. Infelizmente, tudo o que tnhamos em nossas mos era um chip ATmega 32-16,
ento o software precisava ser portado de volta para este chip, que provou ser mais um
desafio do que o esperado inicialmente. Ingo fez a adaptao inicial, mapeando todos os
pinos IO para aqueles exigidos pelo meu design de hardware.
No incio, o ATmega 32-16 no gerou nenhum sinal at que percebemos que no
possui mapeamento de memria IO, mas usa instrues explcitas de entrada / sada.
Alterar todos os locais afetados no cdigo produziu uma primeira imagem como mostrado
esquerda.
Isso deveria ter mostrado uma tela cheia de smbolos de cano "|". Obviamente,
houve um grande problema de tempo (o que ainda no compreendo completamente). Um
exame mais aprofundado do sinal de vdeo com um osciloscpio mostrou que a parte do
sinal que discriminava o impulso de sincronizao horizontal e a informao real do vdeo
era excessivamente longa. Felizmente, conseguimos rastrear a seqncia de cdigo
relacionada e mudou um contador de loop que, aps algum ajuste fino, produziu uma
imagem estvel. (A parte que no entendo como essa parte do cdigo poderia ter
funcionado inicialmente - o valor agora usado consistente com o meu clculo aproximado,
enquanto o contador de loop original era muito grande.)

A imagem direita mostra o sinal de vdeo depois de adaptar este loop de


temporizao e alterar os dois valores de resistncia que combinam o pulso de
sincronizao e o sinal de vdeo do deslocador.
E ento os problemas comearam ... At a, no pensei muito no fato de que sempre
havia caracteres de lixo na segunda linha da ltima linha da tela. Agora que a sada de
vdeo era estvel e parecia razoavelmente bem, era hora de corrigir esse problema.
Demorou quase um dia at descobrir que ainda havia alguns lugares no cdigo que
supunha que a rea de RAM do processador AVR estava sendo executada de 0x0100 a
0x08ff, enquanto que o ATmega 32-16 usado aqui corre de 0x0060 a 0x085f. Eu j havia
mudado todas as constantes que eu poderia identificar diretamente no cdigo por nomes
simblicos apropriados, refletindo o layout da memria do meu processador AVR.
Para fazer uma longa histria: havia alguns lugares na rotina de gerao de vdeo central e
no intrprete de comando que dependia do layout de memria do ATmega 328, que no era
muito bvio primeira vista. Os caracteres do lixo eram, como eu esperava, os locais de
memria usados para a pilha. Reparar esse problema foi uma questo de minutos
(seguindo as horas de leitura do cdigo).
A imagem esquerda mostra o resultado gerado por esta interface de vdeo - no
maravilhoso (graas ao software de Daryl e Grant)? Claro, o programa de monitor simples
para o computador baseado em Z80 foi estendido, adicionando duas chamadas de sistema
vputc e entradas. O vputc envia um caractere nico para a interface de vdeo, enquanto as
entradas transmitem uma string com terminao zero para a interface.

Controladores de monitor e teclado


Controlados por processadores ATM "Mega" de baixo custo
INTRODUO
Esta pgina mostra os detalhes da construo para duas interfaces simples e
baratas que podem ser usadas individualmente ou em conjunto:
1. Um controlador de vdeo completo e muito rpido
2. Uma interface que permite que um teclado de PC e o controlador de vdeo sejam
conectados a um sistema de computador por meio de um serial porta. A interface
executada em 115200 baud (pode ser alterada dentro do software) dando uma
atualizao de exibio muito rpida.
Especificao do controlador de vdeo:
Muito fcil de se conectar, rpido e no requer memria host / externa.
Conjunto de caracteres: Definies de caracteres completas "CGA" (8x8) como
usadas no PC IBM (DOS).
Tamanho da tela: texto - 80x25, 40x25, 80x12, 40x12, Grficos 160x100 ou
QUALQUER mistura (definida por 1 de 25 linhas)
Resoluo: 640x200 para texto de 80 caracteres, 160x100 para grficos Os
tamanhos de letra so definidos para cada linha. Todos os caracteres na mesma
linha tm o mesmo tamanho e estilo de fonte.
Grficos: qualquer parte da tela ativa, at 160x100 pixels. Cada pixel
individualmente enderevel. Definido em qualquer uma das 25 linhas de tela.
Sada de vdeo: Vdeo monocromtico composto padro, tempo PAL ou NTSC, no
entrelaado, portanto sem cintilao.
Memria de exibio: 2000 caracteres internos + 25 atributos de linha - nenhuma
memria de host necessria.
Atualizao e rolagem muito rpidas, qualquer interface usada.
Interface: barramento de dados de 8 bits (requer 10 pinos de E / S), barramento de
dados de 4 bits (requer 6 pinos de E / S) ou dois fios (I2C) que usa apenas 2 pinos.
I 2 C ( graas a Dave Curran por sua orientao e cdigo sobre isso) suporta
relgios de velocidade baixos (100KHz) e altos (400KHz) ou superiores (1MHz ou
mais facilmente realizvel). Hardware: muito baixo custo - dois chips - ATmega328
e 74HCT166 Barramento de dados de 4 bits (requer 6 pinos de E / S) ou dois fios
(I2C) que usa apenas 2 pinos. I 2 C ( graas a Dave Curran por sua orientao e
cdigo sobre isso) suporta relgios de velocidade baixos (100KHz) e altos (400KHz)
ou superiores (1MHz ou mais facilmente realizvel). Hardware: muito baixo custo -
dois chips - ATmega328 e 74HCT166 Barramento de dados de 4 bits (requer 6
pinos de E / S) ou dois fios (I2C) que usa apenas 2 pinos. I 2 C ( graas a Dave
Curran por sua orientao e cdigo sobre isso) suporta relgios de velocidade
baixos (100KHz) e altos (400KHz) ou superiores (1MHz ou mais facilmente
realizvel).
Hardware: muito baixo custo - dois chips - ATmega328 e 74HCT166
Especificao do teclado e do controlador de srie:
Interface serial: Totalmente armazenado em buffer 115200 baud, handshake on
receive, TTL levels.
Interface do teclado: conector de teclado padro do PC PS / 2, aceita teclados
padro feitos para PCs. A iluminao do LED do teclado implementada e permite
bloqueio de maisculas e bloqueio numrico.
Hardware: muito baixo custo - um chip - ATmega88 / 168/328
Usar um processador separado com sua prpria memria permite que o
processador host tenha a maior quantidade possvel de memria. Escrevi um
intrprete ANSI mnimo dentro do processador de interface para lidar com
sequncias de escape para que o software possa ser configurado para usar uma
configurao de terminal ANSI.
Ento, de fato, usando os processadores ATmega, criei um pequeno terminal
mnimo ANSI compatvel.
O controlador de vdeo foi criado usando um processador ATmega328 (ou um
processador ATmega32, aqui ). Isso foi baseado em um projeto e cdigo produzido
por Daryl Rictor(ele produziu uma exibio 40x25 usando um ATmega8 e outros trs
ICs). Eu adaptei o cdigo para usar a memria maior do ATmega328 (originalmente
em um ATmega32) e o modifiquei significativamente para fazer uma exibio de 80
caracteres e tambm para suportar grficos. Eu modifiquei o processamento de
cdigo de controle e o aperto de mo que evitou dois ICs adicionais. O aperto de
mo de 2 fios entre o processador de exibio e o processador IO permite a
sincronizao correta entre os processadores ao transferir dados em srie para o
processador de exibio.
Um escudo Arduino e uma biblioteca para a parte do controlador de vdeo tambm
esto sendo desenvolvidos por Dave.

DESEMPENHO
Os nmeros de desempenho de tempo real so mostrados aqui (tela de 80
caracteres x 25 linhas - velocidades muito semelhantes para todos os modos)
Caso de teste PAL PAL NTSC NTSC
interface Interface 2 fios Interface interface 2 fios
de 8 bits PAL 4 bit NTSC de de 4 bits
8 bits

150.000 caracteres 4,7 6,3 8,3 6,7 8,9 11,0


enviados para a segundos segundos segundos segundos segundos segundos
31915 23809 18072 22388 16853 13636
tela
caractere caractere char / char / caractere char /
+ 1000 "casas do s / seg s / seg sec seg s / seg sec
cursor" (para evitar
a rolagem)

Tela de 2,5 2,5 2,5 3,6 3,6 3,6


deslocamento 1000 segundos segundos segundos segundos segundos segundos
400 400 400 277 277 277
linhas
linhas / linhas / linhas / linhas / linhas / linhas /
(grficos e / ou segundo segundo segundo segundo segundo segundo
texto)

Limpe a tela 1000 2,5 2,5 2,5 3,6 3,6 3,6


vezes segundos segundos segundos segundos segundos segundos
400 400 400 limpa 277 limpa 277 limpa 277 limpa
limpa / limpa / / seg / seg / seg / seg
seg seg

Grficos 26,5 37,1 51,6 37,6 52,4 68,6


Usando cdigos de segundos segundos segundos segundos segundos segundos
12075 8625 6201 8510 6102 4664
controle fornecidos
pixels / pixels / pixels / pixels / pixels / pixels /
para definir 160000 seg seg seg seg seg seg
pixels e redefinir 727KHz 2 727KHz 2
160000 pixels fios: fios:
35,7 49,3
cobrindo a tela
segundos segundos
completa (ou seja, 8956 6488
operaes de pixels / pixels /
320.000 pixels) seg seg

Notas: o
desempenho de 2 fios para o relgio de 400KHz, a menos que indicado. Isso pode
ser melhorado significativamente ao aumentar a velocidade do relgio de 2 fios.
O desempenho do PAL superior ao NTSC porque uma proporo maior do tempo
livre para PAL do que o NTSC, devido s taxas de atualizao da tela.
Cada conjunto de pixels grficos / reset requer 3 bytes para serem enviados, razo
pela qual a transferncia de 8 bits visivelmente mais rpida do que 2 fios.
Condies de teste:
Controlador de host: ATmega88 executando a 16MHz (desempenho idntico ao
Arduino Uno ou Nano, etc.)
Interface de 2 fios: velocidade de clock padro de 400KHz, a menos que
especificado.
Temporizao: Externamente cronometrado eletronicamente usando um
temporizador universal * Black * Star Apollo 100.

CDIGO DE INTERFACE PARA USAR O PROCESSADOR DE


VISUALIZAO
Para mais detalhes, veja o processamento e descrio do circuito mais adiante
nesta pgina. Existem trs opes para interfacear o controlador de exibio:
Interface de 4 bits
Requisitos de hardware
O controlador requer 6 pinos disponveis:
D0 - D3 - Sadas
AVAIL - Sada
ACK - Entrada
Certifique-se de que R6 esteja conectado no controlador de exibio para permitir
transferncias de 4 bits.
Inicializao do controlador
Defina D0, D1, D2, D3 e AVAIL como sadas.
Defina ACK como uma entrada.
Defina AVAIL pino para baixo (0).
Enviando um personagem para a tela
Garantir que o AVAIL seja baixo . Deve j ser baixo, mas, se no, baixe-o.
Aguarde at que a entrada do pino ACK seja baixa . Uma vez que , o processador de
exibio est pronto.
Coloque 4 bits altos do personagem em pinos de sada D0..D3.
Defina AVAIL como alto , para indicar exibio que os bits altos esto prontos
para serem lidos.
Aguarde at que a entrada do pino ACK seja alta . Uma vez que , o processador de
exibio leu os bits altos e est pronto.
Coloque pequenos 4 bits do personagem em pinos de sada D0..D3.
Defina AVAIL como baixo ,
Interface de 8 bits
Requisitos de hardware
O controlador requer 10 pinos disponveis:
D0 - D7 - Sadas
AVAIL - Sada
ACK - Entrada
Certifique-se de que R6 NO esteja conectado no controlador de exibio para
permitir transferncias de 8 bits.
Inicializao do controlador
Defina D0, D1, D2, D3, D4, D5, D6, D7 e AVAIL como sadas.
Defina ACK como uma entrada.
AVAIL pode ser alto ou baixo.
Enviando um personagem para a tela
Aguarde at que a entrada do pino ACK seja o mesmo valor que o pino AVAIL .
Uma vez que , o processador de exibio est pronto.
Coloque o personagem em pinos de sada D0..D7.
Volte o pino AVAIL para indicar tela que os dados esto prontos para serem lidos
e processados.
Interface I2C (dois fios)
Apenas 2 pinos necessrios - SDA e SCL.
A exibio est no endereo 01 (pode ser alterado no cdigo).
Use como para qualquer outro dispositivo I2C e envie cdigos de caracteres de 8
bits.

ESQUEMATICA PARA AMBOS PROJETOS


VERSO 2.0 - Agora usa um processador ATmega328 em vez do ATmega32 antigo. O ATmega328
um processador mais barato, mais novo e menor (28 pinos em vez de 40 pinos). O design
ATmega32 (apenas 8 bit interface - congelado) ainda est disponvel e pode ser visto aqui .
VERSO 2.1 - Agora permite uma interface de exibio de 4 ou 8 bits. NOTA: Exibir a seleo NTSC
movida do PC5 para o PD7.
VERSO 2.2 - Dois fios tambm so suportados. NOTA: Mudana de exibio / carga movida do
PC5 para PC3, AVAIL movido para PC5, / RTS movido para o PC3.
VERSO 3.0 - O suporte de grficos e multi-fontes usa os mesmos pinouts
que para 2.2, mas agora tem resistores de configurao adicionais (se
necessrio, podem ser omitidos) - veja a nota 6 abaixo.

Isso consiste em dois mdulos e, quando usado em conjunto, produz um terminal


ANSI genrico (tambm suportando grficos) usando uma interface serial
compatvel com TTL a 115200 baud (pode ser alterada em software), ento pode
ser usado para qualquer projeto de computador que tenha um E / O e precisa de um
teclado e exibio.
Isso usa um ATmega88 (ou 168 pr 328) para o teclado e o buffer serial e um
ATmega328 para o processador de exibio.
Uma vez que a exibio independente do processador host (por exemplo, Z80), o
host no possui sobrecarga de processamento, ento, quando conectado ao meu
sistema CP / M, este sistema executado muito mais rpido do que muitos dos
sistemas antigos.
O circuito em duas partes distintas, como mostrado abaixo. Se apenas uma
exibio for necessria, ento apenas o circuito para o lado esquerdo da linha
necessrio.
(NO MOSTRANDO RESISTNCIAS DE CONFIGURAO DE FONTE PADRO -
VEJA-SE ABAIXO)

Nota 1: nem todos os pinos da fonte de alimentao no so mostrados. Estes


devem estar conectados ao trilho de fora apropriado.
Nota 2: Inclua R3 para exibio NTSC somente, caso contrrio, no faa nenhuma
conexo entre PD7 e terra.
Nota 3: Inclua R6 e tambm conecte PB1 na interface ao solo para dados de 4 bits
SOMENTE. No conecte nenhum fio verde ao usar a interface de 4 bits.
Nota 4: Inclua R7 e tambm conecte o PB2 na interface terra para apenas dois
fios. No conecte fios vermelhos ou verdes.
Nota 5: Se uma configurao de inicializao de exibio especfica sempre for
usada, o cdigo pode ser alterado (veja abaixo ) e todos os resistores de
configurao foram omitidos.
Nota 6: a fonte padro ser 80 caracteres, nica altura, negrito. Para mud-lo,

Para ilustrar a fiao para as trs opes de interface, veja abaixo ...
8 bits (adequado para conectar a exibio a microcontroladores ou
microprocessadores usando 10 pinos):
4 bits (adequado para conectar a exibio a microcontroladores ou
microprocessadores usando 6 pinos):

Dois fios (adequado para conectar a exibio aos microcontroladores que


suportam o I 2 C):
O cdigo para o controlador de serial / teclado est escrito em C e o cdigo para o
controlador de exibio montador, modificado de forma significativa a partir do
original de Daryl Rictor ( crdito total para Daryl para o original! )
Eu uso o Atrix AVR studio 7 grtis para compilar / montar os dois conjuntos de
cdigo.
Ao usar ambos os mdulos juntos, assegure-se de que a largura do
barramento de dados do processador de exibio corresponda largura do
barramento de dados da interface de teclado / serial, caso contrrio no
funcionar.

PROTTIPO
As duas partes do esquema acima (interface de 8 bits, modo PAL) so construdas
como mostrado aqui. Um resistor liga cada reincio energia porque eu programa
os chips no circuito.

Nota: esta imagem para a verso 2.1. Mudanas de fiao menores para a verso 2.2
O sistema que exigiu a interface (meu design CP / M) mostrado direita. As
conexes TX, RX, / RTS e de energia so feitas entre a interface e o computador
host.
A fiao do barramento de dados entre a tela e as partes da interface do circuito
pode ser vista em azul, aperto de mo entre elas em laranja.
Para interagir a exibio com um microcontrolador sem o teclado ou a interface
serial, requer apenas a parte da mo esquerda. O controlador precisa de 4 ou 8
pinos de sada para os dados, um pino de sada para o "sinal de dados disponveis"
e um pino de entrada para o pino de "confirmao".

PROCESSAMENTO E DESCRIO DO CIRCUITO


O controlador serial / teclado executado em 11.0592MHz (para coincidir com a
interface serial 115200 Baud) eo processador de exibio executado em 16MHz.
A serializao dos dados de vdeo feita usando um conversor paralelo paralelo
74HCT166.
Os sinais de sincronizao e vdeo so mesclados usando uma rede de resistncias
que funciona bem para mim e termina em uma entrada de vdeo padro de 75 ohms
no monitor.
O teclado utilizado um teclado padro "PC" com um conector PS / 2 (NO USB).
Caps lock e num lock funcionam e atualiza os LEDs do teclado conforme
necessrio. As teclas no-ASCII retornam cdigos, mas isso ainda no foi finalizado
e facilmente alterado no cdigo.
Aqui est um diagrama de blocos da interface de exibio e teclado sendo usados
juntos como uma E / S serial-driven para um sistema de microcomputador:

Processador ATmega88 / 168/328 (Serial e I / O de teclado)


Esta codifica a entrada em srie e armazena-a em um buffer circular de 800
caracteres em tamanho. O RTS limpo quando menos de 32 espaos de
caracteres permanecem no buffer e definido quando h menos de 32 espaos de
caracteres usados. Isto para permitir o excesso do sistema de envio sem perder
caracteres.
Quando um personagem ou comando deve ser enviado para o processador de
exibio, o cdigo colocado nos pinos da porta de sada.
Alguns comandos ANSI so interpretados e convertidos para os comandos
relevantes do processador de vdeo.
Processador ATmega328 (vdeo)
Isto tem 2K RAM, portanto, pode acomodar uma exibio 80x25 char com alguns
bytes restantes para o espao de trabalho. O processamento principal transferir
dados da memria para o serial shifter de sada e produzir os sinais HSYNC e
VSYNC. Durante o tempo inactivo do visor, os bits de entrada / estado de entrada
podem ser lidos e os dados recebidos so interpretados como um comando ou
como um caractere inserido na tela. Deslocar e limpar a tela processado dentro
deste processador (muito rapidamente!)
principalmente o cdigo de Daryl, mas eu o adaptei para o processador
ATmega328 que possui 2K de RAM, Adicionou algumas rotinas prprias e
alterei os comandos de posicionamento do cursor linha / col para tomar um
byte de parmetro em vez de usar um conjunto de espaos de caracteres e
alterou o mtodo para permitir a exibio de caracteres de cdigo de controle.
Isso me permitiu modific-lo para produzir uma tela de 80x25. Eu tambm
mudei o cdigo para que apenas um temporizador seja necessrio em vez de
dois. Alm disso, o cdigo de handshaking / data read foi alterado para
permitir a interface com o controlador de teclado / serial sem precisar de um
trinco ou dos outros chips que ele usou. O relgio dot executado em 16MHz
para permitir que uma exibio de 80 colunas seja exibida em um monitor / TV
de vdeo padro. Alm disso, o cdigo de handshaking / data read foi alterado
para permitir a interface com o controlador de teclado / serial sem precisar de
um trinco ou dos outros chips que ele usou. O relgio dot executado em
16MHz para permitir que uma exibio de 80 colunas seja exibida em um
monitor / TV de vdeo padro. Alm disso, o cdigo de handshaking / data read
foi alterado para permitir a interface com o controlador de teclado / serial sem
precisar de um trinco ou dos outros chips que ele usou. O relgio dot
executado em 16MHz para permitir que uma exibio de 80 colunas seja
exibida em um monitor / TV de vdeo padro.
Um pino ATmega328 (veja esquema) determina se a exibio PAL (50Hz) ou NTSC
(60Hz) necessria. Conecte-se atravs de um resistor ao solo para NTSC.

DETALHES DE INTERFACE
Transferncia de dados entre o host (ou interface) e os controladores de
exibio (aplicvel ao modo de 4 bits ou 8 bits).
Os dois processadores devem poder se comunicar entre si e devem aguardar o
outro processador conforme necessrio.
A transferncia de dados feita atravs de uma porta paralela de 4 ou 8 bits.
O aperto de mo entre os processadores alcanado com duas linhas - a linha
"Dados disponveis" e a linha "Confirmar".
O processador serial / teclado usa as duas linhas de handshake para ver se os
dados podem ser enviados para a tela.
O processador de exibio usa as duas linhas de handshake para ver se os dados
foram enviados .
O aperto de mo o mesmo para transferncias de 4 ou 8 bits, embora o
significado seja ligeiramente diferente ...
Transferncias de 8 bits
Controlador de host:
o host (processador serial / teclado) aguarda at que a linha "Confirmar"
corresponda linha "Dados disponveis". Uma vez que o faz, os dados so
colocados na porta de sada e a linha "Dados disponveis" invertida (ou seja, 0 a 1
ou 1 a 0).
Processador de exibio:
se o "Dados disponveis" NO coincida com a linha "Reconhecer", os dados foram
enviados para que a entrada de dados seja lida e a linha "Reconhecer" ativada.
ONCE DATA FOI LEI. Portanto, uma vez que a transferncia de dados esteja
completa, as linhas "Confirmar" e "Dados disponveis" tero o mesmo valor.
Esses dados so ento processados.
Transferncias de 4 bits
Controlador de host:
(O host ( processador serial / teclado ) tem AVAIL definido como baixo quando
inicializado. Isso permanecer baixo quando inativo no modo de 4 bits)
Espera at que a linha "Confirmar" corresponda linha "Dados Disponveis" (LOW).
Uma vez que o faz, os ALTO 4 BITS dos dados so colocados na porta de sada e a
linha "Dados Disponveis" est configurada ALTA.
Espera at que a linha "Confirmar" corresponda linha "Dados Disponveis" (HIGH).
Uma vez que o faz, o LOW 4 BITS dos dados colocado na porta de sada e a linha
"Dados disponveis" est definida como BAIXA.
Processador de exibio:
se o "Dados disponveis" NO coincida com a linha "Reconhecer", os dados foram
enviados para que a entrada de dados seja lida e a linha "Confirmar" seja ativada
ONCE DATA IS READ. Se o AVAIL estiver alto, os 4 bits lidos so armazenados
nos 4 bits altos de um byte de buffer, mas no processados (porque a transferncia
de dados ainda no est completa). Se o AVAIL estiver baixo, os 4 bits lidos so
armazenados nos 4 bits baixos de um byte de buffer que, em seguida, completa a
transferncia de bytes. Este completo valor de 8 bits processado.
Para demonstrar isso, consulte o seguinte:

I 2 C (dois fios) transferncias


Interface padro I 2 C a altas velocidades (mais de 1MHz se necessrio). O
processador de exibio est configurado no cdigo para ser o endereo I 2 C 01.
Mude o cdigo se for necessrio um endereo diferente.
Consulte a folha de dados do microcontrolador para a qual a tela est conectada
para obter mais informaes.

CDIGO DE FUNO E PROGRAMAO


Nota - 18 de setembro de 2013 - Cdigo atualizado para utilizar pinos trocados
para AVAIL, Shift / load e / RTS.
27 de setembro - pinos de configurao adicionais para fonte de inicializao.
Se estiver usando o software mais recente aqui, voc DEVE garantir que voc
esteja usando as conexes como mostrado no esquema acima.
Codificao baseada no cdigo original produzido por Daryl Rictor
Muito obrigado a Dave Curran por fornecer-me o cdigo de dois fios para o
processador de exibio.
O cdigo-fonte comentado e os arquivos HEX para o processador de serial / teclado
e processador de exibio (ou verso anterior para ATmega32 ) processadores
esto AQUI .
H uma questo de I 2 C se o fluxo de dados no for aberto - ento, se estiver
usando o I 2 C, no feche o fluxo, caso contrrio, alguns dados podem ser
perdidos.
Ao programar os processadores ATMEL, assegure-se de que os bits de fusvel
adequados sejam definidos (consulte a documentao / detalhes do programador),
pois estes precisam usar as seguintes configuraes:

A crystal (XT) clock (must be rail to rail for the display controller)
No watchdog timer
No clock divider
JTAG disabled
OCD disabled
No boot program

Deve usar o relgio XT rail-to-rail para o processador de vdeo, pois isso tambm
acende o 74HCT166 (conforme permitido na folha de dados ATMEL).
As configuraes de fusvel adequadas para os dois controladores so as seguintes
(consulte as folhas de dados para informaes)

For the 328P interface chip:


Low: 0xFF
High: 0xD9
Extended: 0xFF

The 328P display chip must be set to rail-to-rail crystal operation, so the fuse bytes for that
would be:
Low: 0xF7 (ie. CKSEL3 = 0)
High: 0xD9
Extended: 0xFF

A fonte e os arquivos HEX fornecidos so para a opo de inicializao flexvel,


onde pull-downs externos so usados para determinar o modo de operao. Para
simplificar o circuito, estes podem ser omitidos e o cdigo alterado (alterao
menor) se uma configurao especfica for sempre usada no arranque.
Dentro do SBCVideo.ASM j inclu as linhas para mudar ...

; HARD CODED OVERRIDE IF PREFERRED


; ldi J, 1<<CONFIG_PAL | 0<<CONFIG_8_OR_4_BIT | 1<<CONFIG_N_TWI |
1<<CONFIG_80_CHAR_PER_LINE | 1<<CONFIG_SINGLE_HEIGHT | 0<<CONFIG_BOLD
; mov configByte,J

Remova o ";" Comente caracteres do incio das linhas "ldi" e "mov" e configure os
bits conforme necessrio. Isso ir substituir completamente os resistores pull-down
para que nenhum deles seja necessrio.

CONFIG_PAL = 1 for PAL or 0 for NTSC


CONFIG_N_TWI = 0 for two-wire, otherwise 4/8 bit will be used
CONFIG_8_OR_4_BIT = 1 for 8 bit or 0 for 4 bit (if two-wire has not been selected)
CONFIG_80_CHAR_PER_LINE = 1 for 80 char, 0 for 40 char
CONFIG_SINGLE_HEIGHT = 1 for normal, 0 for double-height

CARACTERES ESPECIAIS / CDIGOS DE CONTROLE


ASCII padro implementado para o conjunto de caracteres principais. Os cdigos
ASCII estendidos so implementados da mesma forma que para o DOS. Os cdigos
de controle so ASCII padro onde aplicvel - outros cdigos adicionados para
permitir o controle da tela. A implementao completa mostrada abaixo:
Cdigos de controle de exibio de vdeo:
Hex (Decimal) e significado

01 (01) - Cursor home (Standard ASCII)


02 (02) - Define cursor character (2nd byte is the curs character, or 00 to turn off) <--New for
3.0
03 (03) - Cursor blinking
04 (04) - Cursor solid
05 (05) - Set graphics pixel (next two bytes = x,y) <--New for 3.0
06 (06) - Reset graphics pixel (next two bytes = x,y) <--New for 3.0
08 (08) - Backspace (Standard ASCII)
09 (09) - Tab (Standard ASCII)
0A (11) - Linefeed (Standard ASCII)
0C (12) - Clear screen (Standard ASCII)
0D (13) - Carriage return (Standard ASCII)
0E (14) - Set column 0 to 79 (2nd byte is the column number) or 0 to 39 for a 40 char line
0F (16) - Set row 0 to 24 (2nd byte is the row number)
10 (16) - Delete start of line
11 (17) - Delete to end of line
12 (18) - Delete to start of screen
13 (19) - Delete to end of screen
14 (20) - Scroll up
15 (21) - Scroll down
16 (22) - Scroll left
17 (23) - Scroll right
18 (24) - Set font attribute for the current line (see elsewhere on this page for details) <--New
for 3.0
1A (26) - Treat next byte as a character (to allow PC DOS char codes 1 to 31 to be
displayed on screen)
1B (27) - ESC - reserved for ANSI sequences
1C (28) - Cursor right
1D (29) - Cursor Left
1E (30) - Cursor up
1F (31) - Cursor down
20 (32) to 7E (126) - Standard ASCII codes
7F (127) - Delete
80 (128) to FF (255) - PC (DOS) extended characters

Ento, para imprimir "Ol" na coluna 18, a linha 10 no monitor em BASIC seria a seguinte:
IMPRIMIR CHR $ (14); CHR $ (17); CHR $ (15); CHR $ (9); "OL"
Algumas seqncias de escape ANSI / VT100 foram implementadas para permitir que
programas como o Wordstar etc. sejam executados na mquina CPM. Os implementados
so mostrados abaixo (Esc = caractere 1B Hex, 27 decimal):

Esc[Line;ColumnH or Esc[Line;Columnf moves cursor to that coordinate


Esc[J=clear from cursor down
Esc[1J=clear from cursor up
Esc[2J=clear complete screen
Esc[K = erase to end of line
Esc[1K = erase to start of line
Esc[L = scroll down
Esc[M = scroll up
Esc- = turn off ANSI interpreter - NEEDED IF USING GRAPHICS otherwise char 1B can't be sent to
the display <--New for 3.0

O exemplo acima tambm pode ser implementado usando seqncias de escape em vez disso ...
IMPRIMIR CHR $ (27); "[18; 10H"; "OL"
A fonte de caracteres no a mesma fornecida por Daryl. Recriei as fontes completas e negritas de
um bitmap de 8x8 caracteres para uma exibio de PC CGA (usando um pequeno programa VB). A
maioria parece ser idntica, ento eu suponho que usamos uma fonte similar. No entanto, eu inclu
todos os caracteres, incluindo aqueles normalmente reservados para cdigos de controle.
Os cdigos ASCII de 00 a 1F (e 7F) so reservados para o controle. No entanto, o mapa de
caracteres tambm possui caracteres de exibio com esses valores. Esses caracteres podem ser
exibidos enviando o cdigo 1A (26 decimal) antes de enviar o cdigo para o personagem. Este
prefixo diz ao processador de exibio para armazenar o personagem real na tela e no trat-lo
como um cdigo de controle.
por exemplo. Em BASIC, para exibir o smbolo do corao (em 03) voc pode usar o seguinte ...
IMPRIMIR CHR $ (26); CHR $ (3)

ATRIBUTOS DA PIA BAIXA


Cada linha pode ter sua prpria fonte definida. No pode ter tipos de fontes misturados na mesma
linha.
Isso pode ser:
40 Caracteres normais
80 Caracteres normais
40 Caracteres corajosos
80 Caracteres corajosos
40 Carter normal de dupla altura
80 Caracteres de altura normal de altura
40 Caracteres negrito de dupla altura
80 Caracteres negrito de altura dupla
Isto ilustrado aqui:
Quando a "altura dupla" especificada, internamente, a linha atual definida como "metade superior
de altura dupla" e a seguinte linha obtm a mesma definio de fonte e "metade inferior de dupla
altura".
A tela sempre endereada como a linha 0..24, com duas alturas cobrindo duas linhas.
O byte de atributo de fonte definido da seguinte maneira:
7 6 5 4 3 2 1 0

Grficos Poupar Poupar Poupar Poupar Altura Negrito 80


dupla caracteres
Assim, a altura normal de 80 caracteres 0b0000011, ou 0x03, 40 caracteres normais so
0x00000000 ou 0x00 etc.
Para configur-lo, mande 0x18 (veja acima ) seguido do nmero do atributo na tela.
Quando os caracteres em uma linha transbordam para a seguinte linha OU uma alimentao de linha
emitida, a seguinte linha tambm ser configurada para a mesma definio de fonte - no h
necessidade de redefinir em cada linha.
Quando um cursor colocado em uma linha (cursor para cima / para baixo ou definir comando de
linha), a fonte ativa fica o que quer que seja naquela linha, portanto, no necessrio redefinir a
fonte para coincidir com a linha atual.
Quando uma seleo de fonte enviada, a linha atual ser definida para essa fonte (mais as linhas
que se seguem se o texto flui ao longo do final, conforme descrito acima).
Quando uma tela clara emitida, a tela completa levar a seleo de fonte atual como padro.
Para linhas de altura dupla, a posio de linha usada aquela linha ocupada pela metade superior
do texto.
Reposicionar o cursor sobre a segunda linha de uma linha de altura dupla dar resultados estranhos,
porque isso ser redefinido para ser o topo de uma linha dupla.

GRFICOS
Os grficos 160max bitmapped completos so suportados. Duas funes so includas para definir e
redefinir os pixels.
Sempre que um comando de pixel ou reset de pixel emitido, as coordenadas X / Y determinam qual
linha de exibio precisa ser usada para grficos. Isso automtico, portanto, no necessrio
definir atributos de linha grfica. Se a linha estiver configurada para o texto, a linha ser
automaticamente apagada antes de configurar o pixel.
As coordenadas de pixels so X = 0..159, Y = 0..100
Parte de uma tela mostrada aqui:
Ento, Y = 0..3 ocupar o espao onde a linha de texto superior normalmente apareceria, 4..7 a
prxima linha de exibio, etc. A linha horizontal completa se tornar modo grfico.
Para definir um pixel, envie 0x05, X, Y como trs bytes.
Para redefinir um pixel, envie 0x06, X, Y como trs bytes.
Internamente, os grficos so mantidos como blocos de caracteres com cada bit atribudo da
seguinte forma
0 1

2 3

4 5

6 7

Assim, em vez de definir / redefinir pixel, o cursor pode ser posicionado na linha, o atributo ento
ajustado para 0x80 (grficos) e caracteres individuais enviados como seria feito para linhas de texto.
por exemplo. Um bloco com pixels 0,4,5 e 7 set seria 0b10110001, ou 0xB1
Certifique-se de que o cursor est desligado ou no est posicionado em uma linha grfica, caso
contrrio, os pixels piscaro onde o cursor est posicionado.

CONJUNTO DE CARACTERES
O conjunto de caracteres completo (mostrando PC CGA 80 char bold), exatamente como mostrado,
mostrado aqui:
Um close-up de uma exibio de exemplo (executado no meu computador CP / M projetado em casa
) em um monitor PAL CRT de tela verde mostrado aqui:

(Brilho voltado para que voc possa ver as linhas de digitalizao - fundo normalmente preto)