» Poradna » Programy

Rotační enkodér v jazyku C

 |   |  Microsoft Windows 7 Firefox 16.0

Ahojte. PLS mám malý problém. Snažím se zjistit jakým směrem se otáčí rotační enkodér a podle toho snižovat nebo zvyšovat hodnotu "enc". Ale stále se mi nedaří. Můžete mi pomoci?? Můj kód je takový. A program dělá to, že při otočení vlevo, nebo vpravo se pouze hodnota odečítá. Použil jsem ATMEGU16.Nedaří se mi napsat podmínku pro přerušení od INT. Moje vypadá nějak takto:[code]ISR(INT1_vect){ //doplnit podminku enkoderu (enc++/enc--) if (PIND & _BV(PD2)) // Increase enc enc++; else // Decrease enc enc--;}[/code]Rotační enkodér je připojen na port D3 a D2.

Odpovědi na otázku

 |   |  Microsoft Windows XP Mozilla 1.9.2.24

Otacanie zavisi od hodnot PIND a _BV(PD2)Ak obidve hodnoty niesu nulove, tak sa zvysuje, inak sa znizuje

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

No to jo. Ale jak potom upravit tu podmínku, abych mohl na jednu stranu snižovat a na druhou zvyšovat. Už jsem přemýšlel i s druhým přerušením, ale to podle mě nebude to pravé ořechové.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

Přerušení se vyvolá na hranu jednoho impulzu z enkodéru, a podle toho jakou hodnotu má v tomto časovém okamžiku druhý výstup encodéru, tak se ptáčí na jednu nebo druhou stranu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows Vista IE 7.0

Ked ti to nieje jasne, tak preskumaj rutinu ISR(INT1_vect).V nej najdes odpoved ako sa naplnaju hodnoty PIND a _BV(PD2).Tipoval by som, ze PIND je strobovaci signal nastavovany uzivatelom podla toho na aky smer chce tocit a hodnota _BV(PD2) predstavuje signaly od jednotlivych vstupov. Moj tip ovsem nemusi byt spravny.Na taketo veci bolo dobre kedysi PMI80 alebo PMD85, alebo Teslacky kufrik s I8080A a akcnymi clenmi. V sucastnosti snad nejaka vyvojova doska s jednocipovym procesorom.Riesis sice program, ale vies aspon ako funguju logicke obvody ?Napriklad taky 2-vstupovy NAND.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

No vyzkoušel jsem toho už hodně. teď nezbývá, než jít si opět pořádně prostudovat DATASHEET. Párkrát se zadařilo, že jsem něco přehlídl.PS: NAND vím jak funguje. Nejsem úplný hlupák.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

Promiň, ale...myslíš ten rotační enkodér, snímač otáček s relativní polohou? (Jsou i enkodéry s absolutní polohou). Mslíš to, co má dva výstupy, oblédlíky vůči sobě posunuté? Prípadně třetí výstup-jeden pulz na otáčku, který značí počátek, nula stupňů polohy hřídele? Tak si uvědom jak TEN ENKODÉR funguje...při jedné z hran jednoho z těch dvou výstupů se ptát na stav druhého výstupu, podle jeho stavu se pak enkodér otáčí na jednu nebo druhou stranu...přerušení ten Atmel určitě bere při jedné nebo obou hranách na vstupím portu...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

oblédlíky->obdélníky

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

Jo a sice NAND víš jak funguje...směr toho enkodéru by se dal s hradlama krásně vyrobit, a program bude fungovat STEJNĚ

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

No rotační enkodér mám 2 výstupní, kde výstupní pulzy jsou proti sobě posunuté.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

Jo to je přesně on. Tak si uvědom jak to funguje, podívej se na jeho průběhy. Prostě a jednoduše, přerušení je vyvolané změnou (hranou) stavu na vstupu MCU, nevím jak to Atmel, jestli bere obě hrany nebo jen jednu. Ty vezmeš v pozat jen jednu hranu, třeba sestupnou jednoho výstupu enkodéru, a podle toho v jakém stavu bude jeho druhý výstup (v přerušení se doptáš v podmínce na jeho stav), tak se enkodér otáčí na jednu nebo druhou stranu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 IE 7.0
 |   |  Microsoft Windows 7 Firefox 16.0

Já jsem myslel spíš na průmyslové snímače otáček, ale funkce je naprosto stejná. Není potřeba nic složitě řešit. Jedno přerušení o dhrany jednoho výstupu a ptát se v něm na stav druhého.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

Mínusák ať prosím sdělí co je špatně.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 IE 7.0

Právě u průmyslových snímačů otáček je to poněkud složitější. Při zastavení pohonu nebo zařízení může dojít k t.zv. kmitání na hraně ať již vlivem vlastností pohonu a připojeného zařízení nebo jen vlivem vnějších vlivů - třeba otřesy.A to není jednoduchá záležitost. Lze to řešit jak za pomocí HW tak SW.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

To je pravda, to už bude "prosté" ošetření zákmitů, to se dá vyřešit taky celkem jednoduše (asi jak pro koho). Ovšem pro enkodéry jsou přímo karty pro PLC, přece jen z toho encodéru leze (může) jít docela velká frekvence a samotné PLC (jeho prosté vstupy) by to nestačilo zpracovat. Ty karty vše dělají na HW úrovni, počítají pulzy...V případě tazatele jsem to bral jako školní úlohu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

Soráč, ale školní úloha to není. Jenom se zkouším naučit něco nového, ale bohužel bez úspěchu. Tady je něco, co by se podle mě mělo tvářit jako že by to mohlo fungovat, ale pouze to přičítá. TZN. ta druhá podmínka není splněná. Co vy na to?ISR(INT1_vect){ //pokud dojde k preruseni, probehna kontrola pinu PD5 k urceni smeru //a podle toho pricteni nebo odecteni if (!(PIND & _BV(PD5))) { enc++; } else if (PIND & _BV(PD5)) { enc--; } //timercounter = 0;}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

Tak tady je ještě jeden neúspěšný pokus, podle mě poněkud propracovanější než ten minulý. ALE OPĚT NEFUNGUJE. Přerušení projde, ale už nedojde k rozpoznání otočení a následné zvětšení nebo snížení proměnné "enc". Zde pouze odečítá.ISR(INT1_vect){ //pokud dojde k preruseni, probehna kontrola pinu PD5 k urceni smeru //a podle toho pricteni nebo odecteni if (PIND & (1 << PD5)) { if (PIND & (1 << PD3)) { enc--; } else { enc++; } // change to falling detection MCUCR |= ((0 << ISC00) | (1 << ISC01)); } else { if (PIND & (1 << PD3)) { enc++; } else { enc--; } // change to rising detection MCUCR |= ((1 << ISC00) | (1 << ISC11)); } //timercounter = 0;}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

Tak já už fakt nevím. Přepsal jsem celý program, ale asi dělám jednu a tu samoou chybu. Tady je můj nový kód, a stále dochází k tomu, že se při otáčení enkodéru se číslo pouze zmenšuje nezávisle na otáčení (doleva / doprava). Jestli někdo budete mít chvilku, koukněte mi na to. Budu rád za jakoukoli radu.[code]#include <stdlib.h>#include <avr/io.h>#include <avr/pgmspace.h>#include <avr/interrupt.h>#include "lcd.h"#include "rotary.h"long int position=0; void pause (unsigned int a) { unsigned int i; for (i=a;i>0;i--) ;}char text[16];void write_position(void){ unsigned char i; long int temp; temp=position; itoa(temp,text,10); lcd_gotoxy(0,0); lcd_puts(text);}ISR (INT0_vect){ if (((PIND&0x01)==0x00)&&(position<9999)) position=position+1; //inc if (((PIND&0x01)==0x01)&&(position>-9999))position=position-1; //dec }int main(void){ DDRD=0xfa; //PD0,PD2 jako vstup, ostatní jako vystupPORTD=0x05; pause(3000); //pauzalcd_init(LCD_DISP_ON); //Init LCD MCUCR=(1<<ISC01)|(1<<ISC00); //Set INT0 on rising signal on PD2 GICR=(1<<INT0); write_position(); //Write position sei(); //povoleni přerušeníwhile(1) write_position();return 1;}[/code]

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 IE 7.0

NějaK málo informací. Jaké používáte vývojové prostředí?(v čem to píšete a odlaďujete)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

Ahojte. Tak po konzultaci mého problému ještě na jednom foru (SvetElektro), jsem dospěl k závěru, že program je funkční, ale můj enkodér je kaput. I tak děkuji za pomoc. A hned jak seženu nový enkodér, dám vědět jestli tomu tak opravdu je. PS: vývojové prostředí AVR Studio 4, Atmega16, Krystal 16MHz.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Enkodér




Určitě si přečtěte

Moral machine: Už víme, zdali je lepší zabít psy, sebe nebo matky na přechodu

Moral machine: Už víme, zdali je lepší zabít psy, sebe nebo matky na přechodu

** Jak byste se sami vypořádali s tramavajovým dilematem? ** Vědci před lety spustili globální dotazník ** Nyní se pochlubili s výsledky

Jakub Čížek | 150

Kvantový internet se blíží. Oproti tomu klasickému bude mnohem bezpečnější

Kvantový internet se blíží. Oproti tomu klasickému bude mnohem bezpečnější

** Jednotlivé bloky kvantového internetu už se pomalu vyvíjí a testují ** Kvantová síť už bude mít své uplatnění dříve, než bude všude dostupný kvantový internet ** Nejdříve půjde o doplněk ke klasickému internetu

Karel Javůrek | 15

Vyzkoušeli jsme novou Kuki. Chce zničit prehistorickou lineární televizi

Vyzkoušeli jsme novou Kuki. Chce zničit prehistorickou lineární televizi

** IPTV je dle mnohých budoucnost televize ** K největším českým poskytovatelům patří Kuki ** Nyní spustila uzavřenou betaverzi své nové koncepce

Jakub Čížek | 26

Zbavujeme se Googlu: vybíráme nejlepší alternativy, které nahradí jeho služby

Zbavujeme se Googlu: vybíráme nejlepší alternativy, které nahradí jeho služby

** Google nabízí spoustu služeb, ale většina z nich má i dobré alternativy ** Pokud z nějakého důvodu nechcete používat služby Googlu, nemusíte ** Připravili jsme přehled služeb, kterými lze ty od Googlu nahradit

Karel Javůrek, David Polesný | 89

ELONOVINKY: Tesla brzy začne prodávat solární tašky. Budou drahé, ale pěkné

ELONOVINKY: Tesla brzy začne prodávat solární tašky. Budou drahé, ale pěkné

** Tesla začne prodávat solární střešní tašky, které představila před dvěma lety ** Výroba začne v první polovině příštího roku ** Tašky budou odolné, dostanou doživotní záruku a na přání i vyhřívání

Petr Melechin, Karel Dlabač | 24



Aktuální číslo časopisu Computer

Nejlepší programy pro úpravu fotek zdarma

Externí disky pro zálohu dat

Velký test: herní notebooky

Srovnání 12 batohů