RE: defektní PIC16F18015

Miroslav Draxal evik na volny.cz
Středa Duben 3 21:00:47 CEST 2024


Jenom pro zajímavost, jak to vypadá na simulátoru



 

Jelo to asi 10minut v kuse bez bugu, pak jsem to pauznul, vymazal analyzér, aby na něm něco bylo vidět, pak dal breakpoin na retfie a držel zmáčknutou F5. Tohle z toho vylezlo.

 

-----Original Message-----
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Jindrich Fucik
Sent: Wednesday, April 3, 2024 6:18 PM
To: hw-list na list.hw.cz
Subject: Re: defektní PIC16F18015

 

oops, ten komentář tam zůstal i s definicí SAF. Omlouvám se, správně jen

takto:

-Wa,-a -Wl,-pisrVec=4h

 

Celej projekt jsem poslal úschovnou, tady třeba lst z optimálního překladu

 

Dne 03.04.2024 v 16:38 Miroslav Draxal napsal(a):

> Aha, tak jsem to do Additional options: hodil a ono to zase na mě 

> vyplivlo při kompilaci:

> 

> Kde zase dělám chybu?

> 

> make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf

> 

> make  -f nbproject/Makefile-default.mk 

> dist/default/debug/pokus3.X.debug.hex

> 

> make[2]: Entering directory 'C:/pokus3/pokus3.X'

> 

> "C:\Program Files\Microchip\xc8\v2.46\pic-as\bin\pic-as.exe" 

> -mcpu=PIC16F18015 -c \

> 

> -o build/default/debug/_ext/539236051/newAsmTemplate.o \

> 

> C:/pokus3/pokus3.X/newAsmTemplate.s \

> 

> -D__DEBUG=1   -mdfp="C:/Program

> Files/Microchip/MPLABX/v6.20/packs/Microchip/PIC16F1xxxx_DFP/1.24.387/

> xc8"  

> -msummary=+mem,-psect,-class,-hex,-file,-sha1,-sha256,-xml,-xmlfull 

> -fmax-errors=20 -mwarn=0 -xassembler-with-cpp   -Wa,-a -Wl,-pisrVec=4h 

> -Wl,-pSAFVec=1F80h

> 

> make[2]: Leaving directory 'C:/pokus3/pokus3.X'

> 

> make[2]: Entering directory 'C:/pokus3/pokus3.X'

> 

> "C:\Program Files\Microchip\xc8\v2.46\pic-as\bin\pic-as.exe" 

> -mcpu=PIC16F18015 build/default/debug/_ext/539236051/newAsmTemplate.o 

> \

> 

> -o dist/default/debug/pokus3.X.debug.hex \

> 

> -D__DEBUG=1   -mdfp="C:/Program

> Files/Microchip/MPLABX/v6.20/packs/Microchip/PIC16F1xxxx_DFP/1.24.387/

> xc8"  

> -msummary=+mem,-psect,-class,-hex,-file,-sha1,-sha256,-xml,-xmlfull 

> -mcallgraph=std -Wl,-Map=dist/default/debug/pokus3.X.debug.map 

> -mno-download-hex   -Wa,-a -Wl,-pisrVec=4h -Wl,-pSAFVec=1F80h

> 

> ::: error: (450) psect "SAFVec" was never defined, or is local

> 

> (908) exit status = 1

> 

> make[2]: Leaving directory 'C:/pokus3/pokus3.X'

> 

> make[2]: *** [nbproject/Makefile-default.mk:116: 

> dist/default/debug/pokus3.X.debug.hex] Error 1

> 

> make[1]: *** [nbproject/Makefile-default.mk:85: .build-conf] Error 2

> 

> make: *** [nbproject/Makefile-impl.mk:39: .build-impl] Error 2

> 

> BUILD FAILED (exit value 2, total time: 1s)

> 

> *From:*Hw-list [mailto:hw-list-bounces na list.hw.cz] *On Behalf Of 

> *Jindrich Fucik

> *Sent:* Wednesday, April 3, 2024 4:01 PM

> *To:* HW-news

> *Subject:* RE: defektní PIC16F18015

> 

> ne ne, tam je důležitý ten komentář na začátku:

> 

> ; Add this line in the project properties box, pic-as Global Options -> Additional options:

> 

