Forum: Mikrocontroller und Digitale Elektronik Clock Switching


von Domi (Gast)


Lesenswert?

Hallo

Ich habe einen PIC24FJ128GA mit einem 8MHz Quartz. Im laufenden Betrieb 
möchte ich auf den internen LPRC umschalten und dannin den Sleep Modus 
wechseln. Wenn dann der PIC aus dem Sleep Modus durch den WDT geweckt 
wird, soll also der LPRC Takt aktiv sein.

Die Config Bits habe ich so definiert:
CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_ON & ICS_PGx2 
& WDTPS32768msec)
_CONFIG2(FCKSM_CSECMD & OSCIOFNC_ON & POSCMOD_HS & FNOSC_PRI)


Der Code für die Umschaltung sieht so aus:

  OSCCON &= 0x00FF;
  OSCCON |= 0x7800;    // unlock high byte
  OSCCON &= 0x00FF;
  OSCCON |= 0x9A00;

  OSCCON &= 0xF8FF;    // Switch to LPRC
  OSCCON |= 0x0500;

  OSCCON &= 0xFF00;
  OSCCON |= 0x0046;    // unlock low byte
  OSCCON &= 0xFF00;
  OSCCON |= 0x0057;

  OSCCON |= 0x0001;    // Oscillator switch enable

Jedoch funktioniert mir die Umschaltung nicht und der PIC bleibt 
weiterhin mit 8Mhz getaktet.

Bitte helft mir, ich bin schon mehr als 1 Tag am Datenblätter lesen und 
Microchip hat mir bis jetzt auch noch keine Antwort gegeben.

Danke und Gruss

von domi (Gast)


Lesenswert?

Hallo zusammen
Ich habe die Lösung gefunden:

  // Clock Switching
  __builtin_write_OSCCONH(0x78); // Unlock OSCCON High Byte
  __builtin_write_OSCCONH(0x9A); //

  __builtin_write_OSCCONH(0x05); // clock Switch to Low-Power RC 
Oscillator LPRC (NOSC=0b101)

  __builtin_write_OSCCONL(0x46); // Unlock OSCCON Low Byte
  __builtin_write_OSCCONL(0x57); //

  __builtin_write_OSCCONL(0x01); // Start clock switching (enable)

Gruss an alle

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.