Bonjour a tous.
voila je travaille actuellement sur un projet avec des capteur ultrason, et je suis debutant sur les pic18f
le projet consiste a utiliser 3 émetteur placé sur un pied d'un robot et 3 récepteur sur l'autre, ces capteur permettent de calculer 9 distances qui seront ensuite utiliser sous matlab pour calculer la position et l'orientation d'un pied par rapport a l'autre.
j'ai réaliser le programme avec 3 émetteur et 1 seul récepteur mais j'ai du mal pour 3 récepteur (gestion des interruption).
si quelqu'un pouvez m'aidai svp.
merci bcp.
je joins mon programme que je compile sous CCS.
/****************************** ****************************** ****************************** *******/
// Fichier de déclaration des registres internes du microcontrôleur
/****************************** ****************************** ****************************** *******/
/****************************** ****************************** ****************************** *******/
// Configuration
/****************************** ****************************** ****************************** *******/
/****************************** ****************************** ****************************** *******/
// Librairie USB CSS VERIFIER CHOSES INUTILES
/****************************** ****************************** ****************************** *******/
#define NB_CARACS 50
#define NB_ATTENTE 10
#define NB_PICS 10
#define __USB_PIC_PERIF__ 1 // USB directive for compilation
#if !defined(__PCH__)
#error USB CDC Library requires PIC18
#endif
#if __USB_PIC_PERIF__
#include <18F2550.h> // PIC18F2550 library
#fuses HSPLL,NOWDT,NOLVP,USBDIV,PLL5, CPUDIV1,VREGEN,NODEBUG,NOPROTE CT
#use delay(clock=48000000) // directive to use delay function
#endif //endif check to see which peripheral to use
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
int16 Number_of_Ticks = 65443;************************ ****************************** ****************************** *************/
// Interruption
/****************************** ****************************** ****************************** *******/
int1 A= 0;
int i=0, Value1,Value2,Value3,result;
// tempo = 9;
#int_timer1
void timer1_isr(void) {
set_timer1(Number_of_Ticks);
output_high(PIN_C0);
delay_us(10);
output_low(PIN_C0); //mise a l'etat A de la pin C0
delay_us(1700);
output_high(PIN_C1); //mise a l'etat A de la pin C0
delay_us(10);
output_low(PIN_C1); //mise a l'etat A de la pin C0
delay_us(1700);
output_high(PIN_C2); //mise a l'etat A de la pin C0
delay_us(10);
output_low(PIN_C2); //mise a l'etat A de la pin C0
delay_us(1700);
i++;
}
#int_ext
void ext_isr(void){
output_high(PIN_A5);
delay_ms(500);
Value1= i/2;
output_low(PIN_A5);
}
#int_ext1
void ext1_isr(void){
output_high(PIN_A4);
delay_ms(500);
Value2= i/2;
output_low(PIN_A4);
}
#int_ext2
void ext2_isr(void){
output_high(PIN_A3);
delay_ms(500);
Value3= i/2;
output_low(PIN_A3);
}
/****************************** ****************************** ****************************** *******/
// Fonction comparaison/ mesure de temps
/****************************** ****************************** ****************************** *******/
int time_wise;
#int_ccp1
void ccp_isr(int)
{
time_wise = CCP_2- CCP_1; // output_A(PIN_A0)
}
/****************************** ****************************** ****************************** *******/
// Fonction conversion
/****************************** ****************************** ****************************** *******/
void init_port(void){ // Fonction Initialisation des ports ****************************** ********
setup_adc(ADC_CLOCK_INTERNAL); // reglage de l'horloge de conversion
set_tris_b(0xff); //tout le port B en entrée
set_tris_a(0x00); //tout le port A en sortie
setup_adc_ports(AN0_TO_AN9); // configuration du port d'entré ici B3)
}
void init_can(void) { // Fonction Initialisation du convertisseur***************** *********************
set_adc_channel(AN0_TO_AN9);
}
int convertir ( unsigned char channel) { // Fonction Initialisation du convertisseur***************** *********************
int result;
set_adc_channel(AN0_TO_AN9);
READ_ADC(ADC_START_AND_READ);
result = READ_ADC(ADC_START_AND_READ); //
output_bit(PIN_b0,result);
}
/****************************** ****************************** ****************************** ****************************** */
// Fonction Principale
/****************************** ****************************** ****************************** ****************************** */
void main(){
char chaine[NB_CARACS];
setup_adc_ports(AN0_TO_AN9); //pas d'entree/sortie analogique _ sab
setup_spi(FALSE); //pas d'utilisation du SPI
setup_wdt(WDT_OFF); //pas de watchdog
setup_timer_0(RTCC_OFF); //pas d'utilisation du Timer0
setup_timer_2(T2_DISABLED,0,1) ; //pas d'utilisation du Timer2
setup_timer_3(T3_DISABLED); //pas d'utilisation du Timer3
setup_comparator(NC_NC_NC_NC); //pas d'utilisation des comparateur
setup_vref(FALSE);
setup_low_volt_detect(FALSE);
setup_oscillator(FALSE);
set_tris_a(0x00); //tout le port A en sortie
set_tris_b(0xff); //tout le port B en entrée
setup_timer_1(T1_INTERNAL|T1_D IV_BY_1); //Paramétrage du prescaler du timer 1
usb_cdc_init(); // Initialisation de l'USB;
usb_init();
// Declenchement du timer ****************************** ****************************** **************/
set_timer1(Number_of_Ticks); //Paramétrage du timer 1 à Number_of_Ticks
enable_interrupts(int_timer1); // Activation du timer 1
// enable_interrupts(int_ccp1);
// declenchement du comparateur******************* ****************************** *******************/
//ext_int_edge(0,L_TO_H);
enable_interrupts(int_EXT); // Activation de l'interruption sur RB0
enable_interrupts(int_EXT1); // Activation de l'interruption sur RB1
enable_interrupts(int_EXT2); // Activation de l'interruption sur RB2
while (1){
usb_task();
printf(usb_cdc_putc, "\rEntrez caractere :\r\n");
//Attente de l'envoi d'un caractere : au max NB_CARACS - carac de stop
get_string_usb(chaine, NB_CARACS);
}
}
/****************************** ****************************** ****************************** *********/
-----