> ;   -Wa,-a -Wl,-pisrVec=4h -Wl,-pSAFVec=1F80h

> 

> V definici projektu je potřeba přidat linker option, že isrVec=4h 

> Jinak to linker nacpe kam se mu hodí. A kdykoli se neživý předmět může 

> rozhodnout, tak se rozhodne pro nejméně užitečnou variantu.

> 

> To .c vyzkouším večer doma

> 

> ---------- Původní e-mail ----------

> Od: Miroslav Draxal <evik na volny.cz>

> Komu: 'HW-news' <hw-list na list.hw.cz>

> Datum: 3. 4. 2024 15:30:18

> Předmět: RE: defektní PIC16F18015

> 

> Ono není divu, že to nechodí.  Koukněte, jak to přeloží, pokud máte

> 

> #define KillMe    1

> 

> #define KillAll     1 V JAKÉKOLI kombinaci

> 

> Interrupt vektor začíná na adresa 0x004 a on to v tomhle překladu ignoruje.

> 

> Takže než chyba křemíku chyba překladače.

> 

> To PSECT….Je pro mě zlo, jsem rád, že jsem se ho zbavil.

> 

>                                                    87:    ;

> --------------- Program Section --------------------------------------

> 

>                                                    88:

> 

>                                                    89:

> 

>                                                    90:    PSECT 

> resetVec,class=CODE,delta=2,abs

> 

>                                                    91:    resetVec:

> 

>                                                    92:    PowerUp:

> 

>                                                    93:

> 

> 0000  018B     CLRF INTCON                        94:      clrf     

> INTCON               ; Disable all interrupts

> 

> 0001  018A     CLRF PCLATH                        95:      clrf     

> PCLATH               ; Tables on page 0

> 

>                                                    96:      ;clrf     

> STATUS               ; reset flags

> 

>                                                    97:      goto     

> INIT

> 

>                                                    98:

> 

>                                                    99:

> 

>                                                    100:   ;

> 

>                                                    101:   

> ;*********************************************************************

> *************************************************

> 

>                                                    102:   ; ISR 

> (Interrupt Service Routines)

> 

>                                                    103:   

> ;*********************************************************************

> *************************************************

> 

>                                                    104:   ;

> 

>                                                    105:   PSECT

> isrVec,class=CODE,delta=2

> 

>                                                    106:   isr:

> 

>                                                    107:   Interrupt:

> 

>                                                    108:

> 

>                                                    109:          

> ;Transmit next bit

> 

> 0002  0140     MOVLB 0x0                          110:     movlb 0                

> ; BANK 0

> 

> 0003  1018     BCF LATA, 0x0                      111:     bcf LATA,0

> 

> 0004  0000     NOP                                112:     nop

> 

> 0005  1418     BSF LATA, 0x0                      113:     bsf LATA,0

> 

> 0006  0141     MOVLB 0x1                          114:     

> BANKSEL           PIR4 ; BANK 14

> 

> 0007  128C     BCF PIR0, 0x5                      115:     bcf TMR0IF     

> ; clear timer overflow?

> 

> 0008  0009     RETFIE                             116:     retfie

> 

>                                                    117:

> 

> *From:*Hw-list [mailto:hw-list-bounces na list.hw.cz] *On Behalf Of 

> *Jindrich Fucik

> *Sent:* Wednesday, April 3, 2024 3:00 PM

> *To:* HW-news

> *Subject:* RE: defektní PIC16F18015

> 

> Ten můj .S - od slova aSsembler

> 

> To linkování není úplně přesně. Tím "PSECT resetVec" předepisuji, že 

> se tohle složí na reset vector, což je pro tenhle procesor adresa 

> 0000. Ten program v zásadě nepřipouští dinamické linkování.

> 

> ---------- Původní e-mail ----------

> Od: Miroslav Draxal <evik na volny.cz>

> Komu: 'HW-news' <hw-list na list.hw.cz>

> Datum: 3. 4. 2024 14:57:25

> Předmět: RE: defektní PIC16F18015

> 

> Tak teď jsem přeložil ten váš .c

> 

> Koukám na to

> 

> Míra

> 

> *From:*Hw-list [mailto:hw-list-bounces na list.hw.cz] *On Behalf Of 

> *Miroslav Draxal

> *Sent:* Wednesday, April 3, 2024 2:43 PM

> *To:* 'HW-news'

