LusoRobótica - Robótica em Português

Sistemas específicos => PIC => Tópico iniciado por: Dave em 09 de Outubro de 2010, 22:57

Título: Funciona no PROTEUS mas não no real
Enviado por: Dave em 09 de Outubro de 2010, 22:57
Olá a todos!

Sou um iniciante em PIC's e por isso espero que o registo neste fórum me dê uma ajuda nas minhas dúvidas...


Este é o meu problema:

Estou a treinar a minha programação de conversores ADC de PIC's.
Um circuito bastante simples é o de ligar um potenciómetro (como divisor de tensão) e quando a tensão de entrada no PIC é superior a 2,5V liga um led.

Simples... e até funciona no Proteus, mas na realidade não faz nada....

Citar
#include <16f88.h>
#device ADC=10
#use delay (clock=20000000)
#fuses HS, NOWDT, NOPROTECT, BROWNOUT, PUT
#use standard_IO (A)

main()
{

int valor;

setup_comparator(NC_NC_NC_NC);
setup_ADC(ADC_CLOCK_INTERNAL);
setup_ADC_ports(64|VSS_VDD);
set_adc_channel(6);


while (true)
{
   valor=read_adc(7);
   if(valor>500)
   output_high(pin_A0);
   else output_low(pin_A0);
   delay_ms(500);
}
}

Quanto ao Vref (+ e -) não ligo a nada... pelo que penso que o pic "entende" como VSS_VDD.

Deixo aqui a imagem do simulador e os erros mostrados pelo mesmo, embora a simulação avance e consiga fazer o pretendido (acender led quando uma determinada porta está a mais de 2,5V).

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi473.photobucket.com%2Falbums%2Frr100%2Fdaviddmmartins%2Fproteus.jpg&hash=a30fd49f598775aa5e999ee195f9385495b0affe)


Amigos, onde está o meu erro?

Na montagem ou no código?
Alguma solução/explicação para isto?

Como já disse noutros tópicos, estou-me a iniciar com PIC's, mas tenho vontade em aprender mais!


PS: O compilador utilizado é o CCS.

Obrigado.

Cumps
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: beirao em 10 de Outubro de 2010, 00:50

Onde é que defines o tempo de aquisição/conversão ?
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: Dave em 10 de Outubro de 2010, 00:58
Peço desculpa, o código em cima não é o correcto...

Este é:
Citar
#include <16f88.h>
#device ADC=10
#use delay (clock=20000000)
#fuses HS, NOWDT, NOPROTECT, BROWNOUT, PUT
#use standard_IO(A)

