Bonjour tout le monde,
Voilà je vous expose mon souci: J'ai trouvé sur la toile un programme d'un µC qui permet de détecter la variation d'une bobine en fonction des champs induits lorsqu'on approche un métal près de l'inductance et allume une LED. Ce n'est ni plus ni moins qu'un détecteur de métaux low cost...
Seulement voilà, le PIC utilisé est un 12F683 et moi j'aimerai adapter le programme à un PIC16F877.
Après avoir mis les bons fichiers en-têtes (*.h), adapté le noms de mes variables (qui se trouvent dans les banques), subsistent quelques erreurs...
Voici le programme:
Et voici les erreurs que j'obtiens après le Build:Code:/* ******************************************************************************* * picoDetector : an ultra simple and cheap metal detector ******************************************************************************* * * Author : Othman MESLOUH, January 2011 * * source code for mikroC PRO compiler V1.65 * feel free to use this code at your own risks * * target : PIC12, oscillator in HS mode, watchdog enabled * * PIC PIN Assignemnt : * * GP0 : detect LED indicator * GP1 : calibrate LED indicator * GP2 : NC * GP3 : NC * GP4, GP5 : inductor * ******************************************************************************* */ #define MAXTRY 15 // number of watchdog restart to calibrate loop counter #include <pic.h> #include <stdio.h> #include "OUTILS.H" unsigned char ctr ; // number of loops between two watchdog resets unsigned char previous ; // previous value of ctr unsigned char calibr ; // calibration value when oscillator runs free unsigned char restarts ; // number of watchdog restarts unsigned char en ; // enable flag, allows detection /* * main loop */ void main() { unsigned char i ; /* * configure PORTA (ex GPIO) as digital port */ //CMCON0 = 7 ; //ANSEL = 0 ; //TRISIO = 0 ; //GPIO = 0 ; TXREG = 7 ; ADCON1 = 0 ; TRISA = 0 ; PORTA = 0 ; /* * power up ? */ if(STATUS.NOT_TO) { /* * yes, init variables */ restarts = 0 ; calibr = 1 ; } /* * watchdog reset counter */ if(restarts < 255) restarts++ ; /* * if counter differs too much from calibration value */ if((previous ^ ctr) > calibr) { /* * turn detect LED on */ PORTA.F0 = en ; //GPIO.F0 = en ; /* * if not on power up */ if(STATUS.NOT_TO == 0) { /* * while in calibration mode */ if(restarts < MAXTRY) { /* * shift calibration value * and wait a little bit */ calibr <<= 1 ; Delay_ms(5) ; } } else { /* * turn detect LED off */ PORTA.F0 = 0 ; //GPIO.F0 = 0 ; } } /* * save last counter */ previous = ctr ; /* * is calibration over ? */ if(restarts > MAXTRY) { /* * yes, turn calibrate LED off * and set enable flag */ PORTA.F1 = 0 ; //GPIO.F1 = 0 ; en = 1 ; } else { /* * no, turn calibrate LED on * and clear enable flag */ PORTA.F1 = 1 ; //GPIO.F1 = 1 ; en = 0 ; } /* * set watchdog prescaler */ OPTION_REG = 0b11111001 ; /* * start counter, to be interrupted by watchdog */ ctr = 0 ; for(;;) { ctr++ ; } }
Pourriez-vous m'aider?Code:Clean: Deleting intermediary and output files. Clean: Deleted file "I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.cce". Clean: Done. Executing: "d:\automatique\Picc\BIN\PICC.EXE" -C -E"picoDetector.cce" "picoDetector.c" -O"picoDetector.obj" -I"D:\Automatique\Picc\include" -Q -MPLAB -16F877 -Zg9 -O Error[000] I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.c 62 : struct/union required Error[000] I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.c 62 : logical type required Error[000] I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.c 84 : struct/union required Error[000] I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.c 84 : illegal conversion Error[000] I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.c 90 : struct/union required Error[000] I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.c 90 : illegal use of void expression Warning[000] I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.c 102 : function declared implicit int Error[000] I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.c 110 : struct/union required Error[000] I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.c 110 : illegal conversion Error[000] I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.c 129 : struct/union required Error[000] I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.c 129 : illegal conversion Error[000] I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.c 139 : struct/union required Error[000] I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.c 139 : illegal conversion Error[000] I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.c 147 : undefined identifier: OPTION_REG Warning[000] I:\Projet - Détecteur de métaux\Suite\Others\076-PICODETECTOR-project\picodetect\picoDetector.c 157 : unused variable definition: i (from line 42) Halting build on first failure as requested. BUILD FAILED: Thu Jan 06 15:53:41 2011
Merci d'avance.
-----