> *Subject:* RE: defektní PIC16F18015

> 

> Je skutečně škoda, že jste neposlal ten projekt, ušetřilo by to dost 

> času. Prostě jsem neviděl jak to přeložilo, do jakých paměťových lokací.

> 

> Překopal jsem si to do C., protože jsem to proste v asm. Nepřeložil.

> 

> Podle všeho je problém v

> 

> PSECT resetVec,class=CODE,delta=2,abs

> 

> resetVec:

> 

> PowerUp:

> 

>        clrf  INTCON                  ; Disable all interrupts

> 

> TADY  clrf  PCLATH                  ; Tables on page 0

> 

>        ;clrf STATUS                  ; reset flags

> 

>        goto  INIT

> 

> po přeložení nevíme od jaké adresy startuje program, to je věc 

> překladače, C to přeloží od adresy 0x0807

> 

> Pak projede komplet inicializaci a dojde k adrese 0x0821, kde je GOTO 

> 0x22, ale protože má vynulovaný PCLATH, tak místo aby skočil na adresu

> 0x0822 tak skočí na nesmyslnou adresu.

> 

> Schválně to zkuste.

> 

> Dejte vědět. Míra

> 

> -----Original Message-----

> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of 

> Jindrich Fucik

> Sent: Wednesday, April 3, 2024 1:57 PM

> To: HW-news

> Subject: RE: defektní PIC16F18015

> 

> Trochu si myslím, že přeložením to ztratí kouzlo. Spíš pošlu celý 

> projekt, nebo ukázku, jak jej mám vytvořený.

> 

> EQU je direktiva EQUivalent. Tedy jenom říká, že když napíšu 

> TRISA_INI, tak jsem vlastně chtěl napsat 00000000B. Jak tuto hodnotu 

> použiji už se neřeší. Pokud jí přiřadím jako literál, tak zůstane literálem:

> 

> movlw TRISA_INI ; tohle přiřadí do W literál 00000000B

> 

> movwf TRISA ; a tohle pak hodnotu z W do TRISA

> 

> Ano, pokud bych použil TRISA_INI jako referenci, byl by to ukazatel do 

> paměti na pozici 0, ale tak to nedělám.

> 

> V dokumentu "MPLAB_XC8_PIC_Assembler_Users_Guide_50002974.pdf" je 

> popis v kapitole 4.9.16. Případně poznámka v kapitole 4.6.4.

> 

> Ono jde o to, že tenhle defekt pozoruji právě na té sadě deseti 

> procesorů co mám doma. Na jiném typu se to neděje a tak mi trvalo 

> strašnou dobu to pochopit. Je to něco, co používám často a pořád to 

> funguje, tak to beru jako fakt. Čili zajímavé by bylo to vyzkoušet na 

> stejném procesoru z jiné série. Třeba na PIC16F15313 žádný problém není.

> 

> ---------- Původní e-mail ----------

> 

> Od: Miroslav Draxal <evik na volny.cz>

> 

> Komu: 'HW-news' <hw-list na list.hw.cz>

> 

> Datum: 3. 4. 2024 11:32:56

> 

> Předmět: RE: defektní PIC16F18015

> 

> Vytvořte úplně nový projekt na C:\

> 

> Hoďte tam ten váš kód a zkompilujte. Pokud to projede, tak to sem hoďte. 

> Bude to mít pár kB.

> 

> Tím eliminujeme nesrovnalosti v nastavení projektu.

> 

> Za moment budu mít čas se na to podívat a třeba to nahrát i do jiného PICu.

> 

> ALE!

> 

> Všiml jsem si včera letmo, možná že to má nějaký důvod.

> 

> Pokud používáte

> 

> TRISA_INI equ 00000000B;

> 

> Tak TRISA_INI nemá hodnotu 0x00, ale přiřazujete TRISA_INI  registr v 

> nulté stránce paměti RAM s adresou 0x00

> 

> Takže podle mě

> 

> #define TRISA_INI  00000000B

> 

> Nebo

> 

> TRISA_INI  set d'0'

> 

> ALE: pokud něco dělám v asm, tak jenom opravuji staré projekty z doby 

> do 2010 a to ještě v MPLAB8.92, možná se pro mplabx něco změnilo.

> 

> Míra

> 

> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of 

> Jindrich Fucik

