quarta-feira, 31 de janeiro de 2007

Módulo RTC.

O módulo RTC é baseado num PCF8563. Uma bateria tipo botão alimenta o circuito enquanto a alimentação está desligada. Abaixo encontra-se uma figura da placa, que foi projetada para encaixar-se sobre o leitor de MMC/SD.



O layout, em 300dpi, encontra-se abaixo.

terça-feira, 30 de janeiro de 2007

Mais um passo.

As modificações nos circuitos dos registradores de deslocamento foram testadas com sucesso. Agora é possível inclusive operar em modo SPI como se fosse num microcontrolador, ou seja, para transferir um byte, basta:

LD A,BYTE ; Byte a ser enviado
OUT (SPI_ADDRESS),A ; Envia byte
NOP ; entre o OUT e o IN é necessário que
; ocorram ao menos 8 ciclos de clock.
IN A,(SPI_ADDRESS) ; Recebe o byte

O circuito aogora está pronto para iniciar os primeiros testes com o cartão SD.

Mas antes é necessário realizar...

- Atualização do guia de montagem e teste, para contemplar as modificações já efetuadas;
- Atualização do circuito e do "layout" da placa para a revisão A;
- Limpeza da casa (mesas dos computadores, bancada, etc);

Nota: Entre o OUT e o IN é necessário que se passem ao menos 8 ciclos de clock. As instruções automáticas INIR e OTIR funcionam porque gastam ciclos de clock suficientes entre leituras ou escritas consecutivas.



Na foto, o protótipo 2 e a sonda lógica com contador digital, uma ferramenta desenvolvida especialmente para ajudar na montagem e teste do circuito (desde o protótipo 1). O projeto completo da sonda vai ser divulgado em breve.

Reta final do projeto de "hardware"

O Hardware do protótipo 2 está em fase final de testes. Falta ainda testar duas modificações, relacionada aos sinais "RCK" do 74HCT595 e "LD165" do 74HCT165, pois há um pequeno erro de conceito que passou batido durante o projeto do prototipo2.

Eu criei sinais pra desabilitar o "reset" do gerador automático de clock nos eventos de leitura e de escrita na porta SPI, mas me esqueci de que os sinais que acionam o 74HCT595 e o 74HCT165 ficaram DEPOIS do circuito de desabilitação, ou seja depois dos flip-flops sincronizadores. Assim, não é possível nem ler o byte que foi transferido anteriormente, nem carregar um novo byte para ser transferido depois.
Quanto ao sinal "LD165", que vai para o 74HC165, é fácil de resolver, pois basta conectar este sinao à linha /WR0, ou seja, antes do flip-flop. Já o sinal "RCK595" temque ser tirado de um outro ponto, pois este é invertido em relação ao sinal /RD0. Assim este sinal vai ser retirado do evento do STOP do gerador de clock automatico (pino 8 do contador 393).

Com estas configurações vai ser possível o funcionamento como se fosse um "hardware" SPI tradicional, ou seja

OUT (porta dados), valor
serialização automática do valor
e em seguida IN (porta de dados)

O circuito atual pode ser visto abaixo, já com as modificações incorporadas.


clique na imagem para ampliar

segunda-feira, 29 de janeiro de 2007

Resolvendo problemas no conversor 5V->3V

O conversor de 5V-3V estava apresentando um comportamento estranho. Logo após a tensão ter sido ajustada para 3,4Volts, o 74HC125 foi conectado e a tensão passou para 4,3Volts. E desta vez o potenciômetro de ajuste de nada adiantava.

A causa eram os diodos internos de proteção do 74HC125, que conduziam, grampeando assim a tensão do lado de 3V para 4,3Volts, que é exatamente 5V-0,7V da tensão direta do diodo.

A solução foi identificar as linhas responsáveis (SCK, CS e DIN) e colocar em serie um resistor de alguns kilo-ohms. Um capacitor eletrolítico logo após o regulador de 3V também foi colocado.

Em tempo: 3V é o nome da linha que é ajustada para 3,4Volts em aberto, mas cujo valor flutua um pouco, dependendo do consumo do cartão. Mas isso não é problema, pois o cartao trabalha bem entre 2,6 a 3,6 Volts

sexta-feira, 26 de janeiro de 2007

Mais alguns testes em vista, e mais algumas possibilidades

O protótipo 2 já está quase 100% testado, pronto portanto para ser usado no desenvolvimento dos drivers para cartão SD e MMC, mas algumas coisas no circuito ainda podem ser melhoradas.

  • O conversor 5V->3V pode ser melhorado,
  • A linha LIGA_3V3 que também aciona 2 portas do HC125 estã inútil, pois quando não há alimentação, não importa se as portas estão ou não conectadas. Com isso é provável que o diodo D5 saia do circuito, liberando assim uma linha do 74HCT595.
  • A porta IC6C talvez possa ser eliminada, ligando-se a linha SD_DOUT do cartão diretamente ao pino de entrada (SER) do 74HC595.
