Re: defektní PIC16F18015

Pavel Hudeček edizon na seznam.cz
Pondělí Duben 1 21:07:17 CEST 2024


To se tedy omlouvám za nadměrnou obecnost poznámky:-)
... jejíž jediné poselství bylo, že ukládání registrů prostě nemůže 
trvat tak dlouho a to s víceřádovou rezervou.

Jsem zvyklý, že když na AVR zacvičím s portem, dostanu na výstupu 
Fosc/2, tedy třeba 10 MHz.

Ale řekl jsem si, že bych si to přerušení moh taky změřit a třeba to 
bude někoho dalšího zajímat:
(ATtiny416 na kitu XNANO)

int main() {
// ....
     while (1) {
         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;
         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;
         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;
         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;
         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;
         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;
         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;
         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;

         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;
         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;
         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;
         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;
         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;
         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;
         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;
         PORTA.OUTSET = TEST_int + TEST_main;
         PORTA.OUTCLR = TEST_main;
         // celkem 2x8 dvojic
     }
}

ISR (TCA0_OVF_vect) {
     PORTA.OUTCLR = TEST_int;
     PORTA.OUTSET = TEST_int;
     PORTA.OUTCLR = TEST_int;
     TCA0_SINGLE_INTFLAGS = TCA_SINGLE_OVF_bm;
     PORTA.OUTSET = TEST_int;
     PORTA.OUTCLR = TEST_int;
}

Žlutá je TEST_int, modrá TEST_main:


(1. obrázek je zde)
Je vidět, že od přerušení mainu do prvního PORTA.OUTCLR = TEST_int; 
uplyne asi 800 ns a na konci asi 1000, nebo víc, ale ten krám neumí 
udělat save bez menu.
A taky je vidět, že  TCA0_SINGLE_INTFLAGS = trvá déle než běžné instrukce


(2. obrázek zde)
Tady je vpravo vidět kolik v mainu zabere while a že hned po něm je 
nejmíň 1 instrukce pomalejší a pak zas pokračuje 10 MHz signál, tedy 20M 
instrukcí za sekundu.
A alternativní prodloužená doba, co je schovaná pod menu na prvním 
obrázku. Rozdíl cca odpovídá tomu zubu od while, tedy předpokládám, že 
když se int trefí do JMP, tak obnovení trvá déle.

Takže jestli má PIC instrukce 4x pomalejší a běží na 2,5x menší 
frekvenci, tak se z necelých 2 µs celkové režije stane 20 +nějaké další 
možnosti na zpomalení, ale 350 je prostě moc:-)
V každém případě jsem zvědav na finální příčinu a tu tipuju v nějakých 
věcech s inicializací hodin, přerušení, nebo jeho zdroje.

(třetí pokus o odeslání, s menšími obrázky a odřízlým menu. 1 a 2 ale 
nejdou stornovat, chce kód z mailu, který v něm ale není a asi to 
souvisí s chováním browseru k nezabezpečeným webům)

PH

Dne 01.04.2024 v 17:05 Miroslav Draxal napsal(a):
> Fyzicky to běží pod 10MHz nebo jádro běží pod 10MHz?
> Pokud to běží pod FOSC pod 10MHz, tak jádro to dělí 4.
> Takže při 10Mhz je jedna instrukce 400ns. Čili 350 μs je 875 jednocyklových instrukcí. Více jak polovina instrukcí je dvoucyklových a jsou i třícyklové.
> Simuloval jste to nějak v MPLABx?
> Jelikož neznáme podrobnosti.....
>
> Míra
>
> -----Original Message-----
> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Pavel Hudeček
> Netuším na jaký frekvenci to běží, ale 350 µs, to je na tisíce instrukcí
> při 10 MHz, bylo by hodně blbý, kdyby to nestihlo těch 7 registrů uložit
> aspoň 100x:-)
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240401/c22ef85b/attachment-0001.htm>
------------- další část ---------------
A non-text attachment was scrubbed...
Name: ErgVcB9fmHn48vj0.png
Type: image/png
Size: 91594 bytes
Desc: [žádný popis není k dispozici]
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240401/c22ef85b/attachment-0002.png>
------------- další část ---------------
A non-text attachment was scrubbed...
Name: Wsc6dqZEzl9f4Vq7.png
Type: image/png
Size: 107464 bytes
Desc: [žádný popis není k dispozici]
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240401/c22ef85b/attachment-0003.png>


Další informace o konferenci Hw-list