• Welcome to LusoRobótica - Robótica em Português.
 

Funciona no PROTEUS mas não no real

Started by Dave, 09 de October de 2010, 22:57

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Dave

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

Quote#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).




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
David Martins
Eng. Electrotécnica e de Computadores, UBI

beirao


Onde é que defines o tempo de aquisição/conversão ?
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

Dave

Peço desculpa, o código em cima não é o correcto...

Este é:
Quote#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
David Martins
Eng. Electrotécnica e de Computadores, UBI

Dave

Será alguma coisa relacionada com os fuses?

Estou mesmo pasmado com isto...


cumps
David Martins
Eng. Electrotécnica e de Computadores, UBI

GnGz

Nao sei se sera o lugar indicado ... mas tenho uma duvida no proteus ... eu executo um programa blink normal ... mas demora muito a piscar...

Dave

Amigo, no meu funciona bem.... que tempos está a usar no pisca-pisca?


hug
David Martins
Eng. Electrotécnica e de Computadores, UBI

FET_Destroyer

Quote from: GnGz on 10 de October 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...

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.


GnGz

Mas ta ... so que o led nao me faz blink de 1 em 1 segundo ... demora

senso

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.
Avr fanboy

Dave

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
David Martins
Eng. Electrotécnica e de Computadores, UBI

Dave

#10
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
David Martins
Eng. Electrotécnica e de Computadores, UBI

GnGz


Dave

David Martins
Eng. Electrotécnica e de Computadores, UBI

Sérgio_Sena

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
Cumprimentos,
Sérgio Sena

Electronic Gear for Musicians

Instagram

Dave

Quote from: asena on 10 de October 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

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

David Martins
Eng. Electrotécnica e de Computadores, UBI