Autor Tema: PWM con el ATtiny2313  (Leído 3784 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
PWM con el ATtiny2313
« en: 08 de Octubre de 2010, 22:38:27 »
Bueno les dejo el código para probar el uso del PWM en el timer 0 del ATtiny2313:
Código: C
  1. /*************************************************
  2.  PROGRAMAS DE EJEMPLO PARA EL ATTINY2313 - 20PU.
  3.  PROGRAMADOR: Moyano Jonathan.
  4.  Fecha: Setiembre del 2010.
  5.  Programa: Enciende y apaga un LED conectado al
  6.            puerto PB2 del microcontrolador progresivamente mediante PWM.
  7.  Cristal:  4Mhz.
  8.  Programador: PK2-ISP.
  9.  ************************************************/
  10.  
  11. #include <avr/io.h>     // Definiciones de hardware.
  12. #include <util/delay.h> // Librería para generar retardos.
  13.  
  14. // Led conectado al PIN PB2 del micro donde está la salida PWM.
  15. #define LEDPIN 2
  16.  
  17. // Definimos el valor máximo que puede tomar el PWM.
  18. #define PWM_MAX 255
  19.  
  20.  
  21. int main(void)
  22. {
  23.     DDRB = 0x1F;  // PB4 a PB0 como salidas.
  24.     PORTB = 0x00; // Ponemos todas las salidas a 0.
  25.    
  26.     uint8_t brillo = 0; // Declara e inicializa la variable brillo 0 = led apagado; 0xFF = led con máximo brillo.
  27.    
  28.  
  29.     // -------------------------
  30.     // Iniciamos el módulo PWM.
  31.  
  32.     // PWM de 8 bits, fase correcta.
  33.     // 8 bits nos darán 256 niveles de brillo.
  34.     TCCR0A |= (1<<WGM00);
  35.  
  36.     // Limpiamos los bits OC0A/OC0B en el comparador.
  37.     // Setea OC0A/OC0B en la parte inferior (Modo no invertido)
  38.     TCCR0A |= (1<<COM0A1);
  39.  
  40.     // Seteamos el prescaler a 64.
  41.     // 4 MHz / 64*256 = Frecuencia de PWM = ~235 Hz
  42.     TCCR0B = (1<<CS00)|(1<<CS01);
  43.  
  44.     // -------------------------
  45.    
  46.    
  47.     while(1)
  48.     {
  49.        
  50.  
  51.  
  52.           for(brillo=0; brillo<=PWM_MAX; brillo++) {
  53.        
  54.         // Cargamos el valor de brillo en el comparador.
  55.         OCR0A = brillo;
  56.        
  57.         // Ponemos un retardo para ver el efecto.
  58.         _delay_ms(10);
  59.  
  60.     }
  61.  
  62.     return 0;
  63.   }
  64.  
  65. }

Espero les sirva  :-/


 

anything