sleep wake up e wdt

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

sleep wake up e wdt

Mensagempor vanessa » 13 Jan 2013 22:03

desejo que alguem olhe o codigo a seguir, ele é de um alarme com sensor iv que dispara quando o feixe é interrompido, o feixe é continuo e eu queria usar o sleep para fazer com que o feixe seja desligado de quando em quando economizando energia mas parece que o wdt nao esta acordando o pic. se eu tiro a funcao sleep o codigo funciona.
O QUE EU TO FAZENDO DE ERRADO, POR QUE NAO SAI DO SLEEP?
obs; antes que alguem diga que eu preciso desligar as saídas referentes aos bits <1:0> antes de entrar em sleep para economizar energia, vou fazer isso, mas primeiro eu tenho que fazer o wake up funcionar senao vira bagunca o codigo.


list p=16F688
#include <p16F688.inc>



errorlevel -302 ; no warnings about registers not in bank 0


;***** CONFIGURATION
; ext reset, no code or data protect, no brownout detect,
; no watchdog, power-up timer, 4Mhz int clock
__CONFIG _PWRTE_ON & _BOD_OFF & _MCLRE_OFF & _WDT_ON & _INTRC_OSC_NOCLKOUT & _CP_OFF & _CPD_OFF & _INTOSCIO & _FCMEN_OFF & _IESO_OFF


RESET CODE 0x0000
goto inicio

inicio

clrwdt

movlw b'000000'
banksel TRISA
movwf TRISA

movlw b'000011'
banksel PORTA
movwf PORTA



vigilancia


clrwdt

btfss PORTA,3 ;RA3
goto finalizou
sleep
nop
goto vigilancia

;;;fim vigilancia


finalizou

movlw b'000111'
banksel PORTA
movwf PORTA

goto finalizou

END
vanessa
Bit
 
Mensagens: 27
Registrado em: 29 Mar 2011 18:10

Mensagempor RobL » 15 Jan 2013 14:28

Tem capacitor de desacoplamento entre Vdd e Vss (100nF x 50V cerâmico) ?

Se a tensão entre Vdd e Vss é baixa, teste com uma frequencia bem baixa para o oscilador interno.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor jorgeluiz » 16 Jan 2013 00:56

nao conheço esse pic, mas acho que como a maioria dos pics, deve "acordar" com uma interrupçao. Entao bota o programa dentro do vetor de inturrupçao, que deve funcionar.
Avatar do usuário
jorgeluiz
Byte
 
Mensagens: 448
Registrado em: 26 Mar 2007 02:26

Mensagempor fabim » 16 Jan 2013 07:03

isto mesmo.
Qualquer uC acorda com algum tipo de interrupção gerada via HW.
No caso do pic, se você não criar o vetor de interrupção, e não HABILITAR a interrupção que no datasheet informa que acorda o pic do sleep, jamais irá funcionar!!
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor RobL » 16 Jan 2013 10:41

Não necessita isso no caso do WDT.
Ao estourar o wdt ele sai do sleep.
Executa a primeira instrução a seguir. Se GIE estiver habilitado executa a interrupção pendente, se não, segue o programa após sleep.
Se não tiver alguma pegadinha no PIC16F688 que não conheço, mas por ser 16F deve ser cópia dos demais dessa linha, o problema parece hardware.

Caso não encontre nada no hardware, principalmente a falta do capacitor de desacoplamento, ou tensão próxima do mínimo desse chip tente a seguir.
Creio que não seja isto, mas tente, como experiência:

Habilite MCRL, não esqucer de após ligar a alimentação ressetar, levando MCRL a zero e voltando a 1L. MCRL deverá estar com 1L ao entrar e sair do sleep.
Verifique agora se sai do sleep pelo wdt.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor ze » 16 Jan 2013 10:48

eu colocaria apenas BOD_ON
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor vanessa » 16 Jan 2013 12:02

poxa gente desculpa... eu testei so no proteus ( o pessoal tava apostando na tensao baixa), mas como nao funcionou no proteus eu resolvi nao tentar no hardware, eu ate uso o capacitor de desaclopamento...
eu tinha tambem dado uma boa procurada no datasheet pra ver se encontrava alguma pegadinha... mesmo nao precisando habilitar GIE eu fiz pra ver se funcionava...
vou habilitar o MCLR e resetar.
Nao descarto a hipotese do "hardware simulado" do proteus ta com problema, mas eu tenho medo de gravar um pic com o codigo com um codigo ruim e inutilizar o pic.
Se nada der certo eu vou acordar-lo com um overflow do timer.
Obrigado gente!
vanessa
Bit
 
Mensagens: 27
Registrado em: 29 Mar 2011 18:10

Mensagempor fabim » 16 Jan 2013 12:10

Robl, mais ai no caso do WDT, tu ta resetando o uC.
Se eu entendi direitinho, a vanessa quer continuar PC$+1.

sei lá, acredito eu.
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor ze » 16 Jan 2013 12:38

fabin o efeito do wdt no sleep é diferente. ele acorda pc + 1 como a menina quer e não o zero. sei lá só passei pra encher o saco. o robl confirma

ah e o óvbio ululante... menina se o seu mc for flash a chance de danificá-lo com cod errado tende a zero.
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor mastk » 16 Jan 2013 15:59

Não se faz omelete sem quebrar uns ovos, esteja disposta a queimar alguns PICs, o importante é que para cada erro que cometer aprender bem a fim de não repeti-lo novamente.
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor RobL » 16 Jan 2013 16:07

lellis está correto.

vanessa não custaria nada ter informado que é uma simulação, pra gente não quebrar cabeça com hardware.

Tente com MCLR na simulação que deve ter bug da outra forma, ou falta setar algo por aí para ele simular o wdt corretamente.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor vtrx » 16 Jan 2013 19:30

Wanessa,voce pode programar no vetor de reset(0x0000),um CALL Inicio,para depois de inicializar o hardware,ele voltar na sequencia e voce faer um teste com algum pino,e caso este pino esteja no nível que voce quer,ele salta para uma rotina ou execute um SLEEP,deixando o WDT sempre estourar,tipo:
Código: Selecionar todos
RESET CODE 0x0000
  CALL Inicio
  BTFSC PORTA,0
  SLEEP
  GOTO alguma coisa
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor vanessa » 17 Jan 2013 11:44

realmente, o que eu desejo fazer é pc + 1,
vtrx; eu não desejo estourar o WDT quando o pic ta acordado, eu desejo usar o SLEEP e aí sim ele estoura quando o pic ta dormindo.
vanessa
Bit
 
Mensagens: 27
Registrado em: 29 Mar 2011 18:10

Mensagempor RobL » 17 Jan 2013 16:32

É pra acordar com WDT. Não vale balde de água fria, vuvuzela ou o wouuu da Valéria.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor vtrx » 17 Jan 2013 18:22

Código: Selecionar todos
eu não desejo estourar o WDT quando o pic ta acordado, eu desejo usar o SLEEP e aí sim ele estoura quando o pic ta dormindo.

Nem voce e nem eu!
Limpe o WDT quando o código estiver rodando em modo 'normal',como ja foi dito,só sai do Sleep com Interrup~çao ou WDT...
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Bing [Bot] e 1 visitante

x