Autor Tema: Reinicio del PIC  (Leído 11344 veces)

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

Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
RE: Reinicio del PIC
« Respuesta #15 en: 02 de Abril de 2006, 14:04:00 »
Muchas gracias Mauricio por la paciencia que estas teniendo conmigo. Mañana mismo lo pruebo todo y te comento. Un abrazo.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Reinicio del PIC
« Respuesta #16 en: 02 de Abril de 2006, 14:57:00 »
Escrito originalmente por fito20
Muchas gracias Mauricio por la paciencia que estas teniendo conmigo. Mañana mismo lo pruebo todo y te comento. Un abrazo.


Gracias, no me molesta dar tips o sugerencias siempre que del otro lado muestren intenciones de comprender y de esforzarse por encontrar una solución.

Tu lo has demostrado con creces así que seguiré ayudandote en lo que esté a mi alcance.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
RE: Reinicio del PIC
« Respuesta #17 en: 03 de Abril de 2006, 05:29:00 »
Hola maunix, te cuento.

He probado el codigo incluyendo los retrasos, y cambiando lo que me dijiste, solo que ahora, el LED que enciendo para saber que el circuito esta conectado se apaga y enciende alternativamente, es decir, que el programa se esta reiniciando.

Te muestro el codigo.

Codigo:
;---------------Encabezado-------------

   LIST   p=16f876       
   radix   hex       
   INCLUDE   <P16F876.INC>

;------------mapa de memoria---------

   
reg1   equ   0x20        ; Estos 3 registros los utilizaré
reg2   equ   0x21        ; para hacer el retardo
reg3   equ   0x22           
R_ContB   equ   0x23
R_ContA   equ   0x24

#DEFINE   UP   PORTB,1      ; direccion del pulsador UP
#DEFINE   DOWN   PORTB,2      ; direccion del pulsador DOWN
#DEFINE   MIDS   PORTB,3


#DEFINE   CS1   PORTC,0      ; direccion del pin de seleccion del CHIP 1
#DEFINE   PR   PORTC,2      ; pin del PRESET para poner los potes a midscale
#DEFINE   SHDN   PORTC,6

POT_GANANCIA   EQU   .32


GR_GA   macro
   bcf   PORTC,0         ; pone un 0 para activar pot graves-ganancia
   endm


NO_CHIP   macro
   bsf   PORTC,0         ; pone un 1 para desactivar pot graves-ganancia
   endm


;-------Configuración de puertos-------

reset   org   0x00         ; origen del programa, aquí comenzará siempre que ocurra un reset
   goto    inicio        ; salta a "inicio"
   
inicio   bcf   STATUS,RP0
   bcf   STATUS,RP1
   clrf   POT_GANANCIA
   clrf   PORTA
   clrf   PORTB
   clrf   PORTC
   bsf   STATUS,RP0     ; banco1
   movlw   0x06
   movwf   ADCON1
   movlw   0XCF
   movwf   TRISA
   movlw   b"11111111"  ;
   movwf   TRISB        ; y pasa el valor a trisb
   movlw   b"00010000"
   movwf   TRISC
   movlw   B"10000000"      ;
   movwf   SSPSTAT         ; cargo el reguistro SSPSTAT con el valor anterior
   bcf   STATUS,RP0      ; banco 0

   call   retardo


   NO_CHIP            ; llama a la macro de deshabilitar los 4 potes.

   call   retardo

   movlw   B"00110010"      ; no collision, no overflow, habilito el puerto SPI, clock inactivo en nivel alto, FOSC/64
   movwf   SSPCON         ; pasamos estos valores a control SPI
   bsf   PORTC,1         ; ponemos un 1 en LED para encenderlo y ver que funciona el circuito
;   bsf   PORTC,6          ; ponemos un 1 en SHUTDOWN
;   bsf   PORTC,2         ; ponemos un 1 en PRESET para midscale

   call   retardo

test   btfsc   PORTB,2
   call   subdown
   goto   test


subdown   GR_GA
   call   retardo
   bsf   PORTC,7
   bcf   STATUS,RP1
   bcf   STATUS,RP0   ; banco 0
   movlw   B"00000000"   ; apunta a la direccion RDAC1
   call   output
   movlw   B"00000011"   ; coloca el pote en la posicion 3
   call   output
   call   retardo
   NO_CHIP
   call   retardo
   return

