AVR Attiy45 PWM Control del servomotor en el ensamblaje

1

Estoy intentando controlar un servomotor con attiny45 escribiendo el código en el ensamblador. Descubrí cómo configurar el temporizador en modo pwm y cómo elegir un preescalador necesario. Y con diferentes valores OCR0A estoy obteniendo la posición neutral y 0 grados. Sin embargo, me he encontrado con un problema con 180 grados. Cuando mantengo la configuración del temporizador igual y no configuro el OCR0A, el servo pasa fácilmente a 180 grados. Pero cuando cambio el OCR0A para obtener un impulso diferente y diferentes posiciones del motor y para intentar volver al valor predeterminado de OCR0A, nada funciona. Por lo tanto, el código:

Esto pone mi motor en posición de 180 grados

.includepath "/usr/share/avra/"
.device ATtiny45 
.DEF A=R16

.equ DDRB = 0x17
.equ PORTB = 0x18 
.equ TCCR0A = 0x2A
.equ TCCR0B = 0x33
.equ OCR0A = 0x29
.ORG $0000
SBI DDRB, 0x3
SBI PORTB, 0x3
ON_RESET:
    SBI DDRB, 0
    LDI A, 0b10000011
    OUT TCCR0A, A
    LDI A, 0b00000011
    OUT TCCR0B,A
MAIN_LOOP:
    RJMP MAIN_LOOP  

Esto no (espero que sea fácil de entender lo que estoy tratando de hacer aquí)

.includepath "/usr/share/avra/"
.device ATtiny45
.DEF A=R16

.equ DDRB = 0x17
.equ PORTB = 0x18
.equ TCCR0A = 0x2A
.equ TCCR0B = 0x33
.equ OCR0A = 0x29
.ORG $0000
SBI DDRB, 0x3
SBI PORTB, 0x3

ON_RESET:
    SBI DDRB, 0
    LDI A, 0b10000011
    OUT TCCR0A, A
    LDI A, 0b00000011
    OUT TCCR0B,A
MAIN_LOOP:
    LDI A, 0xFF
    OUT OCR0A, A
    RCALL DELAY_05
    RCALL DELAY_05
    RCALL DELAY_05
    RCALL DELAY_05
    LDI A, 192
    OUT OCR0A, A
    RCALL DELAY_05
    RCALL DELAY_05
    RCALL DELAY_05
    RCALL DELAY_05
    LDI A, 40
    OUT OCR0A, A
    RCALL DELAY_05
    RCALL DELAY_05
    RCALL DELAY_05
    RCALL DELAY_05
    RJMP MAIN_LOOP

DELAY_05:
    LDI R17,8
OUTER_LOOP:
    LDI R24, low(3037)
    LDI R25, high(3037)
DELAY_LOOP:
    ADIW R24,1
    BRNE DELAY_LOOP
    DEC R17
    BRNE OUTER_LOOP
    RET

Sí, no sé cómo escribir un segundo. función de retardo.

Entonces, ¿hay una manera de "restablecer" el registro OCR0A?

    
pregunta Ivan

1 respuesta

0

Está bien, esto está resuelto. Estúpidamente fácil. El valor predeterminado de OCR0A es 0.

    
respondido por el Ivan

Lea otras preguntas en las etiquetas