PIC16F15323 / ADC / sleep

Jan Waclawek konfera na efton.sk
Pondělí Srpen 12 16:00:25 CEST 2019


[preposielam]


Ahoj,

ked som dnes uz zabil den hw-listom, tak by som Vam pan Vicek rad dal
do pozornosti nasledujucu pasaz z Vasho kodu:

procedure Interrupt;
begin
    if (PIR1.ADIF = 1) then
    //if (PIR9.TMR6IF = 1) then
       begin
         SetBit(LATC,5);
         Inc(poc);
         rv_an0                 := ADRESH shl 8 + ADRESL;
         rv_an0_flt             := ADFLTRH shl 8 + ADFLTRL;
         rv_an0_acc             := ADACCH shl 8 + ADACCL;

         SendRS_word(poc);UART1_Write_Text('....');
         SendRS_byte(ADCNT);UART1_Write_Text('....');
         SendRS_word(rv_an0);UART1_Write_Text('....');
         SendRS_word(rv_an0_acc);UART1_Write_Text('....');
         SendRS_word(rv_an0_flt);UART1_Write_Text('....');
         Uart1_CRLF;
         ClearBit(LATC,5);
         //Delay_ms(25);

         ClearBit(PIR1, ADIF);
         //ClearBit(PIR9,TMR6IF);
       end;
end;

Ako prve je velmi dobrym programatorskym zvykom zavesit do
periodickeho IRQ rutiny vypisu premennych na seriovy port a funkciu
Delay()... Ja viem, poviete, ze 1sec... Ale takto sa to skratka
nerobi.

Ako druhe ja som mal na mysli interrupt takyto:

if(tmr2if == 1)
tmr2if = 0;
GODONE=1;
blinkLED1();
return;

if(adif== 1)
adif=0;
ADC_read_registers();
blinkLED2();
return;

A pokial toto nebude fungovat, tak dalsie ani neskusajte... Tie ledky
musia blikat v poradi LED1, LED2... Takto to chodi na klasickom
hw_16874. Najprv si rozchodte na tom vasom hw tuto sekvenciu a potom
mozeme riesit hardwarove featury 18...k42. A nezabudnite si najprv
nastavit 250us a tim2. To urobite v grafickom klikatku MCC na par
klikov... A samozrejme osciloskop...

A.


Další informace o konferenci Hw-list