« 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°)
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.
{{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
void deplaceToi(int16_t pwmD, int16_t pwmG) {
if (pwmD > MAXPWM) pwmD = MAXPWM;
|