Prekinitev in start delovanja....

Moderator: tilz0R

Prekinitev in start delovanja....

OdgovorNapisal/-a Highlag » 13 Avg 2020, 17:02

Za Nucleo F042K6 sem spisal en programček, ki deluje nekako takole. Imam tipko s katero sprožim generiranje kvadratnega signala relativno nizke frekvence. Ko tipko spustim generator utihne samo ne tisti trenutek ko tipko spustim.

Kako generiranje prekiniti takoj, ko tipka ni več pritisnjena. Sedaj, če imam na 1Hz čaka da mine 500ms oziroma 50ms če je na 10 Hz

Koda: Izberi vse
while (true) {
        if (Tipka ==0){              // tipka je pritisnjena
            if (Frekvenca==0){   // 1Hz
                    Led_1=0;         // LED 1Hz je on
                    Izhod=!Izhod;
                    wait_ms(500);
                    Led_2=1;        // LED 10Hz je off         
                    }
            else {              //10Hz
                Led_1=1;        // LED 1Hz =off
                Izhod=!Izhod;
                wait_ms(50);
                Led_2=0;       // LED 10Hz =on
            }
        }
        else    // Tipka ni pritisnjena
        { 
          Izhod= 0;
        }     
       
    }
http://31.15.144.68/
Highlag
 
Prispevkov: 509
Pridružen: 19 Jan 2015, 17:22
Zahvalil se je: 1 krat
Prejel zahvalo: 101 krat
Uporabnika povabil: borisz
Število neizkoriščenih povabil: 13

Re: Prekinitev in start delovanja....

OdgovorNapisal/-a jure94 » 13 Avg 2020, 17:59

Za generiranje signala uporabi timer. Lahko hardwersko direktno PWM output ali pa v interruptu "ročno" nastaviš izhod. Odvisno od celotnega programa bo verjetno primerno tudi za tipko uporabiti interrupt. Problem v tvojem primeru je uporaba delaya (wait_ms).
Tole mi je bilo v pomoč ko sem začenjal s STMji: http://en.radzio.dxp.pl/stm32vldiscovery/ (lession 1-6). Seveda je drug STM, ampak princip bo zelo podoben.
Uporabniški avatar
jure94
 
Prispevkov: 719
Pridružen: 18 Jan 2015, 00:33
Kraj: Jesenice/Ljubljana
Zahvalil se je: 37 krat
Prejel zahvalo: 68 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 8

Re: Prekinitev in start delovanja....

OdgovorNapisal/-a Highlag » 13 Avg 2020, 18:34

Hvala bom pogledal... čeprav te funkcije od mbeda mislim, da že uporabljajo timerje... Uporaba interupta pri pritisku tipke je že meni prišla na misel, samo potem se mi je zataknilo kako to porabit za "ugašanje" neke druge funkcije..
http://31.15.144.68/
Highlag
 
Prispevkov: 509
Pridružen: 19 Jan 2015, 17:22
Zahvalil se je: 1 krat
Prejel zahvalo: 101 krat
Uporabnika povabil: borisz
Število neizkoriščenih povabil: 13

Re: Prekinitev in start delovanja....

OdgovorNapisal/-a jure94 » 13 Avg 2020, 18:46

Mbeda ne uporabljam tako, da glede tega ne vem. Jaz bi naredil to kar z registri, ker je res preprost primer.
Interrupt bi prožil na rising in falling edge, v interrupt handlerju bi potem preveril stanje tipke in glede na to prižgal ali ugasnil timer, ki bi bil nastavljen za generiranje PWM signala.
Ne vem sicer od kje pride izbira frekvence, ampak mogoče bi moral še to vključiti v interrupt in tam spremeniti timer, da bo imel pravo frekvenco.
Uporabniški avatar
jure94
 
Prispevkov: 719
Pridružen: 18 Jan 2015, 00:33
Kraj: Jesenice/Ljubljana
Zahvalil se je: 37 krat
Prejel zahvalo: 68 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 8


Vrni se na C in sorodni jeziki

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost