Olá turma,

Voltei a "mexer" com eletrônica e estou fazendo alguns experimentos com o arduino.

Meu problema é o seguinte:

Quero criar um joystick para o "Nintendinho" com o arduino, já fiz experiencias lendo o joystick do NES seguindo este artigo 

Arduino lendo Joystick de NES

Já conheço o circuito do joystick o qual utiliza um Registrado de deslocamento CD 4021, a partir do código do site citado e tentei fazer o inverso, mas falta conhecimento.

Os sinais provenientes do console são 

Clock -> saida

Latch -> saida

Data -> entrada (8bist seriais)

O CI 4021 converte 8 bit paralelos em serial o qual é enviado para o Pino Data.

o Latch é para controlar o CI e o Clock para o funcionamento do CI.

Minha Principal dúvida é como "gerar" esse byte serial e se comunicar com o console.

Poderiam me indicar o caminho das pedras para eu pesquisar.

Obrigado 

Juliano Coelho

Exibições: 331

Responder esta

Respostas a este tópico

Sugiro que use um tradutor da Google :

Para o registro de deslocamento para "pegar" as entradas das linhas de dados, ele precisará de um sinal indicando para fazer isso. É para isso que a linha LATCH é para. Ao fazer a transição da linha LATCH LOW-HIGH-LOW, os estados do botão sentados no pino de registro de turnos serão bloqueados no registro. A duração no ALTO pode ser bastante curta, mas, para referência, o protocolo NES fará isso por cerca de 12 microssegundos. Uma vez que os dados estão bloqueados, o primeiro estado do botão fica disponível na linha DATA. A linha DATA irá percorrer os estados do botão sempre que o pino CLOCK for pulsado da mesma maneira que a linha LATCH foi. O que significa que depois de travar os dados, o relógio sete vezes irá esgotar todos os dados para os estados dos botões. A ordem exata dos botões que serão enviados em série é descrita claramente no código Arduino.

Para resumir, o código Arduino deve fazer o seguinte:

  • Pulse a linha LATCH para que o registro de deslocamento possa "pegar" os dados.

  • Leia o pino DATA e salve este estado do botão.

  • Pressione a linha CLOCK + salve este estado do botão.

  • Repita o passo 3 seis vezes mais.

  • Faça algo legal com todos esses dados!

Obrigado amigo por responder. 

Não sei se fui claro, está parte é para leitura do joystick, já consegui fazer. O que eu quero agora é o contrario fazer o papel do joystick, (estou estudando comunicação serial)  de qualquer forma acredito que tenha que implementar o protocolo utilizado acima.  Para ser direto quero fazer com o arduino o papel do CD 4021.

Acredito que eu tenha que ler o sinal do pino LATCH para "sincronizar", ou seja, disponibilizar o byte. 

Ha bom !
Eu realmente não tinha entendido o seu propósito.

Deduções :

- Pino  Latch será INPUT para Arduino

- Pino DATA será Output para Arduino 

- Pino CLOCK será imput para Arduino 

A partir dessas afirmações poderá fazer o seu programa, mas deverá saber qual a frequencia do Clock do SNES e o timing dos outros pinos. 

Veja se encontra nesse link :

https://playground.arduino.cc/Main/InterfacingWithHardware#joygame

obrigado pela indicação, vou estudar.

Encontrei bastante material de como utilizar joysticks diversos, estão sendo uteis para meu propósito.

Achei uma pagina que mostra o gráfico desses pinos:

http://www.zero-soft.com/HW/USB_NES_old/

Na pratica vc precisa:

Definir os pinos (entradas e saídas). Latch e clock na int0 e int1.

"Atachar" os pinos Latch e Clock em 2 interrupções (int0 e int1) de borda de subida, algo como:

attachInterrupt(0,interrupcao,RISING);

Vc precisa de um contador para ponterar quem vai dessa vez.

Esse contador precisa ser zerado a cada interrupção provocada pelo Latch.

A cada interrupção de clock vc manda para o pino data um novo bit e incrementa o contador.

Algo como:

void latch(void)

{ contador=0;}

void clock(void)

{ if ((dado & contador) ==0)  digitalWrite(pinodado,LOW) else digitalWrite(pinodado,HIGH);

    //se o bit escolhido por dado for 0 manda um 0...

  contador++;  Aponta para o proximo.

}

Obrigado Eduardo.

Complementando as informações o NES se "comunica" com o CI 4021 da seguinte forma:

"A cada 60Hz o NES envia um sinal de 12us para o LATCH. (travando os estados das entradas)

6us mais tarde, o NES envia 8 pulsos em nivel alto (clock), (12us por ciclo completo)" 

após este ciclo ele faz o que tem que fazer e reinicia o processo.

 

O que cheguei a fazer:

Eu tentei ler o pino LATCH mais só obtive leitura 0, assim como só obtive  no clock.

A partir da sua Sugestão vou estudar e tentar mais um pouco.

Amanhã relato o que consegui.

Obrigado a todos.

 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço