|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
xpolhecx Član
Pridružen-a: Sre 02 Feb 2011 3:06 Prispevkov: 276 Aktiv.: 1.72
|
Objavljeno: Čet Dec 15, 2011 9:27 pm Naslov sporočila: PIC Gamepad analogni vhodi delajo težave |
|
|
Pozdravljeni
Delam napravo, ki se na PC predstavi kot HID Gamepad (3 analogni vhodi in 32 gumbov). Pišem v mikroc, uporabljam pa PIC18F4550 (8MHz xtal). Težava nastane ko pritisnem kakšen gumb. Takrat se za nekaj % spremenijo analogni vhodi (včasih X Rotation, včasih Y, včasih Z, včasih pa kar dva). Primer lahko pogledate v filmu:
1) http://www.youtube.com/watch?v=slTkB2RjVd0
2) http://www.youtube.com/watch?v=oQNfTtEdWOo
Zanima me, kje bi lahko bil problem, da mi skačejo analogni vhodi ko stiskam gumbe. Za 32 gumbov sem uporabil štiri shift registre 74HC165
Na čipu imam takšne priklope:
- PORTA.F0 = analogni vhod (X Rotation)
- PORTA.F1 = analogni vhod (Y Rotation)
- PORTA.F2 = analogni vhod (Z Rotation)
- PORTA.F3 = shift register 74HC165 (data pin)
- PORTA.F4 = shift register 74HC165 (clock pin)
- PORTA.F5 = shift register 74HC165 (latch pin)
HID Descriptor:
Koda: |
0x05, 0, 0x01, 0, // USAGE_PAGE (Generic Desktop)
0x09, 0, 0x05, 0, // USAGE (Joystick)
0xa1, 0, 0x01, 0, // COLLECTION (Application)
0xa1, 0, 0x01, 0, // COLLECTION (Application)
0x09, 0, 0x01, 0, // USAGE (Pointer)
0xa1, 0, 0x00, 0, // COLLECTION (Physical)
0x05, 0, 0x01, 0, // USAGE_PAGE (Generic Desktop)
0x09, 0, 0x33, 0, // USAGE (X Rotation)
0x09, 0, 0x34, 0, // USAGE (Y Rotation)
0x09, 0, 0x35, 0, // USAGE (Z Rotation)
0x15, 0, 0x81, 0, // LOGICAL_MINIMUM (-128)
0x25, 0, 0x7f, 0, // LOGICAL_MAXIMUM (127)
0x75, 0, 0x08, 0, // REPORT_SIZE (8)
0x95, 0, 0x03, 0, // REPORT_COUNT (3)
0x81, 0, 0x02, 0, // INPUT (Data,Var,Abs)
0x05, 0, 0x09, 0, // USAGE_PAGE (Button)
0x19, 0, 0x01, 0, // USAGE_MINIMUM (Button 1)
0x29, 0, 0x20, 0, // USAGE_MAXIMUM (Button 32)
0x15, 0, 0x00, 0, // LOGICAL_MINIMUM (0)
0x25, 0, 0x01, 0, // LOGICAL_MAXIMUM (1)
0x75, 0, 0x01, 0, // REPORT_SIZE (1)
0x95, 0, 0x20, 0, // REPORT_COUNT (32)
0x81, 0, 0x02, 0, // INPUT (Data,Var,Abs)
0x95, 0, 0x08, 0, // REPORT_COUNT (8)
0x81, 0, 0x03, 0, // INPUT (Data,Var,Abs)
0xc0, 0, // END_COLLECTION
0xc0, 0, // END_COLLECTION
0x05, 0, 0x01, 0, // USAGE_PAGE (Generic Desktop)
0x09, 0, 0x00, 0, // USAGE (Undefined)
0x15, 0, 0x00, 0, // LOGICAL_MINIMUM (0)
0x26, 0, 0xff, 0, 0x00, 0, // LOGICAL_MAXIMUM (255)
0x75, 0, 0x08, 0, // REPORT_SIZE (8)
0x95, 0, 0x40, 0, // REPORT_COUNT (64)
0x91, 0, 0x02, 0, // OUTPUT (Data,Var,Abs)
0xc0, 0 // END_COLLECTION
|
Main:
Koda: |
ADCON1 |= 0x0F;
CMCON |= 7;
TRISA.F0 = 1; // INPUT - potentiometer 1
TRISA.F1 = 1; // INPUT - potentiometer 2
TRISA.F2 = 1; // INPUT - potentiometer 3
TRISA.F3 = 1; // INPUT - data_pin_165
TRISA.F4 = 0; // OUTPUT - clock_pin_165
TRISA.F5 = 0; // OUTPUT - latch_pin_165
PORTA = 0x00; // CLEAR PORTA
analog_1 = ~(Adc_Read(0) >> 2) - 128; // X Rotation
analog_2 = ~(Adc_Read(1) >> 2) - 128; // Y Rotation
analog_3 = ~(Adc_Read(2) >> 2) - 128; // Z Rotation
usb_write_buffer[0] = analog_1;
usb_write_buffer[1] = analog_2;
usb_write_buffer[2] = analog_3;
usb_write_buffer[3] = button_set_1;
usb_write_buffer[4] = button_set_2;
usb_write_buffer[5] = button_set_3;
usb_write_buffer[6] = button_set_4;
while(!HID_Write(&usb_write_buffer,7)); |
Nazadnje urejal/a xpolhecx Čet Dec 15, 2011 9:47 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
AlesK Član
Pridružen-a: Sob 24 Jan 2009 15:59 Prispevkov: 17 Aktiv.: 0.09 Kraj: Kobarid
|
Objavljeno: Čet Dec 15, 2011 9:47 pm Naslov sporočila: |
|
|
Mislim, da je problem bolj na strani hardwareja. Ali pritisk gumba kakorkoli vpliva na referenčno napetost AD vhodov? |
|
Nazaj na vrh |
|
|
xpolhecx Član
Pridružen-a: Sre 02 Feb 2011 3:06 Prispevkov: 276 Aktiv.: 1.72
|
Objavljeno: Čet Dec 15, 2011 9:49 pm Naslov sporočila: |
|
|
ja ne bi smelo vplivat če je vsak potenciometer na svojem pinu od čipa :/ kar se pa elektronike in hardwera tiče pa sem bolj na dnu |
|
Nazaj na vrh |
|
|
matjazkariz Član
Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.61
|
Objavljeno: Čet Dec 15, 2011 11:33 pm Naslov sporočila: |
|
|
Jaz bi tudi najprej okrivil hardver in sicer je kriva res AD referenca ali pa se kakšna motnja infiltrira v analog ground plane. Povleci osciloskop ven in najprej potestiraj analog in digital ground, nato pa še analogno referenčno napetost in ali se sprememba odrazi tudi na vhodnem pinu ADC. Če hardver ni skrivnost, lahko pripneš shemo in pcb layout, da pogledamo? Poraba vezja je normalna tudi med pritiskom gumbov, ali so kakšne špice v porabi? _________________ LP, Matjaž |
|
Nazaj na vrh |
|
|
xpolhecx Član
Pridružen-a: Sre 02 Feb 2011 3:06 Prispevkov: 276 Aktiv.: 1.72
|
Objavljeno: Čet Dec 15, 2011 11:34 pm Naslov sporočila: |
|
|
res je čudno zakaj skače. zdaj recimo pa normalno dela, lahko stiskam kolker hočem pa se analogni ne spremenijo. kakor se mu zahoče |
|
Nazaj na vrh |
|
|
xpolhecx Član
Pridružen-a: Sre 02 Feb 2011 3:06 Prispevkov: 276 Aktiv.: 1.72
|
Objavljeno: Čet Dec 15, 2011 11:36 pm Naslov sporočila: |
|
|
lahko malo bolj po domače poveš hehe? zaenkrat je vse na protobordu. vezje sem mel namen danes narisat v eaglu, ampak sem hotu najprej odpravit vse težave na protobordu preden grem risat vezje.
Citiram: |
Poraba vezja je normalna tudi med pritiskom gumbov, ali so kakšne špice v porabi?
|
kak to misliš? pa tole?
Citiram: |
potestiraj analog in digital ground |
|
|
Nazaj na vrh |
|
|
matjazkariz Član
Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.61
|
Objavljeno: Pet Dec 16, 2011 12:07 am Naslov sporočila: |
|
|
Aha, protoboard. Potem pa tako povej. Naredi vezje, pa bo delalo OK. Drugače pa pri designu mixed signal PCBja je dobro upoštevati nekaj pravil, ki ti zagotovijo dovoj stabilno delovanje:
- Loči analogne in digitalne komponente
- Digitalne komponente postaviš bližje konektorjem (komunikacija, napajanje)
- Digitalni tracki ne smejo teči ob analognih trackih
- Lahko daš skupni ground plane v kolikor nimaš kakšne hude resolucije na AD - drugače pa loči Analogni in digitalni groud plane, ki naj bosta povezana samo lokalno
- NA ADC dodaj kakšne filtre proti motnjam in/ali implementiraj softversko filtracijo
Saj na to temo dobiš kar nekaj literature tudi na netu.... _________________ LP, Matjaž |
|
Nazaj na vrh |
|
|
xpolhecx Član
Pridružen-a: Sre 02 Feb 2011 3:06 Prispevkov: 276 Aktiv.: 1.72
|
Objavljeno: Pet Dec 16, 2011 12:16 am Naslov sporočila: |
|
|
bom narisal in zjedkal testno vezje da vidim če res ne bo motenj Torej lahko na celem vezju naredim skupen ground plane? (tak sem tud mel namen). Ko končam shemo jo prilepim na forum, če se bo komu dalo pogledat, če kje manjkajo kakšne malenkosti.
Mi še na hitro zaupaš za kakšne filtre gre pri ADC? |
|
Nazaj na vrh |
|
|
xpolhecx Član
Pridružen-a: Sre 02 Feb 2011 3:06 Prispevkov: 276 Aktiv.: 1.72
|
Objavljeno: Pet Dec 16, 2011 12:59 am Naslov sporočila: |
|
|
Mi ni dalo mira pa sem šel malo merit napetosti po protobordu. Ker imam veliko vezje, sta dva potenciometra (tisti za Y in Z rotation ki sta poskakovala) malo dlje kot potenciometer za X Rotation (s katerim ni bilo nikoli težav). Nato sem zamenjal GND, tako da sem ga peljal tja kjer je prvi potenciometer in zaenkrat ni več motenj. Če GND prestavim nazaj, mi spet poskakuje. Mislite, da sem odpravil težavo s tem? Vsaj upam da je bil to vzrok. Na sliki sem opisal oziroma narisal težavo / rešitev
Vaša mnenja? Ker meni ni jasno zakaj je tisti GND drugačen oziroma ima "motnje"?
Matjaž, hvala za pomoč Še eno off topic vprašanje. Kam dat izdelat PCB vezja? V Sloveniji se mi zdi malo drago, ma kdo kaj izkušenj s kakim podjetjem iz tujine? |
|
Nazaj na vrh |
|
|
xpolhecx Član
Pridružen-a: Sre 02 Feb 2011 3:06 Prispevkov: 276 Aktiv.: 1.72
|
Objavljeno: Pet Dec 16, 2011 1:31 am Naslov sporočila: |
|
|
No tudi po daljšem delovanju dobim na vseh treh potenciometrih neko motnjo ker zdaj vsi trije hkrati skačejo Sporočim ko bo vezje narisano
Nazadnje urejal/a xpolhecx Pet Dec 16, 2011 1:32 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
matjazkariz Član
Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.61
|
Objavljeno: Pet Dec 16, 2011 1:31 am Naslov sporočila: |
|
|
Nikoli nisem uporabljal protoboardov prav zaradi pojava takih težav. Saj je splošno znano, da se na protoboardih zelo rade pojavljajo motnje. V tvojem primeru je po vsej verjetnosti kriv slab spoj GND linije na GND (oksidirani kontakti).
Glede izdelave vezja mnogi priporočajo iteadstudio.com. _________________ LP, Matjaž |
|
Nazaj na vrh |
|
|
xpolhecx Član
Pridružen-a: Sre 02 Feb 2011 3:06 Prispevkov: 276 Aktiv.: 1.72
|
Objavljeno: Pet Dec 16, 2011 1:33 am Naslov sporočila: |
|
|
kako pa potem delaš testna vezja? |
|
Nazaj na vrh |
|
|
matjazkariz Član
Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.61
|
Objavljeno: Pet Dec 16, 2011 1:37 am Naslov sporočila: |
|
|
Direkt tiskanino dizajniram in sam zjedkam. Ponavadi je rezultat dovolj dober že v prvo. _________________ LP, Matjaž |
|
Nazaj na vrh |
|
|
xpolhecx Član
Pridružen-a: Sre 02 Feb 2011 3:06 Prispevkov: 276 Aktiv.: 1.72
|
Objavljeno: Pet Dec 16, 2011 2:10 am Naslov sporočila: |
|
|
Super Potem pa res obvladaš da greš takoj delat tiskanino. |
|
Nazaj na vrh |
|
|
matjazkariz Član
Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.61
|
Objavljeno: Pet Dec 16, 2011 1:34 pm Naslov sporočila: |
|
|
Razlog je v tem, da vse projekte delam v SMD tehniki in tako si nimam s protoboardom kaj počet. Poleg tega se mi zdi izguba časa, če moraš nekaj sestavljat za enkratno uporabo. Tako ali tako moraš projekt prej ali slej izdelati na tiskanino. Doma tako sploh nimam na zalogi TH komponent in jih niti ne potrebujem.
Se pa v primeru, ko gre za spoznavanje kakšnega novega mikrokontrolerja, obesim na kakšen kupljen development board, da spoznam softverske aspekte ter design hardverja. _________________ LP, Matjaž |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 70 dni
Powered by phpBB © 2001, 2005 phpBB Group
|