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