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 

Ura in Temperatura - Bascom
Pojdi na stran Prejšnja  1, 2
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
frenki
Moderator
Moderator



Pridružen-a: Ned 23 Feb 2003 21:26
Prispevkov: 6732
Aktiv.: 28.42
Kraj: Ljubljana (JN76GB)

PrispevekObjavljeno: Sre Jan 07, 2004 7:49 pm    Naslov sporočila:   Odgovori s citatom

Jurem pozdravljen,

Omenjena okleščena rutina seveda dela. Problem je le v tem, da v primeru če uporabim takšno rutino in pustim timer0 teči ne dela zanesljivo branje Dallasa. Bascom po mojem mnenju izvede prekinitev na ta način, da shrani stanje registrov, skoči na prekinitveno rutino, izvede kar mu je naloženo, se vrne nazaj in restavrira prejšnje stanje nato pa nadaljuje kjer je bil prekinjen. Ta čas verjetno kljub minimalizirani kodi v sami rutini ni zanemarljiv - oziroma je po moje dovolj dolg, da to prekine sekvenco komunikacije z Dallasom.

V primeru, da bo aplikacija uporabljena samo za LCD prikaz časa in temperature mislim da stvar ne bi smela biti kritična. Nastaviti bi bilo potrebno kontrolirano branje Dallasa (naprimer enkrat v sekundi), pustiti zadevo nekaj časa teči in izračunati odstopanje. To bi moral potem upoštevati pri računanju časa. Res je "empirična" metoda, vendar verjetno z malo potrpežljivosti dovolj natančna ob predpostavki seveda da želimo tole rešit z uporabo Bascom-a.

Silvo, tvoja opazka glede assemblerja povsem drži. Boljši rezultat od tega bi verjetno lahko dosegel tudi z uporabo C. Žal mi trenutno čas ne dopušča, da bi isto dosegel tudi v C-ju in primerjal rezultat. Če se bo kaj umirilo, bom ob priliki mogoče poskusil Wink.

Lp, Frenki
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
keops
Neznanec
Neznanec



Pridružen-a: Sre 26 Nov 2003 20:31
Prispevkov: 6
Aktiv.: 0.03
Kraj: Ljubljana

PrispevekObjavljeno: Sre Jan 07, 2004 11:12 pm    Naslov sporočila:   Odgovori s citatom

Pozdrav vsem!

Marko,
ne poznam 89c4051, ampak na hitro sem pogledal 'takratek pdfjcek' - baje ima dva 16 bitna timerja/counterja. Ali ima tudi prescaler in compare match interupt moznost?

Ker potem bi morda lahko natancno izracunal in prozil prekinitve na natancno 1 sekundo (bolj natancne ure najbrz ne potrebujes) ter vse skupaj (branje dallasa in povečevanje clocka) 'zbasal' v prekinitveno podrutino. V eni sekundi bi to ze moralo znesti. sicer ni najbolj pametna resitev, pa vendar.....
Samo razmisljam.... (Lahko me direkt skritizirate, ce sem popolnoma zgresil)

LP
Andrej
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.94
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sre Jan 07, 2004 11:20 pm    Naslov sporočila:   Odgovori s citatom

Jure,

Citiram:
Silvo, jasno da pri programiranju z ASM nimas tezav, ker pac prestejes vse impulze/milisekunde, ki jih potrebujes za branje/pisanje v DS1820, vmes pa lahko stejes impulze za uro in ce je cesa prevec/premalo, odstejes/pristejes in je...

Še lažje je ...ni kaj dosti šteti ...stvari bi se lotil tako, da bi se vse dogajalo znotraj prekinitvene rutine. Kot prekinitev bi uporabil časovnik TMR0 z seveda točnim izvorom clock-ka. Edino kar bi bilo potrebno bi bila potrebna korekcija le tega na točno vrednost. Ko imam točno določeno dolžino prekinitve mi ni problem izračunati nap. 1sec.

lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Svijet elektronike
Neznanec
Neznanec



Pridružen-a: Sob 10 Jan 2004 9:34
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Sob Jan 10, 2004 9:42 am    Naslov sporočila:   Odgovori s citatom

Osnovna greska u programu je Timer_0_int rutina, koja je predugacka. Ovako napisana traje 100-110 us, a izvrsava se svakih 250us pa usporava programa gotovo na polovinu. Time su pokvareni svi timing-i. Rutinu treba napisati ovako:

Timer_0_int:
Incr Clock
Return

Sada se moze upotrijebiti No Save opcija:

On Timer0 Tim__int Nosave

sto ce trajanje prekidne rutine smanjiti na svega nekoliko us. Preostale naredbe iz prekidne rutine, malo modificirane, premjestamo ispred "If Pulse = 1 Then":

Disable Timer0
If Clock > 19 Then
Clock = Clock - 20 ' ne Clock = 0!!!
Incr Clock1
End If
Enable Timer0
If Clock1 > 199 Then
Clock1 = 0
Pulse = 1
End If

If Pulse = 1 Then.....

Ovo bi se isto dalo bolje napisati ali neka ostane tako kako je. Disable/Enable sprecavaju da se prekidna rutina izvrsi tijekom If-EndIf, sto bi moglo izazvati odredjene probleme. Medjutim, ako se i dogodi prekid on nece biti "zaboravljen", nego ce se izvrsiti nekoliko us kasnije. Timer ce normalno brojati unatoc Disable pa nece doci do kasnjenja sata.

Probajte da li program radi bolje uz ove izmjene. Ako jos uvijek postoje problemi, trebat ce prepraviti potprogram Temperatura - javite mi se na

svijet.elektronike@kc.tel.hr

Pozdrav svima,
Vladimir Mitrovic
Svijet elektronike
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
frenki
Moderator
Moderator



Pridružen-a: Ned 23 Feb 2003 21:26
Prispevkov: 6732
Aktiv.: 28.42
Kraj: Ljubljana (JN76GB)

PrispevekObjavljeno: Ned Jan 11, 2004 1:27 pm    Naslov sporočila:   Odgovori s citatom

Vladimir pozdravljen,

Opcijo NOSAVE sem sicer že gledal, vendar sem se izogibal njene uporabe Confused.

Citiram:
When you specify NOSAVE, no registers are saved and restored in the interrupt routine. So when you use this option be sure to save and restore used registers.


Če navedeno res drži in ne pokvari stanja registrov po povratku iz prekinitvene rutine, potem to verjetno res močno skrajša čas izvajanja rutine in pomeni rešitev omenjenega problema. Vsekakor bom ob priliki poskusil predlagano.

Lp, Frenki
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2
Stran 2 od 2

 
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: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group