Porque estas mudanças são importantes? É que com mais uma linha de controle e com mais uma porta 5V->LV é possível conectat 2 cartões simultaneamente à interface, pois o protocolo SPI dos cartões tao MMC/SD usa uma estrutura de Barramento, com todas as linhas em comum, exceto a linha CHIP SELECT, que é individual para cada cartão.

Mas isso só vai ser testado depois que as rotinas básicas de acesso ao cartão já estiverem prontas. Além disso, o escopo dos requisitos definidos há um bom tempo é suportar um cartão.

quinta-feira, 25 de janeiro de 2007

HB-7000: Guia de Montagem e Teste

O guia de montagem para a interface leitora de SD/MMC está quase pronto.

O guia está sendo criado/revisado juntamente com a primeira montagem do protótipo 2. Até agora, os principais sub-circuitos já foram testados e estão funcionando.

Os testes de hardware se baseiam em comandos simples do BASIC do MSX, e têm como objetivo testar passo a passo o funcionamento do circuito, enquanto este está sendo montado.

A estrutura dos testes é apresentada abaixo. Os testes em verde já foram efetuados no protótipo2. Os testes em laranja ainda estão sendo escritos.

Durante os testes do "hardware" I2C, o teste permitiu isolar uma falha, cuja causa já foi descoberta e corrigida, gerando uma nota no roteiro de teste. O diodo que estava aberto foi substituído e os testes prosseguiram.


1. Montagem da placa
  • Testes Estáticos

2. Hardware Básico
  • Teste do Decodificador de Endereços
  • Teste do Registrador Endereçável
  • Teste do "flip-flop" Sincronizador
  • Teste do Gerador de "clock" Automático
  • Teste do "Hardware" I2C
  • Teste dos registradores de deslocamento
  • Teste do conversor 5V->3V
  • Teste do conversor TTL<->LV
Uma prévia do teste pode ser encontrada neste link

Enfim, um nome para o projeto

O projeto do leitor de SD/MMC, apesar de ter avançado bastante, ainda não tinha um nome. Apesar de vários terem surgido, nenhum ainda tinha soado bem.

Decidi então seguir a nomenclatura de produtos para o HotBit, e por isso projeto foi batizado de:

HB-7000: Interface rápida para cartões SD/MMC

quarta-feira, 24 de janeiro de 2007

Concluída a montagem do protótipo2

A montagem do protótipo 2 foi concluída. Eis a foto, ainda sem os CIs nos soquetes:



Os testes estáticos foram realizados comparando as ligações do diagrama contra o circuito montado. Foram necessárias apenas 3 correções, duas delas por falha na placa, durante a corrosão do circuito impresso, e uma por um erro no diagrama. Houve ainda uma modificação que não estava prevista inicialmente no diagrama, que também foi implementada.



Agora começam os testes dos diversos sub-circuitos.


O diagrama da Revisão A encontra-se abaixo:

terça-feira, 23 de janeiro de 2007

Montagem do Protótipo2

A montagem do protótipo 2 avançou um pouco. Agora falta colocar os conectores do cartão MMC, I2C e do barramento MSX.

Captura de Listagem

O "software" em assembler para captura de listagem foi testado e está funcionando. A configuração do HyperTerminal, ou de qualquer outro programa de captura serial é 9600Bauds, 8 bits, Sem paridade, 1 bit de parada (9600 8-N-1).

quinta-feira, 18 de janeiro de 2007

Protótipo 2 a caminho!

O protótipo 2 está a caminho...

Ainda não é a versão final, ja está bem próxima disso. A maior novidade, o "latch" endereçável, juntamente com o suporte (de hardware) a I2C já estão testados.
A placa já está roteada, corroída, e pronta para ser montada.



O circuito encontra-se abaixo:

sexta-feira, 29 de dezembro de 2006

Captura de listagem

Uma forma fácil de armazenar a listagem de programas é um simples conversor paralelo-serial, composto de um microcontrolador, que aguarda o MSX baixar a linha de strobe, para receber o dado e enviá-lo via porta serial do PC. O microcontrolador faz ainda a sinalização de "busy" (ocupado) para o MSX.




O software para realizar esta implementação é muito simples. Uma possibilidade é utilizar um microcontrolador da família 8051, programado em Basic. A porta P1 recebe os dados da porta de impressora do MSX. A linha P3.2 recebe o sinal de "Strobe", e a linha P3.3 sinaliza a condição de ocupado ("busy"). A interface com o PC pode ser implementada através de um simples transistor.


