Go Down

Topic: Ps1 controller e arduino! (Read 1 time) previous topic - next topic

Tobo

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 :(

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

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

Testato

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

pelletta

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:

Tobo

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

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 :(

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

pelletta

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?

Tobo

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

Illo alimentatore non è un problema, adesso è regolato su 1.5 e ne da fuori 3.67  :D, 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.

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

Tobo

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 :)

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?
Mom: Can he lead a normal life?
Doctor: NO! he'll be an engineer!

GWolf

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)

Tobo

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 :D
Mom: Can he lead a normal life?
Doctor: NO! he'll be an engineer!

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...;)

saluti a tutti da düsseldorf

IngHooch

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

Michele Menniti


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...;)

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.  :)
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

Tobo

Ragazzi scusate il ritardo, sono in fase di esame all'università e sto studiando molto.  :~

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: [Select]
#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: [Select]
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)
Mom: Can he lead a normal life?
Doctor: NO! he'll be an engineer!

Go Up