RE: defektní PIC16F18015

Miroslav Draxal evik na volny.cz
Pátek Duben 5 11:33:50 CEST 2024


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.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
>>
>>
>> _______________________________________________
>> 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: pokus.rar
Type: application/x-compressed
Size: 83690 bytes
Desc: [žádný popis není k dispozici]
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240405/fc436928/attachment-0001.bin>


Další informace o konferenci Hw-list