}
// If oscillator is running, no metal object is within
// range, so LED should be off
if (oscillation) FrontLED(OFF); else FrontLED(ON);
}
return 0;
}
Dieses sorgt dafür, dass die LED ausgeht, wenn der Oszillator läuft.
Je nach verwendeter Detektionsart (Zusammenbruch der Oszillation oder Änderung der
Oszillatorfrequenz) wird unterschiedlich abgeglichen. Zunächst wird der Abgleich für den
einfachen Fall des Zusammenbrechens der Oszillation erklärt und dieser sollte auch zu Testzwecken
(und mit obigem Programm) in jedem Fall als erstes vorgenommen werden.
Leuchtet nach dem Einschalten die rote LED auf der Erweiterungsplatine nicht, so wird der
Spindeltrimmer so lange nach rechts gedreht, bis sie aufleuchtet. Der Trimmer kann bis zu zehn
Umdrehungen in eine Richtung gedreht werden und geht auch nicht kaputt, wenn er weiter gedreht
wird. Sind die zehn Umdrehungen durch und es passiert nichts, muss mit der Fehlersuche
weitergemacht werden...
Klappt das soweit, stellt man den Roboter auf eine garantiert metallfreie Unterlage (Plastik- oder
Holzkiste, Tisch ohne Nägel oder Schrauben in der Nähe...) und dreht den Trimmer soweit nach
links, bis die LED ganz ausgeht. Es kann erforderlich sein, diesen Abgleich später zu wiederholen,
da Temperaturdrift und Änderungen der Batteriespannung den nun präzise eingestellten
Arbeitspunkt verschieben können. Je sorgsamer man den Abgleich durchführt, umso empfindlicher
ist der Sensor, aber umso wahrscheinlicher ist es, dass man nachtrimmen muss.
Nähert man sich nun mit einem metallischen Objekt (Schraubenzieher, o.ä.) dem Tischtennisball, so
sollte – spätestens bei Berührung – die LED wieder angehen.
Der Sensor ist nun so empfindlich, dass er auch kleine Schipsel Alufolie durch einen Karton
hindurch orten kann.
Möchte man nur die Frequenzveränderung messen, so gleicht man den Sensor am besten in der
fertigen Applikation ab. Dabei wird der Roboter dem maximal zu erwartendem Sensorsignal
ausgesetzt (also die Metallfäche oder das Metallobjekt möglichst nahe dran), und der Trimmer so
weit nach links verdreht, dass auch dann die LED nicht ausgeht. Folgendes Programm kann für die
Demonstration der Funktion verwendet werden (MinesweeperTest2):
#include "asuro.h"
#include <stdio.h>
extern volatile unsigned char count72kHz;
int main(void)
{
unsigned char oldlevel=0, newlevel;
unsigned int freq;
int i;
char s[9];
Init();
DDRD &= ~(1<<2); // Change Port D Pin 2 to input
StatusLED(OFF);
while(1)
{
freq=0;
for (i=0; i<100; i++) {
count72kHz=0; // This counter is incremented in timer interrupt