From b090fa7757384b3d8a5e4ef4bdf841d338b070d9 Mon Sep 17 00:00:00 2001 From: sicarius Date: Tue, 13 Feb 2007 19:55:03 +0000 Subject: Code-Work @ lowlevel --- source/AVR_Studio/Soccer/hal/maussensor.h | 125 ++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100755 source/AVR_Studio/Soccer/hal/maussensor.h (limited to 'source/AVR_Studio/Soccer/hal/maussensor.h') diff --git a/source/AVR_Studio/Soccer/hal/maussensor.h b/source/AVR_Studio/Soccer/hal/maussensor.h new file mode 100755 index 0000000..2abb8bd --- /dev/null +++ b/source/AVR_Studio/Soccer/hal/maussensor.h @@ -0,0 +1,125 @@ +#ifndef _MAUSSENSOR_H_ +#define _MAUSSENSOR_H_ + +#include "../global.h" + +// Wir klauen die Mausdefinitionen beim CT-Bot ;) +#define ADNS2610 /*!< Welcher Sensortyp? ADNS2610 oder 2620 */ +#ifdef ADNS2610 + /* ADNS2610 */ + #define MOUSE_CONFIG_REG 0x00 /*!< Reset, Power Down, Forced Awake, etc */ + #define MOUSE_STATUS_REG 0x01 /*!< Product ID, Mouse state of Asleep or Awake */ + #define MOUSE_DELTA_Y_REG 0x02 /*!< Y Movement */ + #define MOUSE_DELTA_X_REG 0x03 /*!< X Movement */ + #define MOUSE_SQUAL_REG 0x04 /*!< Measure of the number of features visible by the sensor */ + #define MOUSE_MAX_PIXEL_REG 0x05 /*!< Maximum Pixel value in current frame.*/ + #define MOUSE_MIN_PIXEL_REG 0x06 /*!< Minimum Pixel value in current frame.*/ + #define MOUSE_PIXEL_SUM_REG 0x07 /*!< This register is used to find the average pixel value.*/ + #define MOUSE_PIXEL_DATA_REG 0x08 /*!< Actual picture of surface */ + #define MOUSE_SHUTTER_UPPER_REG 0x09 /*!< The sensor adjusts the shutter to keep the average and maximum pixel values within normal operating ranges.*/ + #define MOUSE_SHUTTER_LOWER_REG 0x0A /*!< The sensor adjusts the shutter to keep the average and maximum pixel values within normal operating ranges.*/ + #define MOUSE_INVERSE_PRODUCT_ID_REG 0x11 /*!< Inverse Product ID */ + + #define MOUSE_CFG_RESET 0x80 /*!< Reset Circuit */ + #define MOUSE_CFG_POWERDOWN 0x40 /*!< Power Down analog Circuit */ + #define MOUSE_CFG_FORCEAWAKE 0x01 /*!< Keep Sensor awake */ + +#else + /* ADNS2620 */ + #define MOUSE_CONFIG_REG 0x40 /*!< Reset, Power Down, Forced Awake, etc */ + #define MOUSE_STATUS_REG 0x41 /*!< Product ID, Mouse state of Asleep or Awake */ + #define MOUSE_DELTA_Y_REG 0x42 /*!< Y Movement */ + #define MOUSE_DELTA_X_REG 0x43 /*!< X Movement */ + #define MOUSE_SQUAL_REG 0x44 /*!< Measure of the number of features visible by the sensor */ + #define MOUSE_MAX_PIXEL_REG 0x45 /*!< Maximum Pixel value in current frame.*/ + #define MOUSE_MIN_PIXEL_REG 0x46 /*!< Minimum Pixel value in current frame.*/ + #define MOUSE_PIXEL_SUM_REG 0x47 /*!< This register is used to find the average pixel value.*/ + #define MOUSE_PIXEL_DATA_REG 0x48 /*!< Actual picture of surface */ + #define MOUSE_SHUTTER_UPPER_REG 0x49 /*!< The sensor adjusts the shutter to keep the average and maximum pixel values within normal operating ranges.*/ + #define MOUSE_SHUTTER_LOWER_REG 0x4A /*!< The sensor adjusts the shutter to keep the average and maximum pixel values within normal operating ranges.*/ + #define MOUSE_FRAME_PERIOD_REG 0x4B /*!< The frame period counter counts up until it overflows. */ +#endif + +// Unsere Pins vom Maussensor +#define MAUS_DDR DDRC // Die Mäuse hängen am DDRC +#define MAUS_PORT PORTC +#define MAUS_PIN PINC + +#define MAUS0_SDA 4 +#define MAUS0_SCK 6 +#define MAUS1_SDA 5 +#define MAUS1_SCK 7 + +// Konstanten fürs intialisieren +#define MAUSSENSOR0 0 +#define MAUSSENSOR1 1 + +class Maussensor +{ +private: + // Pins, an denen der Maussensor angeschlossen ist + int sda_pin; + int sck_pin; + +/*! + * Initialisiere Maussensor + */ +void maus_sens_init(void); + +/*! + * Schickt ein Lesekommando an den Sensor + * und liest ein Byte zurueck + * @param adr die Adresse + * @return das Datum + */ +uint8 maus_sens_read(uint8 adr); +uint8 maus_sens_readByte(); + +/*! Stellt sicher, dass der Maussensor nicht mehr die serielle Datenleitung treibt */ +#define maus_sens_highZ() maus_sens_write(0x77,0x00) + +/*! + * Uebertraegt ein write-Kommando an den Sensor + * @param adr Adresse + * @param data Datum + */ +void maus_sens_write(int8 adr, uint8 data); +void maus_sens_writeByte(uint8 data); + +/*! + * Liefert bei jedem Aufruf das naechste Pixel des Bildes + * Insgesamt gibt es 324 Pixel + *
+ * 18 36 ... 324
+ * .. .. ... ..
+ *  2 20 ... ..
+ *  1 19 ... 307
+ * 
+ * Bevor diese Funktion aufgerufen wird, muss maus_image_prepare() aufgerufen werden! + * @return Die Pixeldaten (Bit 0 bis Bit5), Pruefbit, ob Daten gueltig (Bit6), Markierung fuer den Anfang eines Frames (Bit7) + */ +int8 maus_image_read(void); + +/*! + * Bereitet das auslesen eines ganzen Bildes vor + */ +void maus_image_prepare(void); + +/*! + * Gibt den SQUAL-Wert zurueck. Dieser gibt an, wieviele Merkmale der Sensor + * im aktuell aufgenommenen Bild des Untergrunds wahrnimmt + */ + +public: + Maussensor(int index); + ~Maussensor(); + + uint8 GetX(); + uint8 GetY(); + uint8 GetSqual(); + +}; + +#endif + + -- cgit v1.2.3