Autor Tema: problema con retardo de 16f84 y 16f628  (Leído 10774 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado En

  • PIC10
  • *
  • Mensajes: 26
problema con retardo de 16f84 y 16f628
« en: 11 de Julio de 2008, 11:59:10 »
que tal, soy nuevo en el foto y este es mi primer post, espero que me puedan ayudar.
 antes que nada pido disculpas si por casualidad estoy creando un tema de una pregunta ya respuesta pero en realidad me paso que busque la respuesta a mi pregunta dentro de este foro pero no logre conseguir que las cosas me funcionen, en caso de que sea así pido me digan en que tema esta la respuesta y borrare este tema sin problema (si es que puedo, no se si eso lo hacen los administradores)


buen mi problema en principio es con un simple retardo en el 16f84
 ya que pareciera que entra al ciclo pero nunca sale ya que las led que tengo conectadas en la salida (portB) se prenden pero nunca se apagan, el retardo supuestamente tendría que ser de un segundo.

acá el código que uso:


   List p=16f84
STATUS equ 0x03
PORTB equ 0x06
PORTA equ 0x05
CONT equ 0x0C
CONT2 equ 0x0D
CONT3 equ 0x0E

      org 0x00
      goto INICIO
      org 0x05
INICIO
      bsf STATUS,5    ;cambia al banco1
      clrf PORTB       ;PORTB salidas
      bcf STATUS,5    ;cambia al banco0
PROG
      movlw b'11111111'
      movwf PORTB
      call RETARDO
      movlw b'00000000'
      movwf PORTB
      call RETARDO
      goto PROG
RETARDO
      movlw .100         ; 1
      movwf CONT3      ; 1
CICLO3
      movlw .97          ; 1
      movwf CONT2      ; 1
CICLO2
      movlw .33            ; 1
      movwf CONT       ; 1
CICLO
      decfsz CONT,f        ;1*(N-1)+2
      goto   CICLO         ;2*(N-1)
      decfsz CONT2,f        ;1*(M-1)+2
      goto   CICLO2        ;2*(M-1)
      decfsz CONT3,f        ;1*(P-1)+2
      goto   CICLO3         ;2*(P-1)
      return
   end




por si les sirve de algo, estoy programando con una grabadora ICD2, el programa no me tira ningún error de compilación y el pic esta sano a y el oscilador trabaja a 4Mhz



y otro problema el cual por ahora no les pido respuesta ya que el pic se me acaba de quemar es la configuración del pic 16f628 para que funcione con el oscilador interno


también aclaro que recién estoy empezando con la programacion de pic así que sepan disculpar si cometí alguna burrada


pd: el código de el retardo lo saque de una pagina en la cual estaban echas las cuentas debidas, me parecieron correctas

gracias a todos de antemano!

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: problema con retardo de 16f84 y 16f628
« Respuesta #1 en: 11 de Julio de 2008, 12:10:15 »
Hola.

El programa está bien. Probaste desactivando el Watch Dog Timer?

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado En

  • PIC10
  • *
  • Mensajes: 26
Re: problema con retardo de 16f84 y 16f628
« Respuesta #2 en: 11 de Julio de 2008, 12:19:40 »
si, la configuracion de bits esta asi:


Oscillator             XT

Watchdog Timer   Off

Power up Timer    On (a pesar de que creo que no influye esta opción también la probe en  Off)

Code Protect        Off

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: problema con retardo de 16f84 y 16f628
« Respuesta #3 en: 11 de Julio de 2008, 12:36:44 »
me parece q a este nivel:

INICIO
      bsf STATUS,5    ;cambia al banco1
      clrf PORTB       ;PORTB salidas
      bcf STATUS,5    ;cambia al banco0
PROG

falta una declaración de entradas y salidas, osea faltaría un tris (en vez del PORT que pusiste), y arriba un equ: TRISB equ 0x86

INICIO
      bsf STATUS,5    ;cambia al banco1
      clrf TRISB       ;PORTB salidas
      bcf STATUS,5    ;cambia al banco0
PROG

con eso creo que iria bien, si tu retardo esta bien calculado.

sobre la configuracion del osc interno solamente en el config colocar en al cabecera:
__config _INTOSC_OSC_NOCLKOUT & _WDT_OFF
.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: problema con retardo de 16f84 y 16f628
« Respuesta #4 en: 11 de Julio de 2008, 12:53:57 »
Hola Cryn!

No es necesario. Se puede hacer de ambas formas. El direccionamiento a la memoria de registros en la familia 16F es de 7 bits, por lo que al pasar al banco 1 mediante el seteo del bit RP0 del registro STATUS, se está trabajando sobre el registro 0x80 + el valor del registro en cuestión. En este caso es el PORTB, por lo que sería 0x80+0x06 = 0x86. Lo mismo que poner TRISB(cuando pones TRISB, el ensamblador sólo considera los 7 bits de menor peso, por lo que tranforma el 0x86 en 0x06(ídem PORTB) y te regala una advertencia indicandote que el registro no se encuentra en el banco 0 y que te asegures de que los bits de los bancos esten correctamente seteados).
Ahora, en cuestiones de buena costumbre, aconsejaría poner TRISB en lugar de PORTB.

Entonces buscá que este todo bien conectado, ponele las resistencias adecuadas a los LEDS.El programa está bien por lo que vi, y el retardo es de casi 1segundo.

Saludos!
« Última modificación: 11 de Julio de 2008, 12:56:04 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: problema con retardo de 16f84 y 16f628
« Respuesta #5 en: 11 de Julio de 2008, 12:54:20 »
Correcto, lo que dice  Btruno y Cryn, no has definido las salidas, y si querés hacerlo definiendo cuales son entradas y cuales salidas, podrías hacer
MOVLW B'00000000'
MOVWF TRISB

Lógicamente, con todos ceros, serán todas salidas...

Suerte!

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: problema con retardo de 16f84 y 16f628
« Respuesta #6 en: 11 de Julio de 2008, 12:59:01 »
Correcto, lo que dice  Btruno y Cryn, no has definido las salidas

Cómo que no? :D

Sisi...es completamente válido lo que ha hecho "En" en su código. cualquiera de las dos formas son válidas.

Saludos! ;)
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: problema con retardo de 16f84 y 16f628
« Respuesta #7 en: 11 de Julio de 2008, 13:07:37 »
no me sabia esa bruno :mrgreen:

