RE: defektní PIC16F18015

Miroslav Draxal evik na volny.cz
Pátek Duben 5 22:51:16 CEST 2024


Mohl by jste odsimulovat ten muj C, co jsem poslal a popis jak na to? Cca 5minut. Jestli vám to taky hodí blbosti. Jo a ty NOPy ani nemusejí být.
Míra 

-----Original Message-----
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Jindrich Fucik
Sent: Friday, April 5, 2024 2:52 PM
To: hw-list na list.hw.cz
Subject: Re: defektní PIC16F18015

Mno konfigurace je stále na stejném místě, jen se jakoby rozdvojí v tom stromečku. Jedna pro spuštění simulátoru a druhá pro krokování na křemíku. Viz dvě šipky na obrázku.
Konfigurace se netýká simulátoru, ale překladu pro simulátor. Jako že mohu nastavit třeba jinou úroveň optimalizace, nebo jako v mém pžípadě jiný předpis pro linker.

Dne 05.04.2024 v 11:33 Miroslav Draxal napsal(a):
> Můžete poslat tu správnou konfiguraci?
> 
> Já při těch testech (a bylo jich opravdu hodně) samozřejmě kontroloval, kam se uložilo přerušení.
> Kde se konfiguruje simulátor? Ten by přeci měl byt na tvrdo nadrátován na pokud možno přesnou podobu křemíku?
> 
> Já totiž podle vašeho návodu do podobného stavu nesmyslného běhu programu dostal i pod C a i u jiného procesoru (simulátor MPLABu).
> Rozbalte přílohu co C:\, otevřete v MPLABu projekt, máte dvě možnosti > v Dashboard vyberte buďto 18f1320 nebo 16f18015.
> Otevřete si Windows>Simulator>Logic Analyzer, v něm si vyberte RA0,RA1.
> Pak už jen přeložte a podržte F5, bude u vás průběh na anylyréru tak jak má, nebo tam budou blbosti?
> Prosím o potvrzení.
> 
> míra
> 
> -----Original Message-----
> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of 
> Jindrich Fucik
> Sent: Thursday, April 4, 2024 5:27 PM
> To: hw-list na list.hw.cz
> Subject: Re: defektní PIC16F18015
> 
> heureeka, nalezl jsem!!!!
> Ale jsem řádně blbej musím konstatovat.
> 
> Co se mi povedlo - uklepl jsem se v těc options pro linker. Normálně 
> pracuji tak, že patlám kód a hraji si v simulátoru. A po nějaké době 
> připojím hadrware a okopíruji konfiguraci a pak tak na střídačku.
> Teď jsem okopíroval konfiguraci, pak mi něco nesedělo  tak jsem se 
> vrátil k simulátoru a mimo jiné jsem si v simulátoru opravil ten návod 
> pro linker, ale už mi nedošlo, že konfigurace pro programátor má svůj 
> předpis, ten s chybou. A chyba vedla k tomu, že adresa pro interrupt 
> plavala, takže to zpoždění je prostě jak daleko uplavala a kolik 
> planých instrukcí se před ní dostalo. Protože prázdná paměť pro tenhle 
> program není destruktivní.
> 
> Prostě obrovská chyba mezi klávesnicí a židlí.
> 
> Dne 03.04.2024 v 22:17 Jindrich Fucik napsal(a):
>> Bezva, je tu jeden problém. Program napsaný v céčku se chová mravně.
>> Dokonce můj první program na tom procesoru se chová mravně.
>> Takže možná existuje něco, co se chová předvídatelně mravně.
>>
>> O víkendu musím reverzně rozebrat, co vzniklo překladem céčkového 
>> programu a izovovat z něj tu mravnost.
>>
>> Udělal jsem si na to i thread na microchip fóru. Doufaje, že se někdo 
>> chytne a napíše mi k tomu něco:
>> https://forum.microchip.com/s/topic/a5CV40000000hUnMAI/t394850
>> Nechcete mi do toho vlákna někdo napsat? Klidně i nesprávnou odpověď, 
>> ale k tématu? Lidé prý mnohem raději opravují nesprávné odpovědi, než 
>> rovnou vytváří správné.
>>
>> Nejdivnější je, že se do toho stavu dá dostat i simulátor. To buď 
>> simulátor interpretuje podobný mikrokód jako procesor, nebo nevím.
>>
>> Dne 03.04.2024 v 20:53 Miroslav Draxal napsal(a):
>>> Tak gratuluji,
>>> Zřejmě jste objevil BUG, zdá se, že je vše OK. Je zajímavé, že ta 
>>> chyba je nadrátovaná i v simulátoru, pokud se spustí kontinuální běh 
>>> simulátoru, tak se neprojeví. Ale pokud si dáte breakpointy na konec
>>> přerušení " a na "    movwf    INTCON", máte zobrazený analyzér s
>>> zmáčknete F5 (nebo rychle mačkáte F5), tak se po chvíli objeví 
>>> podobné průběhy jako jste posílal.
>>> Při jaké konkrétní instrukci nastane problém, nedovedu lokalizovat.
>>> Zatím jsem jenom objevil že:
>>> 1/ někdy to při vyskočení z přerušení skočí na nesmyslnou, prázdnou 
>>> programovou adresu a tam to jede dokud čítač programu nepřeteče do 
>>> 0x0000 (reset) 2/ párkrát dokonce vynuloval T0IE, takže zůstal 
>>> zacyklená ve smyčce s LATA1, ale přerušení se nekonalo.
>>>
>>> Jak jste psal, že jste to posílal na support, tak jim tyhle poznatky 
>>> můžete k tomu problému přeposlat.
>>> A dejte vědět jak jste dopadl!!!
>>>
>>> Míra
>>>
>>> -----Original Message-----
>>> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of 
>>> Miroslav Draxal
>>> Sent: Wednesday, April 3, 2024 7:20 PM
>>> To: 'HW-news'
>>> Subject: RE: defektní PIC16F18015
>>>
>>> Lépe takto
>>> -Wa,-a -Wl,-pisrVec=4h, ( tá čárka na konci asi musí být)
>>>
>>> Můžu potvrdit, že to co vám dělá křemí, dělá i simulátor v MPLABx.
>>> Takže hledám něco zakopaného v programu.
>>> 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 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.3
>>>> 87/
>>>> 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.3
>>>> 87/
>>>> 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
>>>
>>>
>>> _______________________________________________
>>> 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