Re: defektní PIC16F18015

Jindrich Fucik fulda na seznam.cz
Středa Duben 3 22:22:28 CEST 2024


Bezva, takže je to i nakažlivé. Napsal jsem virus pomocí příkazů nop.

Dne 03.04.2024 v 22:17 Miroslav Draxal napsal(a):
> Víte co je horší? Že mě se do toho stavu podařilo dostat i 18f1320. A je 
> to napsané v C.
> 
> *From:*Hw-list [mailto:hw-list-bounces na list.hw.cz] *On Behalf Of 
> *Miroslav Draxal
> *Sent:* Wednesday, April 3, 2024 9:01 PM
> *To:* 'HW-news'
> *Subject:* RE: defektní PIC16F18015
> 
> 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
> 
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list