Rotační enkodér (detekce vpravo a vlevo)

C,C++,C#

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1539
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: Rotační enkodér (detekce vpravo a vlevo)

Príspevok od používateľa jirka.jirka. » 11 Nov 2012, 10:09

Tak jsem vyzkoušel chod pouze s jedním timerem (TIMER1). Nechal jsem ho nastavený na těch 10ms a změna skoro žádná. Takže to opravdu asi bude tím, že počítám s velkým číslem. Zkusím ten časovač předělat do těch smyček for() a dám vědět jak jsem dopadl.
0

Používateľov profilový obrázok
petersno
Ultimate člen
Ultimate člen
Príspevky: 2774
Dátum registrácie: 06 Aug 2011, 00:00
Bydlisko: ba
Vek: 63

Re: Rotační enkodér (detekce vpravo a vlevo)

Príspevok od používateľa petersno » 11 Nov 2012, 10:47

v obsluhe tlacitka je pri tomto sposobe kontrola zakmitov zbytocna { dokonca iba na skodu, zbytocne zabera na flash miesto a v isr cas }. ak sa pytas na stav tlacitka raz za urcity cas, vobec ta nemusi zaujimat, ci tam su alebo niesu nejake zakmity :)
0

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12414
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: Rotační enkodér (detekce vpravo a vlevo)

Príspevok od používateľa boraicho » 11 Nov 2012, 18:20

konečne som po dlhych hodinach po skušani roznych kombinacii našiel najlepší s najlepšich
možno sa niekomu prida ale je to fakt dobre a rychle a 99,9% bez chybné.

Kód: Vybrať všetko

