Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Problème Servo moteur
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
en fait il faut mettre le complement et non la valeur desiree ... 56 pour avoir 200 counts !
TMR0H=56; overflow 200 coups apres
avec B=20 => 2mS
et maxi
if (Counter>99) => 200uS*100=20mS
en ne gerant plus l'init de TMR0H, tu gere sur un rollover de 256 µS
une resolution de 1µS / 20 000 .. c'est peut_etre un peu trop much..
tout depend de ce qui reste à faire comme job .
l'interrupt ne doit prendre que quelques µS toute les 200µS ..mais surement pas 70% !
tu peut eventuellement ralentir le rytme d'interrup en prenant un prediviseur Timer0 par 8
resolution 8/20000
Peut être parceque je ne renseigne plus le TMR0H = 200 ;)
en fait il faut mettre le complement et non la valeur desiree ... 56 pour avoir 200 counts !
TMR0H=56; overflow 200 coups apres
avec B=20 => 2mS
et maxi
if (Counter>99) => 200uS*100=20mS
en ne gerant plus l'init de TMR0H, tu gere sur un rollover de 256 µS
une resolution de 1µS / 20 000 .. c'est peut_etre un peu trop much..
tout depend de ce qui reste à faire comme job .
l'interrupt ne doit prendre que quelques µS toute les 200µS ..mais surement pas 70% !
tu peut eventuellement ralentir le rytme d'interrup en prenant un prediviseur Timer0 par 8
resolution 8/20000
Problème Servo moteur
Alors je suivais bien jusque la, mais ensuite je suis un peu largué...
J'ai divisé par deux avec le préscaler.
=> Résultat sur 10 secondes, je passe à 13 ce qui est plus correct...
Mais ma valeur CounterB est moins précise :
counterB = 2 1ms
counterB = 3 1,5ms
C'est pas top je trouve...
L'interruption est au mini je pense :
paulfjujo a écrit :Source du message errupt ne doit prendre que quelques µS toute les 200µS ..mais surement pas 70% !
tu peut eventuellement ralentir le rytme d'interrup en prenant un prediviseur
paulfjujo a écrit :Source du message une resolution de 1µS / 20 000 .. c'est peut_etre un peu trop much..
tout depend de ce qui reste à faire comme job .
l'interrupt ne doit prendre que quelques µS toute les 200µS ..mais surement pas 70% !
tu peut eventuellement ralentir le rytme d'interrup en prenant un prediviseur Timer0 par 8
resolution 8/20000
J'ai divisé par deux avec le préscaler.
=> Résultat sur 10 secondes, je passe à 13 ce qui est plus correct...
Mais ma valeur CounterB est moins précise :
counterB = 2 1ms
counterB = 3 1,5ms
C'est pas top je trouve...
L'interruption est au mini je pense :
Code : Tout sélectionner
if(PIR0bits.TMR0IF == 1) // Timer 0
{
counter = counter + 1;
if (counter >= counterB)
{
TEST = 0; // Sortie PWM
}
if (counter == 39)
{
counter = 0;
TEST = 1; // Sortie PWM
}
PIR0bits.TMR0IF = 0;
}
Problème Servo moteur
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Ralentir le rytme d'interruption, mais aussi augmenter FOSC pour ne pas trop perdre en resolution..
Et pourquoi n'utilises tu pas un timerx en mode 16 bits.
init à 65536-20000=45536 => interrupt à 20 000µS => 20mS tres peu d'impact sur le temps mobilisé par le CPU
et un autre timer pour definir la largeur d'impulsion de 1 à 2mS
prediviseur par 8
=> 125 pour 1mS
=> 250 pour 2mS
resolution +-8µS
test avec un 16F1847 et 2 timer, reglage pulse par potar
il y a d'autre solution avec le mode Capture et compare ..
Et pourquoi n'utilises tu pas un timerx en mode 16 bits.
init à 65536-20000=45536 => interrupt à 20 000µS => 20mS tres peu d'impact sur le temps mobilisé par le CPU
et un autre timer pour definir la largeur d'impulsion de 1 à 2mS
prediviseur par 8
=> 125 pour 1mS
=> 250 pour 2mS
resolution +-8µS
test avec un 16F1847 et 2 timer, reglage pulse par potar
il y a d'autre solution avec le mode Capture et compare ..
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 44 invités