output   movwf   SSPBUF
   bsf   STATUS,RP0   ; banco 1
ret   btfss   SSPSTAT,BF
   goto   ret
   bcf   STATUS,RP0   ; banco 0
   movf   SSPBUF,W
   return
   
   
retardo   movlw   20        ; Aquí se cargan los registros
   movwf   reg1        ; reg1, reg2 y reg3
              ; con los valores 10, 20 y 30
tres   movlw   30        ; respectivamente
   movwf   reg2

dos   movlw   40
   movwf   reg3

uno   decfsz   reg3,1        ; Aquí se comienza a decrementar
   goto   uno        ; Cuando reg3 llegue a 0
   decfsz   reg2,1        ; le quitare 1 a reg2
   goto   dos        ; cuando reg2 llegue a 0   
   decfsz   reg1,1        ; le quitare 1 a reg1
   goto   tres        ; cuando reg1 llegue a 0
   retlw   00        ; regresare al lugar
              ; de donde se hizo la llamada

;------------------------------------------
   end           ; se acabó
;------------------------------------------



Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
RE: Reinicio del PIC
« Respuesta #18 en: 03 de Abril de 2006, 06:44:00 »
Respecto a lo de colocar el pote en la posicion media, si que lo he conseguido, con eso no tengo problema, pero si con el reinicio este que te comento.

Un saludo.

Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
RE: Reinicio del PIC
« Respuesta #19 en: 03 de Abril de 2006, 12:28:00 »
Mauricio, para programar el PIC uso el ICProg, y por defecto activa el watchdog... porque la casilla de la derecha WDT aparece marcada. La deshabilito al programar el PIC?

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Reinicio del PIC
« Respuesta #20 en: 03 de Abril de 2006, 15:31:00 »
Escrito originalmente por fito20
Mauricio, para programar el PIC uso el ICProg, y por defecto activa el watchdog... porque la casilla de la derecha WDT aparece marcada. La deshabilito al programar el PIC?


Te paso a explicar.  No es tema del icprog que tenga dichos casilleros como activados o desactivados, sino que es la información por defecto de un pic.  Si te fijas en el manual de tu pic en Configuration Bits, verás que por default (salvo que lo cambies adrede) el watchdog está activado.  Entonces debes desactivarlo tu mismo! o bien hacer un clrwdt en tu software para evitar que el pic se resetee a causa del watchdog.

El watchdog no es ni mas ni menos que un timer el cual se puede a su vez conectar a un prescaler, que una vez que llega a su cuenta resetea al pic.  esto es util cuando un software se queda colgado por alguna causa, el wdt lo reiniciará siempre que no se pase por la rutina de clrwdt.  Al pasar por clrwdt (clear watchdog timer) se resetea la cuenta del watchdog y entonces vuelve a comenzar.  

Además le debes indicar a tu pic, que tipo de cristal usará, etc.  Todo eso lo debes modificar, no se dará cuenta solito. jeje.

Fijate la directiva config o bien desactiva el wdt al programar el pic.  Además fijate si usas cristal < 4Mhz pon el oscilador como XT, si usas mayor a 4Mhz ponlo como HS.  

Saludos






- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
RE: Reinicio del PIC
« Respuesta #21 en: 04 de Abril de 2006, 04:40:00 »
Muchas gracias por la explicacion Mauricio, estabas en lo cierto, desactivando el watch dog ya no resetea. (Lo de seleccionar XT ya lo hacia)

He ensayado el codigo con las cuatro posibilidades de configuracion de SPI que me recomendaste en la pagina anterior, pero sigue sin funcionar.

He comprobado que el CS se activa antes de enviar datos, y desactiva despues de recibirlos.

Tambien he aumentado los retardos a 2 segundos, pero tampoco sirve.

Pienso que el problema podria estar relacionado con el envio de bits, el potenciometro acepta 11 bits, y yo le estoy mandando 16 bits desde el PIC. Habria alguna manera para enviar tan solo 11 bits desde el PIC?

