www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

PIC Gamepad analogni vhodi delajo težave
Pojdi na stran 1, 2, 3, 4, 5, 6  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
xpolhecx
Član
Član



Pridružen-a: Sre 02 Feb 2011 3:06
Prispevkov: 276
Aktiv.: 1.72

PrispevekObjavljeno: Čet Dec 15, 2011 9:27 pm    Naslov sporočila:  PIC Gamepad analogni vhodi delajo težave Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
AlesK
Član
Član



Pridružen-a: Sob 24 Jan 2009 15:59
Prispevkov: 17
Aktiv.: 0.09
Kraj: Kobarid

PrispevekObjavljeno: Čet Dec 15, 2011 9:47 pm    Naslov sporočila:   Odgovori s citatom

Mislim, da je problem bolj na strani hardwareja. Ali pritisk gumba kakorkoli vpliva na referenčno napetost AD vhodov?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
xpolhecx
Član
Član



Pridružen-a: Sre 02 Feb 2011 3:06
Prispevkov: 276
Aktiv.: 1.72

PrispevekObjavljeno: Čet Dec 15, 2011 9:49 pm    Naslov sporočila:   Odgovori s citatom

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 Sad
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
matjazkariz
Član
Član



Pridružen-a: Sre 03 Nov 2004 18:09
Prispevkov: 1026
Aktiv.: 4.61

PrispevekObjavljeno: Čet Dec 15, 2011 11:33 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
xpolhecx
Član
Član



Pridružen-a: Sre 02 Feb 2011 3:06
Prispevkov: 276
Aktiv.: 1.72

PrispevekObjavljeno: Čet Dec 15, 2011 11:34 pm    Naslov sporočila:   Odgovori s citatom

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 Confused
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
xpolhecx
Član
Član



Pridružen-a: Sre 02 Feb 2011 3:06
Prispevkov: 276
Aktiv.: 1.72

PrispevekObjavljeno: Čet Dec 15, 2011 11:36 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
matjazkariz
Član
Član



Pridružen-a: Sre 03 Nov 2004 18:09
Prispevkov: 1026
Aktiv.: 4.61

PrispevekObjavljeno: Pet Dec 16, 2011 12:07 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
xpolhecx
Član
Član



Pridružen-a: Sre 02 Feb 2011 3:06
Prispevkov: 276
Aktiv.: 1.72

PrispevekObjavljeno: Pet Dec 16, 2011 12:16 am    Naslov sporočila:   Odgovori s citatom

bom narisal in zjedkal testno vezje da vidim če res ne bo motenj Smile 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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
xpolhecx
Član
Član



Pridružen-a: Sre 02 Feb 2011 3:06
Prispevkov: 276
Aktiv.: 1.72

PrispevekObjavljeno: Pet Dec 16, 2011 12:59 am    Naslov sporočila:   Odgovori s citatom

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č Smile Š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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
xpolhecx
Član
Član



Pridružen-a: Sre 02 Feb 2011 3:06
Prispevkov: 276
Aktiv.: 1.72

PrispevekObjavljeno: Pet Dec 16, 2011 1:31 am    Naslov sporočila:   Odgovori s citatom

No tudi po daljšem delovanju dobim na vseh treh potenciometrih neko motnjo ker zdaj vsi trije hkrati skačejo Smile Sporočim ko bo vezje narisano

Nazadnje urejal/a xpolhecx Pet Dec 16, 2011 1:32 am; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
matjazkariz
Član
Član



Pridružen-a: Sre 03 Nov 2004 18:09
Prispevkov: 1026
Aktiv.: 4.61

PrispevekObjavljeno: Pet Dec 16, 2011 1:31 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
xpolhecx
Član
Član



Pridružen-a: Sre 02 Feb 2011 3:06
Prispevkov: 276
Aktiv.: 1.72

PrispevekObjavljeno: Pet Dec 16, 2011 1:33 am    Naslov sporočila:   Odgovori s citatom

kako pa potem delaš testna vezja?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
matjazkariz
Član
Član



Pridružen-a: Sre 03 Nov 2004 18:09
Prispevkov: 1026
Aktiv.: 4.61

PrispevekObjavljeno: Pet Dec 16, 2011 1:37 am    Naslov sporočila:   Odgovori s citatom

Direkt tiskanino dizajniram in sam zjedkam. Ponavadi je rezultat dovolj dober že v prvo.
_________________
LP, Matjaž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
xpolhecx
Član
Član



Pridružen-a: Sre 02 Feb 2011 3:06
Prispevkov: 276
Aktiv.: 1.72

PrispevekObjavljeno: Pet Dec 16, 2011 2:10 am    Naslov sporočila:   Odgovori s citatom

Super Smile Potem pa res obvladaš da greš takoj delat tiskanino.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
matjazkariz
Član
Član



Pridružen-a: Sre 03 Nov 2004 18:09
Prispevkov: 1026
Aktiv.: 4.61

PrispevekObjavljeno: Pet Dec 16, 2011 1:34 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2, 3, 4, 5, 6  Naslednja
Stran 1 od 6

 
Pojdi na:  
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