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 

Rotary encoder
Pojdi na stran 1, 2  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
Stoner
Član
Član



Pridružen-a: Sob 27 Okt 2012 13:16
Prispevkov: 49
Aktiv.: 0.32
Kraj: Celje

PrispevekObjavljeno: Sob Okt 27, 2012 2:04 pm    Naslov sporočila:  Rotary encoder Odgovori s citatom

Lep pozdrav!

Rad bi izdelal nekakšen game controller za letalsko simulacijo, ker potrebujem dodatne gumbe, potenciometre in vrtljiva stikala. Komunikacija poteka preko USB porta. Povezavo s PC sem že vzpostavil. Težave imam z rotary encoder, saj sem se včeraj prvič srečal z njim. Za prvi preizkus sem na uC zvezal nekal ledic in z vrtljivim stikalom uspešno kontroliral svetilnost. Torej princip delovanja sem že naštudiral.

Sedaj pa sem na uC priklopil shift register za inpute ker potrebujem vseh 32 gumbov kolikor jih podpira game controller. Branje posameznih stikal oziroma gumbov na shift registru mi tudi deluje. Problem pa imam, ko namesto stikala gor priklopim rotary encoder. Rotary encoder mi bo služil za nastavljanje različnih vrednosti v igri.

Delovati pa mora na sledeči način. Primer za gumb #12 in #13
Preko software pošljem naslednje nastavitve za encoder:
- Dolžina pulza je 40ms (ob enem zasuku bo gumb pritisnjen 40ms)
- Razmerje pulza je 1:3 (ob enem zasuku se bo gumb 3x pritisnil in 3x ugasnil)

Opomba: Zasuk v levo stran predstavlja Button 12, zasuk v desno stran predstavlja Button 13. To pomeni, da ob enem zasuku v desno stran naprava pošlje signal, da je pritisnjen gumb na sledeči način:
B13 ON (40ms) --- B13 OFF (5ms) --- B13 ON (40ms) --- B13 OFF (5ms) --- B13 ON (40ms) --- B13 OFF (5ms)

Lepo bi prosil za kakšne nasvete kako to sprogramirati in kako meriti čas in dolžine impulze. Mogoče s kakšnim preprostim primerom oziroma že kakšna dobra ideja bi mi pomagala.

Hvala
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Stoner
Član
Član



Pridružen-a: Sob 27 Okt 2012 13:16
Prispevkov: 49
Aktiv.: 0.32
Kraj: Celje

PrispevekObjavljeno: Pon Okt 29, 2012 11:52 am    Naslov sporočila:   Odgovori s citatom

Nekako sem že naštudiral to zadevo s klikanjem gumbov. Težavo imam samo z branjem inputov, če je encoder priklopljen na shift register.

Če ga priklopim na dva pina na PORTC zadeva deluje:
Koda:
char encoder_current_state = 0x00;
char encoder_last_state = 0x00;

void main(void) {
   while(1) {
      // Preberemo zadnja dva bita na PORTC
      encoder_current_state = (PORTC & 0x03);

      // Primerjamo trenutno stanje in ga primerjamo s prejšnjim. Če je prišlo do spremembe potem vemo, da se je encoder obrnil
      if(encoder_current_state != encoder_last_state) {
         if(encoder_current_state.F0 == encoder_last_state.F1) {
            // encoder v levo ...
         }
         else {
            // encoder v desno ...
         }
         encoder_last_state = encoder_current_state;
      }
   }
}


Tole pa je koda kjer berem stanje iz shift registrov in ne deluje. Mogoče kakšna ideja oziroma drugačen pristop?
Koda:
char* encoder_current_state = "00";
char* encoder_last_state = "00";
char* buttons = "00000000";
int m;

void main(void) {
   while(1) {
      // Preberemo vsa stikala in vrednosti shranimo v polje buttons
      m = 0;
      latch_pin = 0;
      latch_pin = 1;
      while(m < 8) {
         clock_pin = 0;
         if(data_pin) buttons[m] = '0'; else buttons[m] = '1';
         clock_pin = 1;
         m++;
      }

      encoder_current_state[0] = buttons[0];
      encoder_current_state[1] = buttons[1];

      if(encoder_current_state != encoder_last_state) {

         if(encoder_current_state[1] == encoder_last_state[0]) {
            // encoder v levo ...
         }
         else {
            // encoder v desno ...
         }

         encoder_last_state = encoder_current_state;
      }
   }
}
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Stoner
Član
Član



Pridružen-a: Sob 27 Okt 2012 13:16
Prispevkov: 49
Aktiv.: 0.32
Kraj: Celje

