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?