void main()
{

int16 valor;

setup_ADC(ADC_CLOCK_DIV_64);

setup_ADC_ports(64);

set_adc_channel(6);

delay_ms(1);

while (true)
{
   valor=read_adc();

   delay_ms(10);

   if(valor>500)
   {
   output_high(pin_A0);
   delay_ms(100);
   }
   else output_low(pin_A0);

   delay_ms(250);

Agora o problema é que só funciona tudo se tiver a tocar com o dedo na parte descarnada no fio positivo ou do fio negativo da fonte de alimentação.

Como fonte utilizo um circuito da velleman que mediante um potenciómetro permite-me variar a tensão de saída...
 
Para filtrar tenho na placa um condensador de 1uF, mas mesmo assim continua tudo sem funcionar... só quando toco com o dedo nos ditos fios....
Quando coloco simplesmente led's a piscar, tudo funciona bem sem grandes preocupações..


cumps
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: Dave em 10 de Outubro de 2010, 01:08
Será alguma coisa relacionada com os fuses?

Estou mesmo pasmado com isto...


cumps
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: GnGz em 10 de Outubro de 2010, 13:23
Nao sei se sera o lugar indicado ... mas tenho uma duvida no proteus ... eu executo um programa blink normal ... mas demora muito a piscar...
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: Dave em 10 de Outubro de 2010, 13:31
Amigo, no meu funciona bem.... que tempos está a usar no pisca-pisca?


hug
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: FET_Destroyer em 10 de Outubro de 2010, 13:31
Nao sei se sera o lugar indicado ... mas tenho uma duvida no proteus ... eu executo um programa blink normal ... mas demora muito a piscar...

Muitas vezes o proteus não corre em tempo real. Se la vires no proteus tens la um stopwatch.
Tens que te guiar por isso e nao pelo tempo que te parece a ti. Se leres os warnings do proteus, ele diz que não está a correr em tempo real devido a carga do cpu.

Título: Re: Funciona no PROTEUS mas não no real
Enviado por: GnGz em 10 de Outubro de 2010, 13:32
Mas ta ... so que o led nao me faz blink de 1 em 1 segundo ... demora
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: senso em 10 de Outubro de 2010, 13:39
Na pasta exemplos do CCS tens lá exemplos de como configurar e usar a adc, usa esse programa e vê se funciona.
Estás a dar 5 volts estaveis ao teu micro, quanto ao Vref acho que o melhor é leres o datasheet do micro para saber como e onde o deves ligar para tudo funcionar.
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: Dave em 10 de Outubro de 2010, 13:48
OK. Vou experimentar.

No entanto, penso que algo se passa com a minha placa de testes... porque tudo funciona bem, mas só se o meu dedo estiver a tocar no circuito (polo positivo, polo negativo, AN6, reset, ...).


cumps
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: Dave em 10 de Outubro de 2010, 13:55
Mais uma conclusão...

Se ligar um fio do pólo negativo à chapinha protectora da breadboard (placa que fica na base) fica a funcionar bem... do que será isto? Haverá algum tipo de "carga" na placa que está a causar isto?

Curioso....


PS: AHAHAAH e não é que está a funcionar mesmo!!! Já desmontei e montei tudo outra vez e só funciona se o fio estiver ligado à chapa na base da placa de testes  ;D  :o :o

hug
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: GnGz em 10 de Outubro de 2010, 14:04
Mostra o circuito em schematic...
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: Dave em 10 de Outubro de 2010, 14:12
Cá está.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi473.photobucket.com%2Falbums%2Frr100%2Fdaviddmmartins%2Fproteus-1.jpg&hash=ef9c2261ac9a00b5aad84e19a09a50206bfe6297)


hug
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: Sérgio_Sena em 10 de Outubro de 2010, 14:16
troca de protoboard... daquelas só de plastico

temos q trabalhar com boas ferramentas, pq senao não sabemos se é do rabo ou das calças  ;D
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: Dave em 10 de Outubro de 2010, 14:26
troca de protoboard... daquelas só de plastico

temos q trabalhar com boas ferramentas, pq senao não sabemos se é do rabo ou das calças  ;D

Passo a explicar o motivo de tanta admiração da minha parte...

A minha placa é igual à da imagem. Muitos aqui devem ter uma igual... e por baixo tem uma película que cola e só depois a tal chapa...

Já me certifiquei e nada faz contacto com com essa chapinha... para isso o plástico da breadboard tinha de estar furado, assim como a fita aderente para depois algo tocar na base da placa.

O circuito está a funcionar... mas de tirar o fio que está a fazer contacto ente o pólo negativo da placa e a chapinha da base o circuito para, embora tenha alimentação....

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fwww.scitoyscatalog.com%2FMerchant2%2Fgraphics%2F00000001%2Fsolderless_breadboard_300.jpg&hash=2e5cda4f54a22bc16b4389cdbdca207bbd841eff)
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: Sérgio_Sena em 10 de Outubro de 2010, 14:36
isso leva-me a crer q o PIC está com "antenas"... e por antenas eu quero dizer com pinos de entrada ligados a nada....

confirma isso...
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: GnGz em 10 de Outubro de 2010, 14:46
floating? Tambem pareceme
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: Dave em 10 de Outubro de 2010, 14:59
isso leva-me a crer q o PIC está com "antenas"... e por antenas eu quero dizer com pinos de entrada ligados a nada....

confirma isso...

Quem sabe sabe!

Liguei todos os pinos não utilizados ao pólo negativo e... já está! Está tudo a funcionar bem e o meu dedo já não faz interferência com nada  ;D ;D ;D ;D ;D.

Mais uma questão, esta é a forma correcta de configurar os pinos de saída no CCS?
Citar
OUTPUT_A(40|41|42|43|44|45|46|47);
OUTPUT_B(48|49|50|51|52|53|54);

Ou será algo deste tipo:
Citar
set_TRIS_A(0b10100011);


;)

Título: Re: Funciona no PROTEUS mas não no real
Enviado por: Dave em 12 de Outubro de 2010, 10:28
Resolvido...

Obrigado a todos  ;D ;D ;D


Cumps
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: robofrog em 19 de Novembro de 2010, 00:21
Já experimentaste colocar 2 condensadores de 22pf do cristal à massa? (1 para cada pino)
Título: Re: Funciona no PROTEUS mas não no real
Enviado por: Dave em 19 de Novembro de 2010, 13:32
Já experimentaste colocar 2 condensadores de 22pf do cristal à massa? (1 para cada pino)

Os condensadores já lá estão.... a situação ficou resolvida ;).


cumps