You are on page 1of 7

GENERACION DE SEALES PWM

1. Control de servomotor

*
* control_servo.asm
*
* Created: 1/22/2015 5:37:22 PM
* Author: jip
*/
.include "m164pdef.inc"
.cseg
.org
0x00
rjmp
inicio
.org
0x02
rjmp
mover
inicio:
ldi
out
com
out

r16,0b00010000
ddrd,r16
r16
portd,r16

;conf timer 1
;cargo el valor para definir frecuencia de 50 Hz
ldi
sts
ldi
sts

r16,high(20000)
ocr1ah,r16
r16,low(20000)
ocr1al,r16
;cargo el valor para definir ancho de pulso de 0.3 ms (0 )
r16,high(300)
ocr1bh,r16
r16,low(300)
ocr1bl,r16

ldi
sts
ldi
sts

;configuracion timer com pwm, top OCR0A, PRESCALADOR DE 8


ldi
sts
ldi
sts

r16,0b00100011
tccr1a,r16
r16,0b00011010
tccr1b,r16

;configuracion de interrupcion 0 con flanco de bajada


ldi
sts
ldi
out
out
sei
lazo:
rjmp

r16,0b00000010
eicra,r16
r16,1
eimsk,r16
eifr,r16

lazo

mover:
com
r17
brne
cambiar
;cargo el valor para ancho de pulso de 0.3 ms (0)
ldi
r16,high(300)
sts
ocr1bh,r16
ldi
r16,low(300)
sts
ocr1bl,r16
rjmp
salir
cambiar:
;cargo el valor para ancho de pulso de 2.3 ms (180)
ldi
r16,high(2300)
sts
ocr1bh,r16
ldi
r16,low(2300)
sts
ocr1bl,r16
salir:
reti

2.

PWM de frecuencia variable con el timer 0 (con potenciometro) y delta variable (mediante pulsadores)

.include "m164pdef.inc"
.def tempo=r16
.org
rjmp
.org
rjmp
.org
rjmp

0x00
inicio
0x02
subir
0x04
bajar

inicio:
ldi
out
com
out
clr
out

tempo,0b0011000
ddrb,tempo
tempo
portb,tempo
tempo
ddrd,tempo

com
out

tempo
portd,tempo

;conf interrupciones
ldi
tempo,0b00001010
sts
eicra,tempo
ldi
tempo,0b00000011
out
eimsk,tempo
;configuracion timer 0 como PWM (la configuracion puede ser fast pwm o phase
correcta)
ldi
tempo,0b00100001 ; PWM FASE CORRECTA (valor maximo 0cr0a) ;
out
tccr0a,tempo
;cargo valor inicial comparador A
ldi
tempo,20
out
ocr0a,tempo
;cargo valor inicial comparador B
ldi
tempo,5
out
ocr0b,tempo
ldi
tempo,0b00001010
;PRESECALADOR DE 8
out
tccr0b,tempo
sei
ldi
r17,5
;valor que voy a subir o bajar en el ocr0b
sei
;CONFIGURACION ADC, JUSTIFICACION IZQUIERDA (8 BITS)
ldi
tempo,0b00000001
sts
didr0,tempo
ldi
tempo,0b01100000
sts
admux,tempo
;LAZO PRINCIPAL
lazo:
ldi
tempo,0b11000010
sts
ADCSRA,tempo

ESPERA:
lds
r27,adcsra
sbrc
r27,6
rjmp
espera
;LECTURA DEL ADC ESCRIBO EN OCR0A (COMPARADOR A)
lds
r27,adch
out

rjmp

ocr0a,r27

lazo

subir:
in
r18,ocr0a
subi
r18,11
;limito ancho de pulso, comparador B (no puede ser mayor al comparador A)
in
tempo,ocr0b
cp
tempo,r18
brcc
salir
add
tempo,r17
out
ocr0b,tempo
salir:
reti
bajar:
in
tempo,ocr0b
cpi
tempo,6
brcs
salir1
sub
tempo,r17
out
ocr0b,tempo
salir1:
reti

3.

GENERACION DE DOS SEALES PWM CON EL TIMER 0, frecuencia 2Khz, usando los dos comparadores OCR1A
(modifico con potencimetro) y OCRB (modifico mediante pulsadores) ; nicamente con pequeas variaciones del
cdigo anterior

///pwm phase correcta de 2khz (2pwm), preescalador 8 y


.include "m164pdef.inc"
.def tempo=r16
.org
rjmp
.org
rjmp
.org
rjmp

0x00
inicio
0x02
subir
0x04
bajar

inicio:
ldi
out
com
out
clr
out

tempo,0b0011000
ddrb,tempo
tempo
portb,tempo
tempo
ddrd,tempo

com
out

tempo
portd,tempo

;conf interrupciones
ldi
tempo,0b00001010
sts
eicra,tempo
ldi
tempo,0b00000011
out
eimsk,tempo
;configuracion timer 0 como PWM
ldi
tempo,0b10100001 ; PWM FASE CORRECTA
out
tccr0a,tempo
;cargo valor inicial comparador A
ldi
tempo,20
out
ocr0a,tempo
;cargo valor inicial comparador B

ldi
out
ldi
out
sei

tempo,5
ocr0b,tempo
tempo,0b00000010
tccr0b,tempo

;PRESECALADOR DE 8

ldi
r17,5
;valor que voy a subir o bajar en el ocr0b
sei
;CONFIGURACION ADC, JUSTIFICACION IZQUIERDA (8 BITS)
ldi
tempo,0b00000001
sts
didr0,tempo
ldi
tempo,0b01100000
sts
admux,tempo
;LAZO PRINCIPAL
lazo:
ldi
tempo,0b11000010
sts
ADCSRA,tempo
ESPERA:
lds
r27,adcsra
sbrc
r27,6
rjmp
espera
;LECTURA DEL ADC ESCRIBO EN OCR0A (COMPARADOR A)
lds
r27,adch
;esto es para limitar mi ancho de pulso (no es conveniente que sea la relacion de
trabaja sea 1)
cpi
r27,245
brcc
lazo
cpi
r27,5
; limito ancho de pulso (no quiero que sea 0)
brcs
lazo
out
ocr0a,r27

rjmp

lazo

subir:
;
in r18,ocr0a
;
subi
r18,11
;limito ancho
in
cpi
brcc
add
out
salir:
reti
bajar:
in
cpi
brcs
sub
out
salir1:
reti

de pulso, comparador B
tempo,ocr0b
tempo,248
salir
tempo,r17
ocr0b,tempo

tempo,ocr0b
tempo,6
salir1
tempo,r17
ocr0b,tempo

You might also like