[elektro] STM32F4 EXTI rotary encoder

elight elight at gmail.hu
Sat Jun 27 19:49:37 CEST 2015


Nem értem és nem látom be
miért kell két interrupt kezelése egy encoderhez????

Mondtam más , az egyik bit fel és lefutását kell egy INT vonalon figyelni..
Minden jelszint váltás interruptot okoz majd , ha a polarity bitet 
közben mozgatod..
Tehát ha éppen "lefutott" INT van akkor a következő csak "felfutott"
jel lehet "Rise/Fall váltakozik"  .

Minden élváltás után  összehasonlítod a két bitet
és ezek alapján tevékenykedhetsz..
Tehát mondjuk veszel egy regisztert , irányítasz rá
egy pointert.. és a pointer ahova mutat
azt növeled, / csökkented.
De növelheted csökkentheted ötösével is pl..
Ez megoldható egy fleggel, amit a tengelyen lévő kapcsoló
billentget.. Ha megnyomod, 5 -ötösével ugrik
ha megnyomod mégegyszer akkor egyeséve ugrál és újra nyomva
megint ötösével.

A lényeg ilyesmi:

Az int eseményből meg kell hívni az encoder függvényt
  akkor   ha az az esemény bekövetkezett (élváltás A ).


void( encoder_isr(void)
{

    unsigned char encoder;

    encoder = ENC_PORT;       //  Itt beolvasod a protot ami a két bitet 
is tartalmazza, mondjuk B0 és B1
                                            //  A B0 port váltása okozta 
   az interruptot.

    Enc_New_X =  ( encoder & mask );       //  ahol a mask a két bitre 
mutat pl:  0b00000011

    if(    Enc_New_X.F0   != Enc_New_X.F1 )           // a két bit 
összehasonlítása
   {
        // itt kezelhetők a encoder ++  műveletek   pl.

         if( (*ps_Enc_Buffer_Point)  <   s_Enc_Maximum  )   // meg kell 
nézni elpörgött e a határig.
        {
                (*ps_Enc_Buffer_Point) ++; //  ha nem még növelhető
               MENU_EVENT_FL = 1;                                        
//  Pl.  Menü változás történt, a kijelzésen is kezelni kell majd
                    //....
         }


   }
   else
   {

         if( (*ps_Enc_Buffer_Point)  >   s_Enc_Minimun )   // meg kell 
nézni elpörgött e a határig.
        {
                (*ps_Enc_Buffer_Point) --; //  ha nem még csökkenthető
               MENU_EVENT_FL = 1;                                        
//  Pl.  Menü változás történt, a kijelzésen is kezelni kell majd
                    //....
         }


   }

}

Értelem szerűen a változókat létre kell hozni, illetve a kívánt 
működésmódokat is...
Ha magát  a pointert mozgatod a fókusz áthelyezheted egy másik értékre is..

Üdv István










2015-06-27 18:02 keltezéssel, uprogc . írta:
> ui: Talan igy ?
>
> EXTI4_15_IRQHandler(void)
> {
>
> if (EXTI_GetITStatus(EXTI_Line4) != RESET || EXTI_GetITStatus(EXTI_Line5) !=
> RESET)
> ...
>
> }
>
>
> 2015-06-27 18:56 GMT+03:00 uprogc . <uprogc at gmail.com>:
>
>> Szia,
>>
>> Koszi.
>>
>> Kozben talaltam valamit, ki fogom probalni:
>> http://electronics.stackexchange.com/questions/99915/stm32-rotary-encoder-with-hardware-interrupts
>> Meg lehet azt csinalni, hogy az EXTI4 es az EXTI5 egy IT-be fusson be ?
>>
>>
>> U,
>> Szabi
>>
>> 2015-06-26 19:27 GMT+03:00 elight <elight at gmail.hu>:
>>
>>> Na   EZ nekem is jól jött volna , amikor elkezdtem ezzel foglalkozni !
>>> :-) :-) :-)
>>>
>>>
>>> http://embedded-lab.com/blog/?p=9149
>>>
>>> Üdv István
>>>
>>>
>>>
>>> 2015-06-26 13:11 keltezéssel, elight írta:
>>>> Szia
>>>>
>>>>
>>>> az EXTI jól működik... ha jól konfigolod...
>>>> Rakj külső felhúzót ,
>>>> és ha optikai , nem is  kell a kondi.
>>>> Az exti-nél a jel polarity-t kell minden megszakításnál
>>>> váltogatni.. És az akkor vett minták alapján a forgatás könnyen
>>>> kitáblátozatolható.. Nem volt ezzel gondom..
>>>> Olyan gyors, ahogy tekereg...
>>>>
>>>> Üdv István
>>>> 2015-06-26 13:01 keltezéssel, uprogc . írta:
>>>>> Sziasztok,
>>>>>
>>>>> Eddig Systick-el olvastam be a rotary enkodert, kb 3 ms-ra van allitva,
>>>>> mukodik.
>>>>> Mivel tobb lepesu optikai enkodert szeretnek majd hasznalni a
>>> mechanikus
>>>>> helyett, gondoltam atteszem EXTI-re. Hat nem mukodik.
>>>>> Gondoltam prell van, 100nF-100pF -ig tobb erteket kiprobaltam, de nem
>>>>> jo.
>>>>> Meg a 100 pF-al is mintha belassulna, de inkabb bedoglik. Meg a lassu
>>>>> lepeseket sem veszi.
>>>>>
>>>>> Erdemes kulsofelhuzo ellenallassal es kondival megprobalni ?
>>>>> Egyeb otlete valakinek otlete ezzel kapcsolatosan?
>>>>> (Bekotesek jok ;) )
>>>>>
>>>>> U,
>>>>> Szabi
>>>>> -----------------------------------------
>>>>>             elektro[-flame|-etc]
>>>>>
>>> -----------------------------------------
>>>            elektro[-flame|-etc]
>>>
>>
> -----------------------------------------
>            elektro[-flame|-etc]



More information about the Elektro mailing list