1) o cristal está oscilando em todos os testes e todas as vezes que ligo e desligo .. ele oscila , mas o pic não funciona , ou seja , funciona apnas algumas vezes
2) se nas poucas vezes que ele funciona , então creio que não seja problema de software , pois se não , nunca funcionaria , e não apenas algumas vezes , mas mesmo assim eu estou mandando o código para vcs darem uma olhada . eh só um programa para testar .. são 3 PWMs por software.
3) Tenho notado um ruido na entrada de uns 130mV , mas a frequencia eh bem grande , na faixa de uns 60 mhz ... não sei se isso seria o problema .. tbm vou anexar aqui a foto do scope e o layout da placa .
4) achei que tinha danificado o pic , mas ai coloquei um outro e parece que o problema ficou pior ..
pessoal , estou a 1 semana ou mais em cima disso e não to conseguindo acha a mancada .. poder ser alguma coisa simples que não estou vendo ..
O Programa :
#include <16F628A.h>
#fuses HS,NOWDT,PUT,BROWNOUT,NOLVP,noMCLR
#use delay(clock=20000000)
#include <d:\Projetos_CCS\devices\regs_16.h>
#byte cmcon = 0x1f
#use fast_io(a)
#use fast_io(b)
#bit botao0 = portb.0
#bit botao1 = portb.1
#bit botao2 = portb.2
#bit pino_b3 = portb.3
#bit pino_b4 = portb.4
#bit pino_b5 = portb.5
#bit pino_a0 = porta.0
#bit pino_a1 = porta.1
#bit pino_a2 = porta.2
int pwm,valor1;
int const tabela[40] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40};
#int_timer0
void trata_int()
{
set_timer0(125+get_timer0());
pwm++;
}
//***************************************************************************
void gera_pwm (void)
{
if (pwm>=40)
{ pino_a0=1;
pino_a1=1;
pino_a2=1;
pwm=0; }
if(pwm==tabela[valor1]) pino_a0=0;
if(pwm==tabela[valor1]) pino_a1=0;
if(pwm==tabela[valor1]) pino_a2=0;
}
void main (void)
{
Delay_ms(1000);
cmcon=7;
trisa=0;
trisb=7; // pinos b0,b1 e b2 como entrada para os botões
rbpu=0 ;
portb=0;
setup_timer_0(rtcc_internal|rtcc_div_1);
enable_interrupts(GLOBAL|int_timer0);
//*****************************************************************
while(true)
{
int16 valor;
if (valor==10000)
{valor1++;
valor=0;}
if (valor1==40)
{valor1=0;
porta=0;
delay_ms(500);}
gera_pwm();
if (!botao0)
{porta=0;
delay_ms(1500);
}
if (!botao1)
{porta=0;
delay_ms(500);
porta=0b00000111;
delay_ms(500);}
if (!botao2)
{int a;
for(a=0;a<=20;a++)
{porta=0;
delay_ms(20);
porta=0b00000111;
delay_ms(20);}
}
valor++;
}}
aqui vai o layout da plaquinha só pra teste :


Agora aqui , vai a imagem da ponta do scope bem no pino de alimentação (VDD) do pic


nessa imagem o osciloscopio esta com a base de tempo em 0,05 microsegundos e a tensão em 20mV , ou seja a frequencia eh da casa dos 50mhz pra mais e a oscilação eh de +- uns 100mV ... Isso eh normal ou não ... será que alguém que tenha scope poderia medir o VDD no pino do pic com o scope configurado da mesma forma . ah , a tensão no scope tbm tá em AC pra poder ver a onda no centro da tela ..
a caneca metalica do cristal tbm esta aterrada .. ...
Bom , alguém poderia me dar uma ajuda ??
abs pra vcs e feliz natal ...