Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
podboj Član
Pridružen-a: Sre 25 Maj 2005 11:48 Prispevkov: 1251 Aktiv.: 5.61 Kraj: Postojna, Sežana, Ljubljana
|
Objavljeno: Pon Nov 10, 2008 12:01 am Naslov sporočila: PIC in rotacijski enkoder |
|
|
Ima morda kdo kakšen primer asemblerske kode, ker me zanima kako je izvedeno branje smeri in koraka?
Lp
|
|
Nazaj na vrh |
|
|
red_mamba Član
Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.66 Kraj: Yogyakarta
|
Objavljeno: Pon Nov 10, 2008 8:40 am Naslov sporočila: |
|
|
lahko narediš enostavno da na interupt obesiš en signal in ko se sproži prebereš drugega. In če je 0 se vrti v eno smer če je pa 1 pa v drugo, simpl
_________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
|
jurem Član
Pridružen-a: Tor 02 Dec 2003 15:53 Prispevkov: 408 Aktiv.: 1.83 Kraj: Ljubljana
|
Objavljeno: Pon Nov 10, 2008 8:45 am Naslov sporočila: |
|
|
V reviji SE poteka serija člankov Nasveti in triki Microchip, zdaj je bil objavljen že 10. del. Stopi do knjižnice in si jih poglej ali pa si jih naloži iz te strani, saj so brezplačni.
Lp
Jure
|
|
Nazaj na vrh |
|
|
Waldo Član
Pridružen-a: Pet 02 Nov 2007 10:50 Prispevkov: 316 Aktiv.: 1.57 Kraj: Maribor
|
Objavljeno: Pon Nov 10, 2008 9:57 am Naslov sporočila: |
|
|
V mojem zadnjem projektu sem uporabil tale princip. Sicer pa je na netu tega polno.
|
|
Nazaj na vrh |
|
|
aly Član
Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 42.19 Kraj: Kranj - struževo
|
Objavljeno: Pon Nov 10, 2008 10:44 am Naslov sporočila: |
|
|
Predvidevam, da imaš kvadraturne signale?
Lahko uporabiš XOR vrata za proženje interrupta ali pa narediš smerni diskriminator in uporabiš dva hardverska števca v uC - enega za štetje gor, drugega za dol.
Tema je že bila na forumu.
_________________ I'm going to stand outside, so if anyone asks, I'm outstanding |
|
Nazaj na vrh |
|
|
podboj Član
Pridružen-a: Sre 25 Maj 2005 11:48 Prispevkov: 1251 Aktiv.: 5.61 Kraj: Postojna, Sežana, Ljubljana
|
Objavljeno: Pon Nov 10, 2008 6:58 pm Naslov sporočila: |
|
|
Ja, gre za kvadraturne signale, hvala vsem za odgovore, bom poskusil
Lp
|
|
Nazaj na vrh |
|
|
podboj Član
Pridružen-a: Sre 25 Maj 2005 11:48 Prispevkov: 1251 Aktiv.: 5.61 Kraj: Postojna, Sežana, Ljubljana
|
|
Nazaj na vrh |
|
|
snow Član
Pridružen-a: Tor 27 Dec 2005 14:02 Prispevkov: 341 Aktiv.: 1.53 Kraj: Ljubljana || Velenje
|
Objavljeno: Ned Dec 21, 2008 11:33 am Naslov sporočila: |
|
|
Ja lahko priklopiš zadevo na kak pin ki proži interupt ob spremembi in potem na podlagi prejšnega stanja pinov in sedanjega pogledaš v tabelo (4x4 = 16 kombinacij) in prišteješ vrednost v tabelo števcu.
Majo pa dsPICi tudi hardwarski quad. encoder, nekateri novejši tudi 2.
|
|
Nazaj na vrh |
|
|
tonko Član
Pridružen-a: Sob 25 Jun 2005 13:45 Prispevkov: 541 Aktiv.: 2.43 Kraj: Črnomelj
|
Objavljeno: Ned Dec 21, 2008 12:10 pm Naslov sporočila: |
|
|
Primer moje kode v C-ju za branje enkoderja - za enostavnejše razumevanje, čeprav je tema v forumu PIC-Assembler.
Funkcija je klicana ciklično z timer interruptom ~20khz.
Interrupt frekvenca mora zadosti visoka da ne spregledamo kakšnega impulza.
Uporabljena sta lahko poljubna vhoda mikrokontrolerja. Enostavno se lahko prikljuci tudi več enkoderjev.
Koda: |
long pozicija=0; //stevec impulzov
timer() interrupt //CIKLICNI INTERRUPT npr.20Khz
{
static unsigned char encoder_prejsnje_stanje=3;
unsigned char encoder_novo_stanje;
encoder_novo_stanje = PORTA & 0x03; //preberi vhodna signala ki sta priključena na PORTA.0 in PORTA.1
switch (encoder_novo_stanje)
{
case 0:
if(encoder_prejsnje_stanje == 0x02) {pozicija++; break;}
if(encoder_prejsnje_stanje == 0x01) {pozicija--; break;}
break;
case 1:
if(encoder_prejsnje_stanje == 0x00) {pozicija++; break;}
if(encoder_prejsnje_stanje == 0x03) {pozicija--; break;}
break;
case 3:
if(encoder_prejsnje_stanje == 0x01) {pozicija++; break;}
if(encoder_prejsnje_stanje == 0x02) {pozicija--; break;}
break;
case 2:
if(encoder_prejsnje_stanje == 0x03) {pozicija++; break;}
if(encoder_prejsnje_stanje == 0x00) {pozicija--; break;}
break;
}
encoder_prejsnje_stanje = encoder_novo_stanje;
return;
} |
|
|
Nazaj na vrh |
|
|
podboj Član
Pridružen-a: Sre 25 Maj 2005 11:48 Prispevkov: 1251 Aktiv.: 5.61 Kraj: Postojna, Sežana, Ljubljana
|
Objavljeno: Ned Dec 21, 2008 2:12 pm Naslov sporočila: |
|
|
No v mojem primeru je frekvenca 1kHz, bo pa rotacijski enkoder uporabljen za nastavljanje glasnosti, izbiro vhodov, morda tudi premikanje po meniju, tako da je frekvenca kar dovolj visoka, pa tudi če bi izpustil kakšno stanje to ne bi bilo preveč moteče.
Tisto s tabelo je tudi zanimiva varianta, bom probal ob priliki.
Edit: Pravkar sem ugotovil da ima moja koda enega hrošča in sicer se PIC zbudi le v določeni poziciji enkoderja. Bom pogledal zvečer, če najdem napako.
|
|
Nazaj na vrh |
|
|
clownfish Član
Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 764 Aktiv.: 3.43 Kraj: Povir / Ljubljana
|
Objavljeno: Pon Dec 22, 2008 9:49 am Naslov sporočila: |
|
|
uf.. mene pa zanima kje se da nabaviti tak enkoder?
|
|
Nazaj na vrh |
|
|
Sokrat Član
Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 25.04
|
Objavljeno: Pon Dec 22, 2008 12:18 pm Naslov sporočila: |
|
|
teslo je napisal/a: |
uf.. mene pa zanima kje se da nabaviti tak enkoder? |
Slisi tudi na ime inkrementalni dajalnik, da bos lazje iskal (najdi.si izpljune apr zadetkov) ...
_________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
|
matjay Član
Pridružen-a: Pon 06 Dec 2004 22:07 Prispevkov: 515 Aktiv.: 2.31 Kraj: Ljubljana
|
Objavljeno: Pon Dec 22, 2008 12:31 pm Naslov sporočila: |
|
|
Stikalni encoder se dobi v conrad. Običajno ga nimajo na zalogi, zato je potrebno počakati par dni, da naročijo.
LP
Matjaz
|
|
Nazaj na vrh |
|
|
podboj Član
Pridružen-a: Sre 25 Maj 2005 11:48 Prispevkov: 1251 Aktiv.: 5.61 Kraj: Postojna, Sežana, Ljubljana
|
Objavljeno: Pon Dec 22, 2008 1:08 pm Naslov sporočila: |
|
|
Jaz imam sicer dva stikalna iz pokvarjenih glasbenih stolpov, pa nekaj optičnih. Enkoder se da narediti tudi iz koračnega motorčka.
V iskanje hrošča se še nisem spustil, bom morda danes pogledal. PIC se ne zažene, ko sta ob vklopu na RB1 in RB2 hkrati enici . Niti LCD-ja ne zinicializira. Ko eno enico odstranim se normalno zažene.
|
|
Nazaj na vrh |
|
|
aly Član
Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 42.19 Kraj: Kranj - struževo
|
Objavljeno: Pon Dec 22, 2008 2:26 pm Naslov sporočila: |
|
|
Tonko,
v tvoji tabeli pogrešam možnosti, ko se oba signala hkrati spremenita (kar se ne sme zgoditi nikoli).
Takrat mora javiti napako. Ta napaka je lahko ali napačna priključitev ali prehitro vrtenje ali kratko sklenjena pina.
_________________ I'm going to stand outside, so if anyone asks, I'm outstanding |
|
Nazaj na vrh |
|
|
|