Étape 5: améliorations
Ce qui m’amène au point suivant : ce code suce. Vous pouvez faire pratiquement aucun traitement autre que la signalisation à l’asservissement, ce qui est ridicule parce que la grande majorité de ce temps est passé enfermé dans une fonction de retard. En outre, il est difficile de prédire à quel niveau de surcharge vous avez d’autres parties du code qui pourraient être secouer le calendrier ; Cette constante de proportionnalité ne devrait pas eu besoin d’une expérience visant à faire fonctionner correctement.Ce que ce code devrait utiliser au lieu de retards est le commandant de bord construit en minuteries. Code pour cela pourrait ressembler à :
OpenTimer0 (TIMER_INT_OFF &
T0_SOURCE_INT & T0_16BIT &
T0_PS_1_2) ; Je pense que cela rend une minuterie qui déclenche un drapeau chaque 21,8 ms
tandis que (1) {}
while (!. INTCONbits.TMR0IF) {/ / attente pour minuterie indicateur
faire des choses utiles
}
INTCONbits.TMR0IF=0 ; réinitialiser l’indicateur de minuterie
Envoyer des impulsions à servo
}
Je sais que je l’ai dit il était censé pour être une impulsion tous les 10 à 20 ms, mais ms 21,8 est assez proche et passe-temps servos sont généralement très indulgents.