muy interesante
.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: problema con retardo de 16f84 y 16f628
« Respuesta #8 en: 11 de Julio de 2008, 13:22:22 »
Chi Chi Chi!

El direccionamiento DIRECTO en esta familia de PICs es de 9 bits, y está compuesto por:

Dos bits del STATUS: RP1 y RP0 y los 7 bits que se cargan mediante la instrucción.

Entonces, el registro a afectar va a ser el que conformen estos 9 bits:
         
    STATUS,RP1    STATUS,RP0               y los 7 bits que se incluyen en la instruccion (ej. movwf PORTB)
         b8                      b7                         b6 b5 b4 b3 b2 b1 b0



Ahora, en cuanto a direccionamiento INDIRECTO la cosa cambia...pero está también conformado por 9 bits.

el bit STATUS,IRP y los 8 bits que contene el registro FSR.

         STATUS,IRP                             FSR
               b8                      b7 b6 b5 b4 b3 b2 b1 b0             

A diferencia del direccionamiento directo, con este tipo de direccionamiento se pueden cargar 8 bits del registro a acceder en el registro FSR, por lo que si quieres trabajar más allá del registro 0xFF ya tendrás que setear el bit IRP. Obviamente en este caso del PIC 16F84 que no posee tanta "RAM" ni bancos, no surge efecto afectar los bits RP1 y IRP del registro STATUS.

Por lo que, según mis cálculos teóricos, hacer:

        movlw       TRISB
        movwf       FSR
        clrf           INDF

Debería funcionar también como un método para setear los bits de un puerto(en este caso el B).

Saludos!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado En

  • PIC10
  • *
  • Mensajes: 26
Re: problema con retardo de 16f84 y 16f628
« Respuesta #9 en: 11 de Julio de 2008, 13:36:33 »
saben que yo pensaba como bruno, que el PORTB al cargar el bit 5 de el banco STATUS pasaba al banco 1 y ya me ubicava en el TRISB cosa que poniendo 00000000 ya le decia que todos los RB que sean salidas, es mas, eso ya lo daba por sabido ya que antes de meterme con esto de retardos habia echo un par de programas que usaban al pic como un puente ocea, lo único que hacían era habilitar entradas y salidas para que cuando entra un pulso por tal pin salga por tal otro y me funciona van a la perfección y bueno, habia configurado las entradas y salidas con PORTB y  PORTA como lo hice en el programa que mostre.


 ahora.....

lo raro es que acabo de hacer lo que me aconsejaba "Cryn" y el pic empezó a oscilar!!!

 aunque todavia con problemas ya que los led prenden y apagan muy rapido y ni siquiera se acercan al segundo (aunque se llega a ver bien), intente cambiar los valores por números mas grandes pero pareciera que siempre se mantiene el la misma frecuencia de oscilacion, tienen idea de que puede ser?


el codigo ahora:


   List p=16f84
STATUS equ 0x03
PORTB equ 0x06
TRISB equ 0x86
CONT equ 0x0C
CONT2 equ 0x0D
CONT3 equ 0x0E
      org 0x00
      goto INICIO
      org 0x05
