Closed Santoi closed 4 years ago
Hola! La configuracion parece estar bien. Podras adjuntar el codigo entero? Por ahi hay algun problema en la logica de deteccion de flancos. Probaste fijar una frecuencia de PWM y ver si se prende el LED? Proba poner el duty cycle en 50%. Con un multimetro deberias ver una tension cercana de 2.5V (sin carga).
Saludos,
Fabri
.include "m328pdef.inc"
.dseg
.def conf = r16
.def intensity = r17
.equ vmed = OCR0A
.equ vinit = 0xc0
.macro init_sp
ldi conf, low (RAMEND)
out spl, conf
ldi conf, high(RAMEND)
out sph, conf
.endmacro
.cseg
.org 0x0000
jmp main
.org INT0addr
jmp isr_int0
.org INT1addr
jmp isr_int1
.org 0x0020
jmp isr_timer0
.org INT_VECTORS_SIZE
main:
init_sp
call setup_timer
// pull-up enable
ldi conf, 0x4c ; pins pd2, pd3 y pd6 en salida
out DDRD, conf
ldi conf, 0x0c
out PIND, conf
call setup_interruption
loop:
nop
nop
nop
jmp loop
// subrutinas
setup_timer:
ldi intensity, vinit
out vmed, intensity
// wmg 011 -> modo de op fast PWM, tope en MAX
// com0A 10 -> clr OC0a en cmp, set OC0a en 0x00
// com0B 00 -> OC0b desconectado
// cs0 101 -> ck = 16MHz / 1024
ldi conf, 0x83
sts TCCR0A, conf
ldi conf, 0x05
sts TCCR0B, conf
ret
setup_interruption:
ldi conf, 0x0a ; flanco descendente para int0 e int1
sts eicra, conf
ldi conf, 0x03 ; habilito interrupciones 0 y 1
out eimsk, conf
ldi conf, 0x01
sts timsk0, conf ; interrupcion en V
sei
ret
// interrupciones
isr_int0:
cpi intensity, 0xff
breq end0
inc intensity
end0:
reti
isr_int1:
cpi intensity, 0x00
breq end1
dec intensity
end1:
reti
isr_timer0:
out vmed, intensity
reti
Cuando lo debuggueo los registros TCCRA0 y TCCRB0 quedan en 0, a menos que los modifique a mano. Por lo que el clock nunca arranca. No sé cómo verificar si esto pasa en el micro también.
Estoy usando el AVR Studio 4.19.
Hice una prueba con el timer 0 y con el timer 2. Con el 0 no hubo respuesta, mientras que con el 2 sí. Debe haber un seteo para que arranque que no estoy viendo, o un problema con el micro.
De todas formas el programa que pasé sigue sin funcionar.
Arrancó con el timer 2. En cuanto tenga el informe subo todo.
Dale, perfecto!
On Mon, Aug 17, 2020 at 9:51 PM Santiago Lopez notifications@github.com wrote:
Arrancó con el timer 2. En cuanto tenga el informe subo todo.
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/fiuba-labo-de-micro-miercoles/2019-2c-trabajo-practico-lopez_20201c/issues/7#issuecomment-675187400, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEOBCACNAUFHSIJA3UQESG3SBHGCTANCNFSM4QCGLCJA .
--
Fabricio Baglivo Manager
AR: +54 (11) 4832-5617
US: +1 (408) 757-0064
Ya adjunté la entrega.
Espero sus correcciones.
Saludos!
El problema con el timer 0 es que quise setear los registros con sts en lugar de out. Con el timer 2 eso va bien entonces arrancó.
Arghhhh....tipico del buen asembly de AVR. Buen ojo para encontrar la falla.
Esta ok. Aprobado!
Buenas! Abro issue para el TPO7.
Aún no lo termino, pero quería realizar una consulta, si el medio es el adecuado.
El problema es el siguiente: no detecto nada a la salida. El LED nunca se prende y si mido tampoco se ve tensión alguna. Arranqué el programa con duty cicle de 94%, para asegurarme de ver una tensión razonable.
Decidí utilizar el timer 0, por lo que debería tener la salida por el pin PD6, que equivale al pin 6 de la placa arduino UNO. Mi implementación es con interrupciones externas, y R de pull-up habilitadas. (PD2 y PD3) Al detectar los flancos descendentes de cada pulsador hago variar el valor de OCR1A como corresponda y por lo que tengo entendido no debo configurar nada del pin de salida (OC1A = PD6), es decir, no toco DDRD 6 ni PIND 6 ni PORTD 6.
Los registros del timer los seteé de la siguiente forma: // wmg 011 -> modo de op fast PWM, tope en MAX // com0A 10 -> clr OC0A en cmp, set OC0A en 0x00 // com0B 00 -> OC0B desconectado // cs0 001 -> ck = 16MHz / 1
Si es prefererible, envío el código por mail a alguno de ustedes. Mientras tanto seguiré buscando la fuente del error.
Muchas gracias, Santiago
EDIT: Seteé el pin 6 como salida. (DDRD 6 <- 1) sigue sin variar la salida