Arduino Uno e Psgroove

Salve, Benchè sia perito informatico, sono un novizio di arduino, e ho avuto il piacere di comprare il mio primo arduino, come da titolo, il modello Uno.

Possedendo una PS3, avevo intensione di sperimentare il famoso PSGroove, di cui è stata fatto un porting per Arduino Mega e duemilanove.

Ho scaricato dal sito di timwu http://github.com/timwu/psgroove/downloads il pacchetto per arduino duemilanove 328p e seguito le istruzioni.

Al momento di flashare arduino con l' hex fornito mi viene restituito questo errore:

avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51

:cry:

ho modificato il file bat mettendo la porta COM giusta (cioè la 5) e specificando al programma arduino.exe il tipo di scheda, cioè arduino UNO.

Avete qualche idea dei possibili errori che faccia?? e di come risolverli?? :-[

che intendi per

ho modificato il file bat

??

c

all'interno dello zip del PSGroove per windows c'è un file .bat per automatizzare il flash di arduino con AVRDUDE.
Nelle istruzioni c'è scritto di modificare se necessario la porta COM su cui è arduino.
Nel mio caso è sulla COM5 e nel file originale era impostato sulla COM3.

Ci sarebbero altri paramentri, ma nn li ho taccati perchè non sapevo a cosa si riferissero.

il codice del file bat è questo:

rem ###########################################################
rem Change atmega328p to your particular chip (e.g. atmega1280)
set DEVICE=atmega328p
rem ###########################################################
rem Change the COM3 to your COM port. Check the arduino IDE in
rem Tools->Serial Port for the correct port.
set PORT=COM5
rem ###########################################################

set PROGRAMMER=stk500v1
set EXTRA_OPTS=-b57600 -D
set HEX_FILE=psgroove.hex

hardware\tools\avr\bin\avrdude -Chardware\tools\avr\etc\avrdude.conf -p%DEVICE% -c%PROGRAMMER% -P\\.\%PORT% %EXTRA_OPTS% -Uflash:w:%HEX_FILE%:i

io ho modificato la voce "set PORT=COM3" mettendoci COM5

Aiuto please!!! :cry:

Pensavo.....forse sbaglio il modo di caricare il file .hex nell'arduino uno.

Per programmare con un file .hex l'arduino Uno la procedura è diversa rispetto a quella per l'arduino duemilanove????

boh, illuminatemi voi......

io credo che quei file di psgrove siano solo per il duemilanove come dice il nome.

c

il bootloader del 2009 è diverso da quello del uno, ma non credo sia questo il problema, dovrebbe uppare il codice e poi non funzionare.

Quell'errore a me lo dava quando non faccio il reset della chip (non uso arduino, ma una board fatta da me).
In pratica metto a massa il pin di reset fino a qualche attimo prima di uppare il codice. Però non so se i tuoi hex funzioneranno col nuovo bootloader, magari fanno qualche casino, quindi ti consiglio di scaricarti tutto il codice C e compilarlo/upparlo da arduino IDE

Appena posso provo la tecnica di resettare arduino
Cmq, se non funzionasse, due domande:

1)sarebbbe possibile cambiare il bootloader direttamente sull' hex?? cioè cambiare quello del duemilanove con quello dell'uno??

2)per ricompilarlo basta che copi il codice in c del PSGroove nel IDE di arduino o c'è la necessità di cambiarlo??

Questo è il codice:

Grazie ancora per l'aiuto :-[

Allora, alla seconda domanda mi rispondo da solo : NO! XD

Però sul sito di timwu ho notato questa sezione:

Può servire a qualcosa???

si, hai trovato quello che ti serve :slight_smile:

For arduino users, you can get some hints as to how to configure the programming options by checking what the arduino IDE does.

  1. Edit your arduino preferences file setting upload.verbose to true.
  2. Open the arduino ide
  3. Create an empty sketch
  4. Upload to your board, and check the output.

