Ir ao conteúdo
  • Cadastre-se

Reipas

Membro Júnior
  • Posts

    6
  • Cadastrado em

  • Última visita

posts postados por Reipas

  1. 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.

  2. @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

  3. 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.  

    Duplo Volt 3+3 dg.txt

  4. 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,NOWDT

    int 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!