Bonjour,
Je vous explique mon problème:
Je veux faire tourner un moteur sur une sortie MLI du 16F877, pour cela j'ai un potar de 5kohms relié à une entrée analogique. Mon potar au +5v et à la masse.
Tous fonctionne bien MAIS je voudrais que quant mon potar est au milieu mon moteur ne tourne pas (signal MLI à 0) car en ce moment il est à 50%(tout à fait normal !) et que plus je monte mon potar plus le signal MLI augmente (marche avant du moteur).
Voici pour l'instant le code que j'obtiens:
Code:#include <16F877.h> #fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT #use delay(clock=6000000) #byte porta = 0x05 #byte portb = 0x06 #byte portc = 0x07 #byte portd = 0x08 #byte porte = 0x09 #byte PR2 = 0x92 #byte CCPR1L = 0x15 #byte CCPR2L = 0x1B #byte CCP1CON = 0x17 #byte T2CON = 0x12 #byte TRISA = 0x85 #byte TRISC = 0x87 #byte TRISB = 0x86 #byte TRISD = 0x88 #byte TRISE = 0x89 unsigned int8 mesure=0x00; // declaration des fonctions // void init(void); unsigned char conversion(unsigned char voie); /*******************************************************************/ void init(void) { TRISA=0xF1; //broches RA1 RA2 RA3 en sortie TRISB=0x00; //broches toutes en sortie TRISC=0b11111011;//broche RC2 en sortie PORTA=0b011100; // initialisation des ports d'entrées et sorties // PORTB=0x00; PORTC=0x00; PR2= 0xFF; //frequence de la MLI : 250Hz T2CON=0x07; //validation timer 2 pour MLI CCP1CON=0x3F;//validation mode MLI } void main(void) { init(); delay_ms(500); setup_adc_ports(0x8E); //configuration des entrées analogiques setup_adc(ADC_CLOCK_DIV_8);//choix de l'horloge du CAN while(1) //le programme se répète perpétuellement { set_adc_channel(0); //choix entrée AN0 pour le CAN delay_us(10); //délai 10microsecondes obligatoire mesure=read_adc(); //lecture résultat conversion CCPR1L=mesure; //envoi de la valeur donnée par le CAN //directement sur la sortie MLI } }
Merci pour vos réponses
-----