' Captura porta impressora do MSX e envia
' para porta serial

'SERIAL PORT CONFIGURATION
$BAUD = 19200 'set 19200 baud rate for
$CRYSTAL = 11059000 '22.1184 MHz crystal

dim a as Byte
Reinicia:
p3.3=0 ' desabilita condição ocupado

Aguarda:
if p3.2=1 then goto Aguarda' aguarda sinal strobe

p3.3=1 ' indica ocupado
print p1; ' envia o caractere recebido na serial

' waitms 1
goto Reinicia ' aguarda proximo caractere



Versão em Assembly:


; captura listagem de impressora do MSX
; para a porta serial

$MOD51

org 0
ljmp inicio

inicio: mov a,#255
mov p1,a
setb p3.1
setb p3.2
setb p3.3

mov scon,#40h
mov pcon,#0
mov tmod,#20h
mov th1,#253
mov tl1,#253
setb tr1

reinicia: clr p3.3
aguarda: jb p3.2,aguarda
setb p3.3
mov a,p1
mov sbuf,a
jnb ti,$
clr ti
sjmp reinicia
end

O Diagrama do circuito, baseado num microcontrolador AT89C2051 encontra-se abaixo:



A alimentação do circuito pode ser retirada do conector de Joystick.

quarta-feira, 27 de dezembro de 2006

Testes do protótipo 1 no Expert

Esse Natal rendeu muitos presentes para o MSX....

O protótipo 1 foi testado com sucesso no Expert, e a interface I2C também funcionou. Novas idéias surgiram, mas agora é hora de retomar o fio da meada, ou seja o leitor de cartões SD/MMC.

O próximo passo, é montar o protótipo 2, e começar a trabalhar no software, ou seja, nas rotinas básicas de acesso ao cartão SD/MMC.

segunda-feira, 25 de dezembro de 2006

Interface SPI + I2C simplificada

Da idéia à prática:
A implementação da interface SPI + I2C, até o momento, foi um sucesso, tanto nos testes estáticos, quanto na leitura e escrita utilizando o barramento I2C. O SPI ainda não foi testado por falta de tempo e de um dispositivo que opere neste barramento.

O software de baixo nível ("driver") I2C foi adaptado a partir de uma implementação de David R Brooks que estava disponível sob licença GPL na internet, mas ainda precisa de algumas modificações para trabalhar com memorias flash (o original usa memoria RAM ferromagnetica, que nao tem latência de escrita de página). A leitura, por outro lado, já está plenamente funcional, sendo capaz de ler 16Kbytes de dados em 10 segundos, mesmo sem nenhuma otimização da rotina de leitura.

Segue abaixo um diagrama do circuito, bem como uma ilustração de como ficou a placa.





Os testes foram feitos num Expert 1.1 (soquetado), que recebeu apenas 10 fios.

Eis a foto da montagem "pendurada"



E uma foto da Tela. da TV, num "dump" de memória do "simple" assembler. A E2prom serial utilizada no teste pertencia a um velho celular Ericsson.

domingo, 24 de dezembro de 2006

Interface SPI + I2C simplificada

Com um mínimo de hardware (apenas 3 CIs) é possível implementar uma interface para suportar 2 portas SPI e mais um barramento I2C.

A interface, mapeada em I/O, utiliza um pino livre do próprio decodificador interno do MSX (IC5 no HotBit e IC29 no Expert).

As portas funcionam no modo "bitbang", mas para otimizar a velocidade, foram usados alguns artifícios:
  • Os bits de entrada estão localizados nas posições 0 e 7 da palavra lida. Assim, para ler um bit, bastam duas instruções de rotação de registrador com "carry";
  • Um "latch" endereçável de 8 registradores de 1 bit (LS259) permite escrever um bit com uma rotação e e uma soma com "Carry";
Esta interface permite ligar vários dispositivos interessantes, como:

SPI:
  • Cartões de memória de Playstation;
  • Cartões MMC/SD (em modo SPI);
  • Joysticks de Playstation;
  • Relógios de tempo Real;
  • Displays LCD de celular;
  • Relógios de tempo real (DS1302,...);
  • Memórias seriais (94x46,...);
I2C:
  • Memórias seriais (24Cxx);
  • relógios de tempo real (PCF8583);

quarta-feira, 20 de dezembro de 2006

Direto do Túnel do Tempo...

Reativei hoje, após 12 anos sem uso, meu velho gravador HB2400. Para minha felicidade ele está funcionando em perfeita ordem e para minha surpresa, a maioria das coisas que tenho em fita ainda funciona!!

Eis algumas pérolas, que não constam em nenhum catálogo de programas para MSX:

