Chyby v MPLAB 8.02 - riesenie, cast II

j s jarin.hw@gmail.com
Středa Srpen 13 11:36:58 CEST 2008


> Vezmu to od konce:
> Kapitola 18.2.1 Special Event Triggers are not implemented for ECCP3, CCP4
> or CCP5. Selecting the Special Event Trigger mode for these modules has the
> same effect as selecting the Compare with Software Interrupt mode
> (CCPxM3:CCPxM0 = 1010). No je to v PDFku pekne schovame - klasicka poznamka
> malym pismem.... Ja jsem ji nasel az po dlouhem hledani proc mi procesor
> dava 140ms a pritom v simulatoru MPLABU tam mam 100ms.

Ta poznamka nie je malym pismom. Je to standardny font textu v datasheete.

Pozrime sa do toho datasheetu este raz. Strana 197, asi v polovici,
velkym pismom
     REGISTER 17-1: CCPxCON: CCPx CONTROL REGISTER (CCP4 MODULE, CCP5 MODULE)
Teda CCP4 a CCP5 funguju ako standardne CCP moduly, podla kapitoly 17,
nie ako ECCP (pricom to E znamena Enhanced, ale tyka sa to PWM
modulov) moduly podla kapitoly 18, na ktoru sa odvolavate. Ako som
pisal skor, nastavenie CCP4CON do 0x0B = 1011 = Compare mode: trigger
special event, reset timer, start A/D conversion on CCPx match. Teda
resetuje timer.

Pre ECCP moduly (CCP1 az CCP3):
1011 = Compare mode: trigger special event (ECCPx resets TMR1 or TMR3,
sets CCPxIF bit, ECCPx trigger also starts A/D conversion if A/D
module is enabled)(1)
....
....
Note 1: Implemented only for ECCP1 and ECCP2; same as 1010' for ECCP3.

Teda, netyka sa to CCP4 a CCP5.
V tom datasheete je to mozno nestastne napisane, ale takto som to
pochopil ked som sa na to pozrel a zda sa, ze to takto aj funguje.

----------------------------------------------

O tom timere 1 som napisal vsetko co som povazoval za potrebne. Zrejme
je to malo.
V MPLAB-e 5.7 to fungovalo zrejme inak. Nespominam uz na tuto verziu
(je to uz peknych par rokov dozadu, co bola aktualna) a kedze
pravdepodobne nemal TMR1_Internal, tak to citanie celeho stavu TMR1
bolo urobene nekorektne voci realnemu HW. Preto to upravili tak, aby
sa ten timer spraval tak, ako ma, teda podla toho vysvetlenia, ktore
som Vam podal v predoslom prispevku. Preto je spravne, pri simulacii,
pozerat sa na TMR1_internal, hoci program moze narabat s registrami
TMR1H a TMR1L, pricom je treba dodrzat logiku citania a zapisu tak ako
som ju popisal predtym.
Ta "paseka" je hodnota TMR1H, ktoru ste tam zapisal predtym. Kedze
TMR1L program necita, neobnovuje sa ani TMR1H a preto simulator vidi v
TMR1H hodnotu, ktoru neocakavate (ale ktora tam bola programom
zapisana). TMR1_Internal obsahuje skutocnu hodnotu timera. To ze tam
tu (neocakavanu) hodnotu vidite aj po resete je dosedok toho, ze TMR1H
a L si zachovavaju svoj stav po resete, resp. reset im neudava nijaky
definovany stav, tak je to to iste ako pred resetom.
Teda ten timer vzdy preteka pri 0xFFFF-0x0000. To ze to nevidite, este
neznamena, ze to tak nie je.

----------------------------------------------

Co sa tyka vypoctu Tad, zda sa byt v poriadku.
Bolo dolezite podotknut, ze sprava sa zobrazuje len raz pri "otvoreni
MPLAB-u". To je pochopitelne, pretoze po resete je obsah ADCON1
definovany na 0x00. Iste si dokazete spocitat, ze potom je Tad
skutocne menej ako 0.70us.


J.S.



Další informace o konferenci Hw-list