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
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
Tags:
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por