Autor Tema: secuenciandor de luces 6 canales  (Leído 2406 veces)

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

Desconectado atmega8a

  • PIC10
  • *
  • Mensajes: 10
secuenciandor de luces 6 canales
« en: 20 de Mayo de 2015, 13:58:36 »


hola
compañaeros del foro

acudo a ustedes para ver si me hechan una manito con este  pequeño secueciandor de luces de 6 canales usando pic 16F84a, pero no lo he podido hacerlo funcionar, adjunto la imagen del error.

con este mismo programa hacerlo funcionar con Pic 16F628a, lo que no es como hacerlo, una ayuda compañeros del foro, soy un aprendiz es programacion de pics.

gracias

jose

include"p16f84a.inc" ;En esta linea se especifica la biblioteca que incluye los registros definidos
radix hex ; Esta linea indica litelares(constantes) expresados en formato hexadecimal


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; igualdades de la CPU y el mapa de memoria;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
reg equ 0x0c
con1 equ 0x0d
con2 equ 0x0e
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;; inicio del programa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

org 0
goto inicio

inicio bsf STATUS,RP0 ; cambio al banco 1 para configurar el pic
movlw 0xff ;puerto A como entrada
movwf TRISA; puerto A como entrada
movlw 0x00 ;puerto B como salida
movwf TRISB;puerto B como salida
bcf STATUS,RP0 ;cambio al banco 0
clrf TRISA ;apago los leds a la salida
clrf con1;valor inicial de contador 1 igual a 0x00
clrf con1;valor inicial de contador 2 igual a 0x00

;;;;;;;;;;;;;;;;;;;;;; Lectura del puerto A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
leer movf PORTA,w
sublw 0x00 ;si el valor del puerto A es 0x00 implemento efecto_uno
btfsc STATUS,Z
goto efecto_uno
movf PORTA,w
sublw 0x01 ;si el valor del puerto A es 0x01 implemento efecto_dos
btfsc STATUS,Z
goto efecto_dos
movf PORTA,w
sublw 0x02 ;si el valor del puerto A es 0x02 implemento efecto_tres
btfsc STATUS,Z
goto efecto_tres
movf PORTA,w
sublw 0x03 ;si el valor del puerto A es 0x03 implemento efecto_cuatro
btfsc STATUS,Z
goto efecto_cuatro
movf PORTA,w
sublw 0x04 ;si el valor del puerto A es 0x04 implemento efecto_cinco
btfsc STATUS,Z
goto efecto_cinco
movf PORTA,w
sublw 0x05 ;si el valor del puerto A es 0x05 implemento efecto_seis
btfsc STATUS,Z
goto efecto_seis
movf PORTA,w
sublw 0x06 ;si el valor del puerto A es 0x06 implemento efecto_siete
btfsc STATUS,Z
goto efecto_siete
movf PORTA,w
sublw 0x07 ;si el valor del puerto A es 0x07 implemento efecto_ocho
btfsc STATUS,Z
goto efecto_ocho
goto leer

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_uno movlw 0x09;se coloca literal 9 porque cada efecto tiene 8 secuencias
movwf reg
leo_uno decfsz reg,f
goto fx_uno
goto leer

fx_uno movf reg,w
call tabla_uno
movwf PORTB
call retardo
goto leo_uno

tabla_uno addwf PCL,f ;;; tabla de secuencia de efecto_uno
return
retlw b'01111111'
retlw b'10111111'
retlw b'11011111'
retlw b'11101111'
retlw b'11110111'
retlw b'11111011'
retlw b'11111101'
retlw b'11111110'


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ACA DEBERIAN IR LOS DEMAS BLOQUES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DE LOS EFECTOS RESTANTES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



retardo decfsz con1,f ;; bloque retardo
goto retardo
decfsz con2,f
goto retardo
return

end

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: secuenciandor de luces 6 canales
« Respuesta #1 en: 20 de Mayo de 2015, 14:54:12 »
Bueno si ese es todo el programa creo que esta claro que el problema es que no existen las demas banderas. Es decir

efecto_dos ,efecto_tres , etc no existen.
Podrias hacer:

