 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 765 Aktiv.: 3.23 Kraj: Povir / Ljubljana
|
Objavljeno: Pon Jun 08, 2009 9:07 am Naslov sporočila: Realtime? |
|
|
V AVR-u imam realiziran RTC, ki se preko interutta timerja osvežuje 200x na sekundo.
V programu imam napisano neke vrste sekvenco sestavljeno z 50tih korakov.
Vsak korak se izvede ob točno določeni uri zato vse korake 1x/sekudno v interuptni rutini pregledam in če je kakšen, ki bi se moral izvesti ga izvedem.
Tak korak kliče spet neko rutino, ki nekaj naredi vse skupaj pa traja..
Torej se zna zgoditi, da so vsi koraki na vrsti v isti sekundi torej tisto sekundo procesor precej dela in ker sem ga klical iz interuptne rutine je lahko precej časa v samem interuptu in vmes preteče precej teh 1/200 s kjer bi se moral vedno izvesti isti interupt ....torej na koncu ura precej zaostaja..
No poizkusil sem rešiti tako, da tele korake pregledujem iz glavnega programa in zadeva deluje dokler...
..ne grem v meni za konfiguracijo teh korakov kjer seveda skačem po menijih in teh korakov ne pregledujem..
V starih časih 8051 sem zadevo preprosto rešil tako da sem "prevaral" stack in v interuptni rutini na sklad poslal naslov rutino za izvajanje nečesa.
Tako je procesor ob vrnitvi iz interupta najprej obdelal ta podprogram in se nato vrnil nazaj odkoder je bil klican interupt.
V C-ju in na AVR-u pa nekako ne znam tega izvesti..
Ali pa.. obstaja kakšen drugačen način, da se to vse skupaj sprogramira?? |
|
Nazaj na vrh |
|
 |
trot Član


Pridružen-a: Čet 18 Jan 2007 20:25 Prispevkov: 1282 Aktiv.: 5.72 Kraj: glej fogl
|
Objavljeno: Pon Jun 08, 2009 9:40 am Naslov sporočila: |
|
|
V interuptu mora biti kratk funkcija, popravljanje števcev in podobno. Te korake delaj v main funkciji, tako kot si napisal. Ne vem (ne razumem) pa kaj je narobe s "...ne grem v meni za konfiguracijo teh korakov kjer seveda skačem po menijih in teh korakov ne pregledujem."
Kater avr pa imaš. Imaš RTC nastavljen da teče na Timer2 s svojim kvarcem (z ustrezno frekvenco za RTC). Kolikor vem lahko z delitvijo frekvence nastaviš da se rtc števec povečuje tudi manj kot 200x na sekundo. Že teh 200 je sumljiva številka, ker ni 2^n.
Sicer pa povečaj frekvenco uC če je možno. _________________ lp, Klemen |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 765 Aktiv.: 3.23 Kraj: Povir / Ljubljana
|
Objavljeno: Pon Jun 08, 2009 12:48 pm Naslov sporočila: |
|
|
trot je napisal/a: |
V interuptu mora biti kratk funkcija, popravljanje števcev in podobno. Te korake delaj v main funkciji, tako kot si napisal. Ne vem (ne razumem) pa kaj je narobe s "...ne grem v meni za konfiguracijo teh korakov kjer seveda skačem po menijih in teh korakov ne pregledujem."
Kater avr pa imaš. Imaš RTC nastavljen da teče na Timer2 s svojim kvarcem (z ustrezno frekvenco za RTC). Kolikor vem lahko z delitvijo frekvence nastaviš da se rtc števec povečuje tudi manj kot 200x na sekundo. Že teh 200 je sumljiva številka, ker ni 2^n.
Sicer pa povečaj frekvenco uC če je možno. |
hmm.. v mainu se ti koraki lahko pregledujejo. In to tudi deluje..
Ko pa grem v config meni imam noter polno raznih pauz za branje tipk in podobnih zadev.
Tam teh korakov ne pregledujem. In ko se vrnem iz teh nastavitev je lahko preteklo že precej sekund/minut od takrat ko bi ti koraki morali biti že aktivirani..
Po eni strani bi lahko dal v samem RTC delu vsako sekundo prevrjanje ali je kateri korak za aktivirta in če je dvignil neko zastavico.
V samem config meniju pa bi moral potem v vsakem delu dodati tole preverjanje
te zastavice in če bi bila pač dvignjena bi klical rutino za aktivacijo.
To ni slabo vendar.. sam config del ima toliko raznih zank in vsega..klic na tole rutino za preverjanje in vklop bi moral biti v vsakem delu..da se kje ne najde kakšno slepo črevo.
Atmega 32 delam z zunanjim quarzem 32768hz
Kot sem preveril uporabljam 64Hz refresh RTC rutine in ne 200..
Torej bi mi res najbolj ustrezala že omenjena finta.
Ko se vrnem iz interuptne rutine namesto, da se vrnem nazaj v glavni program
(od koder je bil klican interupt) na sklad vrinem naslov rutine za preverjanje in obdelavo teh kanalov. Na koncu te rutine je spet RET in ta potem vrne nazaj v main program..
V asemblerju je bilo to tako enostavno in praktično za izvesti.. |
|
Nazaj na vrh |
|
 |
