Bueno les dejo el código para probar el uso del PWM en el timer 0 del ATtiny2313:
Espero les sirva
Código:
/*************************************************
PROGRAMAS DE EJEMPLO PARA EL ATTINY2313 - 20PU.
PROGRAMADOR: Moyano Jonathan.
Fecha: Setiembre del 2010.
Programa: Enciende y apaga un LED conectado al
puerto PB2 del microcontrolador progresivamente mediante PWM.
Cristal: 4Mhz.
Programador: PK2-ISP.
************************************************/
#include <avr/io.h> // Definiciones de hardware.
#include <util/delay.h> // Librería para generar retardos.
// Led conectado al PIN PB2 del micro donde está la salida PWM.
#define LEDPIN 2
// Definimos el valor máximo que puede tomar el PWM.
#define PWM_MAX 255
int main(void)
{
DDRB = 0x1F; // PB4 a PB0 como salidas.
PORTB = 0x00; // Ponemos todas las salidas a 0.
uint8_t brillo = 0; // Declara e inicializa la variable brillo 0 = led apagado; 0xFF = led con máximo brillo.
// -------------------------
// Iniciamos el módulo PWM.
// PWM de 8 bits, fase correcta.
// 8 bits nos darán 256 niveles de brillo.
TCCR0A |= (1<<WGM00);
// Limpiamos los bits OC0A/OC0B en el comparador.
// Setea OC0A/OC0B en la parte inferior (Modo no invertido)
TCCR0A |= (1<<COM0A1);
// Seteamos el prescaler a 64.
// 4 MHz / 64*256 = Frecuencia de PWM = ~235 Hz
TCCR0B = (1<<CS00)|(1<<CS01);
// -------------------------
while(1)
{
for(brillo=0; brillo<=PWM_MAX; brillo++) {
// Cargamos el valor de brillo en el comparador.
OCR0A = brillo;
// Ponemos un retardo para ver el efecto.
_delay_ms(10);
}
return 0;
}
}
Espero les sirva