Forum: Mikrocontroller und Digitale Elektronik PIC24f128ga006


von Marguerite (Gast)


Lesenswert?

Hallo,

ich arbeite mit dem PIC24f128ga006, der auf einen Sensorknoten Board 
verbaut ist, der ist dort mit einer Batterie versorgt. ich will über das 
Programm, was ich drauf schreibe, die Möglichkeit haben den PIC zum 
Schlafen zu bringen, wenn  die Akku der Batterie  um einen bestimmten 
Wert abfällt. Zum wecken des PICs gibt es eine Möglichkeit die Change 
notification pins zu benutzten. Auf dem sensor board gibt es ein Reed 
Kontakt; sein port ist ein I/O port und ich habe mir überlegt dies zum 
Wecken des PIC zu benutzen.

Kann jemand mir dabei helfen?Ich meine den pic zum schlafen zu legen und 
wieder aufzuwecken.
Gebe es eine andere Möglichkeit den PIC ohne diese I/O port zu benutzen, 
wenn man weiss, dass im Sleep Mode das System clock nicht mehr 
funktioniert?

Danke für die Rückmeldung

Marguerite

von Meister E. (edson)


Lesenswert?

Hallo,

Marguerite schrieb:
> Gebe es eine andere Möglichkeit den PIC ohne diese I/O port zu benutzen,
> wenn man weiss, dass im Sleep Mode das System clock nicht mehr
> funktioniert?

Die Frage verstehe ich nicht. Was genau meinst du damit?

Gruß,
Edson

von Marguerite (Gast)


Lesenswert?

Hi Edson,

Ich will den PIC irgendwie vom Schlaf wecken. Über I/O port(Input/output 
port) kann ich mit CN(change notification) den PIC aufwecken.Auf meinem 
Board gibt es ein Magnet sensor die mit dem I/O port verbunden ist, 
dieser pin hat die funktionalität CN(Change notification), diese 
Funktionalität benutze ich im Moment zum aufwecken des PICs.

Im Sleep modus, funktioniert den Clock nicht mehr so dass ein aufwecken 
über den Timer interrupt unmöglich ist. Meine Frage ist kann es unter 
diese Situation eine Möglichkeit geben den PIC zu wecken?

VG
marguerite

von Meister E. (edson)


Lesenswert?

Marguerite schrieb:
> Meine Frage ist kann es unter
> diese Situation eine Möglichkeit geben den PIC zu wecken?

Ja, wenn du den Watchdog (WDT) erlaubst. Der hat eine eigene RC-Clock, 
die nichts mit dem CPU-Takt zu tun hat.

Gruß,
Edson

von Marguerite (Gast)


Lesenswert?

Hi Edson,
die Idee mit der WDT ist sehr gut, danke erstmal. Ich habe den 
Application note durchschaut. Die Beispiele mit dem WDT sind auf 
assembler geschrieben. Wäre es möglich., dass du mir ein Beispiel code 
in C gibst. Nur als bezugspunkt, um zu sehen wie das ganze programmiert 
wird.
VG
Marguerite

von Meister E. (edson)


Lesenswert?

Eigentlich machst du in C das gleiche wie in dem Assembler-Code. 
Zunächst muss ja das FWDTEN-Bit im Config-Word1 zurückgesetzt sein, was 
nicht der Default-Einstellung entspricht. Du kannst das im Quelltext 
machen oder in der MPLAB IDE unter Device->Configuration per GUI 
einstellen. Bis hierher musst du kein Programm schreiben.

Um den Watchdog von der Firmware aus zu aktivieren, musst du im 
RCON-Register das Bit SWDTEN setzen:
1
    RCONbits.SWDTEN = 1;


Diese Syntax gilt eigentlich für alle Bits in den SFR oder GPR-Regionen 
des Arbeitsspeichers. Ich weis jetzt aus dem Gedächtnis nicht genau, wie 
der Sleep-Mode im C30 mit PIC24-Lib ausgelöst wird. Ich glaube, in der 
PIC24Lib war es auch einfach:
1
    Sleep();


Mehr gibt es eigentlich nicht zu beachten. Das Einstellen des Prescalers 
für den WDT wirst du selber hinbekommen, der Rest wird weitgehend von 
der PIC24-Hardware erledigt:

Der hinter dem Sleep()-Aufruf verborgene Assembler-Ausdruck PWRSAV löst 
einen WDT-Reset aus. d.h. die per Prescaler eingestellte Zeit bis zum 
Auslösen das Watchdog fängt in dem Moment an abzulaufen, in dem der 
Sleep-Mode eingetreten ist.

Sollte das nicht reichen, poste mal das Assembler-Beispiel. Dann sehen 
wir weiter.


Gruß,
Edson

von tt4u (Gast)


Lesenswert?

bei den PICs kann man verschiedene Sleep-Modi einstellen. Der Timer1 
kann auch im Sleep weiterlaufen (mit eigenem Quarz oder Takt)

von tt4u (Gast)


Lesenswert?

... aufwachen aus Sleep geht natürlich auch ohne Takt oder Timer.

von Marguerite (Gast)


Lesenswert?

