Forum: Mikrocontroller und Digitale Elektronik Interupt on change oder INT GP2 um Pic12f aus sleep zu weck


von shifti (Gast)


Lesenswert?

Hallo Miteinander,

ich habe ein Problem und zwar will ich einen PIC12F683 aus dem 
Sleep-Mode Aufwecken mit einem Pegelwechsel an den I/O Pins.
Leider mach ich jetzt schon ziemlich lange rum sowohl mit Interrupt on 
change als auch mit dem anderen feature einfach nur Pegeländerung an GP2 
also INT GP2.

Kurzum ich weiß nicht was ich falsch mache es müsste eigentlich ohne 
probleme funktionieren da der Pic quasi schon voreingestellt ist für 
einen Wake-Up durch einen interrupt.

Vielen Dank für Eure Hilfe im Vorraus!!!!!!

von shifti (Gast)


Lesenswert?

hier der c-code wie ich ihn im PICC (HI-TECH C Compiler) benutze.



#include <pic.h>


void Init();
//void delayMS(int);


//         1       2        3        4          5         6         7 
8
__CONFIG(INTIO & WDTDIS & PWRTDIS & MCLRDIS & UNPROTECT & BORDIS & 
IESOEN & FCMDIS);
//  1:  INTERNAL OSC
//  2:  EnABLE WATCH DOG TIMER
//  3:  TIME UP DELAY Disabled
//   4:  DISABLE MCLR
//  5:  DISABLE CODE PROTECTION
//  6:  BROWN OUT DETECT DISABLED
//  7:  INTERNAL EXTERNAL SWITCHOVER MODE ENABLED wichtig für switchen 
des taktes
//  8:  FAIL-SAFE CLOCK disable
//______________________________________________________________________ 
___


void Init()
{  //OSSCON REGISTER
  IRCF2=0;          //FOSC=31kHz
  IRCF1=0;
  IRCF0=0;
  OSTS=0;            // Time out status bit bestimmt durch internen Takt
  HTS=1;            // Stable HFintosc 125khz-8MHz
  LTS=1;            // Stable LFintosc 31khz
  SCS=1;
  //PCON = 0b00100000;     // Ultra-low-power wake up enabled würde nur 
was bringen wenn man es mit rc-network einen sleep takten würde
  OPTION = 0b11001000;  // disable weak pullups, 1:1 prescaler on WDT
  INTCON = 0b10011000;  // disable all interrupts bis auf Interuppt on 
change GPIO 0:5 und INT GP2, und das notwendige GIE Bit hierfür,  clear 
all flags
  IOC=0b00000100;      // Enable GPIO on Change für GPIO 2 für interrupt 
der den wake up aus dem sleep ausführt
                        // Interrupt global freischalten

  GPIO = 0;        // clear all I/O pins
  TRISIO = 0b00001000;  // make all I/O pins outputs
  return;
}


//char x;
void main()
{
  Init();
  while(1)

  {

    SLEEP();
    GPIO=0x03;
    SLEEP();
    GPIO=0x02;
  }
}


// Interrupt on change konfigurieren
//IOC2 = 1;                         // GP3 kann Interrupt on change 
auslösen
//GPIE = 1;                         // Interrupt on change freischalten

//GPIO = GPIO;                      // eventuell vorhandenen "Mismatch" 
beenden
//GPIF = 0;                         // Interrupt Flag löschen

//GIE = 1;                          // Interrupt global freischalten

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.