Bonjour, Je suis en BTS Électroniques et communications en 2ème année.
J'ai un projet à faire à la fin pour mon BTS.
J'ai un PIC16F88 à programmer pour faire tourner un moteur à courant continu avec une vitesse variable.
On ma fournis ce programme à compléter ci-dessous:
Code:/* ------------------------------------------------------------ Commande de la CARTE MOTEURS Z et LASER Commande du Laser - Horloge interne 8 Mhz active - Master Reset interne actif version 2.2 du 29/08/2014 ---------------------------------------------------------------------- */ // Déclaration des variables //--------------------------------------- char ENTREES; // Tampon Lecture des Entrées XA, XB, YA et YB // Déclaration d'équivalence des entrées et des sorties //--------------------------------------- #define L_On_OFF PORTA.F6 // Commande On / Off du Laser #define L_Auto_Man PORTA.F7 // Commande Automatique / Manuelle du Laser // Déclaration d'équivalence des constantes //--------------------------------------- #define ARRET 0b000000 // Code Laser - ARRET Total #define COUPE 0b010000 // Code Laser - Actif et Laser Eteint #define ACTIF 0b110001 // Code Laser - Actif avec émission lumière #define HORIZON1 0b001111 // Code plateau horizontal - ARRET freiné VDD #define HORIZON2 0b000000 // Code plateau horizontal - ARRET freiné Masse // S/P Initialisation //---------------------------------------- void init() { OPTION_REG = 0b11111111; // Pull-Up inactives IOCA = 0b000000; // Config IRQ inactives ANSEL = 0; // Conversion CAN inactive CMCON0 = 0b00000111; // Comparateur analogique inactif, // toutes entrées numériques TRISA = 0b001000; // PORT A = 5 entrées + MCLR TRISB = 0b111111; // PORT B = 8 entrées PORTA = 0b000001; // Arrêt total - pas de Laser - TEST LED VISUE delay_ms(2000); // Temporisation de 2s PORTA = 0; // Extinction de la LED delay_ms(500); // Temporisation de 0,5s } // S/P Lecture des entrées //---------------------------------------- void lecture() { ENTREES = PORTB; // lecture des entrées physiques ENTREES = ENTREES & 0b001111; // Masquage des entrées inactives } // S/P Freinage du plateau //---------------------------------------- void RIEN() { PORTA = ARRET; // Arrêt total de la diode Laser //delay_ms(1); // Temporisation facultative } // S/P Montée du plateau //---------------------------------------- void COUPER() { PORTA = COUPE; // Diode active et Laser éteint //delay_ms(2000); // Temporisation facultative de 2s } // S/P Descente du plateau //---------------------------------------- void EMISSION() { PORTA = ACTIF; // Diode active et Laser actif //delay_ms(1); // Temporisation facultative } // S/P Détection Horizon //---------------------------------------- void TEST() { lecture(); // Lecture des entrées if (ENTREES == HORIZON1 || ENTREES == HORIZON2) // Plateau " Correct ? " { EMISSION(); // Emission Laser } else COUPER(); // Diode active et Laser éteint } //---------------------------------------- //---------------------------------------- // Programme Principal - version 2.2 du 29/08/2014 //----------------------------------------- //---------------------------------------- void main() { OSCCON = 0b01111000; // Horloge interne 8 MHz init(); // Initialisation while(1) // Boucle infinie { if (L_On_OFF == 1) // Laser " Arrêt ? " { RIEN(); // Arrêt Total } else if( L_Auto_Man == 1 ) // Laser " Manuel ? " { EMISSION(); // Emission Laser } else TEST(); // Emission si plateau correct } } // C'est fini !
Je veut pas que vous me donniez les réponses ! juste m'aider à comprendre comment m'y prendre car je suis un débutant.
Merci pour votre réponse !
-----