Bonjour,
J'ai réalisé des cartes qui utilisent un ATTINY85 pour générer un PWM pour faire varier la luminosité de LEDs.
Le truck c'est que j'ai une fréquence d'environ 30KHz, ce qui est trop pour mon application, surtout pour commander un mosfet de puissance.
J'utilise le timer 1. Je met OCR1A à 0 au début, puis je l'initialise avec une valeur entre 0 et 255 en fonction de l'état d'une entrée, pour modifier le rapport cyclique.
Mais comment faire pour changer la fréquence et arriver à environ 200Hz ou 500Hz ?
Merci
Voici mon code :
Code:void main(void) { // Declare your local variables here // Crystal Oscillator division factor: 1 #pragma optsize- CLKPR=(1<<CLKPCE); CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif // Input/Output Ports initialization // Port B initialization // Function: Bit5=In Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=In DDRB=(0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (0<<DDB0); // State: Bit5=T Bit4=T Bit3=T Bit2=T Bit1=0 Bit0=T PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (1<<PORTB2) | (0<<PORTB1) | (1<<PORTB0); TCCR1 |= (1<<PWM1A); //Enable PWM mode on OCR1A TCCR1 |= (1<<COM1A1); //Clear OC1A when //compare match occurs TCCR1 |= (1<<CS10); //Set prescale to CK/8 (125Khz); while (1) { OCR1A = 0; while (PINB.2 == 0) { OCR1A = X; if(PINB.0 == 0) { X = 20; } else { X = 25; } } } }
-----