Espero tu respuesta. En todo caso, mañana ire a la facultad y testeare el circuito con un osciloscopio para ver exactamente que es lo que esta fallando.

Un saludo.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Reinicio del PIC
« Respuesta #22 en: 04 de Abril de 2006, 06:21:00 »
Escrito originalmente por fito20
Pienso que el problema podria estar relacionado con el envio de bits, el potenciometro acepta 11 bits, y yo le estoy mandando 16 bits desde el PIC. Habria alguna manera para enviar tan solo 11 bits desde el PIC?

Espero tu respuesta. En todo caso, mañana ire a la facultad y testeare el circuito con un osciloscopio para ver exactamente que es lo que esta fallando.

Un saludo.


No, no es importante eso de los 11 o 16 bits.  En realidad la gente que hace estos integrados sabe perfectamente que los modulos SPI mandan en múltiplos de 8 bits los datos, es por eso que recien los aceptan cuando se les indica latchear la informacion.

Como alternativa podrías hacer la transmisión tu mismo, diseñandote toda la trama por software.  Si, suena a engorroso pero no es la muerte.  Un SPI por software es la comunicacion más simple que puedas llegar a imitar (muchisimo más simple que la UART).  La simplicidad radica en que es una comunicación síncrona donde está perfectamente claro donde se envian los datos, donde se latchean, etc.

Me parece muy bien que uses el osciloscopio eso te disipará muchas dudas.  Esta semana estaré de viaje así que espero puedas resolver tu problema o al menos tengas paciencia hasta que yo regrese (o bien algún otro del foro te podría ayudar).

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
RE: Reinicio del PIC
« Respuesta #23 en: 04 de Abril de 2006, 08:56:00 »
Ok Mauricio, ire posteando lo que consiga y las dudas que me vayan surgiendo. Cuando vuelvas echale un ojo al hilo, por favor.

Un saludo.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Reinicio del PIC
« Respuesta #24 en: 04 de Abril de 2006, 10:00:00 »
Escrito originalmente por fito20
Ok Mauricio, ire posteando lo que consiga y las dudas que me vayan surgiendo. Cuando vuelvas echale un ojo al hilo, por favor.

Un saludo.


Sí, lo haré Giño No te dejaré tirado si esa es tu preocupación  Sonrisa GiganteSonrisa Gigante
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
RE: Reinicio del PIC
« Respuesta #25 en: 05 de Abril de 2006, 02:53:00 »
Por fin consegui comunicacion!...pero no la esperada...mientras yo apuntaba al pote 2 y lo trataba de colocar en una posicion fija al accionar el pulsador, lo que ocurre es lo siguiente:

Cuando pulso el boton, es el pote 1 el que varia, y no a una posicion fija, sino que cada vez que lo pulso, el pote aumenta su valor, desde 0K, 40ohm....hasta 50K...

Escribo el codigo, por si alguien ve el error:

Codigo:
;---------------Encabezado-------------

   LIST   p=16f876       
   radix   hex       
   INCLUDE   <P16F876.INC>

;------------mapa de memoria---------

   
reg1   equ   0x20   ; Estos 3 registros los utilizaré
reg2   equ   0x21   ; para hacer el retardo
reg3   equ   0x22           
R_ContB   equ   0x23
R_ContA   equ   0x24
R_ContC   equ   0x25
R_ContE   equ   0x28
R_ContD   equ   0x29

temp1   equ   0x26
temp2   equ   0x27

#DEFINE   UP   PORTB,1      ; direccion del pulsador UP
#DEFINE   DOWN   PORTB,2      ; direccion del pulsador DOWN
#DEFINE   MIDS   PORTB,3


#DEFINE   CS1   PORTC,0      ; direccion del pin de seleccion del CHIP 1
#DEFINE   PR   PORTC,2      ; pin del PRESET para poner los potes a midscale
#DEFINE   SHDN   PORTC,6

POT_GANANCIA   EQU   .32


GR_GA   macro
   bcf   PORTC,0      ; pone un 0 para activar pot graves-ganancia
   endm


NO_CHIP   macro
   bsf   PORTC,0      ; pone un 1 para desactivar pot graves-ganancia
   endm


;-------Configuración de puertos-------

