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 

Atmega48 in timer1

 
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
eddie
Član
Član



Pridružen-a: Sre 10 Dec 2003 21:02
Prispevkov: 723
Aktiv.: 3.05
Kraj: Severna primorska

PrispevekObjavljeno: Sob Sep 15, 2012 9:01 pm    Naslov sporočila:  Atmega48 in timer1 Odgovori s citatom

Pozdravljeni!
Imam sledečo konfiguracijo:
Atmega48, ki teče na notranjem 8Mhz oscilatorju.
Časovnik 1 bi rad uporabil za enostavno časovno bazo.

Časovnik inicializiram takole:
Koda:
void timer1_init()
{
    // set up timer with no prescaling
    TCCR1B |= (1 << CS10)|(0 << CS11)|(0 << CS12);

    // initialize counter
    TCNT1H = 0;
   TCNT1L = 0;

    // enable overflow interrupt
    TIMSK1 |= (1 << TOIE1);

    // enable global interrupts
    sei();

    // initialize overflow counter variable
    tot_overflow = 0;
}


V Timer overflow rutini pa je samo tole:
Koda:
ISR(TIMER1_OVF_vect)
{
    // keep a track of number of overflows
    tot_overflow++;
}


Če pravilno računam potem gre stvar takole:
8000000 / 16535 = 122 prekinitev vsako sekundo?

Torej če bi hotel šteti sekunde, minute in ure bi šlo nekako takole:
Koda:
      //ura
      if (tot_overflow>=122){
      tot_overflow=0;
      LED0_Toggle;//toggle led
      Sekunde++;
      if (Sekunde>=60){
         Sekunde=0;
         Minute++;
         if (Minute>=60){Minute=0; Ure++;}
         }
      }


To se izvaja v glavni zanki.

Rezultat je, da ura prehiteva.
Ali je to samo posledica netočnosti internega oscilatorja ali je še kaj drugega?
Sem ga še kje pobiksal? Think
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
matjazkariz
Član
Član



Pridružen-a: Sre 03 Nov 2004 18:09
Prispevkov: 1026
Aktiv.: 4.33

PrispevekObjavljeno: Sob Sep 15, 2012 9:26 pm    Naslov sporočila:   Odgovori s citatom

Na ta način ne boš imel točne ure - metoda je napačna.
Izračun, ki ga podajaš, je napačen: 8000000 / 16535 = 483,82219...
Nameto 16535 bi verjetno moral uporabit 16536.
Ker ima rezultat za decimalko še neko vrednost, ti to predstavlja napako v meritvi časa, če vrednost zaokrožiš.

Koliko ti pa odstopa?

_________________
LP, Matjaž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1714
Aktiv.: 7.24
Kraj: Ig

PrispevekObjavljeno: Sob Sep 15, 2012 9:26 pm    Naslov sporočila:   Odgovori s citatom

Če imaš osciloskop, lahko pripelješ notranji oscilator na izhodni pin in pomeriš kakšen je clock. Dejstvo je, da interni clock ni najbolj natančen vir (to tudi Atmel v datasheetu navaja), tako da ja, možno je, da ti clock ne teče tako kot bi moral. Nisi pa napisal, za koliko ti zadeva prehiteva. Lahko se poigraš z OSCCAL registrom, vendar bo napaka še vedno znašala nekaj sekund na uro. Če rabiš to za kako uro napravit, potem si raje omisli kak RTC čip. Ali pa kak DCF77 modul.

LP G

_________________
.
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._|
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1714
Aktiv.: 7.24
Kraj: Ig

PrispevekObjavljeno: Sob Sep 15, 2012 9:28 pm    Naslov sporočila:   Odgovori s citatom

matjazkariz je napisal/a:

Nameto 16535 bi verjetno moral uporabit 16536.


Po moje je imel tukaj v mislih 65536(2^16), Timer1 je 16 bitni zato se overflow zgodi vsake 2^16 ciklov, to pa je malenkost več kot 122 x na sekundo.

LP G

_________________
.
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._|
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.01

PrispevekObjavljeno: Sob Sep 15, 2012 9:31 pm    Naslov sporočila:   Odgovori s citatom

Nastopajoče številke so nenavadne.
Naprimer 16535 namesto 16384, pa 122 namesto 122,0703125 .

