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