11
janvier
2009
Tags : AVR, PWM
Juste un petit bout de code en passant. Pour ceux qui voudraient utiliser les 4 canaux de PWM des Amtel AVR Attiny2313, voici la configuration :
DDRB |= (1<<PB2); // make OC0A an output
DDRD |= (1<<PD5); // make OC0B an output
DDRB |= (1<<PB3); // make OC1A an output
DDRB |= (1<<PB4); // make OC1B an output
TCCR0B = 0; // stop timer 0
TCCR0A = (1<<WGM00)|(1<<WGM01); // select fast pwm mode 3
TCCR0A |= (1<<COM0A1); // Clear OC0A on Compare Match when up-counting.
// Set OC0A on Compare Match when down-counting.
TCCR0A |= (1<<COM0B1); // Clear OC0B on Compare Match when up-counting.
// Set OC0B on Compare Match when down-counting.
OCR0A = 0x00; // duty cycle
OCR0B = 0x00; // duty cycle
TCCR0B |= (1<<CS00); // no prescaling, timer on
TCCR1B = 0; // stop timer 1
TCCR1A = (1<<WGM12)|(1<<WGM10); // Fast PWM, 8-bit mode 5
TCCR1A |= (1<<COM1A1); // Clear OC1A on Compare Match when up-counting.
// Set OC1A on Compare Match when down-counting.
TCCR1A |= (1<<COM1B1); // Clear OC1B on Compare Match when up-counting.
// Set OC1B on Compare Match when down-counting.
OCR1A = 0x00; // duty cycle
OCR1B = 0x00; // duty cycle
TCCR1B |= (1<<CS10); // no prescaling, timer on
Il ne reste, ensuite qu'à changer la valeur de OCR0A, OCR0B, OCR1A ou OCR1B pour modifier le rapport de phase.
dans Electronique |
30
novembre
2008
Tags : AVR, PWM
Je travail sur différentes choses autour des microcontrôleurs Atmel AVR à l'heure actuelle. Je n'en dirai pas trop pour le moment, mais cela touche à la PWM et aux leds (comme souvent) ainsi qu'aux ports séries/USB. Dans le tas, il y a une signalisation lumineuse pour notre salle de réunion (dans la GLMFcave), le projet coccilight et un projet secret (tant qu'il sera pas terminé) qui manque encore d'éléments de décoration (bricoler un truc laid plein d'epoxy et de soudure c'est facile, arriver à quelque chose de présentable c'est une autre affaire).
Quoi qu'il en soit, j'ai dernièrement joué un peu avec un de mes vieux codes en assembleur Atmel que j'ai réimplémenté en C pour un AVR Attiny13 : la pulsation d'une led en PWM utilisant des valeurs sinusoïdales stockées dans la Flash du microcontrôleur. Voir la suite »
dans Electronique |
19
juin
2007
Tags : AVR, leds, PWM
Travaillant sur un projet de présentoire lumineux, j'ai eu besoin de disposer de plus que les quelques canaux de PWM que n'en proposent généralement les microcontrôleurs. En particulier les petits AVR comme l'Attiny2313. La seule solution restante était donc de se passer de ces fonctionnalités et d'implémenter la PWM en logiciel de manière à pouvoir piloter un minimum de 6 leds via les port E/S standards.
Voir la suite »
dans Electronique |
9
avril
2007
Tags : leds, PWM
Le microcontrôleur AVR Attiny15 offre une fonctionnalité pour faire de la PWM (Pulse-width modulation) ou de modulation de largeur d'impulsions en bon français. Ceci permet, par exemple, de faire varier l'intensité lumineuse d'une Led ou la vitesse d'un moteur. Pour cela, on utilise dans le code de l'Atiny15 une valeur entre 0 et 255. Pour obtenir une fluctuation d'intensité qui donne l'impression que la Led pulse (comme sur les Mac en veille) il faut utiliser une série de valeurs sinusoïdale. C'est là que GNU bc intervient et se révèle sous sa vrai nature : bien plus qu'une calculette en ligne de commande, un véritable langage.
Voir la suite »
dans Outils Unix |