Seeräuber, ou "pirata" em alemão (ladrão dos mares). Desenvolvido em assembler no Simple. Nunca chegou a ser terminado, pois a faculdade e o namoro consumiram todo o meu tempo, naquele início de década de 90. As cores dos meus programas eram meio esdrúxulas, pois eu tinha uma TV preto e branco, e escolhia as cores simplesmente pelo contraste.
"RightSoft" era minha marca (nunca) registrada, e o nome foi escolhido por ser o único nome bacana que dava pra escrever com o restinho que me sobrara de uma cartela de "letraset" (decalques transferíveis)


Outra tela do programa. Os comandos eram navegáveis via setas de cursor. A seleção era feita por ENTER, ou ESPAÇO, e o retorno ao menu superior era através de "escape". A tela era baseada em scrren1, com caracteres redefinidos, tanto para o logotipo quanto para as letras em fundo invertido. O programa era feito para fita cassete, pois eu nao possuía "disk drive".

Este outro programa era da autoria do irmão de um amigo, com quem eu trocava um monte de programas em fita cassete. Também foi com esses amigos que eu consegui meu "simple" modificado, que tem função "Fsave/Fload", capaz de carregar/ler blocos a 2000bauds.



Outra tela do Pirata em ação, carregando um programa:



Aqui, mais um programa meu, de identificação do cabeçalho dos programas em fita. Ele identificou outro programa, que tinha apenas 30 bytes, chamado LETUDO!!



E para finalizar (por hoje) o último programa que eu havia feito para o MSX, capaz de decodificar código morse a velocidades variáveis, portado de um "paper" para o processador 8080. Havia também um "hardware" externo, que filtrava o sinal captado por um rádio e acionava a entrada de joystick, que era entendida pelo programa.



Quero ver se encontro agora os programas COPY3, cujo menu era inspirado no "PCTOOLS", e o COPY4 (na realdiade, 4.1 ), em Screen2, com janelas semelhantes ao TurboPascal, e navegação por setas de cursor, entre outros avanços introduzidos pela biblioteca de janelas que eu desenvolvi há muito tempo atrás. Esta biblioteca utilizava uma "recursividade lateral", pois recebia um "string" de tamanho variável, que poderia ter como parâmetros ponteiros para outras "strings", que quando selecionadas chamavam a mesma rotina recursivamente. Era legal!!

terça-feira, 19 de dezembro de 2006

Em time que está ganhando não se mexe

Como diz o ditado, em time que está ganhando não se mexe. Por isso, com a simplificação do circuito do sincronizador, a porta NAND que sobrou voltou ao gerador de "clock" automático, que retornou à sua configuração original, já bem testada no protótipo 1. Sobraram duas portas do LS125, que tanto podem ser utilizadas como entradas, ou como portas de saída no circuito da interface I2C, eliminando os diodos D2 e D3.

Na figura abaixo está o diagrama atual do Protótipo2.


A simplificação também permitiu diminuir 1 "jumper". Não é muito, face aos 23 "jumpers" restantes, mas a simples possibilidade de se fazer a placa de face simples já compensa o trabalho.

Simplificação no Sincronizador

Acabei de testar uma simplificação no sincronizador do protótipo 2, que vai permitir economizar uma porta lógica NAND. A porta "livre" deverá ser usada no circuito do gerador de clock automático, no lugar do inversor a transístor, ou na lógica de inibição do sinal de "clock", caso o arranjo com o buffer não funcione a contento.

diagrama do sincronizador já modificado.

segunda-feira, 18 de dezembro de 2006

Protótipo 2 a caminho

O protótipo 2, já está a caminho, e inclui mudanças resultantes dos testes efetuados com o protótipo1. O suporte a I2C já está incorporado, sem crescer a quantidade necessária de "chips". Mas como nem tudo é perfeito, ainda ficou faltando o LED :) .

Eis o circuito (clique na figura para amplicar):


e um "preview" da placa, roteada em face simples.

domingo, 17 de dezembro de 2006

Mais um desafio

Mais um desafio para o projeto do leitor de MMC. Só que desta vez é mais fácil de resolver.

Nos microcontroladores com unidade SPI, normalmente há um registro de dados, que é escrito antes de se invocar uma transmissão, e depois que a transmissão acontece, este registro é lido de volta, pois contém o byte recebido.

No circuito atual do leitor de MMC, a leitura acontece antes da trasmissão/recepção, e para saber o byte recebido, é necessário fazer outra leitura. Só que essa leitura gera automaticamente outra escrita, ou seja, oito ciclos de clock. Assim, é necessário algum mecanismo para inibir esta escrita automática quando se quer apenas ler o último byte recebido, como por exemplo após uma instrução INIR (leitura de bloco).