> 

> Sent: Wednesday, April 3, 2024 10:11 AM

> 

> To: HW-news

> 

> Subject: RE: defektní PIC16F18015

> 

> používám mplabx verze tuším 6.5. V zásadě jsem nic neměnil proti 

> defaultu, vlastně jen tu definici vektorů, která je napsaná v prvním 

> řádku kódu.

> 

> Co píše pic-as?

> 

> Vlastné - není problém se jménem souboru, které obsahuje mezery a 

> mínusko? Pravda je, že v editoru to mám s romantickým náznem default.s

> 

> ---------- Původní e-mail ----------

> 

> Od: Miroslav Draxal <evik na volny.cz>

> 

> Komu: 'HW-news' <hw-list na list.hw.cz>

> 

> Datum: 2. 4. 2024 21:16:30

> 

> Předmět: RE: defektní PIC16F18015

> 

> Nakopněte mě. V jakém editoru to píšete (MPLABx to defect - config.s

> otevře) ale nedokážu to asemblovat (pic-as to nějak nebere)

> 

> Míra

> 

> -----Original Message-----

> 

> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of 

> Jindrich Fucik

> 

> Sent: Tuesday, April 2, 2024 7:11 PM

> 

> To: hw-list na list.hw.cz

> 

> Subject: Re: defektní PIC16F18015

> 

> Bezva, tak jsem to dotáhl téměř k dokonalosti. Vytvořil jsem kód, 

> který

> 

> je složený převážně z instrukcí "nop" a "#ifdef". Na začátku jsou pak

> 

> dva #define, které umožňují si vybrat, co se stane. Možnosti jsou:

> 

> 1) program funguje jak má.

> 

> 2) program zamrzne zhruba na 2ms před každým přerušením

> 

> 3) program zamrzne úplně

> 

> Ke stažení jako zip i se záznamem z analyzátoru:

> 

> https://www.uschovna.cz/zasilka/OX4JT76LTH6MCBD2-XU7

> 

> Jdu se zeptat na support, co s tím.

> 

> Dne 01.04.2024 v 22:02 Jindrich Fucik napsal(a):

> 

>  > Bezva, tohle funguje jak by se dalo očekávat.

> 

>  > Jdu hledat, co tohle udělá jinak než já.

> 

>  > V příloze pro porovnání výstup ze Saleae. Je hodně podobný tomu ze

> 

>  > simulátoru (ne zcela stejný).

> 

>  >

> 

>  > Jdu hledat, co je tady nastaveno jinak.

> 

>  >

> 

>  >

> 

>  > Dne 01.04.2024 v 21:08 Miroslav Draxal napsal(a):

> 

>  >> Zkuste tohle, ověřeno v MPLABx simulátoru a výstup taktéž MPLABx 

> Logic

> 

>  >> Analyzer (viz příloha).

> 

>  >>

> 

>  >> #include <xc.h>

> 

>  >> #include <pic16f18015.h>

> 

>  >>

> 

>  >> // Configuration bits: selected in the GUI

> 

>  >>

> 

>  >> //CONFIG1

> 

>  >> #pragma config FEXTOSC = ECH // External Oscillator Selection

> 

>  >> bits->EC (external clock) above 16 MHz

> 

>  >> #pragma config RSTOSC = HFINTOSC_32MHz // Reset Oscillator

> 

>  >> Selection bits->HFINTOSC (32 MHz)

> 

>  >> #pragma config CLKOUTEN = OFF // Clock Out Enable bit->CLKOUT

> 

>  >> function is disabled; i/o or oscillator function on OSC2

> 

>  >> #pragma config VDDAR = HI // VDD Range Analog Calibration 

> Selection

> 

>  >> bit->Internal analog systems are calibrated for operation between 

> VDD

> 

>  >> = 2.3 - 5.5V

> 

>  >>

> 

>  >> //CONFIG2

> 

>  >> #pragma config MCLRE = EXTMCLR // Master Clear Enable bit->If LVP 

> =

> 

>  >> 0, MCLR pin is MCLR; If LVP = 1, RA3 pin function is MCLR

> 

>  >> #pragma config PWRTS = PWRT_OFF // Power-up Timer Selection

> 

>  >> bits->PWRT is disabled

> 

>  >> #pragma config WDTE = OFF // WDT Operating Mode bits->WDT 

