Der ewige Blinker mit dem PFS154          


Elektronik-Labor  Labortagebuch  Projekte 


Jetzt soll auch einmal der PFS154 im achtpoligen Gehäuse zum Einsatz kommen. Ich hatte noch Platinen, die eigentlich für größere Controller gemacht waren. Aber den freien Platz kann man gut gebrauchen, um eine komplette Schaltung darauf zu bauen. Mit seinen acht Steckkontakten kann die Platine direkt in den Brenner gesteckt werden. Das hat auch auf Anhieb funktioniert.



Für eine einfache Anwendung wie den ewigen Blinker kommt es besonders auf geringe Stromaufnahme an. Ein Blick ins Datenblatt  zeigte den extrem geringen Stromverbrauch, wenn man den langsamen ILRC-Oszillator verwendet. Der Controller läuft dann mit rund 50 kHz, nicht sehr genau, aber sehr stromsparend. Gemessen habe ich ca. 50 µA.  Eine Mignon-Batterie mit 2000 mAh würde damit theoretisch vier Jahre durchhalten. Das erklärt, warum diese Controller oft ohne einen Schalter eingesetzt werden können.

Die die Verzögerung mit .delay verstehe ich jetzt besser. Ich dachte erst, dass hier Mikrosekunden angegeben werden und der Compiler das irgendwie mit der Taktfrequenz verrechnet. Aber tatsächlich gibt man Taktimpulse an. Eine Messung der Impulslänge mit dem Oszi hat es geklärt. Es sollen also LED-Impulse von 10 ms einmal in der Sekunde wiederholt werden.




Bei diesem geringen Strombedarf sollte es möglich sein, alles mit einem Speicherkondensator mit 0,47 F, 5,5 V zu betrieben. Auf der Platine gibt es einen Jumper, mit dem man VCC abschalten kann. Das ist nötig, um ein neues Programm zu brennen. An einem Port liegt nun eine LED mit eingebautem Vorwiderstand 1 k.



Damit die Schaltung lange blinkt, muss man eine recht tiefe Entladung des Kondensators zulassen. Der Spannungswächter LVR wird deshalb auf 2.0 V eingestellt. Der Controller läuft dann in einem Bereich von 5,5 V bis herab auf 2,0 V Wenn die LED während eines Impulses im Durchschnitt 2 mA braucht, sind das gemittelt über die Zeit nur 20 µA. Rechnet man zur Sicherheit mit insgesamt 100 µA, entlädt sich der Kondensator im 4700 s um 1 V. Die LED könnte also theoretisch vier Stunden lang blinken. Aber das hängt auch noch von der Selbstentladung des Kondensators ab. Die Leckströme werden nach einiger Zeit im Gerbrauch immer geringer. Nach mehrmaligem Aufladen wurde tatsächlich eine Betriebsdauer von fünf Stunden erreicht.


void FPPA0 (void)
{
// .ADJUST_IC SYSCLK=IHRC/2 // SYSCLK=IHRC/2
.ADJUST_IC SYSCLK=ILRC //ca. 50 kHz, 50 µA @ 3V

// Insert Initial Code

PAC = 255;
PBC = 255;
while (1)
{
PA = 255;
.delay(500); //ca. 10 ms
PA = 0;
.delay(50000); //ca. 1 s
}
}


Stromspar-Betrieb beim Padauk-Blitzer

Bisher ging die meiste Rechenzeit in der Warteschleife verloren. Dabei wird unnötig Energie verbraucht. Deshalb habe ich nun nach einer Möglichkeit gesucht, einen Power-Down- oder Sleep-Modus einzuschalten, wie ich das von AVR-Controllern kenne. Der Watchdog sollte den Controller dann wieder aufwecken. Der Watchdog-Timer ließ sich zwar mit /CLKMD = 0xE6;  einschalten, was man daran sehen kann, dass dann Doppelblitze entstehen, weil er etwas länger läuft als eine Sekunde. Aber sowohl STOPEXE als auch STOPSYS schalteten auch den Watchdog aus, und damit war es vorbei mit dem Aufwecken. Bei diesen Versuchen gab es jeweils nur einen Blitz und dann blieb der Controller aus.

Das Datenblatt des Controllers schlägt eine andere Methode vor. Man soll mit STOPEXE den Controller schlafen legen, wobei allerdings der RC-Oszillator weiter läuft. Und der 16-Bit-Timer soll dann einen Interrupt auslösen, der den Controller wieder aufweckt. Die Einstellung des Timers ist zwar recht komplex, aber es gibt dafür ein Makro: $ T16M  ILRC, /4, Bit15  //Timer16 setting. Der Timer wird dann vom langsamen Taktgenerator ILRC getaktet und verwendet einen Vorteiler durch 4. Und wenn das letzte Bit (Bit 15) auf 1 geht, soll der Interrupt ausgelöst werden. Im Datenblatt wird vorgeschlagen, den Timer vorher auf Null zu setzen. Damit war die Wartezeit allerdings viel zu lang. Mit einem Anfangs-Zählerstand von 52000 kam ich dann recht genau auf eine Sekunde.

Das Endergebnis sieht aus wie vorher. Aber die meiste Zeit verbringt der Controller nun im Schlaf. Laut Datenblatt soll er dabei nur etwa 4 µA brauchen. Der mittlere Strom sollte also trotz der blinkenden LED wesentlich geringer sein als bisher. Und tatsächlich, eine Kondensatorladung reicht nun für rund 24 Stunden (mittlerer Verbrauch 12 µA)! Umgerechnet auf Alkalizellen mit 2000 mAh käme man damit theoretisch auf eine Betriebsdauer von 20 Jahren.


#include	"extern.h"

void FPPA0 (void)
{
// .ADJUST_IC SYSCLK=IHRC/2 // SYSCLK=IHRC/2
.ADJUST_IC SYSCLK=ILRC //ca. 50 kHz, 50 µA @ 3V

// Insert Initial Code
//CLKMD = 0xE6; //Watchdog on

$ T16M ILRC, /4, Bit15 //Timer16 setting

PAC = 255;
PBC = 255;

while (1)
{
PA = 255;
.delay(500); //ca. 10 ms
PA = 0;
WORD count = 52000; //Abgleich für 1 s
STT16 count;
stopexe;
//STOPEXE; //oder STOPYSYS schaltet WDT ab
//.delay(50000); //ca. 1 s
}
}







Elektronik-Labor  Labortagebuch  Projekte