/* ascenseur.c */ /* es - Input/Output general purpose board. {{{ * * Copyright (C) 2007 Christophe Le Blanc * * Robot APB Team/Efrei 2006. * Web: http://assos.efrei.fr/robot/ * Email: robot AT efrei DOT fr * * 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. * * }}} */ #include "common.h" #include "ascenseur.h" #include "modules/utils/utils.h" #include "io.h" #include "modules/proto/proto.h" #define OCR_AS OCR1A #define OCR_ROULEAU OCR1B /* +AutoDec */ /* -AutoDec */ uint16_t ascenseur_temps; /* Initialise l'ascenseur. */ void ascenseur_init (void) { /* initialisation des sorties sur le port B pour moteur et turbines */ DDRB |= _BV(7) | _BV(6) | _BV (5) | _BV (4); /* mode PWM = 0 */ OCR_AS = 0; /* vitesse moteur barillet nulle */ OCR_ROULEAU = 0; /* vitesse moteur rouleau nulle */ utils_delay_us ( 1 ); /* attente_ d'1 µs pour la puiss_barillet */ } /* Fait bouger l'ascenseur. */ // vitesse : 0-256 <=> 0% - 100% // temps : 0-256 en unites de 17,6ms // sens_rotat : true ou false void ascenseur_bouge (uint8_t vitesse, uint8_t temps, uint8_t sens_rotat) { ascenseur_temps= (uint16_t) temps*4; OCR_AS = 0; utils_delay_us ( 1 ); /* attente_ d'1 µs pour la puiss_barillet */ if (sens_rotat) { PORTB |= _BV(4); } else { PORTB &= ~_BV(4); } utils_delay_us ( 1 ); /* attente_ d'1 µs pour la puiss_barillet */ OCR_AS = (uint16_t) vitesse * 4; } /* Met à jour l'état de l'ascenseur. Il faut appeler cette fonction toute les * 4.44ms. */ void ascenseur_update () { if (ascenseur_temps) { ascenseur_temps--; if (ascenseur_temps==0) { OCR_AS=0; } } } /* Fait bouger le rouleau */ // vitesse : 0-256 <=> 0%-100% void rouleau_bouge (uint8_t vitesse) { OCR_ROULEAU = vitesse; }