MPU sjov og balade....

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Danish to

Threaded View
Hejsa,

    Hvordan i H.... for man lavet tjekket om et tal går op i et andet med
mindst resurser ????


    Det drejer sig om at jeg prøver at få en logger til at lave en måling
for hver 10 sec... og jeg har en sec tæller som incrementeres for hver andet
sekund. Som det er nu benytter jeg mig af følgende metode :

    If( (sekunder%5) == (sekunder/5) ) bla bla bla....

    Men er det for tåbeligt ??? grunden til jeg vil bruge en formel er at
jeg vil ha en variable der svare til scan intervallet som derved vil være
hvor jeg har 5 tallet nu, så jeg kan ændre den hvis jeg vil scanne ved et
andet interval.

    VH
    Lars Molnit
    Håber det er skrevet så det nogenlunde forståeligt :)



Re: MPU sjov og balade....

Quoted text here. Click to load it
andet

Hej Lars

Kan du ikke skrive lidt om din sekundt tælle?
Bruger du den til andet end sensor tjek?

Hvis den nu kører på en interrupt der bliver tricket af en clock,
kunne du jo bare få den til at kører hvert 10 sek!

Hilsen Mikkel



Re: MPU sjov og balade....
Quoted text here. Click to load it

    Det er en ekstern 32,768kHz crystal som driver en interupt timer, og
derved vækker MPU'en fra sleep mode hver 2 sek. (sådan ca.) da det er en
16bit tæller.

    Den bruges til at drive det interne ur i chippen, da jeg derved for en
meget billig Ur funktion, som også er ekstrem strømbesparende
(batteridrift).

Quoted text here. Click to load it

    klokken er rimelig fast da der bruges et fast crystal, så interuptet kan
kun justeres mellem 1/32768 sek og 2 sek. måske skal man ha en sideløbende
tæller som kun står for log tæller delen, og derved kan jeg minimere
udtrykket til :

    if(!(scan_timer%scan_interval)) bla bla bla ... scan_timer = 0 .... bla
bla bla end if

    hmmm, hvis jeg bare kunne måle strømforbruget på den, så ku man jo
sammenligne de to states, men når der snakkes om nA-uA så er det lidt svært
at få noget godt måleudstyr :(

    VH
    Lars Molnit



Re: MPU sjov og balade....

Quoted text here. Click to load it


Hvad med at udføre følgenden hver andet sekundt:

Sekundttæller+=2;

if (Sekundtæller>10) {
  Sekundtæller-10%;
  bla bla bla...
  }

Så er det ret læt at sætte vilkårlige intervaller op.




Re: MPU sjov og balade....
Quoted text here. Click to load it

    Og den kræver mindre resurcer end at jeg bruger division og modulus :)
og derved mindre strømforbrug... :) genial ide.

    VH
    Lars Molnit
    Som straks vil implementere dette i sin kode :)



Re: MPU sjov og balade....

Quoted text here. Click to load it


Hey

Måske lidt offtopic...

Men en ADUC83X / 84x

har inbygget time interval counter til ur og køres fra et ur krystal
direkte.....

(har fået den til at vågne op)....

og den kan gå i power down (15uA) eller lidt mere hvis pll'en skal køre

Bare lige et forslag ((:

Kasper



Re: MPU sjov og balade....
Quoted text here. Click to load it


    Takker for forslaget :) men jeg bruger en PIC18F1320 og den kan det
samme ...og som opstillingen er nu skulle jeg være nede på 1,1uA når den
tæller mens den er i sleep mode.

    VH
    Lars Molnit



Re: MPU sjov og balade....
Quoted text here. Click to load it

Du sammenligner en integer med en float?

if ( (sekunder%5) == 0 ) { do_stuff(); }

bør være rigeligt ;-) Så kan du jo nok lavet en constant du benytter
istedet for det 5-tal.

--
-jens

Re: MPU sjov og balade....

Quoted text here. Click to load it
andet

    nopes begge er integer, derved benytter jeg mig af compilerens fejl med
at der altid rundes op..

Quoted text here. Click to load it

    Ja, det trode jeg også men underligt nok gir det ikke nul for hver gang
det går op i 5, men i stedet antallet af gange 5 går op i sekunder ??? tror
det er et problem med den C-compiler jeg bruger.

    VH
    Lars Molnit
    Som lige har tjekket om uret går rigtig :) og det går perfekt, den har
skrevet både dag, mdr, timer, min rigtigt :) og har kørt siden i går.... nu
skal jeg bare finde en måde at få det kalibreret så godt som muligt, og lave
koden så effektiv som muligt så den bruger mindst muligt strøm.



Re: MPU sjov og balade....
Quoted text here. Click to load it

Ja, hvad der sker med den implicitte konvertering er jo op til
compileren ;-) enten sker der en implicit konvertering af integer til
float, eller float til integer.

Quoted text here. Click to load it

Ydrk, ikke meget modulus over det så - det er jo bare ren dividering ;-)

Men så er tidligere nævnte konstruktion:

if (sekunder > X) { sekunder = 0; do_stuff(); }

Nok den bedste løsning ;-) Så løber sekunder jo heller ikke bare sådan
lige over ;-)

--
-jens

Re: MPU sjov og balade....

Quoted text here. Click to load it

Hvem har foreslået den?
I mit foreslag trækker man X fra tælleren, det betyder nemlig at skæve
værdier også kan bruges (de vil i gennemsnit blive kørt korrekt).

Jeg bruger tit den slags tællere, især hvis jeg ikke vil risikere at miste
tid, selvom den ikke lige når at blive kørt på det korrekte tidspunkt, så
vil tælleren bare samle op, så den ALTID vil blive kørt det korrekte antal
gange. Men det er selvfølgelig mere relevant når inkrement og dekrement af
tælleren ikke foregår i samme task.



Re: MPU sjov og balade....
Quoted text here. Click to load it

Se, så forstår jeg hvorfor du vil gøre det unødigt komplekst ;-)
Threads, tasks, whatever er jo heller ikke just trivielt at udvikle, og
vi har alle vores "best practices" og så kan man jo nemt komme op at
toppes ;-)

Men hvis det i denne situation ikke var relevant kunne min tildeling
godt være lidt billigere end din subtraktion ;-) (nulstilling vs aritmetik)

--
-jens

Re: MPU sjov og balade....Opfølgning...
Hejsa Alle,
    Takker for hjælpen med problemet og kan nu sige at HKJ løsning har
betydet at samme funktion nu kan gøres på ca. 1/4 resourcer i forhold til
den jeg selv havde valgt, og da det er til en batteri drevet konstruktion
betyder dette jo enormt :) for batteri levetiden.

    VH
    Lars Molnit



Re: MPU sjov og balade....Opfølgning...

Quoted text here. Click to load it

Det glæder mig at du kunne bruge mit forslag.



Site Timeline