11 janvier 2009

PWM 4 canaux en C sur Attiny2313

Tags : ,

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 | 0 Commentaire

30 novembre 2008

Base de travail pour différents projets à base d’AVR en C

Tags : ,

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 | 4 Commentaires

19 juin 2007

PWM logicielle sur Atmel AVR Attiny2313

Tags : , ,

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 | 4 Commentaires

9 avril 2007

Attiny15, PWM, led qui pulse, Sinus et GNU bc

Tags : ,

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 | 0 Commentaire