diff options
Diffstat (limited to 'source/ct-Bot/mcu/ena.c')
-rw-r--r-- | source/ct-Bot/mcu/ena.c | 128 |
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 |