INICIO
      bsf STATUS,5         ;cambia al banco1
      clrf TRISB       ;PORTB salidas
      bcf STATUS,5         ;cambia al banco0
PROG
      movlw b'11111111'
      movwf PORTB
      call RETARDO
      movlw b'00000000'
      movwf PORTB
      call RETARDO
      goto PROG
RETARDO
      movlw .100         ; 1
      movwf CONT3      ; 1
CICLO3
      movlw .80         ; 1
      movwf CONT2      ; 1
CICLO2
      movlw .100             ; 1
      movwf CONT      ; 1
CICLO
      decfsz CONT,f         ;1*(N-1)+2
      goto   CICLO         ;2*(N-1)
      decfsz CONT2,f        ;1*(M-1)+2
      goto   CICLO2        ;2*(M-1)
      decfsz CONT3,f        ;1*(P-1)+2
      goto   CICLO3         ;2*(P-1)
      return
   end

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: problema con retardo de 16f84 y 16f628
« Respuesta #10 en: 11 de Julio de 2008, 13:48:36 »
quiza sea el problema del tiempo, intenta utilizar el programa PICDEL para generar retardos cíclicos, es muy facil de utilizar, esta acá en el foro: http://www.todopic.com.ar/foros/index.php?topic=5968.0
tb lo encuentras googleando.

un saludo
« Última modificación: 11 de Julio de 2008, 13:50:46 por Cryn »
.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: problema con retardo de 16f84 y 16f628
« Respuesta #11 en: 11 de Julio de 2008, 13:48:57 »
Jaja! Bueno...es que no puede ser! O sea, es exactamente lo mísmo :D

En fin, agregá la linea de configuración que te aconsejaron...

Y la verdad que no...pero asegurate de que los voltajes de alimentación sean los correctos y que la intensidad alcance para el circuito y cambia de cristal por las dudas.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado En

  • PIC10
  • *
  • Mensajes: 26
Re: problema con retardo de 16f84 y 16f628
« Respuesta #12 en: 11 de Julio de 2008, 14:04:14 »
si, yo pienso = que vos bruno la verdad que nose que pasa este pic me esta trastornando jajajaja no me van a creer pero ahora al parecer como que deja de oscilar pero le acerco el dedo a la resistencia sin llegar a tocarla y empieza a funcionar debe ser el protoboard que esta muy inestable pero = cuando funciona no es la frecuencia que quiero.

y Cryn el picdel ya lo tengo ya me lo descargue hace un rato pero cada ves que lo abro se me cuelga voy a probar con tu enlace gracias

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: problema con retardo de 16f84 y 16f628
« Respuesta #13 en: 11 de Julio de 2008, 14:08:28 »
Bueno, entonces ya hay un problemita distinto.

¿Le pusiste los capacitores al oscilador?

El retardo está bien. Lo simulé con el  MPLAB SIM y es de 995ms aprox.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado En

  • PIC10
  • *
  • Mensajes: 26
Re: problema con retardo de 16f84 y 16f628
« Respuesta #14 en: 11 de Julio de 2008, 14:41:09 »
si, el oscilador tiene 2 capacitores de 20


el retardo que vos me decis que simulaste es este no?


RETARDO
      movlw .100      ; 1
      movwf CONT3      ; 1
CICLO3
      movlw .97      ; 1
      movwf CONT2      ; 1
CICLO2
      movlw .33       ; 1
      movwf CONT      ; 1
CICLO
      decfsz CONT,f   ;1*(N-1)+2
      goto   CICLO   ;2*(N-1)
      decfsz CONT2,f   ;1*(M-1)+2
      goto   CICLO2   ;2*(M-1)
      decfsz CONT3,f   ;1*(P-1)+2
      goto   CICLO3   ;2*(P-1)
      return


saben que la linea de configuracion que me paso Cryn me tira error


__config _INTOSC_OSC_NOCLKOUT & _WDT_OFF


yo la verdad que nunca configure a traves de código y la verdad que no se como se hace por eso lo venia evitando
pero bueno tal ves ustedes me puedan ayudar, el error que me tira es este:


Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F84 "84.asm" /l"84.lst" /e"84.err"
Warning[205] C:\84\84.ASM 11 : Found directive in column 1. (__config)
Error[113]   C:\84\84.ASM 11 : Symbol not previously defined (_INTOSC_OSC_NOCLKOUT)
Error[113]   C:\84\84.ASM 11 : Symbol not previously defined (_WDT_OFF)
Message[302] C:\84\84.ASM 17 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Halting build on first failure as requested.
BUILD FAILED: Fri Jul 11 14:32:24 2008




y desde ya gracias por los datos que me vienen dando