» 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

Našli jsme 22 schopných internetových prohlížečů: Vyberte si, který vám nejvíc sedne

Našli jsme 22 schopných internetových prohlížečů: Vyberte si, který vám nejvíc sedne

** Není jen Chrome, Firefox, Edge či Opera. Na výběr máte mnohem více! ** Internetové prohlížeče se liší funkcemi, zaměřením i designem. Našli jsme 22 použitelných prohlížečů pro Windows ** Vyberte si prohlížeč, který vám bude nejvíce vyhovovat

Karel Kilián | 30

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 42

WALL-E vyfotil Zemi ze vzdálenosti 1 milionů km

WALL-E vyfotil Zemi ze vzdálenosti 1 milionů km

** Malá sonda s přezdívkou WALL-E pořídila fotografii Země a Měsíce ze vzdálenosti 1 milionů km ** CubeSat letí se sondou InSight k Marsu ** InSight přistane na Marsu 26. listopadu

Petr Kubala | 4

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

** Pornografie údajně představuje třetinu internetové obsahu a je technologický tahounem ** Do erotického obsahu postupně zasahuje i virtuální realita ** Kromě vizuálního vjemu se pracuje také na virtuálním uspokojení toho hmatového

Jan Dudek | 28

PrusaLab a FutLab: Praha se dočkala špičkových komunitních dílen pro hackery

PrusaLab a FutLab: Praha se dočkala špičkových komunitních dílen pro hackery

** Nejprve svoji velkou dílnu otevřelo Brno ** Letos se přidala i Praha ** Nabízí malé 3D tiskárny i velké průmyslové stroje

Jakub Čížek | 11

Velká jarní aktualizace Windows 10: Co přináší April 2018 Update

Velká jarní aktualizace Windows 10: Co přináší April 2018 Update

** Po necelém půl roce je tu další aktualizace Windows ** Přináší časovou osu nebo sdílení souborů jako na mobilu ** A také Application Guard, který umí virtualizovat Edge

Jakub Čížek | 143


Aktuální číslo časopisu Computer

Kdy necháme řídit chytrá auta?

6 Wi-Fi Mesh systémů ve velkém testu

Srovnali jsme 7 sportovních kamer

Znáte pravidla pro létání s drony?