Re: defektní PIC16F18015

Jindrich Fucik fulda na seznam.cz
Středa Duben 3 18:17:35 CEST 2024


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 ---------------
A non-text attachment was scrubbed...
Name: optimal.lst.zip
Type: application/x-zip-compressed
Size: 12584 bytes
Desc: [žádný popis není k dispozici]
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240403/883550ad/attachment.bin>


Další informace o konferenci Hw-list