c't

c't-Projekte - Mailinglisten


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

[ct-bot] Kalibrierung der Distanzsensren mittels EEPROM-Tabelle

Absender: Achim Pankalla
Datum: So, 06.05.2007 18:53:09
In-reply-to: <38A4BFD9-CA32-436A-9A1E-B4E6E0652A5D@xxxxxxxxxxxxxxx>
References: <BCF016D5ED5AC34FBB655D109519ABCF083EBE@xxxxxxxxxxxxxxxxxxxx> <45ED3B46.4030400@xxxxxx> <45EF385C.3080609@xxxxxx> <A2ED0A68-A8F1-438A-B1E3-18033ED489E3@xxxxxxxxxxxxxxx> <45F135B9.5030203@xxxxxx> <45F13A91.6090904@xxxxxxxx> <D053B7F5-6BDD-4052-B45F-28FCF0EF45F8@xxxxxxxxxxxxxxx> <45F2B74F.8090706@xxxxxx> <38A4BFD9-CA32-436A-9A1E-B4E6E0652A5D@xxxxxxxxxxxxxxx>


hallo,
weil 60kb überschritten, die docu als extra-patch.

gruss
 a. pankalla
### Eclipse Workspace Patch 1.0
#P ct-Bot
Index: Documentation/eeprom-simulation.html
===================================================================
RCS file: Documentation/eeprom-simulation.html
diff -N Documentation/eeprom-simulation.html
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ Documentation/eeprom-simulation.html	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,146 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252">
+	<TITLE></TITLE>
+	<META NAME="GENERATOR" CONTENT="OpenOffice.org 2.2  (Win32)">
+	<META NAME="AUTHOR" CONTENT="Achim Pankalla">
+	<META NAME="CREATED" CONTENT="20060528;19455600">
+	<META NAME="CHANGEDBY" CONTENT="Achim Pankalla">
+	<META NAME="CHANGED" CONTENT="20070505;21065990">
+	<STYLE TYPE="text/css">
+	<!--
+		@page { size: 21cm 29.7cm; margin: 2cm }
+		P { margin-bottom: 0.21cm }
+	-->
+	</STYLE>
+</HEAD>
+<BODY LANG="de-DE" DIR="LTR">
+<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><B>EEPROM Simulation f&uuml;r
+PC</B></P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><FONT SIZE=3><B>Author: </B></FONT>
+</P>
+<P STYLE="margin-bottom: 0cm"><FONT SIZE=3>Achim Pankalla
+(achim.pankalla@xxxxxx)</FONT></P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><B>Beschreibung:</B></P>
+<P ALIGN=LEFT STYLE="margin-bottom: 0cm; font-style: normal">Die
+EEPROM Simulation f&uuml;r den PC stellt das EEPROM des <I>Atmel
+MEGA32 Prozessor</I> auch dem Simulierten ct-bot zur Verf&uuml;gung.
+Der Zugriff auf dieses EEPROM erfolgt &uuml;ber gleichnamige
+Funktionen, wie sie auch der avr-gcc besitzt und auch die
+Variablendefinition erfolgt &uuml;ber die gleichen Konstrukte. Eine
+Unterscheidung &uuml;ber #ifdef's ist also nicht notwendig.<BR>Durch
+diese EEPROM-Simulation, ist der Simulator dem realen Bot ein schritt
+n&auml;her gekommen und Programme mit EEPROM-Zugriffe k&ouml;nnen mit
+der Simulation getestet werden.</P>
+<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm; font-style: normal"><B>Implementierung:</B></P>
+<P STYLE="margin-bottom: 0cm">Alle Funktionen und Einstellungen der
+EEPROM Simulation findet Sie in den Dateien <I>pc/eeprom-emu_pc.c</I>
+und <I>include/eeprom-emu.h</I>. Das EEPROM selbst wird durch eine
+Bin&auml;re Datei (genau 1K bzw. 2K gross) repr&auml;sentiert (und
+kann so mit einen HexEditor bearbeitet werden), deren Pfad in der
+C-Datei festgelegt wird. Standard Pfad ist das Heimatverzeichnis des
+Ct-Sim. Nat&uuml;rlich k&ouml;nnen Sie das jederzeit &auml;ndern,
+dies geht &uuml;ber die Konstante <FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><FONT SIZE=2>EEPROM_FILENAME.
+</FONT></FONT></FONT><FONT COLOR="#000000"><FONT FACE="Times New Roman, serif">B</FONT></FONT><FONT FACE="Times New Roman, serif">itte
+beachten Sie aber das Verdoppeln des Backslash im Verzeichnispfad.
+Der Name </FONT><FONT FACE="Times New Roman, serif"><I>eeprom.bin</I></FONT><FONT FACE="Times New Roman, serif">
+sollte dabei belassen werden.</FONT><BR>Die Datei wird automatisch
+neu angelegt, wenn sie noch nicht existiert. Dann besteht der Inhalt
+nur aus 0xFF, wie es auch beim unintialisierten EEPROM des Atmel der
+Fall ist.<BR>Damit die EEPROM-Funktionen des PC korrekt auf die Datei
+zugreifen k&ouml;nnen und nur ein Adressraum von 0 bis 1023(2047)
+entsteht, wie es auch beim avr-gcc verwalteten ist, gibt es die
+externe Variable &bdquo;_eeprom_start__&ldquo;. Diese enth&auml;lt
+die Startadresse der ersten Variable im Segment .eeprom und dieser
+Wert wird dann von der &uuml;bergebenen Adresse subtrahiert. Damit es
+diese Variable gibt, m&uuml;ssen Sie das Linkerscript
+&bdquo;linker_script.lk&ldquo; an den Linker &uuml;bergeben. Dies
+machen Sie mit den Parameter <I>-T</I> der Linkers. Tragen sie in
+Eclipse dies unter Project-&gt;Properties-&gt;C/C++
+Build-&gt;Linker-&gt;Miscellaneous-&gt;Linker flags &bdquo;-T
+linker_script.lk&ldquo; ein. Die Datei muss dann nat&uuml;rlich im
+Debug-W32/Linux Verzeichnis vorhanden sein.<BR>Wie auch beim MCU
+Projekt wird nun auch beim Erstellen eines ct-sim bot die Datei
+ct-bot.eep erstellt, die die Initialisierungswerte der EEPROM
+Variablen enth&auml;lt. Daf&uuml;r muss unter
+Project-&gt;Properties-&gt;C/C++ Build-&gt;Build Steps-&gt;Post Build
+steps der Befehl eingetragen <I>objcopy -j .eeprom
+--change-section-lma .eeprom=0 -O ihex ct-Bot.exe ct-Bot.eep</I>
+sein. Dies m&uuml;ssen Sie nat&uuml;rlich nur in der Konfiguration
+DEBUG-W32/Linux machen.</P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm; font-style: normal"><FONT COLOR="#ff0000"><FONT SIZE=4 STYLE="font-size: 15pt"><B>Achtung!!</B></FONT></FONT><BR>Beachten
+Sie die Zeigerarithmetik von C. Alle eeprom-Funktionen erwarten, wie
+beim avr-Compiler Pointer auf uint8 oder uint16 als Adressparameter.
+Damit auch alles sicher klappt sollten bei berechneten Adressen wie
+folgt vorgegangen werden.<BR>z.B. eeprom_read_word((uint16 *)
+(SCT_LEFT + i*2))</P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm; font-style: normal"><B>eeprom_map.h</B></P>
+<P STYLE="margin-bottom: 0cm; font-style: normal; font-weight: medium">
+Enth&auml;lt Deklarationen aller erstellten EEPROM Variablen.</P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm; font-style: normal"><B>Probleme der
+Implementierung</B></P>
+<P STYLE="margin-bottom: 0cm; font-style: normal; font-weight: medium">
+Im Moment erstellen gleiche Compilerversionen (zu &Uuml;berpr&uuml;fen
+mit &ndash;version) auch gleiche EEPROM-Sections. Es gibt aber keine
+Garantien daf&uuml;r, das zuk&uuml;nftige Compiler Versionen nicht
+die Reihenfolge der Variablen im Code &auml;ndern.  Ein Einf&uuml;gen
+neuer EEPROM Variablen kann auch zu Verschiebungen der Adressen
+f&uuml;hren. Nach solchen &Auml;nderungen ist man nur auf der
+sicheren Seite, wenn das EEPROM initialisiert wird (sprich Sie Ihre
+alte eeprom.bin bzw. auf den Atmel das EEPROM l&ouml;schen). Einmal
+erstellte Werte sind dann nat&uuml;rlich futsch. Wenn man den
+Einfluss von Kodeerg&auml;nzungen kontrollieren will, kann man dies
+vor und nach der &Auml;nderungen mit objdump machen, mit den
+richtigen Parametern kann man sich die Adressverteilung anzeigen
+lassen.<BR>Die Implementierung des EEPROM auf den PC kontrolliert
+noch nicht, ob nicht 1K bzw. 2K an Daten &uuml;berschritten wird. Die
+Funktionen f&uuml;r den Zugriff aber schon, dh im Moment muss der
+Programmierer selbst darauf achten, das seine Daten nicht mehr als
+ein Kilobyte werden. (Sp&auml;testens der avg-gcc wird dann aber
+meckern). 
+</P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><B>Funktionen:</B></P>
+<P STYLE="margin-bottom: 0cm"><B>Nur in eeprom-emu_pc.c sichtbare
+Funktionen</B></P>
+<P STYLE="margin-bottom: 0cm">store_parameter() - Speichern von
+Informationen im simulierten EEPROM</P>
+<P STYLE="margin-bottom: 0cm">load_parameter() - Laden von
+Informationen aus dem simulierten EEPROM</P>
+<P STYLE="margin-bottom: 0cm"><B>Zugriffsfunktionen f&uuml;r den PC
+(Identisch zu denen von WinAVR)</B></P>
+<P STYLE="margin-bottom: 0cm">eeprom_read_byte()</P>
+<P STYLE="margin-bottom: 0cm">eeprom_write_byte()</P>
+<P STYLE="margin-bottom: 0cm">eeprom_read_word()</P>
+<P STYLE="margin-bottom: 0cm">eeprom_write_word()</P>
+<P STYLE="margin-bottom: 0cm">eeprom_write_block()</P>
+<P STYLE="margin-bottom: 0cm">eeprom_read_block()</P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><FONT SIZE=3><B>Dateien:</B></FONT></P>
+<P STYLE="margin-bottom: 0cm"><FONT SIZE=3>eeprom-emu.h Include
+Dateinamen mit Funktionsparameter</FONT></P>
+<P STYLE="margin-bottom: 0cm"><FONT SIZE=3>eeprom-emu_pc.c Funktionen
+fuer den ct-Sim</FONT></P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm; font-style: normal"><BR>
+</P>
+</BODY>
+</HTML>
Index: Documentation/Abstandssensor-Kalibrierung.html
===================================================================
RCS file: Documentation/Abstandssensor-Kalibrierung.html
diff -N Documentation/Abstandssensor-Kalibrierung.html
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ Documentation/Abstandssensor-Kalibrierung.html	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,184 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252">
+	<TITLE></TITLE>
+	<META NAME="GENERATOR" CONTENT="OpenOffice.org 2.1  (Win32)">
+	<META NAME="CREATED" CONTENT="20060508;19143406">
+	<META NAME="CHANGEDBY" CONTENT="Achim Pankalla">
+	<META NAME="CHANGED" CONTENT="20070401;19571565">
+	<STYLE>
+	<!--
+		@page { size: 21cm 29.7cm }
+		H2.western { font-family: "Albany", sans-serif; font-size: 14pt; font-style: italic }
+		H2.cjk { font-family: "HG Mincho Light J"; font-size: 14pt; font-style: italic }
+		H2.ctl { font-family: "Arial Unicode MS"; font-size: 14pt; font-style: italic }
+	-->
+	</STYLE>
+</HEAD>
+<BODY LANG="de-DE" DIR="LTR">
+<H2 CLASS="western">Abstandssensorkalibrierung mittels EEPROM-Tabelle</H2>
+<P STYLE="margin-bottom: 0cm">Version 0.7 (03-April-2007)<BR><BR>Peter
+Jonas (peter.jonas@xxxxxx) 
+</P>
+<P STYLE="margin-bottom: 0cm">Achim Pankalla (achim.pankalla@xxxxxx)</P>
+<HR>
+<P ALIGN=CENTER><U><B>Einleitung</B></U></P>
+<P ALIGN=LEFT>Mit diesem Behaviour kann mittels einer EEPROM-Tabelle
+die Kalibrierung der Distanzsensoren durchgef&uuml;hrt werden. Dies
+gilt auch f&uuml;r den ct-bot, sowohl als realen Bot auch als f&uuml;r
+den im Ct-Sim. Der Vorteil dieses Verfahrens sind. <BR>1) Beruhigte
+Messwerte (Nat&uuml;rlich nur beim realen Bot, im Sim rauschen die
+Werte (noch) nicht.)<BR>2) Beide Sensoren liefern bei gleichen
+Distanzen identische Werte.<BR>3) Die Messwerte liegen fest, dh. Man
+kann ohne Probleme im Code bestimmte Abst&auml;nde abfragen. <BR><BR><BR>
+</P>
+<P ALIGN=CENTER><U><B>Einstellungen im Quellkode</B></U></P>
+<P ALIGN=LEFT>Die Kalibrierung wird &uuml;ber mehrere <I>#defines</I>
+in der Datei available_behaviours<I>.h</I> und <I>sensor_correction.h</I>
+gesteuert: 
+</P>
+<P ALIGN=CENTER><BR><FONT COLOR="#ff0000">#define
+<FONT SIZE=3><FONT FACE="Times New Roman, serif">BEHAVIOUR_CALIBRATE_DSENSORS</FONT></FONT></FONT></P>
+<P ALIGN=LEFT>Wenn diese Zeile aktiviert ist, geht der Roboter in den
+Kalibrierungsmodus. Diese Einstellung ist nur einmal notwendig, um
+die Kalibrierung der Sensoren durchzuf&uuml;hren. Im sp&auml;teren
+normalen Roboterbetrieb ist diese Zeile zu deaktivieren. 
+</P>
+<P ALIGN=CENTER><BR><FONT COLOR="#ff0000">#define
+<FONT FACE="Times New Roman, serif">SENSOR_TABLE_AVAILABLE</FONT></FONT><BR><BR><BR>
+</P>
+<P ALIGN=LEFT>Wenn diese Zeile aktiviert ist, wird im normalen
+Roboterbetrieb eine im EEPROM abgelegte Tabelle f&uuml;r die
+Linearisierung der Distanzsensoren benutzt. Wenn diese Zeile
+deaktiviert ist, wird die urspr&uuml;ngliche Linearisierung der
+Sensoren &uuml;ber die einfache Hyperbelfunktion durchgef&uuml;hrt. 
+</P>
+<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><FONT COLOR="#ff0000"><FONT FACE="Times New Roman, serif"><FONT SIZE=3><B>#define</B>
+SAMPLES_PER_AVG</FONT></FONT></FONT></P>
+<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT COLOR="#000000"><FONT FACE="Times New Roman, serif"><FONT SIZE=3>Anzahl
+der Messungen pro Abstand, die zur Mittelwertberechung genutzt
+werden.</FONT></FONT></FONT></P>
+<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><FONT COLOR="#ff0000"><FONT FACE="Times New Roman, serif"><FONT SIZE=3><B>#define</B>
+<FONT FACE="Courier New, monospace">SC_STARTDIST</FONT></FONT></FONT></FONT></P>
+<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT COLOR="#000000"><FONT FACE="Times New Roman, serif"><FONT SIZE=3>Abstand
+in Zentimeter, bei dem die Messreihe beginnt. Dieser Wert muss dort
+liegen, wo die Sensoren ihre hoechsten Werte liefern und dann den Bot
+noch ein kleines Stuck weiter. Acht Zentimeter hat sich als guter
+Wert erwiesen. </FONT></FONT></FONT>
+</P>
+<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><FONT COLOR="#ff0000"><FONT FACE="Times New Roman, serif"><FONT SIZE=3><B>#define</B>
+<FONT FACE="Courier New, monospace">SC_STEPWIDTH</FONT></FONT></FONT></FONT></P>
+<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT COLOR="#000000"><FONT FACE="Times New Roman, serif"><FONT SIZE=3>Abstand
+zwischen den Messpunkten. Mit der aktuellen Auswertungsfunktion wird
+dieser Wert halbiert und man erh&auml;lt so die Genauigkeit der
+ermittelten Werte. Bei mir hat sich der Wert 4 als gut erwiesen. Der
+Bot kann dann auf 20mm die Werte aufl&ouml;sen und diese sind auch
+sehr stabil. Der Wert entspricht nat&uuml;rlich Zentimeter. Man
+sollte aber auf eine Gesamtdistanz von mindestens 80cm kommen.
+Notfalls den folgenden Wert erh&ouml;hen.</FONT></FONT></FONT></P>
+<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><FONT COLOR="#ff0000"><FONT FACE="Times New Roman, serif"><FONT SIZE=3><B>#define</B>
+<FONT FACE="Courier New, monospace">SC_NO_OF_STEPS</FONT></FONT></FONT></FONT></P>
+<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT COLOR="#000000"><FONT FACE="Times New Roman, serif"><FONT SIZE=3>Dieser
+Wert legt fest, wie viele Messungen gemacht werden. Man sollte nicht
+uber eine Gesamtdistanz von ca. 80cm kommen, da die Sensoren mehr
+nicht hergeben und Werte zu dicht beieinander liegen. Der Wert gibt
+die Anzahl der Messungen ohne Startwert an, dh. F&uuml;r insgesamt 16
+Messungen, muss man hier 15 eintragen. Es nur ein <U>Maximum von 29</U>
+zul&auml;ssig.</FONT></FONT></FONT></P>
+<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P ALIGN=CENTER><U><B>Kalibrierung</B></U></P>
+<P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none">Eine
+wichtige Bemerkung vorweg, bei der Aufnahme der Werte m&uuml;ssen Sie
+nat&uuml;rlich sehr exakt sein. Je genauer Sie arbeiten, um so besser
+das Ergebnis. Gerade in den Werten nahe der 8cm bedeutet ein
+ungenauer Abstand auch entsprechend abweichende Werte, da hier die
+Sensorkurve sehr steil verl&auml;uft. Sorgen sie au&szlig;erdem
+daf&uuml;r, das der Bot immer senkrecht auf ihren Messabstand, am
+besten eine ebene Wand, schaut.</P>
+<P ALIGN=LEFT><BR>Im Kalibriermodus sieht man auf dem Display
+zunaechst ein Menue. Man wird aufgefordert, den Roboter auf eine
+bestimmte Distanz in cm zur Wand zu stellen. Wenn man das gemacht
+hat, drueckt man die Taste &quot;2&quot; auf der Fernbedienung. (Kann
+beim erstenmal zweimal notwendig sein.) Es wird nun aus den folgenden
+vorgegebenen Zahl von Me&szlig;werten pro Sensor ein Mittelwert
+gebildet. Dieser Wert wird dann in den beiden Tabellen (links und
+rechts getrennt) im EEPROM abgelegt. Danach wird man aufgefordert,
+eine neue Distanz einzustellen und der Vorgang beginnt von vorn.
+<BR><BR>Nach SC_NO_OF_STEPS Messungen ist die Kalibrierung
+abgeschlossen. Die Sensorwerte fuer die SC_NO_OF_STEPS Abstaende sind
+nun im EEPROM. (Meldung in Zeile drei des Displays) Man kann aber mit
+den Tasten &bdquo;1&ldquo; (zurueck) und &bdquo;3&ldquo; (vor)
+nochmal zu einzelnen Werten gehen und diese nochmal wiederholen,
+solang der letzte Wert nicht schon gemessen wurde.<BR>Mit der Taste
+&quot;0&quot; kommt man in den normalen Roboterbetrieb zurueck und
+kann die Kalibrierung gleich testen (SENSOR_TABLE_AVAILABLE muss
+dafuer definiert sein). Dies ist auch bei nicht vollstaendiger
+Kalibrierung moeglich aber nicht sinnvoll, wenn man die
+EEPROM-Tabelle fuer die Sensoren nutzen moechte. Zu beachten ist, das
+die Normale Belegung der Zahlentasten nicht gegeben ist, da diese
+fuer Kalibrierung genutzt wurden.</P>
+<P ALIGN=LEFT>Waehrend des Kalibrierungsvorgangs, zeigt die dritte
+Zeile des Displays immer die aktuellen Messwerte an (waehrend des
+Kalibrierungsvorgangs, MWert) oder das gemittelte Ergebnis an
+(EWert). Die Anzahl der Messungen pro Entfernung legt uebrings das
+<I>#define <FONT COLOR="#000000"><FONT SIZE=2><FONT FACE="Courier New, monospace">SAMPLES_PER_AVG</FONT></FONT></FONT></I><FONT COLOR="#000000">
+<FONT FACE="Times New Roman, serif">fest, dies befindet sich in
+<I>calibrate_sensors.c.</I></FONT></FONT><BR>Wenn die Sensoren im
+Normalbetrieb Distanzen messen, die au&szlig;erhalb des eingestellten
+Distanzbereiches der EEPROM-Tabelle liegen, wird der Werte aus der
+Konstanten <FONT SIZE=2><FONT FACE="Courier New, monospace"><FONT COLOR="#000000">SENS_IR_INFINITE</FONT></FONT></FONT>
+ausgegeben. <BR><BR>Im EEPROM werden fuer den Distanzbereich
+SC_NO_OF_STEPS Messwerte pro Sensor gespeichert. Da die Sensoren
+jedoch auch Werte fuer Distanzen zwischen den gemessenen Distanzen
+ausgeben, wird im laufenden Betrieb des Roboters zwischen den
+Stuetzwerten interpoliert, um fuer jeden Sensorwert einen mm-Wert
+liefern zu koennen. <BR><BR>Beim Flashen mu&szlig; man aufpassen,
+dass die Tabelle im EEPROM nicht ueberschrieben wird, deshalb sollte
+man sie unmittelbar nach der Kalibrierung zunaechst sichern. Bei
+PonyProg zb. Mit der Funktion <I>Command-&gt;Read Data</I> und diese
+dann auch auf der Platte sichern. <BR>Um spaeter ein Programmupdate
+zu flashen, liest man die Programm-Hexdatei mit &quot;Open Program
+(Flash) File ...&quot; ein und flasht es dann mit &quot;Write Program
+(Flash)&quot; und dann muss man die EEPROM-Datei wieder neu
+aufspielen, da diese durch das Flashen des Programms geloescht
+werden<BR>Speichert man den EEPROM-Bereich im BIN-Format, kann diese
+Datei direkt auch fuer den ct-Sim nutzen.</P>
+<P ALIGN=CENTER><B>Nutzung der Kalibrierdaten</B></P>
+<P ALIGN=LEFT>Hat man das Define <I>SENSOR_TABLE_AVAILABLE</I> in
+ctbot.h gesetzt, so werden die Daten in der Funktion <I>sensor_abstand</I>
+in <I>sensor.c</I> genutzt, um aus den aktuellen Messwerten der
+Abstandssensoren moeglichst genaue und ruhige Abstaende zu bestimmen.
+Dafuer wird beim ct-bot nochmal die Genauigkeit der Werte durch eine
+Mittlung ueber mehrere Werte erhoeht.<BR>Beim Simulator ist die
+Nutzung der Kalibrierdaten auch moeglich. In dem man die
+EEPROM-Simulation benutzt und die Werte vom realen Bot in einer Datei
+im BIN-Format ablegt und diese ins entsprechende Verzeichnis ablegt.
+(Siehe auch Docu fuer parameter-low).</P>
+<P ALIGN=CENTER><B>Vorteile und Nachteile der Kalibrierung</B></P>
+<P ALIGN=LEFT>Vorteile <BR>- Ueber Tabellen im EEPROM liefern die
+Distanzsensoren stabile werte. <BR>- Beide Sensoren sind nun
+kalibriert und liefern deshalb die gleichen Abstandswerte f&uuml;r
+die gleichen Entfernung, sind aber weiter unabh&auml;ngig
+voneinander! <BR><BR>Nachteile<BR>- Eingeschr&auml;nkte Aufl&ouml;sung
+der Distanzwerte (bei mir 10mm Aufl&ouml;sung noch super ruhig)<BR>-
+Kleinster Kalibrierabstand ist 2cm, damit erreicht man eine Aufl&ouml;sung
+von 1cm (10mm). <BR>- Man muss die Anleitung lesen ;-) 
+</P>
+<P ALIGN=CENTER><FONT COLOR="#ff0000"><I><U><B>ACHTUNG!</B></U></I></FONT></P>
+<P ALIGN=LEFT>Fuer die Nutzung der Kalibrierung ist es wichtig, das
+die Konstanten (DEFINEs) immer die Werte haben, die auch bei der
+Aufnahme der Daten aktuell waren. Die neue Version der
+Kalibrierfunktion (Docu-Version ab 0.5) ist nicht kompatible mit
+BIN-Dateien vorheriger Versionen.</P>
+</BODY>
+</HTML>