> disabled;

> 

>  >> SEN is ignored

> 

>  >> #pragma config BOREN = ON // Brown-out Reset Enable 

> bits->Brown-out

> 

>  >> Reset enabled, SBOREN bit is ignored

> 

>  >> #pragma config DACAUTOEN = OFF // DAC Buffer Automatic Range 

> Select

> 

>  >> Enable bit->DAC Buffer reference range is determined by the REFRNG 

> bit

> 

>  >> #pragma config BORV = LO // Brown-out Reset Voltage Selection

> 

>  >> bit->Brown-out Reset Voltage (VBOR) set to 1.9V

> 

>  >> #pragma config ZCD = OFF // ZCD Disable bit->ZCD module is

> 

>  >> disabled; ZCD can be enabled by setting the ZCDSEN bit of ZCDCON

> 

>  >> #pragma config PPS1WAY = ON // PPSLOCKED One-Way Set Enable

> 

>  >> bit->The PPSLOCKED bit can be cleared and set only once after an

> 

>  >> unlocking sequence is executed; once PPSLOCKED is set, all future

> 

>  >> changes to PPS registers are prevented

> 

>  >> #pragma config STVREN = ON // Stack Overflow/Underflow Reset 

> Enable

> 

>  >> bit->Stack Overflow or Underflow will cause a reset

> 

>  >>

> 

>  >> //CONFIG4

> 

>  >> #pragma config BBSIZE = BB512 // Boot Block Size Selection

> 

>  >> bits->512 words boot block size

> 

>  >> #pragma config BBEN = OFF // Boot Block Enable bit->Boot Block

> 

>  >> disabled

> 

>  >> #pragma config SAFEN = OFF // Storage Area Flash (SAF) Enable

> 

>  >> bit->SAF disabled

> 

>  >> #pragma config WRTAPP = OFF // Application Block Write Protection

> 

>  >> bit->Application Block is NOT write protected

> 

>  >> #pragma config WRTB = OFF // Boot Block Write Protection bit->Boot

> 

>  >> Block is NOT write protected

> 

>  >> #pragma config WRTC = OFF // Configuration Register Write

> 

>  >> Protection bit->Configuration Register is NOT write protected

> 

>  >> #pragma config WRTD = OFF // Data EEPROM Write Protection 

> bit->Data

> 

>  >> EEPROM is NOT write-protected

> 

>  >> #pragma config WRTSAF = OFF // Storage Area Flash (SAF) Write

> 

>  >> Protection bit->SAF is NOT write protected

> 

>  >> #pragma config LVP = ON // Low Voltage Programming Enable bit->Low

> 

>  >> Voltage programming enabled. MCLR/Vpp pin function is MCLR. MCLRE

> 

>  >> Configuration bit is ignored

> 

>  >>

> 

>  >> //CONFIG5

> 

>  >> #pragma config CP = OFF // Program Flash Memory Code Protection

> 

>  >> bit->Program Flash Memory code protection is disabled

> 

>  >> #pragma config CPD = OFF // Data EEPROM Code Protection 

> bit->EEPROM

> 

>  >> code protection is disabled

> 

>  >>

> 