PrispevekObjavljeno: Tor Okt 30, 2012 1:30 pm    Naslov sporočila:   Odgovori s citatom

Nekje na forumu sem zasledil, da ni pametno uporabljati rotary encoder na shift registrih. Nekje so predlagali IO expander MCP23016 oziroma MCP23S17. Mogoče že kdo slišal za to? V datasheetu za MCP23S17 sem zasledil, da imajo internal pull-up upore kar bo meni prišlo prav. Ima mogoče kdo podatek za kakšne upore sploh gre. Ali so to vrednosti manj kot 1k, več kot 5k ???
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.63
Kraj: Trzic

PrispevekObjavljeno: Tor Okt 30, 2012 3:33 pm    Naslov sporočila:   Odgovori s citatom

Enkoderje lahko brez problemov priključiš na shift register. Načeloma je isto, če bereš IO-je direktno ali preko shift registra. Vrednosti pull-up uporov pri stikalih niso ravno problem - vse od 1k do 100k bo delalo.
Za dekodiranje enkoderjev bi ti svetoval, da si malce pogledaš po internetu (npr. https://ccrma.stanford.edu/~dfl/250/rotary.htm, http://stackoverflow.com/questions/34735/using-a-rotary-encoder-with-avr-micro-controller, ...). Za uspešno branje boš moral narediti majhen avtomat stanj, pogoji za prehajanja med stanji bosta izhoda A in B iz enkoderja, izhodi pa bodo komande, ki jih boš poslal na PC.
Za kateri simulator pa delaš to? Če rabiš na hitro, lahko vzameš PoKeys56U, ki dela vse to, kar rabiš.

_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Stoner
Član
Član



Pridružen-a: Sob 27 Okt 2012 13:16
Prispevkov: 49
Aktiv.: 0.32
Kraj: Celje

PrispevekObjavljeno: Čet Nov 01, 2012 7:16 pm    Naslov sporočila:   Odgovori s citatom

Hvala Neo za odgovor. Poznam ta PoKeys56U ampak se želim sam poigrati s PICI ko ravno prihaja zima in bo čas za to. Tudi sam sem mislil, da bodo inputi na shift registrih delali BP ampak imam dejansko težave pri branju. Kot da bi mi nekaj ciklov preskočlo zato encoder ne deluje pravilno. Kot sem že rekel, branje tipkal na shift registru deluje OK, tudi delovanje encoderja sem že naštudiral (vsaj mislim tako). Jutri dobim še tisto čipovje (MCP23S17) in bom sprobal Smile
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Stoner
Član
Član



Pridružen-a: Sob 27 Okt 2012 13:16
Prispevkov: 49
Aktiv.: 0.32
Kraj: Celje

PrispevekObjavljeno: Čet Nov 01, 2012 8:44 pm    Naslov sporočila:   Odgovori s citatom

Ravnokar gledam shemo kako povezati dva port expanderja? Potrebujem za to še kakšen dodaten pin na uC ali vseh 5 pinov s prvega MCP23S17 povežem z drugim MCP23S17?


s.png
 Opis:
 Velikost datoteke:  42.87 KB
 Pogledana:  24 krat

s.png


Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.63
Kraj: Trzic

PrispevekObjavljeno: Pet Nov 02, 2012 9:38 am    Naslov sporočila:   Odgovori s citatom

Če imaš težave s shift registri, potem jih boš imel tudi s port expander-jem. Kako hitro pa bereš vhode? Pri poceni enkoderjih boš zaznal kar nekaj 'bouncing' kontaktov, tako da moraš brat čim hitreje.
_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Stoner
Član
Član



Pridružen-a: Sob 27 Okt 2012 13:16
Prispevkov: 49
Aktiv.: 0.32
Kraj: Celje

PrispevekObjavljeno: Pet Nov 02, 2012 11:10 am    Naslov sporočila:   Odgovori s citatom

Si prepričan? Uporabljam tale encoder (ne vem če je ravno nizek cenovni razred)

http://si.farnell.com/jsp/search/productdetail.jsp?SKU=2113964

Kako hitro berem? Hjaa kodo mam v interruptih brez delayov. Torej tako hitro kot se vsa koda izvede al kako? Ko sem encoder bral direktno iz uC pina je lepo deloval
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Branez
Moderator
Moderator



Pridružen-a: Pon 14 Apr 2003 7:21
Prispevkov: 7831
Aktiv.: 33.09
Kraj: Koprivnica HR

PrispevekObjavljeno: Pet Nov 02, 2012 11:34 am    Naslov sporočila:   Odgovori s citatom

Stoner je napisal/a:
Si prepričan? Uporabljam tale encoder (ne vem če je ravno nizek cenovni razred)

http://si.farnell.com/jsp/search/productdetail.jsp?SKU=2113964
Bi rekel da je!
_________________
The true sign of intelligence is not knowledge but imagination.
Creativity is intelligence having fun!

Albert Einstein
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Stoner
Član
Član



Pridružen-a: Sob 27 Okt 2012 13:16
Prispevkov: 49
Aktiv.: 0.32
Kraj: Celje

PrispevekObjavljeno: Pet Nov 02, 2012 6:11 pm    Naslov sporočila:   Odgovori s citatom

Mi lahko kdo lepo prosim pomaga kako naj port expander povežem na moj PIC. Uporabljam 18F4550, pina RC4 in RC5 pa sta zasedena za USB komunikacijo. Če pravilno predvidevam, ne bom mogel uporabiti Port Expander knjižnice iz mikroc ampak moram na Software SPI?

Branez je napisal/a:
Stoner je napisal/a:
Si prepričan? Uporabljam tale encoder (ne vem če je ravno nizek cenovni razred)

http://si.farnell.com/jsp/search/productdetail.jsp?SKU=2113964
Bi rekel da je!


Katerega mi torej priporočaš?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Branez
Moderator
Moderator



Pridružen-a: Pon 14 Apr 2003 7:21
Prispevkov: 7831
Aktiv.: 33.09
Kraj: Koprivnica HR

PrispevekObjavljeno: Pet Nov 02, 2012 6:28 pm    Naslov sporočila:   Odgovori s citatom

Nekaj optičnega iz tega vzroka:
NeoTO je napisal/a:
Če imaš težave s shift registri, potem jih boš imel tudi s port expander-jem. Kako hitro pa bereš vhode? Pri poceni enkoderjih boš zaznal kar nekaj 'bouncing' kontaktov, tako da moraš brat čim hitreje.

_________________
The true sign of intelligence is not knowledge but imagination.
Creativity is intelligence having fun!

Albert Einstein
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
.
Član
Član



Pridružen-a: Ned 19 Sep 2004 22:04
Prispevkov: 16777193
Aktiv.: 70890.33

PrispevekObjavljeno: Pet Nov 02, 2012 7:26 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Branez
Moderator
Moderator



Pridružen-a: Pon 14 Apr 2003 7:21
Prispevkov: 7831
Aktiv.: 33.09
Kraj: Koprivnica HR

PrispevekObjavljeno: Pet Nov 02, 2012 7:36 pm    Naslov sporočila:   Odgovori s citatom

Točno! Z malo iznajdljivosti prideš brez Farnella do induktivnega enkoderja.
_________________
The true sign of intelligence is not knowledge but imagination.
Creativity is intelligence having fun!

Albert Einstein
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Stoner
Član
Član



Pridružen-a: Sob 27 Okt 2012 13:16
Prispevkov: 49
Aktiv.: 0.32
Kraj: Celje

PrispevekObjavljeno: Pet Nov 02, 2012 10:33 pm    Naslov sporočila:   Odgovori s citatom

Branez je napisal/a:
Nekaj optičnega iz tega vzroka:
NeoTO je napisal/a:
Če imaš težave s shift registri, potem jih boš imel tudi s port expander-jem. Kako hitro pa bereš vhode? Pri poceni enkoderjih boš zaznal kar nekaj 'bouncing' kontaktov, tako da moraš brat čim hitreje.


Hvala branez, ampak se motiš Shame on you Za moj projekt pa res ne mislim porabit cele plače, če vem, da je moj Farnellov enkoder čisto primeren. Mimogrede, sem s port expanderjem rešil zadevo in deluje tako kot sem upal in želel. Tako da tudi tista trditev ni pravilna.

Fantje... Keep it simple Wink


Nazadnje urejal/a Stoner Pet Nov 02, 2012 10:39 pm; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Branez
Moderator
Moderator



Pridružen-a: Pon 14 Apr 2003 7:21
Prispevkov: 7831
Aktiv.: 33.09
Kraj: Koprivnica HR

PrispevekObjavljeno: Pet Nov 02, 2012 10:37 pm    Naslov sporočila:   Odgovori s citatom

Odlično, glavno da si rešil!
_________________
The true sign of intelligence is not knowledge but imagination.
Creativity is intelligence having fun!

Albert Einstein
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
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  Naslednja
Stran 1 od 2

 
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: 486 dni


Powered by phpBB © 2001, 2005 phpBB Group