Autor Tema: Interrupcion por RX serial  (Leído 5713 veces)

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

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Interrupcion por RX serial
« Respuesta #15 en: 04 de Septiembre de 2016, 11:47:14 »
Citar
Para que se entienda mejor guardar que pines están prendidos y cuales apagados y cuales parpadeando, apagar todo y luego volver todo a como estaba.

No en el sentido de "Apagarlo" (Cortarle toda la energia) al micro. Si le cortas toda energia entonces vas a perder el estado que tengas.

Lo que podes hacer es crear un estado de "Stand by" como poseen otros productos, es decir llevarlo a un estado de menor consumo, que en realidad es el SLEEP en ese PIC, durante el SLEEP los puertos mantienen su valor, aunque antes del SLEEP deberia ser recomendable, guardar los valores, poner las salidas apagadas (asi no sale corriente) o pasarlas a entradas y luego ir a SLEEP. Finalmente cuando salis y reanuda desde donde dejo pones los valores que tenia el puerto, ya que la RAM queda alimentada por lo cual no se pierden los valores.

La otra opcion es detectar cuando se corta la corriente, al momento de cortarse, guardar en la EEPROM (si es que posee) los valores del puerto, asi al comienzo del programa leerlos.
No podrias escribir a cada rato la EEPROM sino llegarias al limite de escrituras que posee.

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re:Interrupcion por RX serial
« Respuesta #16 en: 04 de Septiembre de 2016, 17:10:47 »
No, yo no me referia a apagar el pic, si no a apagar todos los led conectados a las salidas

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Interrupcion por RX serial
« Respuesta #17 en: 04 de Septiembre de 2016, 17:40:33 »
No, yo no me referia a apagar el pic, si no a apagar todos los led conectados a las salidas

Entonces deberias guardar en algun registro los valores de los puertos, y luego ponerlos a 0.

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re:Interrupcion por RX serial
« Respuesta #18 en: 04 de Septiembre de 2016, 21:22:14 »
estoy probando con lo que me habías sugerido anteriormente con el W_TEMP, me funciona solo con los que están parpadeando imagino que es por que para hacerlo pongo a 1 un registro, entonces el W_TEMP guarda el valor de la variable, pero no guarda los pines que e activado con :

Código: [Seleccionar]
BSF      PORTB,2
me podrías explicar como hago para guardar estos, lo que estoy haciendo es:

Código: [Seleccionar]
dato_serie  EQU     0x53 ; variables
W_TEMP     EQU     0x54
STATUS_TEMP EQU     0x55
PCLATH_TEMP EQU     0x56

;**************************************
MUERTO
call salvar   
clrf PORTA
clrf PORTB
clrf PORTC
clrf PORTD
clrf PORTE
call DEMORA
call DEMORA
call volver
goto inicio

;*******************************************
salvar
movwf W_TEMP
swapf STATUS,W
clrf STATUS
movwf STATUS_TEMP
movf PCLATH,W
movwf PCLATH_TEMP
return

volver
movf PCLATH_TEMP,W
movwf PCLATH
swapf STATUS_TEMP,W
movwf STATUS
swapf W_TEMP,F
swapf W_TEMP,W
return
 

siguiendo el ejemplo del datasheet

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re:Interrupcion por RX serial
« Respuesta #19 en: 05 de Septiembre de 2016, 02:55:27 »
lo solucione manejando todo con variables para luego en el lazo principal actuar de acuerdo a esas variables, asi al tener todo en registros cuando hago uso del W_TEMP me guarda todo.

saludos