From the IDE's output you should be able to determine what port to use and other useful information about configuring the options.

Allora fai così: apri la cartella rduino -> lib trovi un preferencies.txt
Non devi modificare quello, ma nella prime righe ti dice dov'è posizionato il file da modificare... segui l'istruzione :slight_smile:
aggiungi a fine file

build.verbose=true
upload.verbose=true

salva e avvia arduino IDE.
scegli un esempio e fau l'upload del codice(ovviamente scegli la tua versione ecc... vedrai tutti i comandi usati. Ora non ti resta che usarli sul tuo codice :stuck_out_tongue:

@lesto: Grazie mille!!!

Allora dal report dell'IDE di arduino ho estrapolato la linea di comando usata per fare l'upload su arduino UNO

E HA FUNZIONATO!!! :smiley:

Sono riuscito a caricare l'hex del psgroove su arduino Uno.

Premesso che devo fare la scheda per collegare l'usb a arduino, quindi non posso testare se funzioni (ma lunedì compro tutto e provo).

Ora, mi dicevi che il bootloader molto probabilmente è diverso e quindi non dovrebbe funzionare. c'è un modo, partendo dall'hex per modificare il bootloader??
pensavo di compilare uno programmino di prova sia per il duemilanove che per l'uno e poi vedere con 010editor la parte dell'hex che cambia, dato che dovrebbe essere il bootloader e modificare poi il psgroove.
Se poi sapete un modo più veloce e facile tanto meglio XD

Grazie di nuovo!!!!

felice di essere stato utile!

Premesso che devo fare la scheda per collegare l'usb a arduino, quindi non posso testare se funzioni (ma lunedì compro tutto e provo).

in che senso scusa? da arduino alla PS3? cmq non so se ci saranno problemi, non ho mai lavorato col nuovo bootloader, quello che è sicuro è che non avrai problemi di spazio perché ne hai 1.5kb in più :slight_smile:

pensavo di compilare uno programmino di prova sia per il duemilanove che per l'uno e poi vedere con 010editor la parte dell'hex che cambia, dato che dovrebbe essere il bootloader e modificare poi il psgroove.

ottima idea!! io non posso perché su linux non è ancora uscito l'IDE per arduino UNO, fammi sapere

Allora per poter utilizzare arduino come chiavetta per sboccare la ps3 non si può l'usb di arduino, ma ne va creata un'altra, con una specie di shield

tipo questa : http://code.rancidbacon.com/images/DSC00326_arduino_usb_shield.JPG

Magari chi ha più esperienza di me poi potrà sfruttare il nuovo chip usb dell'arduino uno e utilizzare la stessa porta sia per programmare che per l'hack.

cmq adesso mi metto ha smanettare ai file hex.

per meglio comprendere, dato che non mi ero mai cimentato in programmazione di integrati

  1. la grandezza del file hex deve essere fissa? ovviamente non deve eccedere la memoria del PIC, ma deve essere per forsa 32KB precisi?

  2. il bootloader dovrebbe essere la parte iniziale del hex, giusto?

  3. il bootloader è sempre fisso? mi spiego meglio, varia a seconda del programma che va a eseguire arduino o è una parte statica che viene "appiccicata" all'inizio del programma?

Scusate l'insistenza, ma almeno mi tolgo tantissimi dubbi ;D

allora la grandezza del programma è variabile, in base al tuo codice.. unico limite la memoria. stesso problema per le variabili usate nel programma e funzioni ricorsive

Il bootloader è un programma chè è sul microcontrollore, è fisso ma si può cambiare con una procedura. in pratica serve per semplificare le operazioni di upload del codice, che grazie ad esso può avvenire solo via seriale, normalmente va usato un programmatore o un circuito specifico. Nelle cartelle di arduino puoi trovare i vari bootloader in formato hex se non erro. Diciamo che è un programma che si avvia prima del tuo, controlla se vuoi modificare il codice, se si lo modifica se no fa partire il tuo codice. per questo prima d uppare il codice bisogna resettare, cosa che avviene in automatico sulle board arduino

