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