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
* ...