Hi,
Asuro Lib V2.70 Release Candidate 2 steht zum Download bereit (siehe 1. Posting). Auch die Doku dazu. Alle Funktionen sind jetzt vollständig dokumentiert und mit Beispiel Code versehen.
Aufregende neue Funktionen gibt es nicht. Zur Diskussion stellen möchten wir aber folgendes:
Derzeit befinden sich einige Zahlen (magic numbers) in der Lib, die sich leider von Asuro zu Asuro unterscheiden. Sowas sollte nicht in der Lib stehen. Deshalb der Vorschlag,
* diese Zahlen Konstanten aus der Lib zu entfernen,
* in eine Userspezifische Header-Datei packen,
* statt der Konstanten Variablen zu benutzen
* und diese Variablen zur Laufzeit mit den userspezifischen Konstanten zu laden.
OK, dadurch gehen erst mal wieder ein paar Bytes vom RAM verloren. Auch das laden der Variablen kostet Speicher. Dafür hat man dann aber eine Lib, die für alle Nutzer gleich ist. Bei einem Update gehen die Userspezifischen Werte nicht verloren. Evtl. könnte man diese Werte auch in den EEPROM des Asuros flashen und zur Laufzeit dann auslesen.
Wie das aussehen könnte, ist in der Datei myasuro.h zu sehen. Dort stehen diese Werte drin. Allerdings werden die Werte derzeit noch nicht verwendet.
Code:
/* Tastaturabfrage */
#define MY_SWITCH_VALUE 61L /*!< Multiplikator fuer Tasterwerte */
/* Odoemtrie / Encoder */
#define MY_ODO_LIGHT_VALUE_L 160 /*!< Encoderschwellwert fuer Hell (linke Seite) */
#define MY_ODO_DARK_VALUE_L 140 /*!< Encoderschwellwert fuer Dunkel (linke Seite) */
#define MY_ODO_LIGHT_VALUE_R 160 /*!< Encoderschwellwert fuer Hell (rechte Seite) */
#define MY_ODO_DARK_VALUE_R 140 /*!< Encoderschwellwert fuer Dunkel (rechte Seite) */
/* Werte für 12 Segmente Encoder */
#define MY_GO_ENC_COUNT_VALUE 19363L /*!< GO Funktion, Divisor fuer Entfernung */
#define MY_TURN_ENC_COUNT_VALUE 177L /*!< Turn Funktion, Mutiplikator fuer Winkel */
Dazu gibt es dann auch eine Struktur von Variablen. Dort werden dann die Werte zur Laufzeit eingetragen. (Dank an sternthaler)
Bitte stört euch nicht daran, das hier long Variablen verwendet werden. Das soll nur zur Übersicht dienen. In der nächsten Release werden die Variablen soweit möglich zusammengeschrumpft.
Code:
/*
Aufbau der Datenstruktur fuer die Asuro-typischen Parameter die jeder User
fuer seinen Asuro in der Datei myasuro.h selber aendern kann.
*/
typedef struct {
/*! Faktor zur Berechnung der gedrueckten Tasten.\n
Kann von jedem Asuro-Besitzer in myasuro.h angepasst werden.\n
Der Originalwert ist \b 61L und koennten im Bereich zwischen ca. 58L und
65L schwanken. Dieser Wert gleicht Toleranzen der Wiederstaende an den
Tastern aus.
*/
long switch_value;
/*! Wert, der in der Odometrie ueberschritten werden muss, um zum
weiterzaehlen der Ticks in encoder[] zu fuehren bei aktivierter
Automatik\n
Kann von jedem Asuro-Besitzer in myasuro.h angepasst werden.\n
Die Originalwerte (links, rechts) sind \b 160.
Diese Werte sind sehr stark vom Umgebungslicht abhaengig.
Sie MUESSEN GROESSER als die Werte fuer odo_dark_value sein.
*/
unsigned int odo_light_value[2];
/*! Wert, der in der Odometrie unterschritten werden muss, um zum
weiterzaehlen der Ticks in encoder[] zu fuehren bei aktivierter
Automatik\n
Kann von jedem Asuro-Besitzer in myasuro.h angepasst werden.\n
Die Originalwerte (links, rechts) sind \b 140.
Diese Werte sind sehr stark vom Umgebungslicht abhaengig.
Sie MUESSEN KLEINER als die Werte fuer odo_dark_value sein.
*/
unsigned int odo_dark_value[2];
/*! Faktor zur Berechnung von Ticks um aus den in mm angegebenen Parameter
umzurechnen.\n
Kann von jedem Asuro-Besitzer in myasuro.h angepasst werden.\n
Der Originalwert ist \b 19363L und ist von der Anzahl der schwarz/weiss
Teilstuecke auf den Odometriescheiben abhaengig.\n
Der Originalwert wurde durch stochri ermittelt.
*/
unsigned long go_enc_count_value;
/*! Faktor zur Berechnung von Ticks um aus den in Grad angegebenen Parameter
umzurechnen.\n
Kann von jedem Asuro-Besitzer in myasuro.h angepasst werden.\n
Der Originalwert ist \b 177L und ist von der Anzahl der schwarz/weiss
Teilstuecke auf den Odometriescheiben abhaengig.\n
Der Originalwert wurde durch stochri ermittelt.
*/
long turn_enc_count_value;
} my_t;
extern volatile my_t my;
Ich denke was die Codegröße betrifft, sind wir auf dem richtigen Weg. Ein paar c-Files werden nocht gesplittet (motor.c encoder.c). Selbst der SelfTest Code ist inzwischen mit der neuen Lib nicht größer als mit der Original Lib (auch wenn ich die IRDemo und die RechteckDemo wieder dazu packe).
Hier noch ein Ausblick, was die die nächste Release enthalten wird:
* Verwendung der userspezifischen Werte. Beispiele, die diese Werte automatisch ermitteln können.
* I2C und LCD Library von raid_ox
* RC5 Decoder Funktion für Infrarot Fernbedienungen
* bessere und erweiterte Beispiele
* ...
Lesezeichen