[elektro] PIC késik
potyo
potyo.ada at gmail.com
Tue Jul 27 22:46:45 CEST 2010
hobilobi at gmail.com <hobilobi at gmail.com> írta (2010. július 27. 22:35):
> 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.
Én is csak mint elvi lehetőséget említettem, és a várakozás a TMRx
továbbillenésére csak akkor használható, ha a timer valami alacsonyabb
órajelről jár. Inkább az 1:1 prescalert érdemes használni, azzal
szimulátor segítségével be lehet hangolni pontosra az egészet.
> 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.
Igen, én is néztem, hogy nála biztos nem ez van, mert olyan timert
használ, aminek van period regisztere, és nem módosítja "kézzel" a
TMRx tartalmát, hanem az hardverből történik. Én másra nem tudok
tippelni, mint hogy az oszcillátor nem pontos órajelet ad. Ez lehet
nem megfelelő konfigurációs beállításból, hibás kvarc, vagy nem
megfelelő kondenzátorok a kvarc mellett.
More information about the Elektro
mailing list