Voici la méthode utilisée pour générer le signal par un programme sur le PIC 16F64 :
(voir la page Débuter avec un PIC)
On utilise ici des interruptions du timer pour le séquencement temporel.
Le programme passe par 2 phases. La phase 0 correspondant à l'état 0 du signal, la phase 1 à l'état 1.
A chaque changement de phase, on rerègle le timer pour obtenir une interruption au bon moment pour la prochaine phase.
|
|
Le PIC a un timer d'une précision de 1 octet, soit 256 valeurs.
Il est incrémenté à chaque cycle, soit ici (quartz à 4Mhz) toutes les µs.
Y est adjoint un prescaler non obligatoire et réglable qui permet d'incrémenter le timer tous les
1, 2, 4, 8, 16, 32 ... 256 cycles.
Pour la phase 1, le timer doit pouvoir aller le plus précisément possible de 0 à 2ms.
On choisit donc un prescaler de 8. Ainsi le timer s'incrémente toutes des 8µs,
avec un maximum à 256*8 = 2048 µs.
Pour la phase 2 , la marge est bien plus large. On prend un prescaler de 128. Avec 140*128 = 17 920 µs
|
Ce premier programme utilise la méthode decrite ci-dessus pour faire bouger d'un "pas" le servo toute les 1/2 secondes (à peu près).
La base de temps (abusivement appellée PWM, vous m'excuserez, mais Signal-code modulated signal ça fait long comme variable ;-)
est donc de 8 µs de précision, sur 1 octet.
Elle s'incrémente dès que la variable tmp_cmp atteint 64 (tmp_cmp repassant alors à 0).
Le signal de commande est disponible sur l'ensemble du port B.
Il vous suffit d'alimenter le servo avec un jeu de 4 piles R6 (attention à bien relier la masse
du servo et celle du PIC) et à relier son fil de commande avec l'un des ports B du PIC.
Voici le code et l'éxécutable. Amusez-vous bien à tester vos servo !
|
|