« Micro contrôleurs AVR/Travail pratique/Télécommande NRF24L01 pour Robot » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 1 100 :
* Ces deux sorties vont permettre de gérer le calcul des deux PWM, un pour le moteur droit pwmD et un pour le moteur gauche pwmG.
 
1°) '''Écrire''' la partiegestion dedu programmepwm quiavec calculele cas,timer0. Dpwm,Les pwm,broches pwmD0C0A et pwmG.OC0B Pourdu laissertimer de0 laportent placerespectivement enle RAM,numéro les variables deltaPWM6/PD6 et Dpwm5/PD5. seront fusionnées en une seule variable.
 
2°) '''Écrire''' la partie de programme qui prend pwmD et pwmG et calcule les valeurs à envoyer sur le L298D sachant que ces deux données peuvent être positives (avancement) ou négatives (recul): '''void deplaceToi(int16_t pwmD, int16_t pwmG)'''.
 
3°) '''Écrire''' la partie de programme qui calcule cas, Dpwm, pwm, pwmD et pwmG. Pour laisser de la place en RAM, les variables deltaPWM et Dpwm seront fusionnées en une seule variable.
 
 
 
2°) '''Écrire''' la partie de programme qui prend pwmD et pwmG et calcule les valeurs à envoyer sur le L298D.
 
3°) Ne pas oublier la gestion du pwm avec le timer0.
 
{{Solution|contenu=
<big>'''Solution non vérifiée donc à vérifier au plus vite !'''</big>
'''Question 1°'''
<syntaxhighlight lang="C">
// ****** gestion du timer
//Configuration (6 et 5 pour NANO)
DDRD |= ((1<<DDD6)|(1<<DDD5));
// Set the Timer Mode to PWM fast
TCCR0A |= ((1 << WGM01) | (1<<WGM00));
// clear OC0A on compare match set OC0A at TOP and same for OCOB
TCCR0A |= ((1 << COM0A1)|(1 << COM0B1));
// set prescaler to 256 and start the timer
TCCR0B |= (1 << CS01)|(1 << CS00);
// gestion du sens d'avancement
DDRC |= 0x0F; // PCO/A0, PC1/A1, PC2/A2 et PC3/A3 en sortie
</syntaxhighlight>
 
<syntaxhighlight lang="C">
#define MAXPWM 100
// question 23°
void deplaceToi(int16_t pwmD, int16_t pwmG) {
if (pwmD > MAXPWM) pwmD = MAXPWM;