>  >> void main(void) {

> 

>  >> // Set the CLOCK CONTROL module to the options selected in the

> 

>  >> user interface.

> 

>  >> //

> 

>  >> OSCCON2 = 0x0;

> 

>  >> // SOSCPWR Low power;

> 

>  >> OSCCON3 = 0x0;

> 

>  >> // HFOEN disabled; MFOEN disabled; LFOEN disabled; SOSCEN

> 

>  >> disabled; ADOEN disabled;

> 

>  >> OSCEN = 0x0;

> 

>  >> // HFFRQ 8_MHz;

> 

>  >> OSCFRQ = 0x3;

> 

>  >> //

> 

>  >> OSCSTAT = 0x0;

> 

>  >> // TUN undefined;

> 

>  >> OSCTUNE = 0x0;

> 

>  >> // ACTEN disabled; ACTUD enabled; ACTLOCK Not locked; ACTORS In

> 

>  >> range;

> 

>  >> ACTCON = 0x0;

> 

>  >>

> 

>  >>

> 

>  >> /**

> 

>  >> LATx registers

> 

>  >> */

> 

>  >> LATA = 0x0;

> 

>  >> LATA0 = 1;

> 

>  >>

> 

>  >> /**

> 

>  >> TRISx registers

> 

>  >> */

> 

>  >> TRISA = 0x34;

> 

>  >>

> 

>  >> /**

> 

>  >> ANSELx registers

> 

>  >> */

> 

>  >> ANSELA = 0x34;

> 

>  >>

> 

>  >> /**

> 

>  >> WPUx registers

> 

>  >> */

> 

>  >> WPUA = 0x0;

> 

>  >>

> 

>  >> /**

> 

>  >> ODx registers

> 

>  >> */

> 

>  >>

> 

>  >> ODCONA = 0x0;

> 

>  >> /**

> 

>  >> SLRCONx registers

> 

>  >> */

> 

>  >> SLRCONA = 0x37;

> 

>  >> /**

> 

>  >> INLVLx registers

> 

>  >> */

> 

>  >> INLVLA = 0x37;

> 

>  >>

> 

>  >> /**

> 

>  >> PPS registers

> 

>  >> */

> 

>  >>

> 

>  >> /**

> 

>  >> APFCON registers

> 

>  >> */

> 

>  >>

> 

>  >> /**

> 

>  >> IOCx registers

> 

>  >> */

> 

>  >> IOCAP = 0x0;

> 

>  >> IOCAN = 0x0;

> 

>  >> IOCAF = 0x0;

> 

>  >>

> 

>  >> //TMR0H 119;

> 

>  >> TMR0H = 0x77;

> 

>  >>

> 

>  >> //TMR0L 0;

> 

>  >> TMR0L = 0x0;

> 

>  >>

> 

>  >> //T0CS FOSC/4; T0CKPS 1:1; T0ASYNC not_synchronised;

> 

>  >> T0CON1 = 0x50;

> 

>  >>

> 

>  >> //Clear Interrupt flag before enabling the interrupt

> 

>  >> PIR0bits.TMR0IF = 0;

> 

>  >>

> 

>  >> //Enable TMR0 interrupt.

> 

>  >> PIE0bits.TMR0IE = 1;

> 

>  >>

> 

>  >> //T0OUTPS 1:1; T0EN enabled; T016BIT 8-bit;

> 

>  >> T0CON0 = 0x80;

> 

>  >>

> 

>  >> ei();

> 

>  >>

> 

>  >> do {

> 

>  >> LATA1 = 1;

> 

>  >> NOP();

> 

>  >> LATA1 = 0;

> 

>  >> } while (1);

> 

>  >> return;

> 

>  >> }

> 

>  >>

> 

>  >> void __interrupt() myHighIsr(void) {

> 

>  >> if (TMR0IF == 1) {

> 

>  >> TMR0H = 0x77;

> 

>  >> TMR0IF = 0;

> 

>  >> LATA0 = 0;

> 

>  >> NOP();

> 

>  >> LATA0 = 1;

> 

>  >> }

> 

>  >> }

> 

>  >>

> 

>  >> -----Original Message-----

> 

>  >> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of

> 

>  >> Jindrich Fucik

> 

>  >> Sent: Monday, April 1, 2024 7:14 PM

> 

>  >> To: hw-list na list.hw.cz

> 

>  >> Subject: Re: defektní PIC16F18015

> 

>  >>

> 

>  >> Tak to jsem z toho jelen. Vzal jsem nový procesor a chová se stejně.

> 

>  >> V příloze je obrázek z analyzátoru.

> 

>  >> pochopitelně když program krokuji, tak se chová normálně. Nic

> 

>  >> takového, že by přerušení skočilo někam jinam a běžel kus jiného

> 

>  >> programu.

> 

>  >>

> 

>  >> Dne 01.04.2024 v 17:22 Jindrich Fucik napsal(a):

> 

>  >>> To není můj případ, start přerušení trvá tuším 3 instrukční 

> cykly,

> 

>  >>> procesor jede 8MHz, takže 1,5μs nebo tak něco. Program je velmi

> 

>  >>> primitivní, je napsaný v assembleru, abych vyloučil nějakou botu 

> z

> 

>  >>> jazyka.

> 

>  >>> Nakopíruji sem podstatnou část programu. Nepodstatná nastavuje config:

> 

>  >>> vypnutý watchdog, interní oscilátor 8MHz a tak.

> 

>  >>>