reset   org   0x00         ; origen del programa, aquí comenzará siempre que ocurra un reset
   goto    inicio        ; salta a "inicio"
   
inicio   bcf   STATUS,RP0
   bcf   STATUS,RP1
   clrf   POT_GANANCIA
   clrf   PORTA
   clrf   PORTB
   clrf   PORTC
   bsf   STATUS,RP0    ; banco1
   movlw   0x06
   movwf   ADCON1
   movlw   0XCF
   movwf   TRISA
   movlw   b"11111111"  
   movwf   TRISB           ; y pasa el valor a trisb
   movlw   b"00010000"
   movwf   TRISC
   movlw   B"10000000"   
   movwf   SSPSTAT      ; cargo el reguistro SSPSTAT con el valor anterior
   bcf   STATUS,RP0   ; banco 0
   movlw   B"00110010"   ; no collision, no overflow, habilito el puerto SPI, clock inactivo en nivel alto, FOSC/64
   movwf   SSPCON      ; pasamos estos valores a control SPI
   
   call   Retardo_1s
   NO_CHIP         ; llama a la macro de deshabilitar los 4 potes.
   call   Retardo_1s

   bsf   PORTC,1      ; ponemos un 1 en LED para encenderlo y ver que funciona el circuito
;   bsf   PORTC,6       ; ponemos un 1 en SHUTDOWN
;   bsf   PORTC,2      ; ponemos un 1 en PRESET

   call   Retardo_1s

test   btfsc   PORTB,2
   call   subdown
   goto   test


subdown   GR_GA
   bsf   PORTC,6
   bsf   PORTC,2
   call   Retardo_1s
   bsf   PORTC,7
   bcf   STATUS,RP1
   bcf   STATUS,RP0   ; banco 0
   movlw   B"00000001"   ; apunta a la direccion RDAC2
   call   spien
   movlw   B"0001111"   ; coloca el pote en la posicion 3
   call   spien
   NO_CHIP
   call   Retardo_1s
   bcf   PORTC,7
   return

output   movwf   SSPBUF
   bsf   STATUS,RP0   ; banco 1
ret   btfss   SSPSTAT,BF
   goto   ret
   bcf   STATUS,RP0   ; banco 0
   movf   SSPBUF,W
   return
   
   

;Envia el byte que viene en el registro "w" mediaante el protocolo spi.


spien   call   Retardo_100ms
   movwf   temp1      ;Salva el byte a transmitir en el registro temporal "temp1"
   movlw   0x08
   movwf   temp2      ;Inicializa el contador
   
bck   bsf   PORTC,5      ;Sube data
   btfss   temp1,7      ;Comprueba el bit y lo baja si es cero
   bcf   PORTC,5
   nop         ;Envia el bit
   bsf   PORTC,3
   nop         ;Da un pulso de reloj
   bcf   PORTC,3
   nop
   rlf   temp1,f      ;Rotamos a la izquierda "temp1"
   decfsz   temp2,f      ;Comprobamos el contador, para ver si hemos enviado los 8 bits
   goto   bck      ;Si no, repetimos el bucle
   bcf   PORTC,5
   return         ;Fin

 
Retardo_1s            ; La llamada "call" aporta 2 ciclos máquina.
   movlw   d"10"         ; Aporta 1 ciclo máquina. Este es el valor de "N".
   goto   Retardo_1Decima      ; Aporta 2 ciclos máquina.

Retardo_1Decima
   movwf   R_ContC         ; Aporta 1 ciclo máquina.
R1Decima_BucleExterno2
   movlw   d"100"         ; Aporta Nx1 ciclos máquina. Este es el valor de "M".
   movwf   R_ContB         ; Aporta Nx1 ciclos máquina.
R1Decima_BucleExterno
   movlw   d"249"         ; Aporta MxNx1 ciclos máquina. Este es el valor de "K".
   movwf   R_ContA         ; Aporta MxNx1 ciclos máquina.
R1Decima_BucleInterno          
   nop            ; Aporta KxMxNx1 ciclos máquina.
   decfsz   R_ContA,F      ; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar).
   goto   R1Decima_BucleInterno   ; Aporta (K-1)xMxNx2 ciclos máquina.
   decfsz   R_ContB,F      ; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar).
   goto   R1Decima_BucleExterno   ; Aporta (M-1)xNx2 ciclos máquina.
   decfsz   R_ContC,F      ; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar).
   goto   R1Decima_BucleExterno2   ; Aporta (N-1)x2 ciclos máquina.
   return            ; El salto del retorno aporta 2 ciclos máquina.