non so se si può usate il chip per quello che dici tu, c'è differenza tra host e slave controller nelle USB, e non credo che il chip si bivalente (ma magari si)

ah mi puoi passare il link dello schema di quel USB? mi servirebbe ma non lo trovo più.. a dir la verità non trovo i diodi zener... uff

Allora...ho compilato il semplice esempio "Blink" sia impostando la board UNO, che impostando il duemilanove con 328p, guardando i due hex sono identici, che il bootloader sia lo stesso??? o non c'è, e ci viene messo successivamente???

per il PSGroove gli schemi sono questi:

-duemilanove : psgroove/schematic.png at master · timwu/psgroove · GitHub
-mega: psgroove/schematic.png at master · timwu/psgroove · GitHub

qui ci sono le due cartelle per i due tipi, dentro c'è anche l'elenco dei componenti:

Un'ultima cosa: il parametro

-c stk500v1

dato ad AVRDUDE, non si riferisce mica al bootloader??

Nuovi sviluppi:

  1. impostando la board duemilanove il file hex viene compilato, ma mi esce lo stesso errore che accusavo all'inizio della discussione, quindi il problema sta nell'upload

2)prendendo il programma blink, compilato con l'impostazione per duemilanove, e caricato a mano (cioè digitando da me l'istruzione nel cmd) con i parametri per arduino UNO, il programma viene eseguito.

non potendo ancora provare se funzioni e avendo poca esperienza, ipotizzo che il file hex per il duemilanove 328p, sia compatibile con l'UNO.

Mi sembra di essere a fare la tesi d'esame!!! XD

cmq se il negozino di fiducia stasera è aperto vado a comprare gli zener almeno monto la schedina e provo.....non sto nella pelle!!!!

uhh passa il link per l'USB!
comunque sopra ho spiegato un po', il bootloader è già nella scheda.
per testare se funziona il led si illumina? se non hai il led allora fai un test con la serial, se trasmette il messaggio allora funziona!

quale link vuoi?? questo: http://code.rancidbacon.com/images/DSC00343_arduino_mini_usb_shield_top_edit.jpg

lo schema di quel circuito è quello che ti ho postato prima

come si usa il serial monitor??

ho provato con un led, e il pin 9, che dovrebbe essere acceso quando il psgroove è in attesa di comunicazione dalla ps3 è accesso fisso. boh......

il pin 8 è a livello basso, e diventerà a livello alto se l'hack va a buon fine.

il negozino è chiuso, lunedì vado e compro il necessario per provare a modo se funziona

Allora.... ho comprato tutto ciò che mi serviva, montato la scheda e flashato l'hex dell'arduino duemilanove 328p nel mio UNO.

Attaccato alla PS3 e premuti i tasti (prima accensione e suito dopo eject) non succede niente.

cioè la scheda si accende, ma a intermittenza, cioè il led ON sulla board si accende e si spegne.

Pensando che consumasse troppo e non ce la facesse a tenerlo acceso l'ho collegato ad un alimentatore, però nn succede ugualmente niente. il Led rosso che dovrebbe lampeggiare mentre sta lavorando rimane acceso fisso.

a questo punto penso che tu avessi ragione, cioè il software non è compatibile, forse a causa del bootloader.

con i sorgenti per arduino che sono qui: GitHub - timwu/psgroove: PSGroove - ported to work with non-usb avr chips using the vusb library.
o con gli originali del PSGroove (GitHub - psgroove/psgroove: PSGroove), sarebbe possibile ricompilarlo per farlo funzionare su arduino UNO??

Ditemi di SI...... :cry:

a quanto vedo da quel codice, c'è un main() in psgroove.c, quindi credo che debba funzionare SENZA bootloader... però se sostituisci void setup() al int main(void) e aggiungi la funzione void loop(){} dovrebbe funzionare tutto!
secondo me parti scaricando psgroove.c e psgroove.h, poi piano piano ti scarichi i file mancanti. facci sapere

