Reipas
-
Posts
6 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por Reipas
-
-
Olá, estou tendo problemas em criar um programa em CCS para um termometro com pic16f877a e o max6675. Estou usando um código postado aqui no fórum pelo Fervolt com as inclusões do pic , do cristal e do LCD. Conforme ele sugeriu.Mas não consigo fazer funcionar. Alguem poderia me ajudar.
-
Boa tarde, desculpem a demora é que só tenho tempo no final de semana.
Fiz as alterações que a Isadora recomendou. O GND bem próximo do micro e a colocação dos capacitores nas entradas.
Também reduzi o valor do resistor para 4k7 nas entradas, coloquei um resistor de 820R das entradas para o GND e em paralelo
com este o capacitor eletrolítico de 100uf x 35V. A faixa de tensão que devo monitorar é 0 ~ 18V. Nos testes que fiz hoje; a tensão
lida em an0 ficou estável e precisa já em an1 notei uma diferença de -0,8V , os resistores usados são de 5% talvez ai a diferença.
e no programa coloque o delay de 50ms.
Portanto dou como resolvido;
e agradeço a colaboração da Isadora e do Paulo.
-
@Reipas,
Uma pergunta, qual o valor das resistências ligadas aos pinos an0 e an1 ? Uma boa recomendação é nunca ultrapassar cerca de 5K ohms. Se usar valores maiores, existe um efeito RC interno ao Pic que pode fazer exatamente esse tipo de problema....
Uma coisa que pode ajudar é colocar um delay entre o SET_ADC_CHANNEL e o comando seguinte que é o READ_ADC. Experimente um delay de uns 20 milisegundos para começar.
Paulo
Boa noite Paulo.
Estou usando um resistor de 22k pois as tensões a serem lidas são de 16V. vou fazer as modificações que sugeriu e postar o resultado junto com o diagrama, assim que possível. obrigado pela atenção
-
Olá Isadora, obrigado pela resposta.
Não é o que deveria acontecer; vou explicar melhor. tenho 6 displays com seus segmentos ligados em C e seus catodos controlados B . No programa ds1~3 estão em an0 e ds4~6 em an1. O que está acontecendo que quando coloco uma tensão ( Ex. 5V.) em an0 com an1 desligado, a tensão aparece correta, mas quando ligo an1 a tensão apresentada vai para 0043 e em an1 fica em 0000. e vice e versa. Vou fazer as mudanças que sugeriu, vou postar os resultados, segue em anexo o esquema.
Desculpe , anexei o arquivo errado.
-
Boa noite.
Estou precisando de ajuda com um voltímetro duplo com o pic16f876a, onde uso 6 displays led, sendo que três no canal an0 para leitura de tensão e três no an1 também para leitura de tensão. Ocorre que quando uso um só canal no programa a conversão ocorre normal, tanto em an0 e an1, se uso os dois há uma mistura nos canais. Se an0 está com 3v e an1 com 0v os displays apresentam 043 e 000. segue o programa.
include<16f876a.h>
#device ADC=10
#use delay( clock=8000000)
#fuses HS,NOWDT,PUT,BROWNOUT,NOWDTint clock=0;
int16 d1, d2, d3, d4, d5, d6;int digito[10]={
0b11000000 // 0
0b11111001 // 1
0b10100100 // 2
0b10110000 // 3
0b10011001 // 4
0b10010010 // 5
0b10000010 // 6
0b11111000 // 7
0b10000000 // 8
0b10010000 // 9
};#INT_RTCC
void trata_t0 (){
clock++;
if (clock>6) clock=1;switch(clock)
{
case 1: output_C(digito[d1]) | (0b01111111);
output_C(digito[d1]);
output_B(0b00000001);
Break;case 2: output_C(digito[d2]);
output_B(0b00000010);break;
case 3: output_C(digito [d3]);
output_B(0b00000100);
BREAK;case 4: output_C(digito[d4]);
output_B(0b00001000);
BREAK;case 5: output_C(digito[d5]);
output_B(0b00010000);
BREAK;case 6: output_C(digito[d6]);
output_B(0b00100000);
BREAK;
}
SET_TIMER0(25);}
void volt (){
int32 adc;
{
SET_ADC_CHANNEL(0);
adc=READ_ADC();
adc=(adc*2500)/1023;
delay_us(10);d1= adc/1000;
d2= (adc/100)%10;
d3= (adc/10)%10;
delay_ms (10);
}
}void amp ()
{int32 adc1;{
SET_ADC_CHANNEL(1);
adc1=READ_ADC();
adc1=(adc1*2500)/1023;
delay_us(10);d4= adc1/1000;
d5= (adc1/100)%10;
d6= (adc1/10)%10;
delay_ms (10);
}}void main()
{
set_tris_A(0b00000011);
set_tris_B(0b00000000);
set_tris_C(0b00000000);
ENABLE_INTERRUPTS(GLOBAL|INT_TIMER0);
SETUP_TIMER_0(RTCC_INTERNAL|RTCC_DIV_16);
SET_TIMER0(100);setup_ADC_ports(AN0_AN1_AN3);
setup_ADC(ADC_CLOCK_INTERNAL);
delay_us(10);while(true)
{volt();
delay_ms (500);
amp();
delay_ms(500);
}
}
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
Pic16f877a + max6675
em Microcontroladores
Postado
Boa noite Vinicius !
Obrigado pelo retorno .Sim aparece a mensagem inicial no display mais nada. Coloquei outra mensagem abaixo(fora do void main () ) e o display não muda.