Retardo_100ms            ; La llamada "call" aporta 2 ciclos máquina.
   movlw   d"100"         ; Aporta 1 ciclo máquina. Este es el valor de "M".
   goto   Retardos_ms      ; Aporta 2 ciclos máquina.

Retardos_ms
   movwf   R_ContD         ; Aporta 1 ciclo máquina.
R1ms_BucleExterno
   movlw   d"249"         ; Aporta Mx1 ciclos máquina. Este es el valor de "K".
   movwf   R_ContE         ; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno
   nop            ; Aporta KxMx1 ciclos máquina.
   decfsz   R_ContE         ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
   goto   R1ms_BucleInterno      ; Aporta (K-1)xMx2 ciclos máquina.
   decfsz   R_ContD         ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
   goto   R1ms_BucleExterno    ; Aporta (M-1)x2 ciclos máquina.
   return            ; El salto del retorno aporta 2 ciclos máquina

;------------------------------------------
   end           ; se acabó
;------------------------------------------




Un saludo y gracias.

  • Visitante
RE: Reinicio del PIC
« Respuesta #26 en: 05 de Abril de 2006, 17:57:00 »
saludos desde colombia, mi nombre es raul castrillon y soy biomedico, en este momento estoy trabajando en el diseñ de un esterilizador de material quirurgico y pretendo colocarle un LCD pero no se como configurarlo con el PIC estoy buscando ayuda y si usted puede brindarme informacion le agradeceria mucho.
[/code][/cita]

Desconectado fito20

  • PIC12
  • **
  • Mensajes: 91
Re: Reinicio del PIC
« Respuesta #27 en: 09 de Abril de 2006, 09:50:45 »
Hay muchos hilos abiertos sobre LCD, de hecho mas arriba de este post hay uno. Suerte.

Consegui mover el potenciometro como dije mas arriba, pero no logro que haga lo que quiero. Ahora estoy probando el siguiente codigo pero tampoco obedece, sino mas bien hace lo que quiere.

Tengo desactivado el pulsador. El clock del pote esta conectado con un pin del PIC que hace de reloj, todo via software. Envio 11bits solamente, que es lo que entiende el pote.

He desactivado la configuracion del SPI porque lo estoy haciendo en modo manual.

Echadme una manilla por favor.

Código: [Seleccionar]
;---------------Encabezado-------------

LIST p=16f876      
radix hex      
INCLUDE <P16F876.INC>

;------------mapa de memoria---------

   
reg1 equ 0x20 ; Estos 3 registros los utilizaré
reg2 equ 0x21 ; para hacer el retardo
reg3 equ 0x22      
R_ContB equ 0x23
R_ContA equ 0x24
R_ContC equ 0x25
R_ContE equ 0x28
R_ContD equ 0x29

temp1 equ 0x26
temp2 equ 0x27

#DEFINE UP PORTB,1 ; direccion del pulsador UP
#DEFINE DOWN PORTB,2 ; direccion del pulsador DOWN
#DEFINE MIDS PORTB,3


#DEFINE CS1 PORTC,0 ; direccion del pin de seleccion del CHIP 1
#DEFINE PR PORTC,2 ; pin del PRESET para poner los potes a midscale
#DEFINE SHDN PORTC,6

POT_GANANCIA EQU .32


GR_GA macro
bcf PORTC,0 ; pone un 0 para activar pot graves-ganancia
endm


NO_CHIP macro
bsf PORTC,0 ; pone un 1 para desactivar pot graves-ganancia
endm


;-------Configuración de puertos-------

reset org 0x00      ; origen del programa, aquí comenzará siempre que ocurra un reset
goto inicio      ; salta a "inicio"

