fiuba-labo-de-micro-miercoles / 2019-2c-trabajo-practico-lopez_20201c

2019-2c-trabajo-practico-lopez_20201c created by GitHub Classroom
0 stars 0 forks source link

TPO7 #7

Closed Santoi closed 4 years ago

Santoi commented 4 years ago

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

fbaglivo commented 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

Santoi commented 4 years ago
.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
Santoi commented 4 years ago

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.

Santoi commented 4 years ago

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.

Santoi commented 4 years ago

Arrancó con el timer 2. En cuanto tenga el informe subo todo.

fbaglivo commented 4 years ago

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

Santoi commented 4 years ago

Ya adjunté la entrega.

Espero sus correcciones.

Saludos!

Santoi commented 4 years ago

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ó.

fbaglivo commented 4 years ago

Arghhhh....tipico del buen asembly de AVR. Buen ojo para encontrar la falla.

fbaglivo commented 4 years ago

Esta ok. Aprobado!