Autor Tema: OC1A no funciona.  (Leído 3424 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado - TuX -

  • PIC10
  • *
  • Mensajes: 14
OC1A no funciona.
« en: 18 de Junio de 2008, 16:52:49 »
Hola, tengo un problema, lo que pasa es que estoy programando el timer/counter 1 en modo PWM, en asm y el micro es el AT90S8535,  estou usando los 2 canales, el OC1A y el OC1B,  meto lo valores al OC1AL, y al OCR1BL,  y activo el PWM, llega una combinacion al PINB, activo la interrupcion INT0 y dependiendo de la combinacion se modifican los valores OC1xL.

El problema es que solo  el canal 2 del pwm funciona (OC1B) el OC1A no funciona y la verdad no se porque, si los 2 los configure igual, me comentaron que es porque el pin en donde esta el OC1A, como es parte del puerto D  tiene doble funcion,  y que debo activar la funcion del pwm, pero no se como hacerlo.  por eso les pido ayuda, dejo el codigo que tengo, para que vean que estoy haciendo:

Código: [Seleccionar]
.include "8515def.inc"


;*****************************************
.org $000 ; Inicio
rjmp Reset

.org $001 ;Interrupcion externa
rjmp INTE
.def PARAR = r20
.def INICIAR = r21
.def MOTOR1 = r22
.def MOTOR2 = r23

;*****************************************

Reset:

;*****************************************
cli ; Descativa Interrupciones Globales
;*****************************************
; Stak Pointer
ldi r16, high(RAMEND)
out SPH, r16

ldi r16, low(RAMEND)
out SPL, r16
;*******************************************
;Configuracion del vector 0x001 INT0
ldi r16, 0b00000010
out MCUCR, r16

ldi r16, 0b01000000
out GIMSK, r16; Interrupcion Habilitada

;*******************************************
;Canal 1 Del PWM  ;MOTOR 1
ldi r17, 0xFD ; Valor De OCR1A L
out OCR1AL, r17

;*****************************************
; Canal 2 Del PWM  MOTOR 2
ldi r17, 0xFD ; Valor De OCR1B L
out OCR1BL, r17
;*****************************************
; Configuracion de PWM
ldi r17, 0b10100000 ;Resolucion de 8 bits
out TCCR1A, r17

;Configuracion De  CLK
ldi r17, 0b00000010
out TCCR1B, r17
;****************************************
;Configuracion De Puertos
clr r17
out DDRB, r17 ;Puerto B Como Entrada
ser r17
out DDRA, r17 ;Puerto A Como Salidoa

;****************************************
ldi PARAR, 0b10100000
ldi INICIAR, 0b10100001

sei ;Activa Interrupciones Globales


INICIO:


nop


rjmp INICIO

;*************************************
;Interrupcion INT0
INTE:

in r18, PINB

cpi r18, 0x00
breq DETENER

cpi r18, 0b00000001
breq ADELANTE

cpi r18, 0b00000010
breq DERECHA

cpi r18, 0b00000011
breq IZQUIERDA

cpi r18, 0b00000100
breq REVERSA

cpi r18, 0b00000101
breq R_DERECHA

cpi r18, 0b00000110
breq R_IZQUIERDA

cpi r18, 0b00000111
breq AUMENTAR

cpi r18, 0b00001000
breq DISMINUIR
reti


DETENER:
;PWM APAGADO
out TCCR1A, PARAR
reti

ADELANTE:
;Configuracion de PULSO
ldi MOTOR1, 0xFD
ldi MOTOR2, 0xFD
out OCR1AL, MOTOR1
out OCR1BL, MOTOR2

;PWM habilitado
out TCCR1A, INICIAR
reti

DERECHA:
;Configuracion De Pulso
ldi MOTOR1, 0xFD
ldi MOTOR2, 0x7E
out OCR1AL, MOTOR1
out OCR1BL, MOTOR2

;PWM habilitado
out TCCR1A, INICIAR
reti


IZQUIERDA:
ldi MOTOR1, 0x7E
ldi MOTOR2, 0xFD
out OCR1AL, MOTOR1
out OCR1BL, MOTOR2

;PWM habilitado
out TCCR1A, INICIAR
reti

REVERSA:
reti

R_DERECHA:
reti

R_IZQUIERDA:
reti

AUMENTAR:
reti

DISMINUIR:
reti

Desconectado JCAK

  • PIC18
  • ****
  • Mensajes: 325
Re: OC1A no funciona.
« Respuesta #1 en: 16 de Julio de 2008, 01:26:01 »
Hola TuX

Te recomiendo bajar el programita CodeVisionAVR, no digo que lo uses para programar todo y tener que aprender un lenguaje nuevo, pero tiene un Wizard muy util, que te aseguro que ayuda bastante a entender el modo en que se deben programar los registros para hacer tal o cual cosa.

Por ejemplo, una vez que seleccionas el Timer, el modo PWM, los puertos de salida, frecuencia, etc, etc, te muestra cómo debes configurar los registros, y santo remedio.

Probalo y luego nos cuentas cómo te fué.

 :-)
Julio - Argentina

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: OC1A no funciona.
« Respuesta #2 en: 16 de Julio de 2008, 03:25:04 »
Aqui te dejo la hoja de aplicacion http://www.atmel.com/dyn/resources/prod_documents/doc2542.pdf
y de aqui puede bajar un codigo ejemplo http://www.avrfreaks.net/index.php?module=Freaks%20Tools&func=viewItem&item_id=498
comentanos todos tus errores por favor para que nosotros aprendamos.
Saludo

Desconectado - TuX -

  • PIC10
  • *
  • Mensajes: 14
Re: OC1A no funciona.
« Respuesta #3 en: 27 de Agosto de 2008, 16:48:16 »
gracias  a los 2, ya lo resolvi, como el oc1a no es un pin especifico de esa fincion, tenia que configurarlo como salida, lo raro es que ya lo habia hecho y no funciono, pero ahora ya esta listo.

Si, tambien quiero aprendes a usar C, ya se programar en C pero en la PC, voy a buscar un buen manual de esa libreria

Saludos


 

anything