Página 1 de 1

MIKRO C

MensagemEnviado: 10 Abr 2010 18:36
por Pask
Amigos, como eu habilitei o watchdog timer no compilador Mikro C e gostaria de saber como ressetá-lo dentro do código antes que ele estoure.

Como fazer isso neste compilador?

Obrigado

MensagemEnviado: 10 Abr 2010 19:05
por Fabio777
usa o comando em asm mesmo, aqui dá certo


asm{
CLRWDT
}

MensagemEnviado: 11 Abr 2010 06:55
por fabim
Fabio777 escreveu:usa o comando em asm mesmo, aqui dá certo


asm{
CLRWDT
}


_asm clrwdt;

ou
clrwdt();

MensagemEnviado: 11 Abr 2010 08:38
por Pask
Mas o Mikro C não possui uma instrução própria dele para fazer isso como os demais compiladores?

O estranho é que a gente não encontra nada sobre o watchdog timer nem mesmo no "help" do software.

Muito estranho!

MensagemEnviado: 11 Abr 2010 18:05
por Pask
Valeu amigos.

MensagemEnviado: 11 Abr 2010 20:21
por MOR_AL
Pask.
Você já viu que saiu o MikroC Pro?
MOR_AL

MensagemEnviado: 21 Abr 2010 16:09
por Pask
Amigos, um novo problema para vocês:

Se eu habilito o watchdog timer nos fuses do PIC quando estou trabalhando no compilador CCS, eu escrevo a seguinte instrução no início do código:

#fuses (clock = xxxxxxx, restart_wdt)

Com essa instrução, eu posso utilizar os delays a vontade que o wdt não vai estourar.

Agora eu pergunto: e no compilador MikroC Pro? Se eu habilito o wdt nos fuses e utilizo instruções delay no meu código, o wdt estoura! Como evitar este problema neste compilador?

Por exemplo: se eu utilizo o wdt com prescaler de 1:1, ele vai contar 18ms e estourar. Se eu utilizar uma instrução "delay_ms(50)", ele vai estourar antes do término desta contagem de tempo. Como resolver isto no Mikro C ?

Obrigado.

MensagemEnviado: 22 Abr 2010 08:11
por Pask
Não se desespere. Você não gosta de um bom desafio assim como eu?...kkkkkkkkkkkkkk

O que temos que fazer é o seguinte: para evitar o estouro do wdt antes que as rotinas de delay se completem, é colocar um prescaler adequado para ele. Se mesmo assim, não for suficiente, o jeito é abandonar as rotinas de delay e usar uma interrupção de timerX para criar o delay manualmente e, dentro da rotina de interrupção, acrescentarmos a instrução assembly:

asm {clrdwt}

Assim, todas vez que a interrupção acontecer, o wdt será apagado e nunca irá estourar!