Enkoder+cpp+IRQ

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

dan21
Ultimate člen
Ultimate člen
Príspevky: 3016
Dátum registrácie: 11 Apr 2007, 00:00
Bydlisko: ZA

Enkoder+cpp+IRQ

Príspevok od používateľa dan21 » 26 Nov 2017, 00:59

Zdravim,
Mam za ulohu doplnit cast kodu na obsluhu rotacneho enkodera do existujuceho AVR cpp projektu (mega32).
Enkoder ma byt zapojeny na INT0 a INT1 (to je danne). Borim sa s problemom ako v preruseni nastavovat premenne v objekte enkodera.
Vytvoril som kostru.
enc.h
class Enc {
public:
Enc();
static Enc* Enc_pointer;
volatile bool statusChanged;

inline void handle_interruptINT0(void);

};

enc.cpp
Enc* Enc::Enc_pointer;

Enc::Enc()
{
Encoder_pointer = this;
}

inline void Enc::handle_interruptINT0()
{
statusChanged = true;
}

ISR(INT1_vect, ISR_ALIASOF(INT0_vect));
ISR(INT0_vect)
{
Encr::Enc_pointer->handle_interruptINT0();
}

main.cpp

Enc enc;
main(void) {
while(1) {
if (enc.statusChanged) {
enc.statusChanged = false;
}

}
}


moze toto fungovat ?
Diky
0

Pega
Stály člen
Stály člen
Príspevky: 192
Dátum registrácie: 28 Mar 2012, 08:52

Re: Enkoder+cpp+IRQ

Príspevok od používateľa Pega » 26 Nov 2017, 07:13

Nemůže,
mimo jiné proto, že v hlavním programu jenom vynuluješ nějaký flag.
O stavu enkodéru se nedozvíš nic.
0

dan21
Ultimate člen
Ultimate člen
Príspevky: 3016
Dátum registrácie: 11 Apr 2007, 00:00
Bydlisko: ZA

Re: Enkoder+cpp+IRQ

Príspevok od používateľa dan21 » 26 Nov 2017, 08:34

Toto je len kostra. Mne ide o princip ci v ISR mozem tymto sposobom nastavit premennu v objekte.
To co potom urobim v hlavnom programe je momentalne vedlajsie.
0

dan21
Ultimate člen
Ultimate člen
Príspevky: 3016
Dátum registrácie: 11 Apr 2007, 00:00
Bydlisko: ZA

Re: Enkoder+cpp+IRQ

Príspevok od používateľa dan21 » 26 Nov 2017, 21:40

Vyriesene !
Poprosim zamknut alebo zmazat !
Dakujem.
0

Napísať odpoveď