[elektro] PIC késik

hobilobi at gmail.com hobilobi at gmail.com
Tue Jul 27 22:35:24 CEST 2010


2010.07.27. 20:21 keltezéssel, mik.lajos2 írta:
> 20:59 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):
>>>>>
>>>>>            
>>
>> Igazad van, tényleg így van,(jó pap is holtig tanul).
>> Ugyan nem értem, hogy mi értelme van ennek a megoldásnak. Talán jobb
>> lenne, ha nem így működne.
>> Mivel nekem eddig nem okozott ez a jelenség problémát, így valóban nem
>> olvastam el (vagy már olyan régen, hogy elfelejtettem) ezt a részt.
>> Ez végül is csak akkor okoz gondot, ha (mint az eredeti kérdésben is
>> volt, pl. óránál) hosszú távon kellene, hogy teljesen pontos (értsd:
>> órajel ciklusszámhoz viszonyított) legyen az időzítés.
>> Nekem eddig ilyenre nem volt szükségem.
>> Amiket használtam (volt mikor 10us-enként volt az IT) azok a szkópon
>> úgy álltak mint a cövek, ezért nem is foglalkoztam tovább a dologgal.
>>
>> Viszont az eredeti kérdésben írt IT rutinban nem látok TMRx reg írást.
>> Ugyan a HI-tech C-t nem ismerem, így nem tudom mi akar lenni a rutin
>> név után a "@ T2_VCTR"
>>
>> István
>>
>>
>>      
> Szia!
> Pont azért van így hogy ha a számlálóba beirsz egy értéket, akkor ha az
> előosztó változatlan lenne pl.: 254 akkor 2 ciklus után már léptetné is
> a számlálót, és ez ugye hiba lenne.
> Miklajos
>
> -----------------------------------------
>            elektro[-flame|-etc]
Ez jogos, de csak az első induláskor. Igazán használható megoldás az 
lenne, ha 1 bit állításával én dönthetném el, hogy akarom-e hogy törölje 
a prescalert vagy nem.
Így akkor ha nekem kell, hogy az első IT is pontosan a kívánt idő múlva 
legyen, akkor töröltetem, de utána már jobb lenne ha nem törölné, és 
akkor egy folyamatos IT számolgatás pontos lenne, függetlenül attól, 
hogy éppen milyen utasításnál üt be. Sőt, közel 1 IT-nyi időre még le is 
tilthatnám az IT-ket, ha éppen valamiért szükségem van rá.
Ugyanis amit potyo javasolt, hogy várjuk meg a TMRx 1-el tovább 
számolását, az  sem tökéletes megoldás. Ahhoz folyamatosan olvasni kell 
a TMRx regisztert, megvizsgálni, hogy változott-e, és ha igen akkor 
beírni egy módosított értéket. Ez nem fér bele 4 ciklusba, viszont a 
prescaler Fosc/4el jár, tehát nem lesz 0, mikor beírom a TMRx 
regisztert.  Így tehát megint lesz hiba, legfeljebb kisebb.
Aztán azért sem szerencsés ez a módi, mert ha ritka az IT, akkor 
feleslegesen sokat kell várakozni az IT rutinban. Ez nem nevezhető 
kultúr megoldásnak. Ezzel most nem potyo javaslatát kritizálom hanem a 
Microchipet.
Szóval az ilyen hosszú számolgatást nem így kell megoldani, ha kell a 
nagy pontosság, mert ez evvel a HW felépítéssel nem biztosítható.

A kérdezőnél egyébként nem, ez okozza a hibát.
Hogy ne legyek letolva, most megnéztem a DSPIC33 dokuját és abban a 
timereknél nem kell újra írni a TMR regisztert minden IT-nél. Tehát nem 
törlődik a prescaler sem. Ha nála nem pontos az óra, akkor annak egészen 
más oka kell legyen.


István





More information about the Elektro mailing list