Programmierung des PMS150C-U06
Hier geht es um den echten und einzigen 3-Cent-Controller von
Padauk. Der PMS150C ist weitgehend kompatibel mit dem PFS154, aber nur
einmal programmierbar, (OTP, One Time Programmable). Das kleine
SOT23-Gehäuse macht die Sache etwas schwierig. Ich habe es auf eine
Lochrasterplatine gelötet und dann alle sechs Beinchen so verdrahtet,
dass damit ein PMS150C-S08 vorgetäuscht werden sollte. So wie das IC
eingelötet ist, könnte ich es dann leicht wieder auslöten und in sein
Zielsystem einbauen.
Aber der der Padauk-Brenner brachte eine Fehlermeldung, dass Anschlüsse
nicht verbunden seien. Also das stimmt, zwei Beinchen sind nicht
verbunden, weil der sechspolige Controller sie gar nicht hat. Und sie
werden auch nicht für die Programmierung gebraucht. Aber jetzt habe ich
mich schon so mit der Löterei abgequält, dass ich nicht aufgeben kann.
Also was kann denn der Programmer überhaupt prüfen, wenn es da nur
hochohmige CMOS-Eingänge geben sollte. Das einzige, was mir dazu
einfällt sind die internen Schutzdioden nach VCC und GND. Diese Methode
benutze ich auch manchmal mit dem Ohmmeter, um die Anschlüsse und ihre
Verbindungen zu überprüfen. Und vermutlich reicht es, wenn man nur eine
der beiden Schutzdioden, nämlich die nach VCC überprüft. Also habe ich
zwei Dioden nach VCC an die beiden freien Pinne gelegt. Und
tatsächlich, die ersehnte Meldung "IC ready" erschien im Display.
OTP heißt, einmal für immer zu programmieren. Da will es gut
überlegt werden, was da nun reingebrannt wird. Ein Programm für die
Ewigkeit, da ist mir zuerst der ewige Blinker eingefallen. Das
ursprünglich für den PFS154 entwickelte Programm ließ sich auch
problemlos für den PMS150 übersetzen. Und tatsächlich, es blinkt. Zum
Vergleich habe ich meinen anderen Blinker mit auf das Steckboard
gesetzt. Beide blinken mit fast gleicher Frequenz. Und ein Test mit
einem Elko mit 1000 µF zeigte, dass der Controller damit fast eine
Minute lang läuft.
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
}
}
In einem zweiten Versuch habe ich eine Adapterplatine
verwendet. Eine aufgelötete Drahtfeder soll das IC in Position halten.
Wenn das so funktioniert, hat man einen Sockel für SOT32-ICs.
Allerdings kann das IC so nicht direkt in den Brenner gesetzt werden.
Die Pinne müssen wieder umcodiert werden. Dazu soll es einen weiteren
Adapter geben.
Wie zu befürchten war, gab es zunächst Kontaktprobleme mit dem lose
aufgesetzten IC. Der Anpressdruck der kleinen Feder reichte zwar um das
IC in Position zu halten, nicht aber für einen zuverlässigen Kontakt
aller sechs Beinchen. Hilfe kam in Form einer selbsthaltenden Pinzette.
Damit hat es nun funktioniert. Der Massenproduktion steht nichts mehr
im Weg.
Der Mikroblinker
Der Ewige Blinker einmal anders: Der sechspolige Controller PMS150C
wurde dazu
direkt unter die LED mit internem Widerstand gelötet. Der Anodendraht
der LED wurde durchschnitten und an den Ausgang gelötet. Der keramische
Kondensator blockt die Betriebsspannung ab, dient aber auch dazu, die
mechanische Stabilität der Anschlussdrähte zu sichern. Zwei alte
Batterien mit zusammen noch 2,4 V werden nun aufgebraucht. Ich hoffe
auf eine Restlaufzeit von einem Jahr.
Einbau in die Haxko-Eule
Der Hacker- &Makerspace Koblenz https://haxko.space/
hat einen SMD-Bausatz für einen Gegentaktblinker entwickelt und im
Rahmen der "Nacht der Technik 2019" verwendet. Es handelt sich um einen
klassischen Multivibrator mit zwei NPN-Transistoren. Das haxko SMD LED practice kit ist ausführlich auch auf Github dokumentiert. Diese kleine Eule hat viele Monate lang vor sich hin geblinkt.
Auf der Suche nach einer schönen Platine für ein Controller-Projekt
stach sie mir in die Augen. Ich wollte aber nichts ausbauen, damit ich
alles später wieder in den Originalzustand versetzen kann. Deshalb habe
ich Basis und Emitter der Transistoren kurzgeschlossen und sie damit
schlafen gelegt. Ihre Arbeit wird solange von PMS150C übernommen. Ich
brauchte dazu nur zwei Drähtchen vom Kontroller zu den Kollektoren und
ein Drähtchen zum Pluspol der Batterie.
Das Programm habe ich etwas angepasst. Die Eule blinkt nun fünf Mal wie
gehabt. Aber dann gibt es eine Pause. Der interessierte Beobachter
denkt: Was nun, kaputt? Aber dann zwinkert die Eule zwei Mal auf dem
rechten Auge. Und danach geht es weiter wie gehabt.
// Haxco-Eule blinkt und zwinkert
#include "extern.h"
void FPPA0 (void)
{
.ADJUST_IC SYSCLK=ILRC //ca. 50 kHz, 50 µA @ 3V
PAC = 0x48; //A.6=64 + A.3=8, andere sind Eingänge
CLKMD = 0x4C; //ILRC/16 // Clock / 16, noch langsamer
R BIT PA.3; //Links und Rechts definieren
L BIT PA.6;
while (1)
{
Byte n;
n = 5;
do
{
R=1; L=0;
.delay(2500); //ca. 0,75 s
R=0; L=1;
.delay(2500); //ca. 0,75 s
} while (--n);
R=1; L=1;
.delay(5000); //ca. 1,5 s
L=0;
.delay(500); //ca. 0,15 s
L=1;
.delay(500); //ca. 0,15 s
L=0;
.delay(500); //ca. 0,15 s
L=1;
.delay(5000); //ca. 1,5 s
}
}