int stav=0;
int vstup()
{
stav=0;
while(!stav)
{
if(RA3==1)
{_delay_ms(2);
while(RA2==1&&RA3==1);
if(RA2==1)
stav=1;
}
if(RA2==1)
{_delay_ms(2);
while(RA2==1&&RA3==1);
if(RA3==1)
stav=2;
}
_delay_ms(10);
}
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

neznamy

Re: Rotační enkodér (detekce vpravo a vlevo)

Príspevok od používateľa neznamy » 15 Nov 2012, 06:58

boraicho trošku tomu nerozumiem

while(!stav)
{
if(RA3==1) // pokial je RA3 = 1 vykonaj to čo je v zátvorke
{_delay_ms(2); // počkaj 2ms
while(RA2==1&&RA3==1); // pokial RA2 je 1 a RA3 je 1 vykonávaj .. čo ???
if(RA2==1) // pokial je RA2 =1 vykonaj čo ???
stav=1;
}

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Re: Rotační enkodér (detekce vpravo a vlevo)

Príspevok od používateľa mato3000 » 15 Nov 2012, 11:30

načo tam máš tú druhú polovicu programu. šak ak na RA3 nastane zmena, dáš prerušenie a počkáš 2ms ( podla datasheetu ) a potom RA2=0 - jedna strana , alebo RA2=1 druhá strana, samozrejme s ošetrením zákmitov a musí sa s enkóderom točiť v istom rýchlostnom rozsahu. toto je najjednoduchšie, už sme sa o tom x krát bavili
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1539
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: Rotační enkodér (detekce vpravo a vlevo)

Príspevok od používateľa jirka.jirka. » 17 Nov 2012, 18:07

Tak problém s tím zpožděním jsem vyřešil. :-D A měl bych se stydět. :-D

Programuju vlastně postaveným JTAG programátorem, ale měl jsem ho špatně nastavený. Místo nastavení externího 16MHz krystalu, jsem měl nastavený interní 8MHz.
0

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12414
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: Rotační enkodér (detekce vpravo a vlevo)

Príspevok od používateľa boraicho » 17 Nov 2012, 18:16

right na konci while je znak ; čiže nič nerobi čiže čaka dokiaľ nezmiznu obidva 1tky.zo vstupu a potom ak je na RA3==1; tak čo spravi no predsa zapiše do premenej stav=1; ved to ide takto if(RA3==1) stav=2; ak by tam bolo viac prikazov tak treba davať {} ale ak len jeden tak tie {} zatvorky neni potreba davať.

mato3000 hej viem bavili ale neni to presne. tie 2ms su take na zamyslenie, ak s tym točiš rychlo alebo pomaly tak nemaš tam stale tych 2mS.
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

Používateľov profilový obrázok
petersno
Ultimate člen
Ultimate člen
Príspevky: 2774
Dátum registrácie: 06 Aug 2011, 00:00
Bydlisko: ba
Vek: 63

Re: Rotační enkodér (detekce vpravo a vlevo)

Príspevok od používateľa petersno » 17 Nov 2012, 20:53

jirka.jirka. : clovek sa na cudzich chybach nikdy nepouci tak, ako na vlastnych :D

boraicho : nechapem, k comu je dobry takyto kod ? je to priklad, ako pouzit jeden pic pre obsluhu jedneho enkoderu ?
0

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12414
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: Rotační enkodér (detekce vpravo a vlevo)

Príspevok od používateľa boraicho » 17 Nov 2012, 21:21

http://svetelektro.com/Forum/opat-osvitka-t18787.html mas pocit že tam je len jeden enkoder? maš lepši kod? daj nebud skupy a podeľ sa.
Prílohy
Osvitka.sch
(284.54 KiB) 62 stiahnutí
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

Používateľov profilový obrázok
petersno
Ultimate člen
Ultimate člen
Príspevky: 2774
Dátum registrácie: 06 Aug 2011, 00:00
Bydlisko: ba
Vek: 63

Re: Rotační enkodér (detekce vpravo a vlevo)

Príspevok od používateľa petersno » 17 Nov 2012, 22:30

boraicho : lepsi kod je napriklad obsahom tejto temy :wink:
0

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12414
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: Rotační enkodér (detekce vpravo a vlevo)

Príspevok od používateľa boraicho » 17 Nov 2012, 22:50

ale ved daj konkretne
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Re: Rotační enkodér (detekce vpravo a vlevo)

Príspevok od používateľa mato3000 » 17 Nov 2012, 22:58

boraicho napísal:
mato3000 hej viem bavili ale neni to presne. tie 2ms su take na zamyslenie, ak s tym točiš rychlo alebo pomaly tak nemaš tam stale tych 2mS.
hej to nemáš, ale máš tam napríklad 2,2ms a lebo 2,3 ms a to všetko je v norme. isto to je jednoduchý príklad a malo by sa to robiť úplne inak, ale som presvedčený že toto ti bohate na 2 roky stačí.

a dúfam že chápeš že tie 2ms je ako príklad a pozrel si sa do datasheetu že koľko to trvá tvojemu enkóderu ? a do pozornosti dávam čas 2ms ako celkový čas od logickej zmeny na prvom pine. takže ak tam budeš mať ošetrenie proti zákmitom a pod zdržania tak to už neni 2ms ale napríklad 1,5ms
0

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12414
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: Rotační enkodér (detekce vpravo a vlevo)

Príspevok od používateľa boraicho » 17 Nov 2012, 23:03

šak ja raz pridem do BA za tebou a potom sa uvidi kto ma pravdu a v datahseete mam 2ms a donesiem aj elektroniku aby si videl.
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Re: Rotační enkodér (detekce vpravo a vlevo)

Príspevok od používateľa mato3000 » 17 Nov 2012, 23:05

:D netvrdím že nie, len ťa poznám nemáš sa rád s datasheetmi, ale neboj skamarátiš sa :wink: ale ten celkový čas si nemeral však ?
0

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Re: Rotační enkodér (detekce vpravo a vlevo)

Príspevok od používateľa mato3000 » 18 Nov 2012, 16:24

boraicho. poď večer na skype, ten spôsob ako to robíš je úplne zlý, ja som predpokladal že používaš prerušenie, ak nie tak ten enkóder ti tak ako to chceš nebude fungovať
0

Napísať odpoveď