<html><body><style> @font-face{font-family:'Cambria Math';panose-1:2 4 5 3 5 4 6 3 2 4}@font-face{font-family:Calibri;panose-1:2 15 5 2 2 2 4 3 2 4}@font-face{font-family:Tahoma;panose-1:2 11 6 4 3 5 4 4 2 4}@font-face{font-family:Consolas;panose-1:2 11 6 9 2 2 4 3 2 4}.apply-styles p.-wm-MsoNormal, .apply-styles li.-wm-MsoNormal, .apply-styles div.-wm-MsoNormal{margin:0cm;margin-bottom:0.0001pt;font-size:11pt;font-family:'Calibri','sans-serif'}.apply-styles a:link, .apply-styles span.-wm-MsoHyperlink{mso-style-priority:99;color:blue;text-decoration:underline}.apply-styles a:visited, .apply-styles span.-wm-MsoHyperlinkFollowed{mso-style-priority:99;color:purple;text-decoration:underline}.apply-styles p.-wm-MsoPlainText, .apply-styles li.-wm-MsoPlainText, .apply-styles div.-wm-MsoPlainText{mso-style-priority:99;mso-style-link:'Prost\fd  text Char';margin:0cm;margin-bottom:0.0001pt;font-size:10.5pt;font-family:Consolas}.apply-styles p.-wm-MsoAcetate, .apply-styles li.-wm-MsoAcetate, .apply-styles div.-wm-MsoAcetate{mso-style-priority:99;mso-style-link:'Text bubliny Char';margin:0cm;margin-bottom:0.0001pt;font-size:8pt;font-family:'Tahoma','sans-serif'}.apply-styles span.-wm-ProsttextChar{mso-style-name:'Prost\fd  text Char';mso-style-priority:99;mso-style-link:'Prost\fd  text';font-family:Consolas}.apply-styles span.-wm-TextbublinyChar{mso-style-name:'Text bubliny Char';mso-style-priority:99;mso-style-link:'Text bubliny';font-family:'Tahoma','sans-serif'}.apply-styles span.-wm-StylE-mailovZprvy21{mso-style-type:personal-reply;font-family:'Calibri','sans-serif';color:#1F497D}.apply-styles .-wm-MsoChpDefault{mso-style-type:export-only;font-size:10pt}@page WordSection1 {size:612pt 792pt;margin:70.85pt 70.85pt 70.85pt 70.85pt}.apply-styles div.-wm-WordSection1{}</style><div>Ten můj .S - od slova aSsembler<br></div><div><br></div><div>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í.<br></div><div><br></div><aside>---------- Původní e-mail ----------<br>Od: Miroslav Draxal <evik@volny.cz><br>Komu: 'HW-news' <hw-list@list.hw.cz><br>Datum: 3. 4. 2024 14:57:25<br>Předmět: RE: defektní PIC16F18015</aside><br><blockquote data-email="evik@volny.cz"><div class="-wm-WordSection1"><p class="-wm-MsoNormal"><span style="color:#1F497D">Tak teď jsem přeložil ten váš .c</span></p><p class="-wm-MsoNormal"><span style="color:#1F497D">Koukám na to</span></p><p class="-wm-MsoNormal"><span style="color:#1F497D">Míra</span></p><p class="-wm-MsoNormal"><span style="color:#1F497D"> </span></p><div><div style="border:none;border-top:solid #B5C4DF 1pt;padding:3pt 0cm 0cm 0cm"><p class="-wm-MsoNormal"><b><span style="font-size:10pt;font-family:'Tahoma','sans-serif'">From:</span></b><span style="font-size:10pt;font-family:'Tahoma','sans-serif'"> Hw-list [mailto:hw-list-bounces@list.hw.cz] <b>On Behalf Of </b>Miroslav Draxal<br><b>Sent:</b> Wednesday, April 3, 2024 2:43 PM<br><b>To:</b> 'HW-news'<br><b>Subject:</b> RE: defektní PIC16F18015</span></p></div></div><p class="-wm-MsoNormal"> </p><p class="-wm-MsoPlainText">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><p class="-wm-MsoPlainText">Překopal jsem si to do C., protože jsem to proste v asm. Nepřeložil.</p><p class="-wm-MsoPlainText">Podle všeho je problém v </p><p class="-wm-MsoPlainText">PSECT resetVec,class=CODE,delta=2,abs</p><p class="-wm-MsoPlainText">resetVec:</p><p class="-wm-MsoPlainText">PowerUp:</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">      clrf  INTCON                  ; Disable all interrupts</p><p class="-wm-MsoPlainText">TADY  clrf  PCLATH                  ; Tables on page 0</p><p class="-wm-MsoPlainText">      ;clrf STATUS                  ; reset flags</p><p class="-wm-MsoPlainText">      goto  INIT</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">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</p><p class="-wm-MsoPlainText"><img width="421" height="110" id="-wm-obrázek_x0020_1" src="cid:image001.png@01DA85D7.2A3FAD50"></p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">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.</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText"><img width="437" height="65" id="-wm-obrázek_x0020_2" src="cid:image002.png@01DA85D7.2A3FAD50"></p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">Schválně to zkuste.</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">Dejte vědět. Míra</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">-----Original Message-----<br>From: Hw-list [mailto:hw-list-bounces@list.hw.cz] On Behalf Of Jindrich Fucik<br>Sent: Wednesday, April 3, 2024 1:57 PM<br>To: HW-news<br>Subject: RE: defektní PIC16F18015</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">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ý.</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">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:</p><p class="-wm-MsoPlainText">movlw TRISA_INI ; tohle přiřadí do W literál 00000000B</p><p class="-wm-MsoPlainText">movwf TRISA ; a tohle pak hodnotu z W do TRISA</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">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.</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">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.</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">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><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">---------- Původní e-mail ----------</p><p class="-wm-MsoPlainText">Od: Miroslav Draxal <evik@volny.cz></p><p class="-wm-MsoPlainText">Komu: 'HW-news' <hw-list@list.hw.cz></p><p class="-wm-MsoPlainText">Datum: 3. 4. 2024 11:32:56</p><p class="-wm-MsoPlainText">Předmět: RE: defektní PIC16F18015</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">Vytvořte úplně nový projekt na C:\</p><p class="-wm-MsoPlainText">Hoďte tam ten váš kód a zkompilujte. Pokud to projede, tak to sem hoďte. Bude to mít pár kB. </p><p class="-wm-MsoPlainText">Tím eliminujeme nesrovnalosti v nastavení projektu.</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">Za moment budu mít čas se na to podívat a třeba to nahrát i do jiného PICu.</p><p class="-wm-MsoPlainText">ALE!</p><p class="-wm-MsoPlainText">Všiml jsem si včera letmo, možná že to má nějaký důvod.</p><p class="-wm-MsoPlainText">Pokud používáte </p><p class="-wm-MsoPlainText">TRISA_INI equ 00000000B;</p><p class="-wm-MsoPlainText">Tak TRISA_INI nemá hodnotu 0x00, ale přiřazujete TRISA_INI  registr v nulté stránce paměti RAM s adresou 0x00</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">Takže podle mě </p><p class="-wm-MsoPlainText">#define TRISA_INI  00000000B</p><p class="-wm-MsoPlainText">Nebo </p><p class="-wm-MsoPlainText">TRISA_INI  set d'0'</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">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.</p><p class="-wm-MsoPlainText">Míra</p><p class="-wm-MsoPlainText">From: Hw-list [mailto:hw-list-bounces@list.hw.cz] On Behalf Of Jindrich Fucik</p><p class="-wm-MsoPlainText">Sent: Wednesday, April 3, 2024 10:11 AM</p><p class="-wm-MsoPlainText">To: HW-news</p><p class="-wm-MsoPlainText">Subject: RE: defektní PIC16F18015</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">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.</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">Co píše pic-as? </p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">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><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">---------- Původní e-mail ----------</p><p class="-wm-MsoPlainText">Od: Miroslav Draxal <evik@volny.cz></p><p class="-wm-MsoPlainText">Komu: 'HW-news' <hw-list@list.hw.cz></p><p class="-wm-MsoPlainText">Datum: 2. 4. 2024 21:16:30</p><p class="-wm-MsoPlainText">Předmět: RE: defektní PIC16F18015</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">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)</p><p class="-wm-MsoPlainText">Míra</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">-----Original Message-----</p><p class="-wm-MsoPlainText">From: Hw-list [mailto:hw-list-bounces@list.hw.cz] On Behalf Of Jindrich Fucik</p><p class="-wm-MsoPlainText">Sent: Tuesday, April 2, 2024 7:11 PM</p><p class="-wm-MsoPlainText">To: hw-list@list.hw.cz</p><p class="-wm-MsoPlainText">Subject: Re: defektní PIC16F18015</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">Bezva, tak jsem to dotáhl téměř k dokonalosti. Vytvořil jsem kód, který </p><p class="-wm-MsoPlainText">je složený převážně z instrukcí "nop" a "#ifdef". Na začátku jsou pak </p><p class="-wm-MsoPlainText">dva #define, které umožňují si vybrat, co se stane. Možnosti jsou:</p><p class="-wm-MsoPlainText">1) program funguje jak má.</p><p class="-wm-MsoPlainText">2) program zamrzne zhruba na 2ms před každým přerušením</p><p class="-wm-MsoPlainText">3) program zamrzne úplně</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">Ke stažení jako zip i se záznamem z analyzátoru:</p><p class="-wm-MsoPlainText">https://www.uschovna.cz/zasilka/OX4JT76LTH6MCBD2-XU7</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">Jdu se zeptat na support, co s tím.</p><p class="-wm-MsoPlainText"> </p><p class="-wm-MsoPlainText">Dne 01.04.2024 v 22:02 Jindrich Fucik napsal(a):</p><p class="-wm-MsoPlainText">> Bezva, tohle funguje jak by se dalo očekávat.</p><p class="-wm-MsoPlainText">> Jdu hledat, co tohle udělá jinak než já.</p><p class="-wm-MsoPlainText">> V příloze pro porovnání výstup ze Saleae. Je hodně podobný tomu ze </p><p class="-wm-MsoPlainText">> simulátoru (ne zcela stejný).</p><p class="-wm-MsoPlainText">> </p><p class="-wm-MsoPlainText">> Jdu hledat, co je tady nastaveno jinak.</p><p class="-wm-MsoPlainText">> </p><p class="-wm-MsoPlainText">> </p><p class="-wm-MsoPlainText">> Dne 01.04.2024 v 21:08 Miroslav Draxal napsal(a):</p><p class="-wm-MsoPlainText">>> Zkuste tohle, ověřeno v MPLABx simulátoru a výstup taktéž MPLABx Logic </p><p class="-wm-MsoPlainText">>> Analyzer (viz příloha).</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> #include <xc.h></p><p class="-wm-MsoPlainText">>> #include <pic16f18015.h></p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> // Configuration bits: selected in the GUI</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> //CONFIG1</p><p class="-wm-MsoPlainText">>> #pragma config FEXTOSC = ECH // External Oscillator Selection </p><p class="-wm-MsoPlainText">>> bits->EC (external clock) above 16 MHz</p><p class="-wm-MsoPlainText">>> #pragma config RSTOSC = HFINTOSC_32MHz // Reset Oscillator </p><p class="-wm-MsoPlainText">>> Selection bits->HFINTOSC (32 MHz)</p><p class="-wm-MsoPlainText">>> #pragma config CLKOUTEN = OFF // Clock Out Enable bit->CLKOUT </p><p class="-wm-MsoPlainText">>> function is disabled; i/o or oscillator function on OSC2</p><p class="-wm-MsoPlainText">>> #pragma config VDDAR = HI // VDD Range Analog Calibration Selection </p><p class="-wm-MsoPlainText">>> bit->Internal analog systems are calibrated for operation between VDD </p><p class="-wm-MsoPlainText">>> = 2.3 - 5.5V</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> //CONFIG2</p><p class="-wm-MsoPlainText">>> #pragma config MCLRE = EXTMCLR // Master Clear Enable bit->If LVP = </p><p class="-wm-MsoPlainText">>> 0, MCLR pin is MCLR; If LVP = 1, RA3 pin function is MCLR</p><p class="-wm-MsoPlainText">>> #pragma config PWRTS = PWRT_OFF // Power-up Timer Selection </p><p class="-wm-MsoPlainText">>> bits->PWRT is disabled</p><p class="-wm-MsoPlainText">>> #pragma config WDTE = OFF // WDT Operating Mode bits->WDT disabled; </p><p class="-wm-MsoPlainText">>> SEN is ignored</p><p class="-wm-MsoPlainText">>> #pragma config BOREN = ON // Brown-out Reset Enable bits->Brown-out </p><p class="-wm-MsoPlainText">>> Reset enabled, SBOREN bit is ignored</p><p class="-wm-MsoPlainText">>> #pragma config DACAUTOEN = OFF // DAC Buffer Automatic Range Select </p><p class="-wm-MsoPlainText">>> Enable bit->DAC Buffer reference range is determined by the REFRNG bit</p><p class="-wm-MsoPlainText">>> #pragma config BORV = LO // Brown-out Reset Voltage Selection </p><p class="-wm-MsoPlainText">>> bit->Brown-out Reset Voltage (VBOR) set to 1.9V</p><p class="-wm-MsoPlainText">>> #pragma config ZCD = OFF // ZCD Disable bit->ZCD module is </p><p class="-wm-MsoPlainText">>> disabled; ZCD can be enabled by setting the ZCDSEN bit of ZCDCON</p><p class="-wm-MsoPlainText">>> #pragma config PPS1WAY = ON // PPSLOCKED One-Way Set Enable </p><p class="-wm-MsoPlainText">>> bit->The PPSLOCKED bit can be cleared and set only once after an </p><p class="-wm-MsoPlainText">>> unlocking sequence is executed; once PPSLOCKED is set, all future </p><p class="-wm-MsoPlainText">>> changes to PPS registers are prevented</p><p class="-wm-MsoPlainText">>> #pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable </p><p class="-wm-MsoPlainText">>> bit->Stack Overflow or Underflow will cause a reset</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> //CONFIG4</p><p class="-wm-MsoPlainText">>> #pragma config BBSIZE = BB512 // Boot Block Size Selection </p><p class="-wm-MsoPlainText">>> bits->512 words boot block size</p><p class="-wm-MsoPlainText">>> #pragma config BBEN = OFF // Boot Block Enable bit->Boot Block </p><p class="-wm-MsoPlainText">>> disabled</p><p class="-wm-MsoPlainText">>> #pragma config SAFEN = OFF // Storage Area Flash (SAF) Enable </p><p class="-wm-MsoPlainText">>> bit->SAF disabled</p><p class="-wm-MsoPlainText">>> #pragma config WRTAPP = OFF // Application Block Write Protection </p><p class="-wm-MsoPlainText">>> bit->Application Block is NOT write protected</p><p class="-wm-MsoPlainText">>> #pragma config WRTB = OFF // Boot Block Write Protection bit->Boot </p><p class="-wm-MsoPlainText">>> Block is NOT write protected</p><p class="-wm-MsoPlainText">>> #pragma config WRTC = OFF // Configuration Register Write </p><p class="-wm-MsoPlainText">>> Protection bit->Configuration Register is NOT write protected</p><p class="-wm-MsoPlainText">>> #pragma config WRTD = OFF // Data EEPROM Write Protection bit->Data </p><p class="-wm-MsoPlainText">>> EEPROM is NOT write-protected</p><p class="-wm-MsoPlainText">>> #pragma config WRTSAF = OFF // Storage Area Flash (SAF) Write </p><p class="-wm-MsoPlainText">>> Protection bit->SAF is NOT write protected</p><p class="-wm-MsoPlainText">>> #pragma config LVP = ON // Low Voltage Programming Enable bit->Low </p><p class="-wm-MsoPlainText">>> Voltage programming enabled. MCLR/Vpp pin function is MCLR. MCLRE </p><p class="-wm-MsoPlainText">>> Configuration bit is ignored</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> //CONFIG5</p><p class="-wm-MsoPlainText">>> #pragma config CP = OFF // Program Flash Memory Code Protection </p><p class="-wm-MsoPlainText">>> bit->Program Flash Memory code protection is disabled</p><p class="-wm-MsoPlainText">>> #pragma config CPD = OFF // Data EEPROM Code Protection bit->EEPROM </p><p class="-wm-MsoPlainText">>> code protection is disabled</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> void main(void) {</p><p class="-wm-MsoPlainText">>> // Set the CLOCK CONTROL module to the options selected in the </p><p class="-wm-MsoPlainText">>> user interface.</p><p class="-wm-MsoPlainText">>> //</p><p class="-wm-MsoPlainText">>> OSCCON2 = 0x0;</p><p class="-wm-MsoPlainText">>> // SOSCPWR Low power;</p><p class="-wm-MsoPlainText">>> OSCCON3 = 0x0;</p><p class="-wm-MsoPlainText">>> // HFOEN disabled; MFOEN disabled; LFOEN disabled; SOSCEN </p><p class="-wm-MsoPlainText">>> disabled; ADOEN disabled;</p><p class="-wm-MsoPlainText">>> OSCEN = 0x0;</p><p class="-wm-MsoPlainText">>> // HFFRQ 8_MHz;</p><p class="-wm-MsoPlainText">>> OSCFRQ = 0x3;</p><p class="-wm-MsoPlainText">>> //</p><p class="-wm-MsoPlainText">>> OSCSTAT = 0x0;</p><p class="-wm-MsoPlainText">>> // TUN undefined;</p><p class="-wm-MsoPlainText">>> OSCTUNE = 0x0;</p><p class="-wm-MsoPlainText">>> // ACTEN disabled; ACTUD enabled; ACTLOCK Not locked; ACTORS In </p><p class="-wm-MsoPlainText">>> range;</p><p class="-wm-MsoPlainText">>> ACTCON = 0x0;</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> /**</p><p class="-wm-MsoPlainText">>> LATx registers</p><p class="-wm-MsoPlainText">>> */</p><p class="-wm-MsoPlainText">>> LATA = 0x0;</p><p class="-wm-MsoPlainText">>> LATA0 = 1;</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> /**</p><p class="-wm-MsoPlainText">>> TRISx registers</p><p class="-wm-MsoPlainText">>> */</p><p class="-wm-MsoPlainText">>> TRISA = 0x34;</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> /**</p><p class="-wm-MsoPlainText">>> ANSELx registers</p><p class="-wm-MsoPlainText">>> */</p><p class="-wm-MsoPlainText">>> ANSELA = 0x34;</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> /**</p><p class="-wm-MsoPlainText">>> WPUx registers</p><p class="-wm-MsoPlainText">>> */</p><p class="-wm-MsoPlainText">>> WPUA = 0x0;</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> /**</p><p class="-wm-MsoPlainText">>> ODx registers</p><p class="-wm-MsoPlainText">>> */</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> ODCONA = 0x0;</p><p class="-wm-MsoPlainText">>> /**</p><p class="-wm-MsoPlainText">>> SLRCONx registers</p><p class="-wm-MsoPlainText">>> */</p><p class="-wm-MsoPlainText">>> SLRCONA = 0x37;</p><p class="-wm-MsoPlainText">>> /**</p><p class="-wm-MsoPlainText">>> INLVLx registers</p><p class="-wm-MsoPlainText">>> */</p><p class="-wm-MsoPlainText">>> INLVLA = 0x37;</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> /**</p><p class="-wm-MsoPlainText">>> PPS registers</p><p class="-wm-MsoPlainText">>> */</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> /**</p><p class="-wm-MsoPlainText">>> APFCON registers</p><p class="-wm-MsoPlainText">>> */</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> /**</p><p class="-wm-MsoPlainText">>> IOCx registers</p><p class="-wm-MsoPlainText">>> */</p><p class="-wm-MsoPlainText">>> IOCAP = 0x0;</p><p class="-wm-MsoPlainText">>> IOCAN = 0x0;</p><p class="-wm-MsoPlainText">>> IOCAF = 0x0;</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> //TMR0H 119;</p><p class="-wm-MsoPlainText">>> TMR0H = 0x77;</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> //TMR0L 0;</p><p class="-wm-MsoPlainText">>> TMR0L = 0x0;</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> //T0CS FOSC/4; T0CKPS 1:1; T0ASYNC not_synchronised;</p><p class="-wm-MsoPlainText">>> T0CON1 = 0x50;</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> //Clear Interrupt flag before enabling the interrupt</p><p class="-wm-MsoPlainText">>> PIR0bits.TMR0IF = 0;</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> //Enable TMR0 interrupt.</p><p class="-wm-MsoPlainText">>> PIE0bits.TMR0IE = 1;</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> //T0OUTPS 1:1; T0EN enabled; T016BIT 8-bit;</p><p class="-wm-MsoPlainText">>> T0CON0 = 0x80;</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> ei();</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> do {</p><p class="-wm-MsoPlainText">>> LATA1 = 1;</p><p class="-wm-MsoPlainText">>> NOP();</p><p class="-wm-MsoPlainText">>> LATA1 = 0;</p><p class="-wm-MsoPlainText">>> } while (1);</p><p class="-wm-MsoPlainText">>> return;</p><p class="-wm-MsoPlainText">>> }</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> void __interrupt() myHighIsr(void) {</p><p class="-wm-MsoPlainText">>> if (TMR0IF == 1) {</p><p class="-wm-MsoPlainText">>> TMR0H = 0x77;</p><p class="-wm-MsoPlainText">>> TMR0IF = 0;</p><p class="-wm-MsoPlainText">>> LATA0 = 0;</p><p class="-wm-MsoPlainText">>> NOP();</p><p class="-wm-MsoPlainText">>> LATA0 = 1;</p><p class="-wm-MsoPlainText">>> }</p><p class="-wm-MsoPlainText">>> }</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> -----Original Message-----</p><p class="-wm-MsoPlainText">>> From: Hw-list [mailto:hw-list-bounces@list.hw.cz] On Behalf Of </p><p class="-wm-MsoPlainText">>> Jindrich Fucik</p><p class="-wm-MsoPlainText">>> Sent: Monday, April 1, 2024 7:14 PM</p><p class="-wm-MsoPlainText">>> To: hw-list@list.hw.cz</p><p class="-wm-MsoPlainText">>> Subject: Re: defektní PIC16F18015</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> Tak to jsem z toho jelen. Vzal jsem nový procesor a chová se stejně.</p><p class="-wm-MsoPlainText">>> V příloze je obrázek z analyzátoru.</p><p class="-wm-MsoPlainText">>> pochopitelně když program krokuji, tak se chová normálně. Nic </p><p class="-wm-MsoPlainText">>> takového, že by přerušení skočilo někam jinam a běžel kus jiného </p><p class="-wm-MsoPlainText">>> programu.</p><p class="-wm-MsoPlainText">>> </p><p class="-wm-MsoPlainText">>> Dne 01.04.2024 v 17:22 Jindrich Fucik napsal(a):</p><p class="-wm-MsoPlainText">>>> To není můj případ, start přerušení trvá tuším 3 instrukční cykly,</p><p class="-wm-MsoPlainText">>>> procesor jede 8MHz, takže 1,5μs nebo tak něco. Program je velmi</p><p class="-wm-MsoPlainText">>>> primitivní, je napsaný v assembleru, abych vyloučil nějakou botu z </p><p class="-wm-MsoPlainText">>>> jazyka.</p><p class="-wm-MsoPlainText">>>> Nakopíruji sem podstatnou část programu. Nepodstatná nastavuje config:</p><p class="-wm-MsoPlainText">>>> vypnutý watchdog, interní oscilátor 8MHz a tak.</p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> Program nedělá nic, než že v mainu bliká jedním výstupem a v přerušení</p><p class="-wm-MsoPlainText">>>> druhým. přerušení je od časovače (v příkladu Timer 0, ale stejně se</p><p class="-wm-MsoPlainText">>>> chová i Timer 2) a je nastaveno na 60 μs.</p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> Na analyzátoru je pak velice zřetelné, že proběhne 25 bliknutí RA1,</p><p class="-wm-MsoPlainText">>>> pak je těch 350μs mezera a pak jedno bliknutí RA0 a pak hned zase 25x</p><p class="-wm-MsoPlainText">>>> RA1 (jasně, ten kód není optimální, je to poslední troska, než jsem to</p><p class="-wm-MsoPlainText">>>> zabalil). Podstatné je, že ta díra je větší, než vlastní běh, takže je</p><p class="-wm-MsoPlainText">>>> to velmi zřetelné a nemá cenu zjišťovat, jestli je něco ± jednotky</p><p class="-wm-MsoPlainText">>>> instrukčních cyklů. Zábavné je, že stejný čas dostanu i při přepnutí</p><p class="-wm-MsoPlainText">>>> rychlosti procesoru na 4MHz (tedy díra je asi 350μs, běh se 2x </p><p class="-wm-MsoPlainText">>>> prodlouží).</p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> -------</p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> ; Timer0 management ; used for software serial Tx time ticks -</p><p class="-wm-MsoPlainText">>>> 60 micro sec per tick T0CON1_INI equ 0x51 ; T0CS FOSC/4; T0CKPS</p><p class="-wm-MsoPlainText">>>> 1:2; T0ASYNC not_synchronised; T0CON0_INI equ 0x80 ; T0OUTPS</p><p class="-wm-MsoPlainText">>>> 1:1; T0EN enabled; T016BIT 8-bit; TMR0H_INI equ 0x3B ; in 8 bit</p><p class="-wm-MsoPlainText">>>> mode the TMR0H is compared same as</p><p class="-wm-MsoPlainText">>>> timer2 0x3B = 59 = LN baud rate</p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> PIE0_INI equ 0x20 ; Enable TMR0 interrupt.</p><p class="-wm-MsoPlainText">>>> PIE1_INI equ 0x00 ; none used</p><p class="-wm-MsoPlainText">>>> PIE2_INI equ 0x00 ; none used</p><p class="-wm-MsoPlainText">>>> PIE3_INI equ 0x00 ; none used</p><p class="-wm-MsoPlainText">>>> PIE4_INI equ 0x00 ; none used</p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> INTC_INI equ 0xC0 ; GIE enable, PIE enable</p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> PSECT resetVec,class=CODE,delta=2,abs</p><p class="-wm-MsoPlainText">>>> resetVec:</p><p class="-wm-MsoPlainText">>>> PowerUp:</p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> clrf INTCON ; Disable all interrupts</p><p class="-wm-MsoPlainText">>>> clrf PCLATH ; Tables on page 0</p><p class="-wm-MsoPlainText">>>> ;clrf STATUS ; reset flags</p><p class="-wm-MsoPlainText">>>> goto START</p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> PSECT isrVec,class=CODE,delta=2</p><p class="-wm-MsoPlainText">>>> isr:</p><p class="-wm-MsoPlainText">>>> Interrupt:</p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> movlb 0 ; BANK 0</p><p class="-wm-MsoPlainText">>>> bsf LATA,0</p><p class="-wm-MsoPlainText">>>> nop</p><p class="-wm-MsoPlainText">>>> bcf LATA,0</p><p class="-wm-MsoPlainText">>>> nop</p><p class="-wm-MsoPlainText">>>> bsf LATA,0</p><p class="-wm-MsoPlainText">>>> BANKSEL PIR4 ; BANK 14</p><p class="-wm-MsoPlainText">>>> bcf TMR0IF ; clear timer overflow</p><p class="-wm-MsoPlainText">>>> retfie</p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> START:</p><p class="-wm-MsoPlainText">>>> (...tady je miliarda přiřazení *_INI do správných registrů ...)</p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> movlw INTC_INI ; GIE enable, PEIE enable</p><p class="-wm-MsoPlainText">>>> movwf INTCON</p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> movlb 0 ; BANK 0</p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> testloop:</p><p class="-wm-MsoPlainText">>>> bsf LATA,1</p><p class="-wm-MsoPlainText">>>> nop</p><p class="-wm-MsoPlainText">>>> bcf LATA,1</p><p class="-wm-MsoPlainText">>>> goto testloop</p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> </p><p class="-wm-MsoPlainText">>>> Dne 01.04.2024 v 13:46 Miroslav Draxal napsal(a):</p><p class="-wm-MsoPlainText">>>>> Dobrý den,</p><p class="-wm-MsoPlainText">>>>> Pozor na to, PICi si při přerušení ukládají registry soft, ne hw.</p><p class="-wm-MsoPlainText">>>>> Kolikrát ta obsluha toho uložení registrů je docela časově náročná.</p><p class="-wm-MsoPlainText">>>>> Standardně se ukládá</p><p class="-wm-MsoPlainText">>>>> STATUS</p><p class="-wm-MsoPlainText">>>>> WREG</p><p class="-wm-MsoPlainText">>>>> BSR</p><p class="-wm-MsoPlainText">>>>> Pokud se někde v používájí FSRx registry, a v přerušení Se používají</p><p class="-wm-MsoPlainText">>>>> také, potom se i ty ukládají</p><p class="-wm-MsoPlainText">>>>> FSR1</p><p class="-wm-MsoPlainText">>>>> FSR1H</p><p class="-wm-MsoPlainText">>>>> FSR2</p><p class="-wm-MsoPlainText">>>>> FSR2H</p><p class="-wm-MsoPlainText">>>>> </p><p class="-wm-MsoPlainText">>>>> A můžou se ukládat i další. Při ukončení přerušení se zase registry</p><p class="-wm-MsoPlainText">>>>> obnovují. Tudíž je tam nějaká režie a prodleva, než se přerušení</p><p class="-wm-MsoPlainText">>>>> dostane na příslušnou obsluhu. Takže pokud by docházelo k velmi</p><p class="-wm-MsoPlainText">>>>> častému přerušení, může se i občas nějaké ztratit.</p><p class="-wm-MsoPlainText">>>>> </p><p class="-wm-MsoPlainText">>>>> A ještě jedna věc, na kterou se zapomíná.</p><p class="-wm-MsoPlainText">>>>> Novější procesory umí ukládat STATUS, WREG, BSR v režimu FAST. Nebudu</p><p class="-wm-MsoPlainText">>>>> vypisovat podrobnosti, nakoukněte do *-.pdf konkrétního PICu, jestli</p><p class="-wm-MsoPlainText">>>>> umí. Ovšem pozor, pokud odlaďujete program třeba s ICDx, potom tyto</p><p class="-wm-MsoPlainText">>>>> FAST rutiny využívá ICDx. Pokud pak natvrdo pustíte program v</p><p class="-wm-MsoPlainText">>>>> samotném PICu, tyto rutiny většinou potom používá přerušení s vysokou</p><p class="-wm-MsoPlainText">>>>> prioritou. Takže časování je následně o něco rychlejší než při ladění</p><p class="-wm-MsoPlainText">>>>> HW prostředky.</p><p class="-wm-MsoPlainText">>>>> </p><p class="-wm-MsoPlainText">>>>> Nahoďte při jaké příležitosti se seká, jestli je to při periodickém</p><p class="-wm-MsoPlainText">>>>> přerušení (např. od TMRx), nebo něčeho externího. Třeba nás něco </p><p class="-wm-MsoPlainText">>>>> napadne.</p><p class="-wm-MsoPlainText">>>>> </p><p class="-wm-MsoPlainText">>>>> Míra</p><p class="-wm-MsoPlainText">>>>> </p><p class="-wm-MsoPlainText">>>>> -----Original Message-----</p><p class="-wm-MsoPlainText">>>>> From: Hw-list [mailto:hw-list-bounces@list.hw.cz] On Behalf Of</p><p class="-wm-MsoPlainText">>>>> Jindrich Fucik</p><p class="-wm-MsoPlainText">>>>> Sent: Monday, April 1, 2024 12:09 PM</p><p class="-wm-MsoPlainText">>>>> To: HW-news</p><p class="-wm-MsoPlainText">>>>> Subject: defektní PIC16F18015</p><p class="-wm-MsoPlainText">>>>> </p><p class="-wm-MsoPlainText">>>>> Ahoj,</p><p class="-wm-MsoPlainText">>>>> </p><p class="-wm-MsoPlainText">>>>> občas si tu někdo hraje s těmito typy procesorů. Narazil jsem na</p><p class="-wm-MsoPlainText">>>>> jeden defektní kus. Bohužel to byl ten, kterej jsem si odvezl na</p><p class="-wm-MsoPlainText">>>>> velikonoce a nemám tu náhradu.</p><p class="-wm-MsoPlainText">>>>> Projevuje se tak, že při vyvolání přerušení se procesor na cca 350 μs</p><p class="-wm-MsoPlainText">>>>> zasekne. jak to tak bývá, tak mi trvalo dva dny zjistit, co se děje a</p><p class="-wm-MsoPlainText">>>>> proč se nemohu dopočítat času nějaké události.</p><p class="-wm-MsoPlainText">>>>> </p><p class="-wm-MsoPlainText">>>>> Tak třeba se někomu tato informace bude hodit. Nebo možná někdo ví o</p><p class="-wm-MsoPlainText">>>>> něčem, co jsem špatně nastavil a může mi to říci.</p><p class="-wm-MsoPlainText">_______________________________________________</p><p class="-wm-MsoPlainText">HW-list mailing list  -  sponsored by www.HW.cz</p><p class="-wm-MsoPlainText">Hw-list@list.hw.cz</p><p class="-wm-MsoPlainText">http://list.hw.cz/mailman/listinfo/hw-list</p></div>_______________________________________________
<br>HW-list mailing list  -  sponsored by www.HW.cz
<br>Hw-list@list.hw.cz
<br>http://list.hw.cz/mailman/listinfo/hw-list
<br></blockquote></body></html>