Sida 1 av 2

Ansluta en gamepad till AVR

Postat: 1 november 2009, 09:15:57
av larsmeijer
Hej!

Behöver ansluta och läsa av en gamepad (helst från en PS2). till mitt ROV-projekt (finns i projektdelen). Någon som av gjort detta eller har lite nyttig info?

/ Lars

Re: Ansluta en gamepad till AVR

Postat: 1 november 2009, 09:34:50
av JonasJ
Jepp, jag använde en PS2 kontroller till Opportunity. Numera har jag en trådlös istället som funkar lika bra.

En sådan här kan vara lämpligt.

Bild

Har kod om du vill ha annars finns det ganska bra beskrivningar på nätet.

Edit: Äsch, jag sitter ju vid datorn med källkoden så jag kan lika gärna lägga upp den. Den hittas här. Det intressanta ligger i main.c och funktionerna init, ps_init samt ps_poll. Koden är inte speciellt genomarbetad och kan säker göras bättre men funkar för mig :) I början av källfilen står det lite info om PS2 kontrollern.

Re: Ansluta en gamepad till AVR

Postat: 1 november 2009, 18:24:49
av larsmeijer
Aha tack. Cool robot! Är ingen kung på C men ska väl kunna bena iegnom koden.

Re: Ansluta en gamepad till AVR

Postat: 2 november 2009, 09:03:14
av larsmeijer
Hmm undrar om jag ska lägga ner en massa tid på att sätta mig in det protokollet. Funderar på att gå förbi elektroniken och löda in sig direkt på knapparna / joystickarna. Det borde ju funka.

Re: Ansluta en gamepad till AVR

Postat: 2 november 2009, 13:50:17
av JonasJ
Du behöver inte kunna protokoll för att dra nytta av koden. Jag kan det inte :)

Anropa ps_poll så får du automatiskt tillbaka en array med aktuella joystickvärden och knappvärden. Initieringen och kommunikationen ligger gömt i funktioner så det behöver du inte kunna, förstå eller ens titta på.

Det enda kravet är att din AVR har hårdvaru SPI vilket jag tror 99 % av alla AVR:er redan har plus att du behöver sätta dit några externa pull ups. Det känns att kommer ta mer tid att löda sig direkt mot knappar än att helt enkelt försöka få igång befintligt kod.

Re: Ansluta en gamepad till AVR

Postat: 2 november 2009, 20:48:33
av larsmeijer
Ja man kanske skulle ge det ett försök. Det är ju alltid kul när man får det att funka. SPI finns på Mega32 som jag ska använda.

Har jag förstått det rätt?

1 DATA = MISO (SPI Bus Master Input/Slave Output)
2 CMD = behöver ej anslutas
3 N/C (9V) = behöver ej anslutas
4 GND = jord
5 VCC = 5+
6 ATT = Ska denna dras mot jord?
7 CLK = SCK (SPI Bus Serial Clock)
8 N/C = behöver ej anslutas
9 ACK = Osäker på denna?

Hmm får klura vidare!

Re: Ansluta en gamepad till AVR

Postat: 2 november 2009, 21:01:55
av larsmeijer
Hittade lite ny info det kan nog lösa sig, ska testa i morgon

Re: Ansluta en gamepad till AVR

Postat: 3 november 2009, 22:14:48
av larsmeijer
Har löst det nu, jag har fungerande kod i BASCOM om någon skulle behöva.

Re: Ansluta en gamepad till AVR

Postat: 16 november 2009, 14:12:16
av st0rfrasarn
JonasJ:

Hej jag laddade ned koden till opportunity och ps2-rutinerna passar perfekt för mitt projekt, tack! MEN skulle du kunna presentera hur du anslutit kontrollen? Jag tror att jag fått det mesta rätt, men jag är osäker på ACK-tråden? Är den ens inkopplad?

Re: Ansluta en gamepad till AVR

Postat: 17 november 2009, 20:35:24
av JonasJ
Så här har jag kopplat in den till en mega48 (sittandes på en BabyOrangutan):

ACK (violett) - ej inkopplad

+7.5 V DC (grön) - ej inkopplad

+5 V DC (gul) - Kopplat till 5 V (såklart! :))
GND (svart/röd) - GND

Clock CLK (Vit) - PB5 SPI SCK
Attention ATT (Blå) - PC1
Command CMD (Orange) - PB3 SPI MOSI
Data DAT (Brun) - PB4 SI MISO

Glöm inte ett 1K pull-up motstånd på DAT signalen!

Bild

Bild

Re: Ansluta en gamepad till AVR

Postat: 17 november 2009, 20:40:58
av st0rfrasarn
Okej tack! Alltså jag testar på en atmega32, och min PC1 är "SDA", heter din PC1 också SDA? I övrigt har jag kopplat exakt så, och min kommer aldrig ur while-loopen under ps_init().

hmm, har nog inte kopplat på +5V på pull-up resistorn...missförstod det. ska testa igen

Re: Ansluta en gamepad till AVR

Postat: 17 november 2009, 20:51:33
av JonasJ
Nej, PC1 är en vanlig digital utgång. Den används för att väcka gamepaden.

Utan pull-up funkar det inte. Jag har provat :vissla:

Re: Ansluta en gamepad till AVR

Postat: 17 november 2009, 22:43:57
av st0rfrasarn
Okej. Har kopplat enligt bilden. Och fortfarande kommer jag inte ur while loopen i ps_init(). Jag gjorde printf på analog_flag, och den är 255! Har du nån aning om vad jag gör fel?

Pullup-resistorn kommer från +5v -> tråden mellan MISO-DATA

Re: Ansluta en gamepad till AVR

Postat: 17 november 2009, 23:25:06
av st0rfrasarn
Jag är en idiot. Missade detta:

// Set output on SCK (CLOCK) and MOSI (COMMAND) pins for spi communication
DDRB |= _BV(SS) | _BV(COMMAND) | _BV(CLOCK);


När jag cut-n-pastade din kod in i mitt projekt, nu funkar det! sorry för allt trasslande och tack för hjälpen!

Re: Ansluta en gamepad till AVR

Postat: 18 november 2009, 16:02:43
av JonasJ
Kul att du fick det att funka! Men glöm inte projekttråden! ;)