Pages: [1]   Go Down
Author Topic: Ps1 controller e arduino!  (Read 832 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti!

Sto facendo degli esperimenti con un vecchio controller della ps1 (o psx che dir si voglia) ed arduino, ma ho qualche problema:

Intanto tra i +5V che alimentano il controller e il gnd dell'arduino ci sono 7V di differenza, insomma il gnd dell'arduino è a -2V rispetto al gnd dell'alimentazione, il problema è che ho sempre 2-3V di tensione costante sui piedini che dal controller, portano i dati all'arduino, così quando leggo i valori dall'arduino, legge sempre 11111111....

Ho usato resistenze di pull down, e funzionano se l'arduino non è collegato al pc, ma quando lo collego non ci son santi, anche se collego il gnd dell'arduino al gnd dell'alimentazione non risolvo nulla smiley-sad

Come potrei riuscire a portare tutto a 0 e verificare se funziona il controller?

Grazie a tutti in anticipo!
Logged

Mom: Can he lead a normal life?
Doctor: NO! he'll be an engineer!

0
Online Online
Faraday Member
**
Karma: 38
Posts: 5601
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

schema elettrico
Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

Marche
Offline Offline
Edison Member
*
Karma: 32
Posts: 2261
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Come stai alimentando il controller?
Prelevi 5V da arduino oppure usi un alimentatore esterno?
Quani volt?
Hai unito le masse?
Dai che non ti si consumano i tasti della tastiera  smiley-sweat
Logged

Offline Offline
God Member
*****
Karma: 5
Posts: 873
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il controller della play lavora a 3.3V, i 7.5V servono solo per i 2 vibro-motor.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il controller della play lavora tra i 5 e i 3.3V ho trovato su internet  smiley

Alimento il controller con un alimentatore esterno, tarato sui 3V (ha più Voltaggi disponibili) ma che ne eroga 5.3 circa.

L'arduino è alimentato dall'usb collegata al PC, ho provato a collegare assieme i GND ma il problema non si risolve smiley-sad

Logged

Mom: Can he lead a normal life?
Doctor: NO! he'll be an engineer!

Marche
Offline Offline
Edison Member
*
Karma: 32
Posts: 2261
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Santo cielo, regoli l'alimentatore a 3V e te ne da 5 e rotti?
Usalo per schiacciarci le noci e prendine un'altro più decente, vedrai che in futuro avrai meno problemi...
La massa comunque va sempre messa in comune quando usi più alimentazioni, ricordatelo in futuro.
Hai un regolatore di tensione? Magari prova a stabilizzare un attimo la tensione e vedi se la cosa cambia.

Una domanda solo per curiosità: sei  sicuro che il controller è funzionante?
Logged

Offline Offline
God Member
*****
Karma: 5
Posts: 873
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il controller della play lavora tra i 5 e i 3.3V ho trovato su internet

Internet e' piena infatti di stupidaggini, il controller della play non e' 5V tollerant, lavora a 3.3V, difatti in rete troverai anche tanta gente che si e' poi lamentata che alimentando la 5V dopo un po' ha smesso di funzionare.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

del controller me lo son chiesto pure io  smiley-mr-green smiley-mr-green
Domani attacco la play e verifico se funziona  smiley

Illo alimentatore non è un problema, adesso è regolato su 1.5 e ne da fuori 3.67  smiley-grin, comunque entro i limiti del controller.

Se scollego l'alimentatore dal controller, o scollego proprio completamente il controller,  continua a leggere 111111.....smette solo se scollego anche il pin gnd dalla breadboard.

Logged

Mom: Can he lead a normal life?
Doctor: NO! he'll be an engineer!

Offline Offline
Full Member
***
Karma: 0
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok ragazzi ho risolto!

Ho dato una sbirciatina al sorgente della libreria che usavo, in pratica utilizza una resistenza di pull-up interna all'arduino, che faceva casino con la mia di pull down, ho rimosso le mie resistenze e collegato tutto all'arduino direttamente e funziona smiley

Adesso sto cercando di scrivere qualcosina in python per gestire la pressione dei tasti al pc.

In C esiste qualcosa che simuli la pressione di un tasto della tastiera? oppure qualcosa che mi permetta di far vedere i comandi che arrivano dalll'arduino come comandi di una tastiera?
Logged

Mom: Can he lead a normal life?
Doctor: NO! he'll be an engineer!

Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Potresti usare la seriale, elaborare con arduino i dati ricevuti dal controller e poi inviarli al pc, dove puoi implementare una piccola utility che legge dalla seriale i dati in arrivo da arduino (e quindi dal controller)
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sto seguendo due vie parallele, una che utilizza un utility come dici tu, l'altra che sfrutta una libreria che fa vedere l'arduino al pc, come se fosse una tastiera, vi farò sapere come va smiley-grin
Logged

Mom: Can he lead a normal life?
Doctor: NO! he'll be an engineer!

Düsseldorf/Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao,
dimmi stai usando arduino 1.0? potresti inviarmi il tuo codice per favore? ho un problema con il library psx. sto cercando di collegare il mio controller ps1 con l'arduino, ma gia il codice non va bene è pieno di errori. penso che c'è un problema con la versione di arduino... ma non lo so - sto iniziando di lavorare con arduino.

scusatemi per l'italiano imperfetto, spero che qualcuno riesce a capire le frase precendenti...smiley-wink

saluti a tutti da düsseldorf
Logged

Firenze, Italy
Offline Offline
Full Member
***
Karma: 0
Posts: 104
Dislessia portami via
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma per collegare il pad all'Arduino ti sei fatto un connettorino apposta o hai tirato i fili dal pad sui pin dell Arduino?
Logged

The brightest flame burns quickest

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11973
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao,
dimmi stai usando arduino 1.0? potresti inviarmi il tuo codice per favore? ho un problema con il library psx. sto cercando di collegare il mio controller ps1 con l'arduino, ma gia il codice non va bene è pieno di errori. penso che c'è un problema con la versione di arduino... ma non lo so - sto iniziando di lavorare con arduino.

scusatemi per l'italiano imperfetto, spero che qualcuno riesce a capire le frase precendenti...smiley-wink

saluti a tutti da düsseldorf
Ciao, il tuo Italiano va bene, sei stato chiaro; se hai difficoltà puoi scrivere anche in tedesco, il nostro moderatore Uwe Federer lo parla perfettamente, ti farà lui da interprete. Ora aspettiamo Tobo e vediamo se riesce a mandarti il suo codice.  smiley
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Full Member
***
Karma: 0
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ragazzi scusate il ritardo, sono in fase di esame all'università e sto studiando molto.  smiley-confuse

Comunque, alla fine ho optato per usare un programma (scritto in python, mi andava bene perchè su ubuntu è presente di default, se ne può scrivere anche una versione in java comunque) che simula la pressione di un tasto della tastiera quando riceve via seriale un particolare comando dall'arduino.

Il programma funziona così: quando viene premuto un tasto, arduino invia un codice (un numero) via seriale, ed invia lo stesso numero quando viene rilasciato il tasto.
L'ho usato come esercizio sugli array quindi non uccidetemi se ce ne sono 3 di inutili  smiley-mr-green



Code:
#include <Psx.h>                                          // Includes the Psx Library
#undef round                                              //remove Whprogram.h problem

#define dataPin 12                 
#define cmndPin 11
#define attPin 10
#define clockPin 13


Psx Psx;                                                  // Initializes the library

unsigned int data = 0;                                    // data stores the controller response
unsigned int ControllerButtons[] = {psxLeft, psxDown, psxRight, psxUp, psxStrt, psxSlct, psxSqu, psxX, psxO, psxTri, psxR1, psxR2, psxL1, psxL2};
unsigned int flags[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
unsigned int buttons[14][2];
int index;


void setup()
{
  Psx.setupPins(dataPin, cmndPin, attPin, clockPin, 10);  // Defines what each pin is used
                                                          // (Data Pin #, Cmnd Pin #, Att Pin #, Clk Pin #, Delay)
  Serial.begin(57600);                                    // Delay measures how long the clock remains at each state,
                                                          // measured in microseconds.
  for (int i = 0; i < 14; i++)
  {
     buttons[i][0] = ControllerButtons[i];
     buttons[i][1] = flags[i];
  }                                         
 
}
void loop()
{
  data = Psx.read();                                      // Psx.read() initiates the PSX controller and returns
                                                           // the button data
  for (index = 0; index < 14; index++)
  {
    if ((buttons[index][1] == 0) && (data & buttons[index][0]))
    {
      Serial.println(buttons[index][0]);
      buttons[index][1] = 1;
      continue;
    }
   
    if ((buttons[index][1] == 1) && !(data & buttons[index][0]))
    {
      Serial.println(buttons[index][0]);
      buttons[index][1] = 0;
      continue;
    }
  }
 
}


il codice python funziona così:

quando riceve un numero, se non è mai stato inviato, simula la pressione di un tasto, se è già premuto, rilascia il tasto:

Code:
import serial
import pyatspi
def pressKey(keycode):
   """Takes an integer keycode. You can find these with xev."""
   pyatspi.Registry.generateKeyboardEvent(keycode, None,pyatspi.KEY_PRESS)
   
def releaseKey(keycode):
   pyatspi.Registry.generateKeyboardEvent(keycode, None,pyatspi.KEY_RELEASE)
Logged

Mom: Can he lead a normal life?
Doctor: NO! he'll be an engineer!

Pages: [1]   Go Up
Jump to: