[elektro] PIC késik
Pipi
lista at puzsar.hu
Mon Jul 26 20:34:49 CEST 2010
2010.07.26. 20:15 keltezéssel, hobilobi at gmail.com írta:
> 2010.07.25. 22:03 keltezéssel, potyo írta:
>> Lehet, hogy nem világos, hogy mire gondoltam, mert ez mindegyiknél
>> megvan a 10F-től a 32F-ig. Arra gondoltam, hogy ugye a prescaler ott
>> van a timer számlálólánca előtt, és ugyanúgy számol, mintha az is a
>> timer része lenne, ha nem 1:1-re van állítva a prescaler. Viszont ha
>> írsz a TMRx regiszterbe, de a prescaler nem 1:1 arányra van állítva,
>> akkor a prescalert alkotó számláló resetelődik. Ha ezt nem veszed
>> figyelembe és minden megszakításnál adott értéket adsz hozzá a TMRx
>> regiszterhez, akkor a valós túlcsordulás pillanata és az írás
>> pillanata közötti eltelt idő alapján a prescalert alkotó számlálólánc
>> vagy nulla vagy nem nulla állapotban van. Ha nulla állapotban van,
>> akkor nem visz hibát a számításba, ha nincs nulla állapotban, akkor
>> meg visz. Ezt pedig előre nem tudod, hogy milyen állapotban lesz, mert
>> ugye vannak utasítások, amik nem egy ciklus alatt futnak le,
>> nembeszélve az aszinkron megszakításokról (soros port, INTx láb,
>> stb.), amit az egészet szintén el tudják tolni. llyenkor vagy meg kell
>> várni, hogy még egyet billenjen a TMRx regiszter és az után írni
>> közvetlenül, vagy pedig 1:1 prescalert kell használni.
>>
>> hobilobi at gmail.com<hobilobi at gmail.com> írta (2010. július 25. 21:46):
>>
>>> 2010.07.20. 10:13 keltezéssel, potyo írta:
>>>
>>>> Nem ismerem a konkrét tipust, de kisebb piceknél ha a Timer tartalmát
>>>> módosítja az ember, akkor a prescaler értéke törlődik, ami hibát visz
>>>> a számításba.
>>>>
>>
>
> Nem tudom honnan veszed ezt, mert a dokuban erről eddig még egy kukkot
> se láttam.
> Ez ugyan még nem jelentene semmit, mert a dokuk nem 100%-osak.
> A blokkvázlatok azért elég korrektek, és azon sincs jelölve semmiféle
> egymásra hatás.
> Viszont napi 8 órában PIC-et programozok, és ilyen probléma sosem
> fordult elő.
> A Timer IT-k halál pontosan úgy jönnek ahogy kiszámolom és a megfelelő
> értéket minden IT-nél beirom a TMRx regiszterbe (nem 1:1 a prescaler).
> A prescaler egy egyszerű frekvenciaosztó, és semmi köze a TMRx
> regiszterekhez.
> A TMRx-be írás semmit sem csinál a prescalerrel. Miből gondolod, hogy az
> mindig resetelődik?
> Az egyetlen kritérium, hogy a TMRx-be írás még azelött megtörténjen
> mielött a következő impulzus jönne amit számolnia kellene.Ellenkező
> esetben elvesztesz egy számolást.
> Alkalmazás függő, hogy ez okoz-e gondot, vagy nem számít.
szomorú, ha ennyit programozol, és a javaslat ellenére sem nézel utána...
idézem a 16f877 dokuból:
When assigned to the Timer0 module, all instructions
writing to the TMR0 register (e.g. CLRF 1, MOVWF 1,
BSF 1,x....etc.) will clear the prescaler. When assigned
to WDT, a CLRWDT instruction will clear the prescaler
along with the Watchdog Timer. The prescaler is not
readable or writable.
a változatosség kedvéért pic18f2550/tmr1:
Writes to TMR1H do not clear the Timer1 prescaler.
The prescaler is only cleared on writes to TMR1L.
bocs már nem emlékszem irtál-e pic tipust...
azzal is szembeszállok hogy a timer IT-k halál pontosak, pl nem mindeggy hogy egy kétciklusos (pl. goto)
utasitásba mikor vág bele a villám, és ez már is egy ciklus késést okoz az it kiszolgálásban
szóval fogadd meg potyó tanácsait...
--
Pipi
http://www.puzsar.hu
More information about the Elektro
mailing list