Ir ao conteúdo
  • Cadastre-se

Usando watchdog do pic no basic


Raphanara

Posts recomendados

Oi galera

Faço projetos com PIC usando Basic

E necessito implementar o watchdog timer no meu software

O caso é que tenho tido dificuldades pra evitar o reset.

vocês podem me dar dicas??

Sabem se instruções condicionais (select case e if else) são diferentes em termos de tempo?

Compilador que uso: Proton 2.1

Vlew!!!!

Link para o comentário
Compartilhar em outros sites

Não sei se vai servir para o Proton, este código foi feito para o PIC SIMULATOR IDE :

Define CONF_WORD = 0x2f14

Define CONF_WORD_2 = 0x3ffc

''******************** PIC Entrenadora BASIC (PicEBasic)********************

'NOMBRE: 16F88_Pic_EBasic_Ejemplo_16

'MICRO: PIC16F88

'FECHA/AUTOR: 06/07 - By COS

'Practicando con el WatchDog

'Si se pulsa S1 o S2 se anula la linea que hace reset al WatchDog

'Activacion del reset generado por el WatchDog sobre los 2mSeg.

'**********************************************************************

'-----------------------------Declaracion y Asignacion de valores---------------

Dim watchdog_on As Bit 'permite que se haga el reset al contador del watchdog

Dim pause As Word 'asigna el valor de espera en mSeg.

watchdog_on = 1 'inicializa la variable, borrado del registro del watchdog a on

'-----------------------------Configuracion del Clock, Puertos I/O--------------

AllDigital 'todos los puertos como I/O

CMCON = 0x07 'comparador a off

OSCCON = 0x7e 'set intrc To 8mhz, se usara reloj interno a 8Mhz

TRISA = 0xff 'Puerto A como Entradas

TRISB = 0xff 'puerto B como Entradas

'TRISA.4 = 1 'como entrada (RA4, adc)

'TRISA.6 = 1 'como entrada (RA6, tecla S1)

'TRISA.5 = 1 'como entrada (RA5, tecla S2)

TRISB.3 = 0 'como salida, iluminacion lcd

TRISA.7 = 0 'como salida, led amarillo

TRISB.0 = 0 'como salida, led verde

TRISB.4 = 0 'como salida, control servo

PORTB.3 = 1 'luz lcd a on (RB3)

PORTA.7 = 1 'led amarillo a off (RA7), negado

PORTB.0 = 1 'led verde a off (RB0), negado

'---------------------------Configuracion del WatchDog--------------------------

OPTION_REG.T0CS = 0 'selecciona reloj interno para el WDT

OPTION_REG.PSA = 1 'asigna el prescales al WDT

OPTION_REG.PS0 = 0 'bit de la seleccion del factor de division para el WDT

OPTION_REG.PS1 = 0 'bit de la seleccion del factor de division para el WDT

OPTION_REG.PS2 = 1 'bit de la seleccion del factor de division para el WDT

'************* Rutina del programa ***************************************

Gosub clear_watchdog 'borra el contador del watchdog antes que rebose

RA7 = 0 'salida led amarillo

RB0 = 0 'salida led verde

pause = 5000 'carga la rutina de espera con 5 Seg.

Gosub wait_ms 'salto con retorno a la rutina de espera

main: 'comiensa la rutina principal

RA7 = 1 'salida led amarillo

RB0 = 1 'salida led verde

pause = 500 'carga la rutina de espera con 0,5 Seg.

Gosub wait_ms 'salto con retorno a la rutina de espera

RB0 = 0 'salida led verde

pause = 500 'carga la rutina de espera con 0,5 Seg.

Gosub wait_ms 'salto con retorno a la rutina de espera

RA7 = 0 'salida led amarillo

pause = 500 'carga la rutina de espera con 0,5 Seg.

Gosub wait_ms 'salto con retorno a la rutina de espera

Goto main 'impide que termine la rutina main

End

clear_watchdog: 'borra el contador del WatchDog

If watchdog_on = 0 Then Return 'determina si se hace el reset al WatchDog

ASM: clrwdt 'reinicializa el WDT, assembler

Return

wait_ms: 'rutina de espera, reset al WatchDog y lectura de las teclas

While pause > 0 'bucle que se repite mientras la condiccion sea cierta

If RA6 = 0 Or RA5 = 0 Then watchdog_on = 0 'lee las teclas

WaitMs 1 'espera 1 mSeg.

pause = pause - 1 'decrementa el tiempo de espera

Gosub clear_watchdog 'salto con retorno a la rutina

Wend 'acota el bucle While

Return

End

Daniel,

Existe muita informação sobre Basic para PICs e AVRs, inclusive algumas apostilas, use este fórum como início de suas pesquisas :

http://www.ucontrol.com.ar/forosmf/index.php?board=2.0

Um abraço a todos.

Paulo

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Obrigado Colega!!!! Obrigado mesmo....adorei o link...

