Página 1 de 2

resetar o pic via software e zerar ram

MensagemEnviado: 07 Fev 2011 14:13
por cristian
acho q ja perguntei .....

mas como resetar o pic via software , sem ser pelo WDT

e

vi um codigo no mikroc apagando toda memoria ram ao lligar , mas nao achei onde foi , alguem ai sabe ?

MensagemEnviado: 09 Fev 2011 09:38
por ÁgioFelipe
Você pode fazer um circuito onde alguma saída do PIC coloque através de um transistor o MCLR em nivel lógico 0.

MensagemEnviado: 09 Fev 2011 09:50
por andre_luis
Também pensei nisso. Existem até CIs dedicados á isso.
Mas seria bacana se tivesse como fazer via firmware.

+++

Re: resetar o pic via software e zerar ram

MensagemEnviado: 09 Fev 2011 09:53
por barboza
cristian escreveu:acho q ja perguntei .....

mas como resetar o pic via software , sem ser pelo WDT

e

vi um codigo no mikroc apagando toda memoria ram ao lligar , mas nao achei onde foi , alguem ai sabe ?


Isso é default no arquivo startup.s no Keil.

MensagemEnviado: 09 Fev 2011 10:31
por vtrx
Não serve para voce?
@ clrf PCLATH
@ Goto 0

MensagemEnviado: 09 Fev 2011 12:39
por andre_luis
Isso não resseta as variáveis da RAM, correto ?

+++

MensagemEnviado: 09 Fev 2011 13:06
por ze
o óbvio ululante: pro pic que tem esta instrução algo como asm("reset") ou #asm reset #endasm ou etc. veja o help do seu compilador

MensagemEnviado: 09 Fev 2011 14:59
por andre_luis
Aparentemente não há essa no set de instrução do PIC, e qualquer outra coisa, seria por diretiva de compilador, que na prática, equivale a uma sequencia de instruçoes que realizaria esse apagamento das variáveis sequencialmente.

Emfim, não há uma resposta positiva pro cristian.

+++

MensagemEnviado: 09 Fev 2011 17:39
por vtrx
Isso não resseta as variáveis da RAM, correto ?

Veja ,dependendo de como foi programado o SoftWare dele,iniciando do enderço zero e zerando o PCLATH ,a Ram vai ser subscrita novamente(temos que analisar as funções dele).

MensagemEnviado: 09 Fev 2011 19:19
por EvandrPic
O que causaria o reset? Algum evento detectado ou gerado pelo programa gravado nesse microcontrolador?

Nesse caso você não poderia deixar um pino do PIC responsável por comandar o próprio reset? Quando o teu programa decidir pelo reset, ele levaria esse pino pra nivel alto, ou baixo, dependendo da lógica implementado e com isso, saturaria a base de um transistor que comandaria o reset.

Quanto ao apagamento da RAM ao iniciar o programa do PIC, nos códigos do livro da Mosaico Engenharia (Conectando o PIC), tem na inicialização do microcontrolador, uma parte do código responsável por fazer isso. Toda vez que o PIC é ligado ou resetado, é "zerada" a RAM.
Copiei do livro a parte do código que me refiro, talvez ajude.

Código: Selecionar todos
;***************************************************************
;*                    INICIALIZAÇÃO DA RAM                     *
;***************************************************************
; ESTA ROTINA IRÁ LIMPAR TODA A RAM DO BANCO 0, INDO DE 0X20 A 0X7F.
; EM SEGUIDA, AS VARIÁVEIS DE RAM DO PROGRAMA SÃO INICIALIZADAS.

   MOVLW  0X20
   MOVWF  FSR                         ; APONTA O ENDEREÇAMENTO INIDIRETO PARA                                 
                                      ; A PRIMEIRA POSIÇÃO DA RAM
   LIMPA_RAM
        CLRF    INDF                  ; LIMPA A POSIÇÃO
        INCF    FSR,F                 ; INCREMENTA O PONTEIRO PARA A PROXIMA POISÇÃO
        MOVF    FSR,W
        XORLW   0X80                  ; COMPARA PONTEIRO COM A ÚLTIMA POSIÇÃO + 1
        BTFSS   STATUS,Z              ; JÁ LIMPOU TODAS AS POSIÇÕES?
        GOTO    LIMPA_RAM             ; NÃO - LIMPA A PRÓXIMA POSIÇÃO
                                      ; SIM


MensagemEnviado: 09 Fev 2011 19:51
por andre_luis
Agora sim...
Esse tipo de rotinas ficam em determinados compiladores em arquivos de Startup(.asm), que além disso, também pré-configuram alguns módulos.

+++

MensagemEnviado: 10 Fev 2011 06:40
por fabim
caras, os 18F tem o comando reset!!! Todos sem excessão !!!
Sobre limpar ram, que doideira de pergunta eim?
Ram é endereçada, basta criar um ponteiro.

void apaga_ram(void){

char *ponteiro_apaga,contador;

ponteiro_apaga = (char ) 0xEndereço_inicial_bank0;
for(contador=0;contador<banco0;contador++)
*ponteiro_apaga++ = 0;


ponteiro_apaga = (char ) 0xEndereço_inicial_bank1;
for(contador=0;contador<banco1;contador++)
*ponteiro_apaga++ = 0;

/*os bancos 2 e 3 tem pouquissimos bytes em qualquer pic, e podem ser descartados*/

}

MensagemEnviado: 10 Fev 2011 07:53
por andre_luis
Não se estiver falando do 16F.
De qualquer modo, dá na mesma realizar esse apagamento em C ou ASM.

+++

MensagemEnviado: 10 Fev 2011 08:50
por ze
como não se sabe qual pic é e só por curiosidade, aquela rotina asm serve pra TODOS os pics? desde o 10F ao DSPIC?

MensagemEnviado: 10 Fev 2011 15:24
por cristian
o pic é um18f4550


o pic fica monitorando se um pino foi ligado ai reseta....



ma so pior é a cada alimentaçao do pic as variaveis fica loucas , e as vezes atrapalha o funionamento , entao tenho q resetar o pic