summaryrefslogtreecommitdiffstats
path: root/source/ct-Bot/mcu/ena.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/ct-Bot/mcu/ena.c')
-rw-r--r--source/ct-Bot/mcu/ena.c128
1 files changed, 128 insertions, 0 deletions
diff --git a/source/ct-Bot/mcu/ena.c b/source/ct-Bot/mcu/ena.c
new file mode 100644
index 0000000..17ee859
--- /dev/null
+++ b/source/ct-Bot/mcu/ena.c
@@ -0,0 +1,128 @@
+/*
+ * c't-Bot
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ * This program is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307, USA.
+ *
+ */
+
+/*! @file ena.c
+ * @brief Routinen zur Steuerung der Enable-Leitungen
+ * @author Benjamin Benz (bbe@heise.de)
+ * @date 26.12.05
+*/
+
+#ifdef MCU
+
+#include <avr/io.h>
+#include "ena.h"
+#include "ct-Bot.h"
+#include "shift.h"
+#include "mouse.h"
+
+#ifdef ENA_AVAILABLE
+
+
+uint8 ena =0; /*!< Sichert den Zustand der Enable-Leitungen */
+
+/*!
+ * Initialisiert die Enable-Leitungen
+ */
+void ENA_init(){
+ DDRD |= 4;
+ shift_init();
+ ENA_set(0x00);
+}
+
+
+//void maus_sens_write(int8 adr, uint8 data);
+/*!
+ * Schaltet einzelne Enable-Transistoren an
+ * andere werden nicht beeinflusst
+ * Achtung, die Treiber-Transistoren sind Low-Aktiv!!!
+ * ENA_on schaltet einen Transistor durch
+ * Daher zieht es die entsprechende ENA_XXX-Leitung (mit Transistor) auf Low und NICHT auf High
+ * @param enable Bitmaske der anzuschaltenden LEDs
+ */
+void ENA_on(uint8 enable){
+// uint8 i;
+ // Maussensor und MMC-Karte haengen zusammen
+ if (enable == ENA_MOUSE_SENSOR){ // Maus sensor an, MMC aus
+
+// if ((ena & ENA_MMC) ==0){ // War die MMC-Karte an?
+ ena |= ENA_MMC; // MMC aus
+
+// PORTD |= 4; // Fliplops takten
+// PORTD &= ~4;
+//
+// for (i=0; i<200; i++){ // Ein paar flanken schocken, damit auch sicher danach ruhe ist
+// PORTB &= ~(1<<7);
+// PORTB |= (1<<7);
+// }
+// }
+
+ // Und dann den Maussensor an
+ ena &= ~ENA_MOUSE_SENSOR;
+ } else if (enable == ENA_MMC) { // Maus sensor aus, MMC aan
+ #ifdef MAUS_AVAILABLE
+ if ((ena & ENA_MOUSE_SENSOR) ==0){ // War der Maussensor an?
+ maus_sens_highZ(); // Der Maussensor muss die Datenleitung freigeben
+ ena |= ENA_MOUSE_SENSOR; // Maus aus
+ }
+ #endif
+ ena &= ~enable;
+ } else {
+ ena |= enable;
+ }
+
+ ENA_set(ena);
+
+ if ( (enable & (ENA_MOUSE_SENSOR | ENA_MMC)) != 0 ){
+ PORTD |= 4; // Fliplops takten
+ PORTD &= ~4;
+ }
+}
+
+/*!
+ * Schaltet einzelne Enable-Transistoren aus
+ * andere werden nicht beeinflusst
+ * Achtung, die Treiber-Transistoren sind Low-Aktiv!!!
+ * ENA_off schaltet einen Transistor ab
+ * Daher zieht es die entsprechende ENA_XXX-Leitung (mit Transistor) auf High und NICHT auf Low
+ * @param enable Bitmaske der anzuschaltenden LEDs
+ */
+void ENA_off(uint8 enable){
+ ena &= ~enable;
+ ENA_set(ena);
+
+ if ( (enable & (ENA_MOUSE_SENSOR | ENA_MMC)) != 0 ){
+ PORTD |= 4; // Fliplops takten
+ PORTD &= ~4;
+ }
+}
+
+/*!
+ * Schaltet die Enable-Transistoren
+ * Achtung, die Treiber-Transistoren sind Low-Aktiv!!!
+ * ENA_set bezieht sich auf die Transistor
+ * Daher zieht es die entsprechende ENA_XXX-Leitung auf ~enable
+ * @param LED Wert der gezeigt werden soll
+ */
+void ENA_set(uint8 enable){
+ ena=enable;
+ shift_data(~enable,SHIFT_REGISTER_ENA);
+}
+
+#endif
+#endif