www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Realtime?

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
clownfish
Član
Član



Pridružen-a: Pet 05 Avg 2005 13:05
Prispevkov: 765
Aktiv.: 3.23
Kraj: Povir / Ljubljana

PrispevekObjavljeno: Pon Jun 08, 2009 9:07 am    Naslov sporočila:  Realtime? Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
trot
Član
Član



Pridružen-a: Čet 18 Jan 2007 20:25
Prispevkov: 1282
Aktiv.: 5.72
Kraj: glej fogl

PrispevekObjavljeno: Pon Jun 08, 2009 9:40 am    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
clownfish
Član
Član



Pridružen-a: Pet 05 Avg 2005 13:05
Prispevkov: 765
Aktiv.: 3.23
Kraj: Povir / Ljubljana

PrispevekObjavljeno: Pon Jun 08, 2009 12:48 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
trot
Član
Član



Pridružen-a: Čet 18 Jan 2007 20:25
Prispevkov: 1282
Aktiv.: 5.72
Kraj: glej fogl

PrispevekObjavljeno: Pon Jun 08, 2009 2:08 pm    Naslov sporočila:   Odgovori s citatom

Potem pa uporabi še en timer interupt, kjer boš pregledoval te korake, v main pa imej nastavitve.
_________________
lp, Klemen
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
clownfish
Član
Član



Pridružen-a: Pet 05 Avg 2005 13:05
Prispevkov: 765
Aktiv.: 3.23
Kraj: Povir / Ljubljana

PrispevekObjavljeno: Pon Jun 08, 2009 2:35 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
trot
Član
Član



Pridružen-a: Čet 18 Jan 2007 20:25
Prispevkov: 1282
Aktiv.: 5.72
Kraj: glej fogl

PrispevekObjavljeno: Tor Jun 09, 2009 9:32 am    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Dorijan
Član
Član



Pridružen-a: Ned 22 Jun 2008 10:48
Prispevkov: 2564
Aktiv.: 12.40
Kraj: južnoprimorska

PrispevekObjavljeno: Tor Jun 09, 2009 12:32 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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