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 in rotacijski enkoder
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
podboj
Član
Član



Pridružen-a: Sre 25 Maj 2005 11:48
Prispevkov: 1251
Aktiv.: 5.63
Kraj: Postojna, Sežana, Ljubljana

PrispevekObjavljeno: Pon Nov 10, 2008 12:01 am    Naslov sporočila:  PIC in rotacijski enkoder Odgovori s citatom

Ima morda kdo kakšen primer asemblerske kode, ker me zanima kako je izvedeno branje smeri in koraka?

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



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.69
Kraj: Yogyakarta

PrispevekObjavljeno: Pon Nov 10, 2008 8:40 am    Naslov sporočila:   Odgovori s citatom

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 Very Happy
_________________
Bad things happen to good people all the time for no reason!
Blog
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
jurem
Član
Član



Pridružen-a: Tor 02 Dec 2003 15:53
Prispevkov: 408
Aktiv.: 1.84
Kraj: Ljubljana

PrispevekObjavljeno: Pon Nov 10, 2008 8:45 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Pet 02 Nov 2007 10:50
Prispevkov: 316
Aktiv.: 1.58
Kraj: Maribor

PrispevekObjavljeno: Pon Nov 10, 2008 9:57 am    Naslov sporočila:   Odgovori s citatom

V mojem zadnjem projektu sem uporabil tale princip. Sicer pa je na netu tega polno.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9406
Aktiv.: 42.36
Kraj: Kranj - struževo

PrispevekObjavljeno: Pon Nov 10, 2008 10:44 am    Naslov sporočila:   Odgovori s citatom

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 Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
podboj
Član
Član



Pridružen-a: Sre 25 Maj 2005 11:48
Prispevkov: 1251
Aktiv.: 5.63
Kraj: Postojna, Sežana, Ljubljana

PrispevekObjavljeno: Pon Nov 10, 2008 6:58 pm    Naslov sporočila:   Odgovori s citatom

Ja, gre za kvadraturne signale, hvala vsem za odgovore, bom poskusil

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



Pridružen-a: Sre 25 Maj 2005 11:48
Prispevkov: 1251
Aktiv.: 5.63
Kraj: Postojna, Sežana, Ljubljana

PrispevekObjavljeno: Ned Dec 21, 2008 2:58 am    Naslov sporočila:   Odgovori s citatom

Pripenjam kodo za branje enkoderja in prikaz na LCD-ju, če komu pride prav. Gre za štetje od 0 do 200, da pa se z manjšo modifikacijo kode štet tudi do višjih vrednosti. Skupaj sem zmetal tri napisane primere in po nekaj urah mrcvarjenja kode vse skupaj celo dela Laughing

http://www.mcmanis.com/chuck/robotics/projects/lab-x3/quadratrak.html
http://www.piclist.com/techref/microchip/math/radix/b2oth-8b3d-jsv.htm
http://www.winpicprog.co.uk/pic_tutorial3.htm (druga koda)

Uporabljen je PIC16F628A na testnem hardware-u iz zadnjega linka. Enkoder se priključi na RB1 in RB2



LCD_V4.zip
 Opis:

Download
 Ime datoteke:  LCD_V4.zip
 Velikost datoteke:  3.23 KB
 Downloadano:  19 krat

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



Pridružen-a: Tor 27 Dec 2005 14:02
Prispevkov: 341
Aktiv.: 1.54
Kraj: Ljubljana || Velenje

PrispevekObjavljeno: Ned Dec 21, 2008 11:33 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Sob 25 Jun 2005 13:45
Prispevkov: 541
Aktiv.: 2.44
Kraj: Črnomelj

PrispevekObjavljeno: Ned Dec 21, 2008 12:10 pm    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Sre 25 Maj 2005 11:48
Prispevkov: 1251
Aktiv.: 5.63
Kraj: Postojna, Sežana, Ljubljana

PrispevekObjavljeno: Ned Dec 21, 2008 2:12 pm    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Pet 05 Avg 2005 13:05
Prispevkov: 764
Aktiv.: 3.44
Kraj: Povir / Ljubljana

PrispevekObjavljeno: Pon Dec 22, 2008 9:49 am    Naslov sporočila:   Odgovori s citatom

uf.. mene pa zanima kje se da nabaviti tak enkoder?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 25.15

PrispevekObjavljeno: Pon Dec 22, 2008 12:18 pm    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Pon 06 Dec 2004 22:07
Prispevkov: 513
Aktiv.: 2.31
Kraj: Ljubljana

PrispevekObjavljeno: Pon Dec 22, 2008 12:31 pm    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Sre 25 Maj 2005 11:48
Prispevkov: 1251
Aktiv.: 5.63
Kraj: Postojna, Sežana, Ljubljana

PrispevekObjavljeno: Pon Dec 22, 2008 1:08 pm    Naslov sporočila:   Odgovori s citatom

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 Confused. Niti LCD-ja ne zinicializira. Ko eno enico odstranim se normalno zažene.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9406
Aktiv.: 42.36
Kraj: Kranj - struževo

PrispevekObjavljeno: Pon Dec 22, 2008 2:26 pm    Naslov sporočila:   Odgovori s citatom

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 Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju Č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: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group