> 

>  >>> Program nedělá nic, než že v mainu bliká jedním výstupem a v 

> přerušení

> 

>  >>> druhým. přerušení je od časovače (v příkladu Timer 0, ale stejně 

> se

> 

>  >>> chová i Timer 2) a je nastaveno na 60 μs.

> 

>  >>>

> 

>  >>> Na analyzátoru je pak velice zřetelné, že proběhne 25 bliknutí 

> RA1,

> 

>  >>> pak je těch 350μs mezera a pak jedno bliknutí RA0 a pak hned zase 

> 25x

> 

>  >>> RA1 (jasně, ten kód není optimální, je to poslední troska, než 

> jsem to

> 

>  >>> zabalil). Podstatné je, že ta díra je větší, než vlastní běh, 

> takže je

> 

>  >>> to velmi zřetelné a nemá cenu zjišťovat, jestli je něco ± 

> jednotky

> 

>  >>> instrukčních cyklů. Zábavné je, že stejný čas dostanu i při 

> přepnutí

> 

>  >>> rychlosti procesoru na 4MHz (tedy díra je asi 350μs, běh se 2x

> 

>  >>> prodlouží).

> 

>  >>>

> 

>  >>> -------

> 

>  >>>

> 

>  >>> ; Timer0 management ; used for software serial Tx time ticks -

> 

>  >>> 60 micro sec per tick T0CON1_INI equ 0x51 ; T0CS FOSC/4; T0CKPS

> 

>  >>> 1:2; T0ASYNC not_synchronised; T0CON0_INI equ 0x80 ; T0OUTPS

> 

>  >>> 1:1; T0EN enabled; T016BIT 8-bit; TMR0H_INI equ 0x3B ; in 8 bit

> 

>  >>> mode the TMR0H is compared same as

> 

>  >>> timer2 0x3B = 59 = LN baud rate

> 

>  >>>

> 

>  >>> PIE0_INI equ 0x20 ; Enable TMR0 interrupt.

> 

>  >>> PIE1_INI equ 0x00 ; none used

> 

>  >>> PIE2_INI equ 0x00 ; none used

> 

>  >>> PIE3_INI equ 0x00 ; none used

> 

>  >>> PIE4_INI equ 0x00 ; none used

> 

>  >>>

> 

>  >>> INTC_INI equ 0xC0 ; GIE enable, PIE enable

> 

>  >>>

> 

>  >>>

> 

>  >>> PSECT resetVec,class=CODE,delta=2,abs

> 

>  >>> resetVec:

> 

>  >>> PowerUp:

> 

>  >>>

> 

>  >>> clrf INTCON ; Disable all interrupts

> 

>  >>> clrf PCLATH ; Tables on page 0

> 

>  >>> ;clrf STATUS ; reset flags

> 

>  >>> goto START

> 

>  >>>

> 

>  >>> PSECT isrVec,class=CODE,delta=2

> 

>  >>> isr:

> 

>  >>> Interrupt:

> 

>  >>>

> 

>  >>> movlb 0 ; BANK 0

> 

>  >>> bsf LATA,0

> 

>  >>> nop

> 

>  >>> bcf LATA,0

> 

>  >>> nop

> 

>  >>> bsf LATA,0

> 

>  >>> BANKSEL PIR4 ; BANK 14

> 

>  >>> bcf TMR0IF ; clear timer overflow

> 

>  >>> retfie

> 

>  >>>

> 

>  >>> START:

> 

>  >>> (...tady je miliarda přiřazení *_INI do správných registrů ...)

> 

>  >>>

> 

>  >>> movlw INTC_INI ; GIE enable, PEIE enable

> 

>  >>> movwf INTCON

> 

>  >>>

> 

>  >>> movlb 0 ; BANK 0

> 

>  >>>

> 

>  >>> testloop:

> 

>  >>> bsf LATA,1

> 

>  >>> nop

> 

>  >>> bcf LATA,1

> 

>  >>> goto testloop

> 

>  >>>

> 

>  >>>

> 

>  >>> Dne 01.04.2024 v 13:46 Miroslav Draxal napsal(a):

> 

>  >>>> Dobrý den,

> 

>  >>>> Pozor na to, PICi si při přerušení ukládají registry soft, ne hw.

> 

>  >>>> Kolikrát ta obsluha toho uložení registrů je docela časově náročná.