trot Član


Pridružen-a: Čet 18 Jan 2007 20:25 Prispevkov: 1282 Aktiv.: 5.72 Kraj: glej fogl
|
Objavljeno: Pon Jun 08, 2009 2:08 pm Naslov sporočila: |
|
|
Potem pa uporabi še en timer interupt, kjer boš pregledoval te korake, v main pa imej nastavitve. _________________ lp, Klemen |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 765 Aktiv.: 3.23 Kraj: Povir / Ljubljana
|
Objavljeno: Pon Jun 08, 2009 2:35 pm Naslov sporočila: |
|
|
trot je napisal/a: |
Potem pa uporabi še en timer interupt, kjer boš pregledoval te korake, v main pa imej nastavitve. |
Hja.. fajn bi blo..če nebi že vseh pokuru..
torej mi ostane samo to da vzamem drug cpu.. ??
a obstaja kšna fora da iz timer interupta grem najprej ven..
prej pa še "pocuknem" kak drug interupt? katerega sedaj nimam v uporabi?
čisto softversko seveda.. ? |
|
Nazaj na vrh |
|
 |
trot Član


Pridružen-a: Čet 18 Jan 2007 20:25 Prispevkov: 1282 Aktiv.: 5.72 Kraj: glej fogl
|
Objavljeno: Tor Jun 09, 2009 9:32 am Naslov sporočila: |
|
|
Kot se spomnim (že kar nekaj časa nisem delal z avr-ji) lahko softversko sprožiš katerikoli interupt če sprožiš zastavico tega interupta. Ampak ne vem v čem je smisel tega, to je potem enako kot če bi izvedel neko funkcijo znotraj tega interupta v katerem si, edina razlika lahko nastane zaradi prioritete različnih interuptov. _________________ lp, Klemen |
|
Nazaj na vrh |
|
 |
Dorijan Član



Pridružen-a: Ned 22 Jun 2008 10:48 Prispevkov: 2564 Aktiv.: 12.40 Kraj: južnoprimorska
|
Objavljeno: Tor Jun 09, 2009 12:32 pm Naslov sporočila: |
|
|
Saj nisem preprican ampak mislim da imajo atmelcki en register ki se z vsakim ciklom poveča neodvisno od programa, ki se izvaja, tako da ko greš v interupt prebereš stanje in ko se vrneš iz njega zopet prebereš in dobiš koliko ciklov je v tem času minilo.
Lahko pa uporabiš zunanji čip ki je namenjen za uporabo kot RTC
http://si.farnell.com/real-time-clocks |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|