Last active
May 6, 2016 23:21
-
-
Save vduenasg/3157540 to your computer and use it in GitHub Desktop.
Timer0 Fast PWM
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// * Author: Victor Dueñas Guardia | |
// * Info: www.netzek.com | |
// @Ejemplo3 - Timer en Fast PWM: | |
// Este programa genera en OC0 una señal periódica, cada vez que se presiona un pulsador aumenta | |
// el ciclo de trabajo y al presionar el otro pulsador disminuye el ciclo de trabajo. | |
// Pseudocódigo: | |
// - Configuro al timer en modo Fast PWM. | |
// - Cada vez que se inicia una interrupción externa se aumenta o disminuye el valor de OCR. | |
.INCLUDE "M16DEF.INC" //Incluye definicion archivos ATmega16 | |
.EQU OCR_INICIAL=128 | |
.ORG $00 | |
JMP PROGRAMA //Interrupcion Reset | |
.ORG $02 | |
JMP INTER0 //Interrupcion 0 | |
.ORG $04 | |
JMP INTER1 //Interrupcion 1 | |
PROGRAMA: | |
LDI R16,HIGH(RAMEND) | |
OUT SPH,R16 | |
LDI R16,LOW(RAMEND) | |
OUT SPL,R16 | |
LDI R16,0B00001000 | |
OUT DDRB,R16 //Habilito salida OC0 | |
LDI R17,OCR_INICIAL | |
OUT OCR0,R17 //Coloco la señal al 50% ciclo de trabajo | |
LDI R16,0B01101101 | |
OUT TCCR0,R16 //No invertido OC0 - Fast PWM - CLK/1024 | |
LDI R16,0B00001010 | |
OUT MCUCR,R16 //INT0 e INT1 Flanco de Bajada | |
LDI R16,0B11000000 | |
OUT GICR,R16 //INT0 e INT1 Habilitada | |
SEI | |
BUCLE: RJMP BUCLE | |
//......INTERRUPCIONES | |
INTER0: | |
CALL RETARDO | |
CPI R17,0 | |
BREQ Salir0 | |
DEC R17 | |
OUT OCR0,R17 | |
Salir0: | |
RETI | |
INTER1: | |
CALL RETARDO | |
CPI R17,255 | |
BREQ Salir1 | |
INC R17 | |
OUT OCR0,R17 | |
Salir1: | |
RETI | |
//......PROCEDIMIENTOS | |
RETARDO: //Configurado Evitar Rebote | |
LDI R25,31 | |
Bucle_Externo: | |
LDI R24,255 | |
Bucle_Interno: | |
NOP | |
NOP | |
NOP | |
NOP | |
NOP | |
NOP | |
NOP | |
DEC R24 | |
BRNE Bucle_Interno | |
DEC R25 | |
BRNE Bucle_Externo | |
RET |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Timer0FastPWM.c | |
* | |
* Author: Victor Dueñas Guardia | |
* Info: www.netzek.com | |
@Ejemplo3 - Timer en Fast PWM: | |
Este programa genera en OC0 una señal periódica, cada vez que se presiona un pulsador aumenta | |
el ciclo de trabajo y al presionar el otro pulsador disminuye el ciclo de trabajo. | |
Pseudocódigo: | |
- Configuro al timer en modo Fast PWM. | |
- Cada vez que se inicia una interrupción externa se aumenta o disminuye el valor de OCR. | |
*/ | |
#include <avr/io.h> | |
//Incluyo las definiciones del ATmega16 | |
#include <avr/interrupt.h> | |
//Incluyo las definiciones de las Interrupciones | |
#include "mdelay.h" | |
//Incluyo las definiciones de retardo | |
//__INTERRUPCIONES | |
ISR(INT0_vect) | |
{ | |
_delay_ms(300); | |
//Delay para evitar efecto rebote | |
if(OCR0 == 0) | |
OCR0; | |
else | |
OCR0--; | |
} | |
ISR(INT1_vect) | |
{ | |
_delay_ms(300); | |
//Delay para evitar efecto rebote | |
if(OCR0 == 255) | |
OCR0; | |
else | |
OCR0++; | |
} | |
//__PROGRAMA PRINCIPAL | |
int main(void) | |
{ | |
DDRB |= (1<<PB3); | |
//PB3 como salida | |
MCUCR |= (1<<ISC11) | (1<<ISC01); | |
//INT0 e INT1 Flanco de Bajada | |
GICR |= (1<<INT1) | (1<<INT0); | |
//INT0 e INT1 Habilitada | |
TCCR0 |= (1<<WGM00) | (1<<COM01) | (1<<WGM01) | (1<<CS02) | (1<<CS00); | |
//No invertido OC0 - Fast PWM - CLK/1024 | |
OCR0 = 128; | |
//50% de ciclo de trabajo | |
sei(); | |
//Interrupciones habilitadas | |
while (1) | |
{ | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment