Autor Tema: Ayuda a un completo novato desesperado!Problemas con 16F84A y posible overflow¿?  (Leído 2811 veces)

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

Desconectado MADKazuya

  • PIC10
  • *
  • Mensajes: 39
Antetodo, buenos dias a todos! :)

Soy un novato con muchas ganas de exprimir todo cuanto el maravilloso mundo PIC nos pueda dar, asi que me he hecho con un Pickit 2 starter kit de microchip, el mplab 8.10 y unos cuantos PIC 16F84A ( tambien el 16F690 ke venia con el kit, pero este me lo reservo para mas adelante hacer algun invento con PWM y leds RGB  :lol:).

El caso es ke para comenzar keria hacer una secuencia de leds en particular, ke podriamos decir ke se parece a una barra de carga/descarga, aunke no sera esa su utilidad final, seguramente me hare entender mucho mejor asi  :)

La idea es ke primero se encienda el primer led, luego el segundo (y se mantenga el primero), luego el tercero ( y se mantengan todos los anteriores) y asi sucesivamente hasta 5. He implementado el codigo en asm y consigo ke lo haga bien, incluido los retardos (gracias al fichero ke he encontrado en este mismo site, y el cual ha sido tremendamente util!). El problema esta en ke una vez encendidos todos los leds, reinicia de nuevo toda la serie, exactamente 7 veces mas, y luego se keda congelado con los leds encendidos (como deberia ser). Estoy completamente desesperado porke no kiero ke reinicie todo el programa! kiero ke se keden todos encendidos y de ahi no se muevan! por favor, ayudadme, no se ke mas hacer...y seguro ke es una tonteria...

Datos de interes: uso un cristal de cuarzo a 4MHz, con dos C de 22 pF, un regulador de 5v para alimentar el pic y leds normales, con sus correspondientes resistencias

Intentare pegar el codigo a continuacion (por favor, webmasters, si hay algo ke no haga bien, notifikenmelo y lo editare; soy nuevo  :oops: :oops:)

Código: [Seleccionar]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Autor:Kazu
;
; Fecha:11 agosto 2009
;
; Version:1.0
;
; Titulo:Cluster control
;
; Descripcion:Encendido paulatino de agujas
;  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;***** VARIABLE DEFINITIONS
STATUS      equ       03h              ; Direccion del registro STATUS
TRISB       equ       86h              ; Direccion del registro triestado para el Puerto B.
PORTB       equ       06h              ; Direccion del Puerto B.
PDel0       equ       0Ch              ; Primer contador para nuestros bucles de retardo.
PDel1       equ       0Dh              ; Segundo contador para nuestros bucles de retardo.
PDel2       equ      0Eh
;**********************************************************************
;
;****Configuracion del Puerto****

            clrwdt
            bsf       STATUS,5         ; Cambiamos al banco 1Switch to Bank 1
            CLRF      TRISB            ; ...como salidas.
            bcf       STATUS,5         ; Volvemos al Banco 0.
CLRF  PORTB

;****Encendido del LED RB7****

BSF  PORTB,7   ; Transmitimos una senal alta al bit 7 del puerto B
call  Retraso   ; Llama la subrutina retraso y la ejecuta

;****Encendido del LED RB6****

   BSF  PORTB,6   ; Transmitimos una senal alta al bit 6 del puerto B
   call  Retraso   ; Llama la subrutina retraso y la ejecuta

;****Encendido del LED RB5****

   BSF  PORTB,5   ; Transmitimos una senal alta al bit 5 del puerto B
call  Retraso   ; Llama la subrutina retraso y la ejecuta

;****Encendido del LED RB4****

   BSF  PORTB,4   ; Transmitimos una senal alta al bit 4 del puerto B
call  Retraso   ; Llama la subrutina retraso y la ejecuta

;****Encendido del LED RB3****

  BSF  PORTB,3   ; Transmitimos una senal alta al bit 3 del puerto B  
                       
;****Inicio del buble de retardo****
Retraso
movlw     .14       ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .72       ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .247      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.
                                      
;****Termina el Programa****

end                        ; Algunos compiladores necesitan esta instruccion.

Tb decir ke aunke use el template del mplab con los __config, #include, y demas, no hay diferencia alguna en el resultado, tarde mas o menos, siempre se reinicia. Parece como si se desbordase el programa...en fin, lo dejo en vuestras sabias manos...help, please!!!!

Muchisimas gracias de antemano  :)

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Bienvenido MADKazuya!

Después de:
Código: ASM
  1. bsf   PORTB,3


Coloca un bucle infinito:

Código: ASM
  1. Bucle
  2.     goto   Bucle


Revisa el siguiente link: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MADKazuya

  • PIC10
  • *
  • Mensajes: 39
Infinitas gracias Suky!!!!!!!!!!!!!!!!!!!!

Comprobado y funciona a las mil maravillas! :) se nota ke soy novato...como no lo habia pensado antes? :oops:

De todos modos, y con el fin de aprender mejor, como es ke pasaba eso ke se reiniciaba exactamente 7 veces? el WDT estaba desconectado y por programa no habia ningun goto de bucle. Ya se ke hay ke hacer ke el retardo el programa se lo salte, pero de todos modos ke es lo ke ha provocado ese loop no deseado?

Una vez mas, muchisimas gracias, no sabes el peso ke me acabas de kitar de encima! :-)

Desconectado BOSER

  • PIC10
  • *
  • Mensajes: 25
Hola:

El problema que tenes se da porque no hiciste un bucle con goto. Por esta razón el programa continuaba y ejecutaba la subrutina como si fuera parte del programa. Una vez finalizada la subrutina volvia con el return a la ultima direccion grabada en el stack interno, cosa que lo hacia inestable.

Por otra parte sugiero que empieces la programacion mas estructurada como corresponde de la siguiente manera

  list=16F84


__Config (coloca aca los bits de configuracion)

include "pic16F84.inc"

pdel  equ 0x0c

      org 0x00
      goto INICIO

org 0x04
      (rutina de interrupcion)
INICIO
      (aca coloca la configuracion de puertos, timers, etc)
LAZO
      (aca el programa principal)
      goto LAZO
      end

Ademas te sugiero anular el watchdog desde la configuracion.




     



Desconectado MADKazuya

  • PIC10
  • *
  • Mensajes: 39
Gracias boser, lo tendre en cuenta :)

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227


Recuerda hacer tus programas en un ciclo infinito.Asi nunca tendras esos problemas ni cosas extrañas ^^

Desconectado fidodido18

  • PIC18
  • ****
  • Mensajes: 312


Recuerda hacer tus programas en un ciclo infinito.Asi nunca tendras esos problemas ni cosas extrañas ^^

Importante esto!! no tenias ciclos, es como si le dijeras al pic que vaya a la tienda ( :D ) pero que no vaya por donde el sabe sino que tome callejones sin salida. por eso se queda estancado...

sigue programando mas cosas y no te desanimes con primeros tropiezos, con paciencia mucha paciencia  y (ojo) LOGICA seras un excelente programador...

Desconectado MADKazuya

  • PIC10
  • *
  • Mensajes: 39
Gracias a todos por la ayuda. Lo cierto es que gracias a este foro estoy consiguiendo tirar mi proyecto adelante. Es un proyecto particularmente curioso, vistos los que por aqui desarrolais, ya que va enfocado a un cuadro de instrumentacion de un vehiculo corriente  :mrgreen: En si es un proyecto ridiculamente sencillo, pero lo cierto es que en este mundillo sera (espero, si lo consigo finalizar) algo completamente novedoso.

Ahora que mi 16F84A ya hace todo lo que quiero sin despistes (ni irse a la tienda por caminos no deseados  :mrgreen: :mrgreen: :mrgreen:) atacare a mi 16F690 y su PWM, a ver si consigo enterarme de como va.

Gracias de nuevo! :P


 

anything