inicio bcf STATUS,RP0
bcf STATUS,RP1
clrf POT_GANANCIA
clrf PORTA
clrf PORTB
clrf PORTC
bsf STATUS,RP0 ; banco1
movlw 0x06
movwf ADCON1
movlw 0XCF
movwf TRISA
movlw b'11111111'   
movwf TRISB       ; y pasa el valor a trisb
movlw b'00010000'
movwf TRISC
; movlw B'10000000'
; movwf SSPSTAT ; cargo el reguistro SSPSTAT con el valor anterior
bcf STATUS,RP0 ; banco 0
; movlw B'00110010' ; no collision, no overflow, habilito el puerto SPI, clock inactivo en nivel alto, FOSC/64
; movwf SSPCON ; pasamos estos valores a control SPI

call Retardo_1s
NO_CHIP ; llama a la macro de deshabilitar los 4 potes.
call Retardo_1s

bsf PORTC,1 ; ponemos un 1 en LED para encenderlo y ver que funciona el circuito
bsf PORTC,6 ; ponemos un 1 en SHUTDOWN
bsf PORTC,2 ; ponemos un 1 en PRESET

call Retardo_1s

GR_GA
call Retardo_1s
bcf STATUS,RP1
bcf STATUS,RP0 ; banco 0

bit1 bsf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms

bit2 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms

bit3 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms

bit4 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms

bit5 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms

bit6 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms

bit7 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms

bit8 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms

bit9 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms

bit10 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms

bit11 bcf PORTC,5 ;Sube data
call Retardo_100ms ;Envia el bit
bsf PORTC,7
call Retardo_100ms ;Da un pulso de reloj
bcf PORTC,7
call Retardo_100ms

NO_CHIP
call Retardo_1s


test goto test

 
Retardo_1s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'10' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.

Retardo_1Decima
movwf R_ContC ; Aporta 1 ciclo máquina.
R1Decima_BucleExterno2
movlw d'100' ; Aporta Nx1 ciclos máquina. Este es el valor de "M".
movwf R_ContB ; Aporta Nx1 ciclos máquina.
R1Decima_BucleExterno
movlw d'249' ; Aporta MxNx1 ciclos máquina. Este es el valor de "K".
movwf R_ContA ; Aporta MxNx1 ciclos máquina.
R1Decima_BucleInterno         
nop ; Aporta KxMxNx1 ciclos máquina.
decfsz R_ContA,F ; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar).
goto R1Decima_BucleInterno ; Aporta (K-1)xMxNx2 ciclos máquina.
decfsz R_ContB,F ; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar).
goto R1Decima_BucleExterno ; Aporta (M-1)xNx2 ciclos máquina.
decfsz R_ContC,F ; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto R1Decima_BucleExterno2 ; Aporta (N-1)x2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina.




Retardo_100ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'100' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.

Retardos_ms
movwf R_ContD ; Aporta 1 ciclo máquina.
R1ms_BucleExterno
movlw d'249' ; Aporta Mx1 ciclos máquina. Este es el valor de "K".
movwf R_ContE ; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno
nop ; Aporta KxMx1 ciclos máquina.
decfsz R_ContE ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
goto R1ms_BucleInterno ; Aporta (K-1)xMx2 ciclos máquina.
decfsz R_ContD ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto R1ms_BucleExterno ; Aporta (M-1)x2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina

;------------------------------------------
end      ; se acabó
;------------------------------------------


Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Reinicio del PIC
« Respuesta #28 en: 09 de Abril de 2006, 12:10:10 »
Hola, voy mirando el codigo, y te voy poniendo los errores que encuentro. ya pa empezar aca tenes uno grave:

reg1   equ   0x20
POT_GANANCIA   EQU   .32

Estas utilizando la misma posicion GPR para ambas variables, eso trae problemas si no era tu intencion...
Sigamos viendo...
"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 maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Reinicio del PIC
« Respuesta #29 en: 09 de Abril de 2006, 14:49:55 »
Hola, voy mirando el codigo, y te voy poniendo los errores que encuentro. ya pa empezar aca tenes uno grave:

reg1   equ   0x20
POT_GANANCIA   EQU   .32

Estas utilizando la misma posicion GPR para ambas variables, eso trae problemas si no era tu intencion...
Sigamos viendo...


Muy buen punto BrunoF

fito20 si todavia tienes inconvenientes, aquí he vuelto

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)