Go Down

Topic: [RESOLU] Attiny2313 et PWM sur timer1 (Read 316 times) previous topic - next topic

B@tto

Dec 04, 2015, 06:34 pm Last Edit: Dec 04, 2015, 09:00 pm by B@tto
Salut à tous,

Petit souci sur un montage à base d'Attiny2313 + Arduino 1.6.5. J'ai testé deux cores pour Attiny j'ai le même souci, à savoir qu'il m'est impossible de faire du PWM sur les pin 12 et 13 (PB3 et PB4) les deux étant sur le timer 1. J'ai trouvé un code "en dur" sur le net que j'ai adapté et il marche :

Code: [Select]

void setup() {
  // put your setup code here, to run once:

  /* Set Fast PWM mode. */
TCCR1A |= (1<<WGM00) | (1<<WGM01);
/* Clear 0C0A on compare. */
TCCR1A |= (1<<COM0A1);
/* Start timer, no prescaling. */
TCCR1B |= (1<<CS00);
/* Duty cycle 0% */
OCR1A = 0;

pinMode(12,OUTPUT);

}

void loop() {
  int i;
 for(i=0; i < 255; i++) {
      OCR1A = i;
      delay(10);
  }
 
  for(i=255; i > 0; i--) {
      OCR1A = i;
delay(10);
  }

}


Il y a donc vraisemblablement un souci dans le core tiny ...

https://github.com/SpenceKonde/ATTinyCore


La partie intéressante dans le wiring_analog.c :
Code: [Select]

#if defined(TCCR1A) && defined(COM1A1) && !defined(TCCR1E)
 if( timer == TIMER1A){
 
 // connect pwm to pin on timer 1, channel A
 sbi(TCCR1A, COM1A1);
 cbi(TCCR1A, COM1A0);
 #ifdef OC1AX
 cbi(TCCR1D, OC1AV);
 cbi(TCCR1D, OC1AU);
 cbi(TCCR1D, OC1AW);
 sbi(TCCR1D, OC1AX);
 #endif
 OCR1A = val; // set pwm duty
 } else
 #endif


En bidouillant un peu et en uploadant l'exemple "fade" j'arrive presque à faire ce que je veux (et c'est pas parfait). N'étant pas familier des registres AVR, j'imagine que pour un initié ça lui sautera aux yeux :)

EDIT : bon bin je me répond tout seul :) j'ai posé la question sur le github et réponse immédiate :

https://github.com/SpenceKonde/ATTinyCore/issues/37

En français, il suffit d'aller dans

C:\Users\votrenomdutilisateur\AppData\Roaming\Arduino15\packages\ATTinyCore\hardware\avr\1.0.6\variants\tinyX313   et d'éditer pins_arduino.h et de changer
Code: [Select]

//Choosing not to initialise saves power and flash. 1 = initialise.
#define INITIALIZE_SECONDARY_TIMERS              0


En

Code: [Select]
//Choosing not to initialise saves power and flash. 1 = initialise.
#define INITIALIZE_SECONDARY_TIMERS              1
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

dfgh

merci de ce retour

intrigué par TCCR1E, j'étais allé voir les data sheets des µ
et je n'ai trouvé TCCR1E que sur la data sheet des µ Atiny 261, 461, 861

http://www.atmel.com/images/atmel-2588-8-bit-avr-microcontrollers-tinyavr-attiny261-attiny461-attiny861_datasheet.pdf

en page 119

Go Up