Probuzeni ze Sleep u PIC12F683
Admin HWnews
hwnews na cncnet.info
Čtvrtek Leden 3 21:39:18 CET 2013
Tak uz jsem to nasel....
v preruseni je treba precist nebo zapsat neco na GPIO - aby se srovnal port
Dne 3.1.2013 21:20, Admin HWnews napsal(a):
> Zdravim,
>
> slibil jsem pro kamaradovo deti naprogramovat blikac na kolo vcetne
> blinkru - do nejakeho cinskeho bazmeku - je to sdruzena koncova svitilna
> - puvodni elektronika prijde ven a da se tam tohle.
>
> Vse funguje jak ma, ale v okamziku kdy nejsou stiskla tlacitka se MCu
> spravne uspi (podle spotreby), predtim se zapne preruseni na zmenu log.
> urovni na GPIO, bohuzel nevim proc, ale procesor uz mi nenajede.. Uz
> hodinu studuju DS a nevidim nikde chybu.
>
> osazeni je takove - napajeni bude 3.2V az 2V (dve suche tuzky):
>
> MCU.............: PIC12F683
> takt............: 31kHz interni oscilator
>
> GP0......: vystup - mosfet - koncove svetla
> GP1......: vystup - mosfet - pravej blinkr - od GP5
> GP2......: vystup - mosfet - levej blinkr - od GP4
> GP3......: vstup - prepinac noc/den - log. 0 je noc - externi pull-up
> GP4......: vstup - levej blinkr na GP2 - log. 0 je sepnuto - interni
> pull-up
> GP5......: vstup - pravej blinkr na GP1 - log. 0 je sepnuto - interni
> pull-up
>
>
> inicializace:
>
> OSCCON := %00001001; //31kHz
> TRISIO := %00111000; //GP0-2 vystupy
> CMCON0 := %111; // Disable Comparators
> ANSEL := 0; // Disable Analog
> GPIO := 0; // GPIO vsechno na nulu
> WPU := %00110000; //na GP4-5 zapnu pull-up
> OPTION_REG := %01111111; //povolim pull-up generalne /GPPU=0
> INTCON := %01001000; //setup Interrupt GIE=0,PEIE=1,GPIE=1
> IOC := %00111000; //Source on-change to GP3-5
>
>
> vstup do Sleepu:
>
> if (TestBit(GPIO, sw_DenNoc)=1) and (TestBit(GPIO, sw_Rblik)=1) and
> (TestBit(GPIO, sw_Lblik)=1) then
> begin
> GPIO := 0; // GPIO vsechno na nulu - pozhasinam
> INTCON := %11001000; //setup Interrupt GIE= 1,PEIE= 1, GPIE= 1
> Sleep;
> INTCON := %01001000; //setup Interrupt GIE= 1,PEIE= 1, GPIE= 1
> end;
>
> a osetreni preruseni:
>
> Procedure Interrupt;
> Begin
> If TestBit(INTCON,GPIF) = 1 then
> ClearBit(INTCON,GPIF); //Vymazu priznak preruseni GPIF
> End;
Další informace o konferenci Hw-list