Probuzeni ze Sleep u PIC12F683
Admin HWnews
hwnews na cncnet.info
Čtvrtek Leden 3 21:20:39 CET 2013
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