www.mikrocontroller.net

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


Autor: shifti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!!!!!

Autor: shifti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.