Vou aproveitar o post e não fazer outro para fazer uma pergunta...

Tenho um programa que estou fazendo (iniciando no basic) e precisava de um delay de 5min um de 10min e outro de 15min.

Com o comando: delay_ms(6000) somente consegui um tempo de 6s, como eu faço para obter mais que isso. OBS: delay_ms(900000) não existe como...

Link para o comentário
Compartilhar em outros sites

Utilizem Loops... ;)

Obs.: Eu não testei, só fiz para tirarem uma ideia...

Cada minuto tem 60 segundos

15 minutos possuem 900 segundos

15 * 60 = 900

Se você tem uma rotina de 6 segundos

900 / 6 = 150 vezes

program delay 15 minutos

dim vezes as byte

main:

vezes = 150

while (vezes > 0)

delay_ms(6000)

dec(vezes)

wend

end.

Link para o comentário
Compartilhar em outros sites

Caro amigo Andask! ²

Boa mesmoo! Escrevi um programinha básico para faze um led pisca e simulei, foi certo tirando alguns segundos de diferença (insignificante)...Adorei o raciocínio, muito bom, afinal pra quem não entende muito (meu caso) ajudou demais...

Obrigado mesmo! Dica muito boa.

Link para o comentário
Compartilhar em outros sites

Andask, não quero parecer abusado, mas so mais uma coisa caso tenha conhecimento...

Fiz um programa bem simples, certo, funcionou com pif16f84a, mas tive problemas ao passar para um PIC12C508A, não por configurações ou por suportar o tamanho do programa mas para programar e acessar informações.

Uso o microbasic e nele não existe a opção para PIC12C508A no máximo PIC12C6xx.

Outra: como acessar os pinos GP0 a GP4 através do basic?

bem, não custa nada perguntar né?

Link para o comentário
Compartilhar em outros sites

Utilizem Loops... ;)

Obs.: Eu não testei, só fiz para tirarem uma ideia...

Cada minuto tem 60 segundos

15 minutos possuem 900 segundos

15 * 60 = 900

Se você tem uma rotina de 6 segundos

900 / 6 = 150 vezes

Muito bom mesmo.

Utilizo um macete no caso de tempo "grandes" com WDT ligado.

Digamos que o WDT esteja em 300ms

então faço:

+++++++++++++++++++++++++++++++++++

tempo:

delay_ms (250)

clearwdt

return

+++++++++++++++++++++++++++++++++++

Ai podemos chama-lo (gosub tempo) sempre e mutiplica-lo sem estourar o WDT.

Link para o comentário
Compartilhar em outros sites

  • mês depois...

Olá, pessoal!

Sou novo no pedaço, e estou aprendendo ao mesmo tempo a programação em Assembly com Mplab e em Basic usando MikroBasic, portanto, qualquer ajuda é bem vinda.

Gostaria de uma dica, pois meu pc não tem porta serial DB9, só USB, tanto que para a gravação com Mplab, tenho que usar um adaptador, que funciona bem. Já fiz um código para uma simples lavadora de roupas e uma extensão elétrica com temporização fixa por 4 teclas, operacional aqui em casa, muito útil quando precisamos desligar um ventilador à noite depois de algumas horas, por exemplo.

Quanto a gravar com o Mikrobasic, sem serial DB9, como poderia fazer???

Desde já, Obrigado!

AdePIC

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois...
  • 2 meses depois...

Antes de mais nada gostaria de parabenizar a todos pelo alto nível do fórum e agradecer pelos excelentes comentários e ensinamentos dos mais experientes em programação do PIC. Tenho conhecimentos em eletrônica e sou iniciante no uso dos microcontoladores e tenho encontado muitas dificuldades em aprender o assembler, me desviando assim para a linguagem BASIC pelo fato de já usar o VB6 há alguns anos. Parabenizar ainda ao APHAWK pelo excelente tutorial sobre programação em basic para o pic.

IAS

Link para o comentário
Compartilhar em outros sites

Senhores....

No MPLAB vs 5.xx é possivel fazer a simulação passo a passo e observar o conteúdo dos registros, o que facilita muito o desenvolvimento em assembler, porém não traz algumas bibliotecas de definição tipo a "16F628A.inc", existindo apenas a "16F628.inc". Na versão 8.XX não consegui localizar essa facilidade (simular passo a passo). Pergunta: Existe alguma maneira ou algum outro programa para fazer essa simulação?

Atenciosamente

IAS

Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...

Olá, gostaria de aproveitar o tópico sobre WatchDog e pedir ajuda...

Tenho tentando utilizar o WatchDog no 16F877A mas sem sucesso... não consigo ativá-lo...

já setei o registro pra usar o prescaler nele, os outros 3 registros do prescaler.... sem sucesso... adicionei o comando #config/#endconfig para ativar o WDT, apesar de ele já ser ativado por default... tb não deu... não acho + outra ação...

Alguma ideia?!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!