LusoRobótica - Robótica em Português

Sistemas específicos => PIC => Tópico iniciado por: Arknum em 14 de Julho de 2010, 00:07

Título: [Duvida]Ler entradas analogicas PIC16f877
Enviado por: Arknum em 14 de Julho de 2010, 00:07
Boas

Comecei a fazer experiencias num PIC16f877 e estava a correr tudo bem até que decidi ler uma entrada analogica.
Descobri este código na internet

Código: [Seleccione]
#include <16F877.H>
#device adc=10
#include <STDLIB.H>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock= 8000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)

//============================
void main()
{
int16 adc_value;
float volts;

setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_us(20);

while(1)
  {
   output_high(pin_b2);
   printf("Ola");
   delay_us(10);
   adc_value = read_adc();

   volts = (float)(adc_value * 5)/1023.0;   
   printf( "%3.2f \n\r", volts);
   printf("A/D value = %2x\n\r",adc_value );
   delay_ms(500);
   output_low(pin_b2);
   printf("Fui");
   delay_us(10);
  }

}

Supostamente devolve o valor em volts e tambem o valor em decimal.

Digo supostamente porque não consigo obter nenhuns valores.
Coloquei um led a piscar e fiz uns printf() para ver se ele se mexia e nada, limita-se a acender o led e não envia informação nenhuma.

Estarei a esquecer-me de alguma coisa?

Cump
Título: Re: [Duvida]Ler entradas analogicas PIC16f877
Enviado por: senso em 14 de Julho de 2010, 00:13
De onde vêm as funções para brincar com o adc?
Não falta nenhum include?
Título: Re: [Duvida]Ler entradas analogicas PIC16f877
Enviado por: Arknum em 14 de Julho de 2010, 00:28
Boas

Segundo a ajuda da função não falta nenhum #include
Já lá está o #include<STDLIB.H>

As funções setup_adc_ports(); setup_adc() e set_adc_channel() servem para iniciar a leitura adc.
Não tenho a certeza, mas por aquilo que li, não falta nada, mas supostamente deveria dar.
Por isso a minha duvida. Onde estará a falhar?

cump
Título: Re: [Duvida]Ler entradas analogicas PIC16f877
Enviado por: jagsilva em 14 de Julho de 2010, 10:43
Este codigo foi feito para o ccs

Código: [Seleccione]
#include <16F877A.H>
#device ADC=10

#fuses HS, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP

#use delay(clock = 20000000)
#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7, ERRORS)


void main()
{
int16 a;
float v;

printf("Teste adc\r");

setup_adc_ports(all_analog);
setup_adc(ADC_CLOCK_INTERNAL);

while(1)
   {

   set_adc_channel(1);
   delay_ms(150);

   a=read_adc();

   printf("a=%ld     ",a);

   v=(a*5.0/1023);

   printf("v=%3.2f\r",v);

   delay_ms(200);

   }
}
Título: Re: [Duvida]Ler entradas analogicas PIC16f877
Enviado por: Arknum em 14 de Julho de 2010, 11:38
Boas

Obrigado Jagsilva funciona 5* e pelo que vi bastava colocar a função setup_adc_channel dentro do loop.
Experimentei ligar a 0v e deu a=0     v= .00 e depopis a 5v e deu a=1023     v=5.00.
Depois tentei ligar o famoso QTR-8RC e deu-me sempre 0v não percebo porque?
Liguei a saida 1 do sensor directamente ao pino AN1 do PIC. A ligação está bem feita?
Como estou a utilizar PIC não consigo utilizar as bibliotecas que a polulu disponibiliza não é?
Agradecia que dessem umas luzes.

Cump

Título: Re: [Duvida]Ler entradas analogicas PIC16f877
Enviado por: jagsilva em 14 de Julho de 2010, 12:32
Confesso que não conhecia o "famoso".
No entanto o nosso amigo google encaminhou-me para o sitio certo e estive a passar os olhos no datasheet. Pelo que vi para ler o sensor usas um entrada digital e contas o tempo que a saída está activa. A saída do sensor não é analógica.

jagsilva
Título: Re: [Duvida]Ler entradas analogicas PIC16f877
Enviado por: Arknum em 14 de Julho de 2010, 13:01
Boas

Pois tambem vi isso, mas pelo que vejo aqui no forum com o arduino eles ligam o sensor a uma entrada analogica e conseguem retirar valores analogicos (ex: Robo busca e salvamento), mas a polulu disponibiliza umas bibliotecas para o arduino com funções especificas.
Tambem fiz a experiencia de ligar um led ao pino 1 do sensor e ele tem um comportamento analogico, por isso acho que devo estar a liga-lo mal ao PIC, mas tambem não sei como ligar de outra maneira.
Em relação a ligar este sensor a pino digital já o consegui ligar com sucesso com a ajuda dos membros do forum.

Cump
Título: Re: [Duvida]Ler entradas analogicas PIC16f877
Enviado por: senso em 14 de Julho de 2010, 13:04
Isso deve ser o pior sensor do mundo, é gente em tudo quanto é forum a atrofiar para o meter a trabalhar seja com o que for.
Mostra ai o teu esquema de ligações.
Título: Re: [Duvida]Ler entradas analogicas PIC16f877
Enviado por: Arknum em 14 de Julho de 2010, 13:20
Boas

Aqui está o esquema de ligações.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fa.imageshack.us%2Fimg143%2F7335%2Fqtr8rcpic16f877.png&hash=a85796e375864bbe53193d6d8329f98b0d575165) (http://img143.imageshack.us/i/qtr8rcpic16f877.png/)

Uploaded with ImageShack.us (http://imageshack.us)
Título: Re: [Duvida]Ler entradas analogicas PIC16f877
Enviado por: Arknum em 15 de Julho de 2010, 10:50
Boas

É assim que vocês ligam ao arduino?

cump