Malo pomnoži stvari in dodaj korekcijo. Vsakih 14 sekund dodaj 1 prekinitev (123), vsakih 56 sekund eno odštej, vsakih 108 sekund eno dodaj ...

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
protoncek
Član
Član



Pridružen-a: Sre 31 Jan 2007 9:41
Prispevkov: 9573
Aktiv.: 42.79
Kraj: Mengeš

PrispevekObjavljeno: Sob Sep 15, 2012 9:40 pm    Naslov sporočila:   Odgovori s citatom

Mislim da je prva stvar, ki jo je treba narediti vsaj to, da uporabiš zunanji kristal. Brez tega bo ura danes točna, jutri bo lahko zaostajala, pojutrišnjem pa prehitevala. Za še več pa, kot so ti svetovali - RTC čip ali DCF sistem.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
eddie
Član
Član



Pridružen-a: Sre 10 Dec 2003 21:02
Prispevkov: 723
Aktiv.: 3.05
Kraj: Severna primorska

PrispevekObjavljeno: Sob Sep 15, 2012 10:03 pm    Naslov sporočila:   Odgovori s citatom

Uff, ja malo prehitro sem tipkal.
Mišljeno je bilo 8000000 (kar je frekvenca oscilatorja) / 65535(=16 bitni števec=>tu je že prva napaka - prekinitev se res zgodi na vsaki 65536 takt ure!). Naslednja napaka je rezultat 122. Liar Kalkulator v win7 mi nikoli ni bil všeč... V "programmer" načinu, ki je OK za nekatere stvari so rezultat samo cela števila. Saj čudno se mi je zdelo da se tako lepo izide na okroglo 122. Brick wall
OK s temi popravki bi že moralo biti bolj točno. Bomo videli.
Kako je s kalibracijo oscilatorja, ki naj bi se izvedla ob vsakem štartu mikrokontrolerja? Ali samo vzame kalibrirano vrednost iz spomina ali dejansko ob zagonu kalibrira oscilator glede na trenutne razmere?

Ne gre se za veliko točnost, samo za vklapljanje na intervale. Če bo stvar malo "lezla" nebo hujšega. Koliko bolje bi bilo z zunanjim kristalom?
Hvala za pomoč!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1714
Aktiv.: 7.24
Kraj: Ig

PrispevekObjavljeno: Ned Sep 16, 2012 11:00 am    Naslov sporočila:   Odgovori s citatom

Z zunanim kristalom bo zdeva bistveno boljša, ne bo pa idealna. Tudi kristali imajo svoja odstopanja (najpogosteje 50ppm - kar pomeni cca 50ciklov na MHz). Dobiš tudi take z 10ppm. Če ti hitrost ni bogve kako kritična, predlagam uporabo kristala 11059200 Hz,ki je zelo pogost, njegova prednost pa je v tem, da če ga deliš z 2^8, 2^9 , 2^10,2^11,2^12 itd... dobiš vedno okroglo cifro. Sicer pa ima vsak timer tudi prescaler (delilnik) s katerim lahko vhodni clock deliš (2,8,16,64,256,512 in 1024). Lahko uporabiš tudi Reload in s tem se izogneš tistim decimalkam. Vsekakor boš z zunanjim kristalom dosegel boljše rezultate kot z notranjim.

LP G

pri vrednosti kristala sem namesto 5 udarl 6 (11059200 je prava vrednost)

_________________
.
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._|


Nazadnje urejal/a RGorazd Ned Sep 16, 2012 1:39 pm; skupaj popravljeno 2 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
eddie
Član
Član



Pridružen-a: Sre 10 Dec 2003 21:02
Prispevkov: 723
Aktiv.: 3.05
Kraj: Severna primorska

PrispevekObjavljeno: Ned Sep 16, 2012 12:02 pm    Naslov sporočila:   Odgovori s citatom

Hvala za vse odgovore. Po teh popravkih je bila ura dokaj točna. Se je pa poznalo pomojem zaradi razlike temperature zvečer in danes zjutraj. Kar velika razlika v točnosti - temperaturna razlika cca.6 °C. Bom najprej poizkušal z zunanjim kristalom - imam 10Mhz, pa še nekaj recikliranih, katerih vrednosti moram še ugotoviti. Morda bo kakšen bolj primeren.
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 -> AVR, LPC900, x51 Č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