Hi tt4u,

... aufwachen aus Sleep geht natürlich auch ohne Takt oder Timer.

wie kannst du dies ermöglichen?

von Meister E. (edson)


Lesenswert?

Hallo,

Marguerite schrieb:
> wie kannst du dies ermöglichen?

ich dachte eigentlich, das wäre dir bekannt. Du hast ja konkret auf die 
Situation mit angehaltenem CPU-Takt hingewiesen und gefragt:

Marguerite schrieb:
> Meine Frage ist kann es unter
> diese Situation eine Möglichkeit geben den PIC zu wecken?

Die Frage wurde auch beantwortet.

Marguerite schrieb:
> wie kannst du dies ermöglichen?

Hast du eigentlich mal ins Datenblatt geschaut?

Gruß,
Edson

von tt4u (Gast)


Lesenswert?

Wer lesen kann, ist eindeutig im Vorteil:

Datenblatt Kapitel 8.0

The device will wake-up from Sleep mode on any of the
these events:
• On any interrupt source that is individually
enabled
• On any form of device Reset
• On a WDT time-out
On wake-up from Sleep, the processor will restart with
the same clock source that was active when Sleep
mode was entered.

The device will wake from Idle mode on any of these
events:
• Any interrupt that is individually enabled.
• Any device Reset.
• A WDT time-out.
On wake-up from Idle, the clock is re-applied to the
CPU and instruction execution begins immediately,
starting with the instruction following the PWRSAV
instruction, or the first instruction in the ISR.

von Michael H. (morph1)


Lesenswert?

tt4u schrieb:
> • On any interrupt source that is individually
> enabled

Uuuuuuh aufpassen!

Im Sleep mode können nicht alle hardware-module auch einen interrupt 
erzeugen.

Es geht zb bei: spi im Slave Mode, INT0, etc. also im Grunde alle Module 
wo kein Takt für die Funktion benötigt wird, da dieser im Sleep nicht 
weiterläuft.

Das heißt leider auch, dass z.B. ein UART-Receive keinen Interrupt 
erzeugen wird.

Auch ist zu beachten, dass im Sleep-Mode, meines Wissens nach, alle Pins 
hochohmig sind!

Für viele Fälle geeignet und auch stromsparend ist der Idle-Mode.

von Marguerite (Gast)


Lesenswert?

HI Edson,
ich habe bis jetzt versucht die Funktionalität für den WDT zu 
programmieren.Ich habe ein Problem, um die Bits, die in register FLASH 
CONFIGURATION WORD 1 sind, anzusprechen. Die sind FWDTEN (muss auf 0 um 
die controlle der WDT per SW zu ermöglichen),FWPSA(Prescaler),WDTPS (für 
postscaler).
Danke wenn sie mir weiterhelfen können.

Ich benutze den PIC24fj128ga006

Gruß

Marguerite

von Marguerite (Gast)


Lesenswert?

Hi Edson,
endlich habe ich die Bits konfigurieren können.

hier ist ein stück von was ich programiert habe

ich will die Batteriespannung ADCValue lesen und prüfen ob es einen 
Schwellwert überschreitet wenn nicht muss den pic wieder zum schlafen 
gelegt werden. Ansonsten wird den Watchdog ausgeschaltet und den pic 
kann weiterlaufen.
#pragma config FWDTEN=OFF            //Watchdog Timer
#pragma config WDTPS=256             //Watchdog Timer Postscaler
#pragma config FWPSA=1    //7-bit Prescaler


 if(ADCValue5<0x0299)
  {
   RCONbits.SWDTEN=1;//WDT enabled in software
    ClrWdt(); //zurücksetzen des WDT Flag

    Sleep();
    RCONbits.SLEEP=0; //Disable from sleep

  } else
   {
    greenLED=1;
    RCONbits.SWDTEN=0;    //
   }

von Meister E. (edson)


Lesenswert?

Marguerite schrieb:
> hier ist ein stück von was ich programiert habe

Das schaut doch schon ganz gut aus. Oder hakt es noch irgendwo?

Gruß,
Edson

von Marguerite (Gast)


Lesenswert?

Hi Edson,
danke für die Anmerkung. Ich wollte nur, dass du siehst, ob der ist, wie 
es sein sollte. Ich werde jetzt alles im betrieb nehmen. Danke noch 
einmal für die Hilfe.
Gruß

Claire

von Marguerite (Gast)


Lesenswert?

Hi Alle,
ich arbeite mit dem PIC24fj128ga006. ich habe im Datenblatt gelesen, 
dass dies ein 16-bit Flash Microcontroller ist. Heisst das, dass der PIC 
ein Flash-Speicher von 16 bit hat?
Was bedeutet: Linear Programm Memory Addressing up to 12 MBytes?
             Linear Data Memory Addressing up to 64 KBytes?
Danke für die Rückmeldung

Marguerite

von tt4u (Gast)


Lesenswert?

24 bit Flash und 16 bit Datenbreite

von Marguerite (Gast)


Lesenswert?

Hitt4u
Danke für die Rückmeldung aber wie kommst du auf diese Werte?
Viele Grüße
Marguerite

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.