efecto_dos
     GOTO leer
efecto_tres
     GOTO leer
....

y asi en adelante mientras no tengas esas subrutinas armadas.

Por otro lado podrias simplificar la rutina leer haciendo una tabla:

Código: ASM
  1. leer
  2.         MOVF    PORTA,W         ;Tomo PORTA y guardo en W
  3.         ANDLW   0x07            ; Limito el resultado a los 3 ultimos bits dando como maximo un numero de 0x07
  4.         ADDWF   PCL,F           ; Lo sumo al contador de programa, segun el valor que tenga en W va a hacer el efecto
  5.         GOTO    efecto_uno
  6.         GOTO    efecto_dos
  7.         GOTO    efecto_tres
  8.         GOTO    efecto_cuatro
  9.         GOTO    efecto_cinco
  10.         GOTO    efecto_seis
  11.         GOTO    efecto_siete
  12.         GOTO    efecto_ocho

Con respecto al tema de pasarlo a otro PIC, como es el PIC16F628 la unica diferencia que tendrias es sobre la parte de la configuracion del PIC y puertos.
Me refiero a los fuses, y el PORTA tiene su funcion analogica, lo cual podes desactivar en el registro CMCON poniendo un 0x7 creo que era. Todo lo demas funcionaria igual.

Desconectado atmega8a

  • PIC10
  • *
  • Mensajes: 10
Re: secuenciandor de luces 6 canales
« Respuesta #2 en: 20 de Mayo de 2015, 16:02:14 »


Hola
Killerjc te agradezco por la ayuda ya lo hice funcionar para el pic 16F84a, la simulacion es exitosa, pero pasando este mismo programa al pic 16f628a no me ha querido funcionar, la idea es suprimir  el cristal de cuarzo del pic 16f84a, y condensadores ceramicos.

gracias

jose

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: secuenciandor de luces 6 canales
« Respuesta #3 en: 20 de Mayo de 2015, 16:21:22 »
Bueno, como ya te dije tendrias que


- Ver los fuses del PIC16F628 seguro estan al ultimo del .inc , ahi podes seleccionar el que usar el oscilador interno y te deja libre los pines
- Deberias poner un 0x7 en CMCON para pasarlos de digital a analogico
- Cambiar la direccion de memoria de los registros comenzando por 0x20 (En el PIC16F84 comienzan en 0x0C, es lo unico que me falto nombrar antes)

Fin. ya estaria funcionando para el PIC16F628A

PD: En la imagen que subiste solo se ve un breakpoint, y no un error como realmente deberia ser. Si te da un error seguro que te lo da en la compilacion y no mientras lo estas debuggeando.
« Última modificación: 20 de Mayo de 2015, 16:25:54 por KILLERJC »

Desconectado atmega8a

  • PIC10
  • *
  • Mensajes: 10
Re: secuenciandor de luces 6 canales
« Respuesta #4 en: 20 de Mayo de 2015, 17:11:57 »


hola
killerjc no me estan realizando los efectos deseados, cuando activo uno de los  swicthes los leds se quedam detenidos, no siguen los demas efectos, los pines  RB6 y RB7 se me estan activando, no se por que.

gracias


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: secuenciandor de luces 6 canales
« Respuesta #5 en: 20 de Mayo de 2015, 17:15:42 »
Realmente no existiria ningun problema si es que haces lo que dije.

El set de instrucciones es identico en ambos PICs por lo que no tendrias ningun problema si transportas el codigo. Ademas solo estas usando los registros PORTx en tu codigo, y eso en el PIC16f628 no cambia.
Lo unico que cambia es la configuracion como ya dije.

Y el unico problema que puede haber es si esta mal el programa. Y con una parte del programa no puedo hacer nada.

Podrias poner el programa completo para el PIC16F628 (pregunto por que hay muchos que no quieren hacerlo)?
Usa el boton # (que tenes arriba de las caritas) asi lo pones como codigo y no ocupa tanto espacio aca en el foro.

Código: [Seleccionar]
Y queda asi
« Última modificación: 20 de Mayo de 2015, 18:16:20 por KILLERJC »


 

anything