Bonjour à tous,
pour asservir un moteur en position, j'ai mis sur son axe une roue codeuse (récuperée sur un magnétoscope ...) et je détécte le passage d'un des huit éléments réflichissants avec un petit capteur constitué d'une diode IR et d'un phototransistor ... j'éspère que vous me comprendrez, ce n'est pas très clair, mais le problème n'est pas là. Tout ce qu'il faut savoir, c'est qu'en sortie du capteur, j'ai un signal carré d'une fréquence d'à peu près 2Hz. Je veux compter le nombre de front montant de ce signal, j'ai donc utilisé le timer0 du pic en dirigeant la sortie du capteur vers l'entré T0CKI... Mais voilà, seulement 1 front sur deux (et encore, je n'en suis pas tout à fait sûr ...) est comptabilisé dans la valeur du timer0 ... Pourtant, le signal est bien net, compris entre 0 et 5V ...
Je mets ici le prog qui doit faire fonctionner le moteur (ce prog devrait se contenter de faire faire un tour au moteur dans un sens puis de revenir en arrière sachant que sur la roue codeuse, il y a 8 surfaces réflichissantes)
Donc, avis aux adeptes du timer0, moi c'est la première fois que je m'en sers ... lol#include <16f876a.h>
#define use_portb_lcd TRUE
#fuses XT, NOPROTECT, NOWDT, NOLVP
#use delay(clock=4000000)
#include <lcd.c>
#define motm PIN_C3
#define motp PIN_C4
#define nbrTour 1
void main(void)
{
int nrtcc;
lcd_init();
setup_timer_0(RTCC_DIV_2 | RTCC_EXT_L_TO_H);
nrtcc=nbrTour*8;
printf(lcd_putc, "\f Bonjour");
while(1)
{
set_timer0(0);
output_high(motm);
output_low(motp);
while(get_timer0()<=nrtcc)
{
printf(lcd_putc, "\f1) timer0 : %i", get_timer0());
}
set_timer0(0);
output_high(motp);
output_low(motm);
while(get_timer0()<=nrtcc)
{
printf(lcd_putc, "\f2) timer0 : %i", get_timer0());
}
}
}
Merci de votre aide
Michael
-----