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