RC-Messung für den PFS154          


Elektronik-Labor  Labortagebuch  Projekte 


Jetzt habe ich endlich auch einen Padauk-Programmer. Die ersten Versuche gingen damit wie geplant. Dann wollte ich den Controller in der Schaltung programmieren. Dafür sind ja eigentlich nur fünf Leitungen nötig. Aber der Brenner zeigte sich störrisch. Ich habe den Eindruck gewonnen, dass er alle Pinne überprüft um zu erkennen, wenn ein defekter Controller eingesetzt wird. Irgendwie soll man da etwas einstellen können. Aber die Manuals sind für mich nicht ganz klar verständlich. Am Ende blieb nur die Möglichkeit, alle 16 Leitungen zu verbinden. Und auch da machte es noch einen Unterschied, ob ich die Controller-Seite oder die Adapterseite in den Brenner stecke. Die Vermutung war, dass es mit längeren Leitungen Timing-Probleme gibt.



Also wird nun immer der Controller in den Brenner gesteckt, während der Adapter am Ende der Verlängerung in der Schaltung steckt. Jedenfalls so lange, bis eine Anwendung fertig entwickelt ist. Vor jedem neuen Brennen muss ich die Betriebsspannung und manche anderen Verbindungen öffnen, damit das IC korrekt erkannt wird.



Erst wenn der Brenner zufrieden ist, steht da "IC ready". Dann kann der Controller gerbrannt werden. Das Ganze ist jetzt nicht so bequem wie es sein sollte, aber immer noch besser, als die Controller-Platine immer wieder hin und her zu stecken. Also kann ich nun richtig loslegen.



Weil der PFS154 keinen AD-Wandler besitzt, musste ich mir was einfallen lassen, um irgendwelche Messungen auszuführen. Die Idee war, eine Zeitkonstante zu messen. Ein unbekannter Widerstand lädt einen bekannten Kondensator auf. Gemessen wird die Zeit, bis zu der der gelesene Eingangszustand an PB2 umkippt. Für jede neue Messung soll PB2 einmal kur als Ausgang low-geschaltet werden um den Kondensator zu entladen. Dann beginnt der Ladevorgang über Rx.



Bei der Programmierung bin ich von dem letzten Beispiel zur seriellen Schnittstelle ausgegangen. Irgendwie tappe ich noch an vielen Stellen im Dunkeln. Was genau kann das Mini-C, welche Besonderheiten hat die Sytax, was bedeutet die mögliche Mischung mit Assembler. Ich will ja nicht meckern, weil diese Controller so extrem billig sind. Aber die Dokumentation ist für mich gewöhnungsbedürftig. Ich vermute, in Taiwan ist das so wie in Festland-China: Es gibt Spitzen-Programmierer, aber die sprechen nur chinesisch. Die Übersetzung macht dann jemand, der zwar etwas Englisch kann, aber von der Sache nichts versteht. Dazu kommt eine ganz eigene Grammatik, an die man sich allerdings schnell gewöhnt. Ein Beispiel zeigt die folgende Fehlermeldungen: "C:\PADAUK_Tool\0.87\Projekt2\Projekt2.C(191): Not need '}' but find" Aber wenn man das frei übersetzt heißt es einfach: "Finde unnötige Klammer". Stimmt, Klammer entfernt, Programm fehlerfrei.

Die fertigen Beispiele des Compilers sind dagegen sehr gut. Die stammen ja auch von den fähigen Programmierern und mussten nicht übersetzt werden. Da kann ich nun Dinge abschauen und kopieren wie "set1 PB.2". Ist das jetzt Assembler oder irgendeine Art von Macro? Keine Ahnung, aber es funktioniert. Auch wie man eine Zählschleife bilden muss, geht daraus hervor. Hier lasse ich i von 127 bis 0 herunterzählen. Aber n wird nur erhöht, wenn der B2 noch als low gelesen wird, Das ergibt eine sehr einfache und effektive Messschleife mit einer Begrenzung auf 127. Dann habe ich den dazu passenden Kondensator gesucht und gefunden, dass ich mit 150 pF Widerstände bis etwa 1 M messen kann. Der Messwert in n wird an A an die serielle Ausgabe übergeben. Weil A nirgendwo deklariert ist, vermute ich, dass der Wert im Akku A assemblermäßig in die aufgerufene Funktion übergeben wird.




Für Rx = 330 k erhalte ich zuverlässig einen Messwert von 79. Man müsste also nur noch mit 4,18 multiplizieren und könnte dann Rx in kOhm anzeigen. Aber in anderen Anwendungen will man vielleicht einfach nur Grenzwerte vergleichen. Ein Beispiel wäre die Messung der Feuchtigkeit von Blumenerde. Da müsste man nur einen zu den verwendeten Elektroden passenden Grenzwert finden. Aber für diesen Zweck hätte man noch ein Problem, weil die Messung nun effektiv mit Gleichstrom ausgeführt wird. Das führt in feuchter Umgebung zu Polarisationseffekten und zu größerer Korrosion. Also muss das Verfahren noch etwas erweitert werden.



Nun muss abwechselnd jeder der beiden Ports einmal an GND geschaltet werden und einmal an VCC. Außerdem wechselt die Rolle des Eingangs, der auf einen high-Zustand wartet. Auf die Weise folgen zwei Zeitmessungen aufeinander. Die Messwerte addieren sich, sodass die Ausgabe nun bis 254 reicht.

void	FPPA0 (void)
{
.ADJUST_IC SYSCLK=IHRC/2, IHRC=16MHz, VDD=5.0V;

PAC=255;
PBC = 1;
B2 BIT PB.2;
B3 BIT PB.3;
P2DIR BIT PBC.2
P3DIR BIT PBC.3
BYTE n;
BYTE i;

while (1)
{
n=0;
set1 P3DIR;
set1 P2DIR;
set0 B2;
set0 B3;
i=127;
set0 P2DIR;
set1 B3;
do
{
if (!B2) n++;
} while (--i);

set1 P2DIR;
set0 B2;
set0 B3;
i=127;
set0 P3DIR;
set1 B2;
do
{
if (!B3) n++;
} while (--i);
set1 P3DIR;
set0 B2;
set0 B3;


PA=n;
A=n;
UART_Send();
.delay(1000000);
}

}



Download: Projekt2.zip

Im Endergebnis wird nun mit Wechselstrom gemessen, wie es sich für eine Feuchtemessung gehört. Die folgende Messung wurde direkt am Messwiderstand durchgeführt. Dazu ist allerdings eine Potentialtrennung erforderlich. Der Controller wurde zu diesem Zweck mit Batterien versorgt.






Elektronik-Labor  Labortagebuch  Projekte