» Poradna » Programy

Rotační enkodér v jazyku C

Odpovědět  |  Zobrazit bez stromu  |  Upozornit redakci  |  nových odpovědí: 20/20
 |   |  Microsoft Windows 7 Firefox 16.0  |  [89.102.182.---]

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  |  [89.102.182.---]

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  |  [89.177.22.---]

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  |  [89.102.182.---]

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  |  [89.177.22.---]

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  |  [89.177.22.---]

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

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0  |  [89.177.22.---]

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  |  [89.102.182.---]

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  |  [89.177.22.---]

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  |  [85.70.212.---]
 |   |  Microsoft Windows 7 Firefox 16.0  |  [89.177.22.---]

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  |  [89.177.22.---]

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

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 IE 7.0  |  [85.70.212.---]

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  |  [89.177.22.---]

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  |  [89.102.182.---]

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  |  [89.102.182.---]

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  |  [89.102.182.---]

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  |  [83.208.148.---]

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  |  [89.102.182.---]

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


Dnes je Black Friday: Přehled slev na elektroniku a počítače

Dnes je Black Friday: Přehled slev na elektroniku a počítače

** Začala slevová mánie zvaná Black Friday ** Pozor, ne všechny slevy jsou opravdu výhodné ** Průběžně sledujeme slevové akce v počítačových e-shopech

22.  11.  2017 | David Polesný | 37

Google Mapy mají nový design. Líbí se vám víc než předchozí? Tady je srovnání

Google Mapy mají nový design. Líbí se vám víc než předchozí? Tady je srovnání

** Nový design Google Map přijde na počítače i mobilní telefony. ** Zaměřuje se na zvýraznění konkrétních míst, mapové podklady jsou mnohdy upozaděné. ** Lépe pracuje s chráněnými oblastmi a parky.

20.  11.  2017 | Vladislav Kluska | 30

Microsoftu se invaze na Android daří, jeho launcher aktivně používá přes milion lidí

Microsoftu se invaze na Android daří, jeho launcher aktivně používá přes milion lidí

** Microsoft se zabydluje na platformě Android ** Nedávno představený launcher už používá milion uživatelů ** Je to stále jen zanedbatelný zlomek uživatelů Androidu, ale slibný růst

22.  11.  2017 | Vladislav Kluska | 35

Co je to láska? Milujeme se pouze kvůli chemickým látkám, nebo je v tom něco víc?

Co je to láska? Milujeme se pouze kvůli chemickým látkám, nebo je v tom něco víc?

** Co je to vlastně láska? Dá se vysvětlit vědecky? ** Výzkum ukázal, že zamilovaní jedinci mají mj. zvýšenou hladinu fenyletylaminu a množství testosteronu ** Je ale rozdíl mezi zamilovaností a láskou

21.  11.  2017 | Vojtěch Malý | 22


Aktuální číslo časopisu Computer

Otestovali jsme 5 HDR 4K televizorů

Jak natáčet video zrcadlovkou

Vytvořte si chytrou domácnost

Radíme s koupí počítačového zdroje