ps: si, lo schema dell'usb è quello che cercavo!

ho provato a cambiare main in setup e a sostituire il for infinito con un loop, usando l'IDE di arduino mi esce una caterva (enormità) di errori.
tipo questi:

sketch_oct05a:48: error: 'init' redeclared as different kind of symbol
C:\Users\Davide\Desktop\arduino-0021\hardware\arduino\cores\arduino/wiring.h:106: error: previous declaration of 'void init()'
sketch_oct05a:80: error: cannot convert 'void (*)()' to '<anonymous enum>' in initialization
sketch_oct05a.cpp: In function 'void JIG_Task()':
sketch_oct05a:212: error: invalid conversion from 'const uint8_t*' to 'unsigned char*'
sketch_oct05a:212: error: initializing argument 1 of 'void pUsbSetInterrupt(unsigned char*, unsigned char)'
sketch_oct05a.cpp: In function 'void setup()':
sketch_oct05a:246: error: cannot convert 'void ()()' to '<anonymous enum>' in assignment
sketch_oct05a.cpp: In function 'unsigned int usbFunctionDescriptor(usbRequest*)':
sketch_oct05a:489: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:493: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:497: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:501: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:505: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:509: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:513: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:521: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:530: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:533: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:544: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:551: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:561: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:565: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:568: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:572: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:582: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:587: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a.cpp: In function 'unsigned int usbFunctionSetup(unsigned char*)':
sketch_oct05a:622: error: invalid conversion from 'void*' to 'unsigned char*'
sketch_oct05a:661: error: no match for 'operator==' in 'state == init'

usando programmers notepad di winavr, e sostituendo sempre quelle funzioni, mi da errore perchè non trova il main.

> "make.exe" program

Linking: psgroove.elf
avr-gcc -mmcu=atmega1280 -I. -gdwarf-2 -DF_CPU=16000000UL -DF_CLOCK=16000000UL -DBOARD=BOARD_ArduinoMega -DDEBUG_LEVEL=1 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=psgroove.o -Iusbdrv/ -IBoards/ArduinoMega -std=c99 -MMD -MP -MF .dep/psgroove.elf.d psgroove.o usb_utils.o usbdrv/usbdrv.o usbdrv/oddebug.o usbdrv/usbdrvasm.o --output psgroove.elf -Wl,-Map=psgroove.map,--cref -Wl,--relax  -Wl,--gc-sections  
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr51/crtm1280.o:(.init9+0x0): undefined reference to `main'
make.exe: *** [psgroove.elf] Error 1

> Process Exit Code: 2
> Time Taken: 00:00

c'è forse un compilatore adatto ad arduino? con il quale siano possibili queste modifiche??

Intanto ieri ho inviato un messaggio all'autore del porting (non fate caso al mio inglese perchè so che fa pena....)

io:

can you compile PSgroove for Arduino UNO???

the version for duemilanove 328p don't work on it.

THANK YOU!!!

timwu:

As far as I can tell, this should just work. Can you describe doesn't work? The uno schematic looks like it's pin compatible with the duemilanove, so that shouldn't be a problem. Also the chip should be a 328p, so the compiled hex file should be compatible.

io:

so, the schematic is correct. when i connect arduino uno to my ps3, the red led is on and don't blink.

I think it not start to work. i know only that the arduino uno have a different bootloader.

what compiler have you used for have the hex?

thanks

almeno vediamo come ha fatto lui a compilarlo e se ci da una mano.

Ultima cosa, il file "makefile"(psgroove/Makefile at master · timwu/psgroove · GitHub) come va modificato per adattarlo ad arduino UNO?? Basta cambiare il tipo di processore? o va modificato altro?

Grazie Mille per la pazienza, so di essere un pò insistente ;D