> 

>  >>>> Standardně se ukládá

> 

>  >>>> STATUS

> 

>  >>>> WREG

> 

>  >>>> BSR

> 

>  >>>> Pokud se někde v používájí FSRx registry, a v přerušení Se 

> používají

> 

>  >>>> také, potom se i ty ukládají

> 

>  >>>> FSR1

> 

>  >>>> FSR1H

> 

>  >>>> FSR2

> 

>  >>>> FSR2H

> 

>  >>>>

> 

>  >>>> A můžou se ukládat i další. Při ukončení přerušení se zase 

> registry

> 

>  >>>> obnovují. Tudíž je tam nějaká režie a prodleva, než se přerušení

> 

>  >>>> dostane na příslušnou obsluhu. Takže pokud by docházelo k velmi

> 

>  >>>> častému přerušení, může se i občas nějaké ztratit.

> 

>  >>>>

> 

>  >>>> A ještě jedna věc, na kterou se zapomíná.

> 

>  >>>> Novější procesory umí ukládat STATUS, WREG, BSR v režimu FAST. 

> Nebudu

> 

>  >>>> vypisovat podrobnosti, nakoukněte do *-.pdf konkrétního PICu, 

> jestli

> 

>  >>>> umí. Ovšem pozor, pokud odlaďujete program třeba s ICDx, potom 

> tyto

> 

>  >>>> FAST rutiny využívá ICDx. Pokud pak natvrdo pustíte program v

> 

>  >>>> samotném PICu, tyto rutiny většinou potom používá přerušení s 

> vysokou

> 

>  >>>> prioritou. Takže časování je následně o něco rychlejší než při 

> ladění

> 

>  >>>> HW prostředky.

> 

>  >>>>

> 

>  >>>> Nahoďte při jaké příležitosti se seká, jestli je to při 

> periodickém

> 

>  >>>> přerušení (např. od TMRx), nebo něčeho externího. Třeba nás něco

> 

>  >>>> napadne.

> 

>  >>>>

> 

>  >>>> Míra

> 

>  >>>>

> 

>  >>>> -----Original Message-----

> 

>  >>>> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of

> 

>  >>>> Jindrich Fucik

> 

>  >>>> Sent: Monday, April 1, 2024 12:09 PM

> 

>  >>>> To: HW-news

> 

>  >>>> Subject: defektní PIC16F18015

> 

>  >>>>

> 

>  >>>> Ahoj,

> 

>  >>>>

> 

>  >>>> občas si tu někdo hraje s těmito typy procesorů. Narazil jsem na

> 

>  >>>> jeden defektní kus. Bohužel to byl ten, kterej jsem si odvezl na

> 

>  >>>> velikonoce a nemám tu náhradu.

> 

>  >>>> Projevuje se tak, že při vyvolání přerušení se procesor na cca 

> 350 μs

> 

>  >>>> zasekne. jak to tak bývá, tak mi trvalo dva dny zjistit, co se 

> děje a

> 

>  >>>> proč se nemohu dopočítat času nějaké události.

> 

>  >>>>

> 

>  >>>> Tak třeba se někomu tato informace bude hodit. Nebo možná někdo 

> ví o

> 

>  >>>> něčem, co jsem špatně nastavil a může mi to říci.

> 

> _______________________________________________

> 

> HW-list mailing list  -  sponsored by www.HW.cz

> 

> Hw-list na list.hw.cz

> 

> http://list.hw.cz/mailman/listinfo/hw-list

> 

> _______________________________________________

> HW-list mailing list - sponsored by www.HW.cz Hw-list na list.hw.cz 

> http://list.hw.cz/mailman/listinfo/hw-list

> 

> _______________________________________________

> HW-list mailing list - sponsored by www.HW.cz Hw-list na list.hw.cz 

> http://list.hw.cz/mailman/listinfo/hw-list

> 

> 

> _______________________________________________

> HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz 

> http://list.hw.cz/mailman/listinfo/hw-list

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240403/8721d498/attachment-0001.htm>
------------- další část ---------------
A non-text attachment was scrubbed...
Name: image003.jpg
Type: image/jpeg
Size: 61937 bytes
Desc: [žádný popis není k dispozici]
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240403/8721d498/attachment-0001.jpg>


Další informace o konferenci Hw-list