Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
Rafael da Silvaa

Problema com "__delay" (18f6520)

Posts recomendados

Olá, irei utilizar o pic 18f6520 para controlar 4 motores. Estou na fase de simulação utilizando o proteus. O proteus está apresentando alguns problemas, onde, quando eu utilizo muito o comando __delay (xxx) ele reseta o programa do começo. Eu sempre fiz atividades utilizando 16f, e nunca tive problemas com isso, usava diversos "__delays" e não dava problema nenhum, e agora o 18f está me complicando.

No proteus aparece escrito "processor has been reset by watchdog time expiring", porém, como vocês verão, o WDT já tá OFF.

Já li que, na prática, não usa-se o "__delay", e sim, outros tipos de paralisação, que não domino, alguém pode me dizer onde posso ler sobre isso pro 18f?

O código é o seguinte, ele tá partindo com 1/3 da tensão (ccp em 80) e vai pra tensão inteira (249), isso ainda não é o que vou fazer, to só testando ainda.

 

//
// PIC18F6520 1kHz PWM
 
#include <xc.h>
#pragma MCLRE=OFF,WDT=OFF,LVP=OFF,BOREN=OFF
int main(void)
{

    CCP1CON = 0b00001100; 
    CCP2CON = 0b00001100;
    CCP3CON = 0b00001100;
    CCP4CON = 0b00001100;
    TRISC = 0b11111001;  
    TRISG = 0b11110110;
    T2CON = 0b00000100;    
    PR2 = 249; 
    CCPR1L = 25;
    CCPR2L = 25;
    CCPR3L = 25;
    CCPR4L = 25;
     
    while(1)
    {
        // 100% duty cycle pra 500ms é 249
        // 50% é 125
        // 0% é 1, 0 n funciona        
        CCPR1L = 80;
        CCPR2L = 80;
        CCPR3L = 80;
        CCPR4L = 80;       
        _delay(125000);
        _delay(125000);       
        CCPR1L = 249;
        CCPR2L = 249;
        CCPR3L = 249;
        CCPR4L = 249;       
        _delay(125000);
        _delay(125000);
        _delay(125000);
        _delay(125000);
    }}

 

Desculpa, não sei colocar o código em aba (alguém me ensina se der).

Se eu colocar mais delays do que esses que já tem, ele reseta o código (durante a simulação). Meu professor disse que provavelmente o proteus não está reconhecendo o "WDT = OFF", e na prática não daria problema, porém, realmente não usa-se "__delay" para fazer delay, isso é só para programas bobos, ou pequenas paradas. Porém, ainda não sei como fazer esses delays da melhor forma, usa-se interrupção, timer? Alguém pode me mandar algum material?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente é muito tempo parado sem fazer nada. Que parâmetro é aquele? mS? uS? Que valores de tempo precisas?

Quanto ao wdog, verifique nas propriedades do mc.

Quanto ao delay, você pode criar o seu
 

void delay(unsigned int d)
{
while(d--);
}

Claro, vai depender da velocidade do clock e tal mas já lhe é um norte

 

Código... Selecione e clique em "code"

Compartilhar este post


Link para o post
Compartilhar em outros sites
Este tópico está parado há muito tempo. Certifique-se que a sua mensagem tem a ver com o tema sendo discutido. Obrigado.

Junte-se à conversa

Você pode postar agora e cadastrar-se depois. Se você tem uma conta, faça o login para postar.

Visitante
Responder

×   Você colou conteúdo com formatação.   Restore formatting

  Só é possível ter até 75 emoticons.

×   O link foi automaticamente convertido para mostrar o conteúdo.   Clique aqui para mostrá-lo como link comum

×   Seu texto anterior foi restaurado.   Limpar o editor

×   You cannot paste images directly. Upload or insert images from URL.

Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!