Ir ao conteúdo
  • Cadastre-se
Formigoni

RESOLVIDO "Indicação de nivel baixo"

Recommended Posts

Ola Pessoal...

 

Como gosto de mexer muito com carros, eu mesmo gosto de colocar a mão na massa... Estou tentando fazer um projetinho para um painel que estou montando para um carro antigo meu...

 

 

"Alarme de nivel baixo"

 

Quero colocar uma luz de visualização e um buzzer temporizado quando o nivel atingir a reserva... Para ler o nivel do reservatório vou a propria boia que é um sensor que varia sua resistencia e gera uma determinada tensão... O problema é que o tanque do carro fica em movimente e com isso movimenta o combustivel que esta dentro certo..

 

A minha pergunta é:  Como eu faria para pegar a média de leitura do sensor para que não desse alarme toda vez que o tanque se movimentasse e o liquido descesse abaixo do nível mínimo ???

 

Já fiz o programinha para acender o led e tocar um buzzer quando entra na reserva, mas estou tendo esse problema... Quando o carro se movimenta a boia fica variando muito e acaba acendendo a luz o ligando o buzzer toda vez que o sensor entra na faixa da reserva...

 

Será que teria como fazer via programação isso ??

Alguem saberia ??

 

Estou usando o PIC16F690

Compilador Micro C

Proteus para simular.

 

O programa que estou usando é esse...

 

float v,m;#int_RTCCvoid  RTCC_isr(void) { //Delay_ms(1500);  set_adc_channel(0);  Delay_us(10);  v=read_adc();  Delay_ms(1500);  v=v*0.00586510263929618768328445747801;     Printf("%f \n \r ",v);  }void reserva(){   output_high(pin_a3);  }    void Alarme(){      output_high(pin_a3);   output_high(pin_b4);   delay_ms(250);   output_low(pin_b4);}void main(){   setup_adc_ports(sAN0|sAN1|VSS_VDD);   setup_adc(ADC_CLOCK_INTERNAL);   setup_spi(SPI_SS_DISABLED);   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);   setup_timer_1(T1_DISABLED);   setup_timer_2(T2_DISABLED,0,1);   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard   enable_interrupts(INT_RTCC);   enable_interrupts(GLOBAL);//Setup_Oscillator parameter not selected from Intr Oscillator Config tab   // TODO: USER CODE!!lcd_init();    C=255;  //Delay_ms(1000);    output_low(pin_a3);  output_low(pin_b4);     While (true){         output_low(pin_a3);        If (v<2.10) {       Alarme();            While (v<2.10){              Reserva();       }    }    output_low(pin_a3);     }      // TODO: USER CODE!!}
 

 

Obrigado

 

Abraços

Formigoni

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, não mexo com Mikro C, porém a lógica é igual para todas as linguagens. 

Tenta o seguinte, cria um array com 10 posições por exemplo (em CCS C ficaria assim: byte memoria[10]), depois você coloca seu sistema para fazer uma leitura no sensor da boia a cada 0,5seg e armazenaria em uma das posições do array, depois é só fazer a média, faz um laço for() que percorre todas as casas do array somando-as e depois divide por 10, desta forma você teria  a média da medição. o tempo de 0,5seg é só uma ideia mesmo, vai fazendo os testes aí e coloca o melhor valor. Se colocar um valor muito baixo, o sistema irá fazer todas as dez leituras dentro do pico, o que te daria um valor errado da mesma forma que acontece atualmente, como você relatou. Por outro lado, se colocar um valor muito alto, vai demorar pra mostrar o resultado da média.

 

Espero ter ajudado.

 

Abração.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Vinicius...

 

Achei interessante essa sugestão de fazer uma média em cima de 10 leituras da boia gravadas na memória. A única coisa que eu não sei como trabalhar com gravação da eprom no PIC... rsrs... Nem imagino como programar para fazer isso. 

Se puder me ajudar, agradeço...

 

O que cheguei a fazer depois que postei esse tópico foi a dica do amigo vtrx... Eu procurei alguma coisa sobre média e achei esse tópico sobre estabilizar leitura ADC... Aí inclui uma rotina no meu código em cima desse tópico, mas não sei se isso resolveria meu problema... 

 

Vou fazer alguns testes e posto aqui...

 

Obrigado pela ajuda amigos

 

Abraços

Formigoni

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vtrx,

 

Eu fiz assim em cima da dica que você postou naquele outro tópico... Será que dessa forma estará fazendo a leitura pela média ?? Como posso fazer para testar se realmente está ??

void  RTCC_isr(void) {   //COMBUSTIVEL/////////////////   set_adc_channel(0);  Delay_us(10);  sinal=read_adc();  Delay_ms(500);  sinal=sinal*0.00586510263929618768328445747801; // (6.0 Volts/1023)      Media = 0;   for(y=0;y<=30;y++){            delay_us(100);            Media = Media + sinal;                 }    v = (media / 30);              Printf("%f \n\r ",v);

Obrigado,

 

Abraços

Formigoni

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que é assim;

void  RTCC_isr(void) {   //COMBUSTIVEL/////////////////   set_adc_channel(0);  Delay_us(10); // sinal=read_adc();//  Delay_ms(500);//  sinal=sinal*0.00586510263929618768328445747801; // (6.0 Volts/1023)      Media = 0;   for(y=0;y<=30;y++){            delay_us(100);            Media = Media + read_adc();                 }    v = (media / 30);       sinal=v*0.00586510263929618768328445747801;              Printf("%f \n\r ",sinal)

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Eu acho que é assim;

 

 

OK Vtrx,

 

Muito obrigado, vou escrever assim e depois fazer uns testes para ver como fica...

 

Abraços

Formigoni

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, na verdade não precisa usar a eeprom, na minha sugestão você armazenaria em uma variável mesmo, só que não era uma variável simples e sim um array, ou seja, uma variável de dez posições (dez variáveis em uma). A forma como você fez é mais simples e dá no mesmo resultado e com a vantagem de economizar memória, ao invés de pegar os valores separadamente, depois somá-los e dividir para ter a média, você já somou diretamente na variável e dividiu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, na verdade não precisa usar a eeprom, na minha sugestão você armazenaria em uma variável mesmo, só que não era uma variável simples e sim um array, ou seja, uma variável de dez posições (dez variáveis em uma). A forma como você fez é mais simples e dá no mesmo resultado e com a vantagem de economizar memória, ao invés de pegar os valores separadamente, depois somá-los e dividir para ter a média, você já somou diretamente na variável e dividiu.

 

Ola Vinicius... Alias, você é meu xará.. rsrs...

 

então, acabei fazendo do jeito que nosso amigo Vtrx falou... Acredito que da forma que você descreveu também funcione... Vou fazer uns testes reais do jeito que fiz e depois posto aqui os resultados...

 

De qualquer forma eu agradeço a sua ajuda..]

 

 

Abraços

Formigoni

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só um toque crianças. 

Quando for fazer média de leituras em microcontrolador como o PIC, prefiram coletar um numero de amostras cujo o valor seja uma potencia de 2, pois uma divisão no PIC não ocorre por hardware ou seja o compilador vai la e coloca uma subrotina para isso que vai demorar váaaaaaaarios ciclos de clock, ao passo que usar uma potencia de 2 a coisa é muito mais rápido pois a divisão pode ser feita com shifts para direita nativo do set de instruções do PIC.

POr exemplo, nao façam assim:

 

uint8_t  i;uint16_t acumuladorMedia = 0;for ( i = 0; i < 30 ; i ++) //30 nao e uma potencia de 2{     acumuladorMedia += read_adc();}acumuladorMedia = acumuladorMedia/30; //e agora faça o pobre do PIC suar para calcular essa div

Prefiram isso:

uint8_t  i;uint16_t acumuladorMedia = 0;for ( i = 0; i < 32 ; i ++) //32 e uma potencia de 2, 2^5{     acumuladorMedia += read_adc();}acumuladorMedia = acumuladorMedia >> 5; //basta fazer um numero de shifts pra direita igual ao expoen                                        // te da potencia de 2

outra coisa, cuidado na hora de escolher o tamanho da variavel que servirá de acumulador, usem uma variavel que possua no MINIMO um numero de bits igual ao valor das leitura + 1, sempre sem exceção, pois no pior cenário, com as leituras dando valores muito altos voce pode estourar a variavel. Claro pra ponto flutante ou double nao se aplicadiretamente a mesma regra.

Abs.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Pessoal...

 

Preciso de mais ajudas... rsrs...

 

Não estou conseguindo fazer funcionar o projetinho no protótipo real... Ele funciona normal e muito bem na simulação com o Proteus, mas quando gravo o PIC e coloco no meu protótipo na Proto área, ele não funciona...

 

Eu acredito que deve ser algum erro na configuração de Fuses, Cristal do PIC... Ou talvez na configuração dos Adc, Timer0...

Pois ele funciona até certa parte, mas quando simulo a mudança de tensão na entrada Analógica não acontece nada...

 

Eu estou usando o PIC 18F2550.. Se alguem puder me dar uma luz aonde eu estou errando, agradeço muito...

 

 

Abraços

Formigoni

Compartilhar este post


Link para o post
Compartilhar em outros sites

Formigoni, ha tempos eu parei de mexer com o proteus por causa desses problemas, o proteus é muito "grosso", ele não se atem aos detalhes, só sai rodando e pronto. Até dá pra usar ele, porém não dá pra fazer um sistema completo nele, o ideal mesmo é usa-lo para testes básicos. 

 

A primeira coisa, é você fazer um "Helo world" com um led.

 

Eu sempre começo um sistema usando um led em uma das IOs, piscando a cada 1 seg. este teste inicial, serve para saber se o pic está funcionando e se a configuração do cristal está conforme programado. Se o led piscar, porém estiver fora do tempo de 1 segundo, verifica as configurações da frequência.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Vinicius...

 

No caso eu teria que fazer esse teste de colocar um led para piscar usando a rotina do Timer certo ??

Pois o meu programa roda até certo ponto, logo quando inicio (alimento) o PIC ele acende os leds que tem que acender e apagam conforme esta no meu programa... Mas aí fica por isso mesmo, não faz mais nada...

 

Então, eu acho que o problema está no Timer, alguma coisa relacionada a frequência mesmo...  Então, o certo seria eu colocar um led para piscar pelo timer né para ver se funciona né ?

 

Vou fazer isso para ver como fica..

 

Abraços

Formigoni

Compartilhar este post


Link para o post
Compartilhar em outros sites

realmente pode ser os fuses. Veja no help do seu compilador como configurá-los. Caso tenha dificuldade, configure-os manualmente na hora de programar. Da mesma forma, veja no help do programador. Mas é bem simples: procure algo como "config bits". Não estou com o datasheet do mc aberto mas procure deixar pino MCLR=IO e OSC=INTIO ou algo do gênero

ah sim...

1-estranho (pra mim) você colocar printf dentro da interrupt. Vai pro display ou serial?

2- não conheço rtcc. é timer interno do pic? se sim to achando falta no reload e reset flag

boa sorte!

Compartilhar este post


Link para o post
Compartilhar em outros sites

MCLR ou NOMCLR faz grande diferença mesmo. 

 

Pra testar a frequencia com o led, não use o timer, antes do loop principal(dentro do main), você adiciona um outro loop, de forma que o sistema fica somente no led. Por exemplo:

while(1){   output_high(pin_b7);   delay_ms(1000);   output_low(pin_b7);   delay_ms(1000);}

Compartilhar este post


Link para o post
Compartilhar em outros sites

realmente pode ser os fuses. Veja no help do seu compilador como configurá-los. Caso tenha dificuldade, configure-os manualmente na hora de programar. Da mesma forma, veja no help do programador. Mas é bem simples: procure algo como "config bits". Não estou com o datasheet do mc aberto mas procure deixar pino MCLR=IO e OSC=INTIO ou algo do gênero

ah sim...

1-estranho (pra mim) você colocar printf dentro da interrupt. Vai pro display ou serial?

2- não conheço rtcc. é timer interno do pic? se sim to achando falta no reload e reset flag

boa sorte!

 

 

Obirgado pela resposta Isadora...

 

Então, esse printf na realidade é apenas para me mostrar no terminal virtual do Proteus a tensão que está quando simulo mudança no potenciometro... entendeu ?

E o rtcc seria o Timer0 do Pic sim... Como teria que colocar o reload ou reset ??

 

 

Ah, e a configuração dos meu FUSES estão assim...

#include <18F2550.h>#device adc=10#FUSES NOWDT                    //No Watch Dog Timer#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale#FUSES HSPLL                    //High Speed Crystal/Resonator with PLL enabled#FUSES NOPROTECT                //Code not protected from reading#FUSES NOBROWNOUT               //No brownout reset#FUSES BORV20                   //Brownout reset at 2.0V#FUSES PUT                      //Power Up Timer#FUSES NOCPD                    //No EE protection#FUSES STVREN                   //Stack full/underflow will cause reset#FUSES NODEBUG                  //No Debug mode for ICD#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#FUSES NOWRT                    //Program memory not write protected#FUSES NOWRTD                   //Data EEPROM not write protected#FUSES IESO                     //Internal External Switch Over mode enabled#FUSES FCMEN                    //Fail-safe clock monitor enabled#FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET#FUSES NOWRTC                   //configuration not registers write protected#FUSES NOWRTB                   //Boot block not write protected#FUSES NOEBTR                   //Memory not protected from table reads#FUSES NOEBTRB                  //Boot block not protected from table reads#FUSES NOCPB                    //No Boot Block code protection#FUSES NOMCLR                   //Master Clear pin used for I/O#FUSES LPT1OSC                  //Timer1 configured for low-power operation#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)#FUSES PLL5                     //Divide By 5(20MHz oscillator input)#FUSES CPUDIV4                  //System Clock by 4#FUSES USBDIV                   //USB clock source comes from PLL divide by 2#FUSES VREGEN                   //USB voltage regulator enabled#use delay(clock=48000000)#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

Obrigado...

 

Abraços

Formigoni

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então remova o printf. ele pode estar zoando o processamento real. Além do + dentro da interrupt

Dica:

pra ver as variávies no proteus voce pode carregar o .cof e ver em debug-pic cpu-variables. voce vai ver só na pausa mas já é alguma coisa né. Pra ver rodando ao vivo debug-watch window. escolha o registro dos ad´s p.ex.

 

Perdoe minha confusão pois não uso este compilador mas permita-me indagar:

-não usa wdog mas faz setup dele. isso não o faz ativo?

-o mesmo para brownout: não usa e faz setup? esse sugiro usar mesmo.

-vi o tal PBADEN. voce está usando pino como ad mesmo? se não, está voltando os pinos pra digital?

-usa cristal alta frequência. este está montado mesmo? se sim, frequencia alta a montagem é +- crítica. está perto do mc? e de acordo com o d.s.?

-sua montagem está correta?

-é no protoboard?

-tem capacitor de desacoplamento?

-tem vcc?

-tem clock?

-etc?

 

Ah e provalmente seu compilador já faz o reload e zera o flag pra você. Se não... puxão de orelha nele!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isadora Ferraz,

 

Desculpe, acabei comendo bola na hora de copiar e colar as linhas de fuses que estou usando... 

Na realidade são essas abaixo que uso nesse programinha...

#include <18F2550.h>#device ADC=10#FUSES NOWDT                    //No Watch Dog Timer#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale#FUSES PUT                      //Power Up Timer#FUSES NOBROWNOUT               //No brownout reset#FUSES NOMCLR                   //Master Clear pin used for I/O#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)#use delay(clock=48000000,crystal=48000000)//#use rs232(baud=9600,parity=N,xmit=None,rcv=None,bits=8,stream=PORT1)

Esse negócio de estar configurado tal FUSE e não estar usando, realmente não sei dizer se fica ativo... Mas vou tirar para ver se muda alguma coisa...

Quanto a eu estar usando pinos AD, se esse AD for portas analógicas... Sim, eu tenho que usar 2 portas analógicas do PIC... No caso eu uso as AN0 e AN1...

Esse negócio do cristal eu não entendi direito.. Eu terei que instalar algum cristal fora do PIC ?

A minha montagem esta sendo na Protoboard sim.

Também não sei o que seria o capacitor de desacoplamento.. rsrsrs...

 

Desculpe a minha ignorância, estou iniciando agora com programação com PIC e sou muito leigo ainda nisso...

 

Se puder ajudar eu agradeço..

 

Abraços

Formigoni

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi. Você me OBRIGOU a dar uma olhada no datasheet. Tem sim que especificar o tipo de oscilador nos fuses. Só não sei como seu compilador faz isso. Isso prefiro não olhar tá? Caso não esteja colocando cristal por fora, deve especificar um tal de INTIO nos fusíveis. Note os váaarios modos de oscilaçao do bixo:

1.XTCrystal/Resonator
2.HSHigh-Speed Crystal/Resonator
3.HSPLL High-Speed Crystal/Resonator with PLL Enabled
4.EC External Clock with FOSC/4 Output
5.ECIO External Clock with I/O on RA6
6.ECPLL External Clock with PLL Enabled and FOSC/4 Output on RA6
7.ECPIO External Clock with PLL Enabled,I/O on RA6
8.INTHS Internal Oscillator used as Microcontroller Clock Source, HS Oscillator used as USB Clock Source
9.INTIO Internal Oscillator used as Microcontroller Clock Source, EC Oscillator used as USB Clock Source, Digital I/O on RA6
10.INTCKO Internal Oscillator used as Microcontroller Clock Source, EC Oscillator used as USB Clock Source, FOSC/4 Output on RA6

Agora não sei se o INTIO é o default do mc e/ou compilador por isso pode ser suprimido no fonte. Se não estiver seguro de como fazer isso dentro do fonte, faça por fora na hora de gravar. Acho que já expliquei anteriormente
 

Faça um pisca led como a dica do amigo viniciuskruz

 

Desacoplamento nada mais é do que um capacitor típico cd 100nF entre os pinos (bem perto) VCC e GND. Não que vá deixar de funcionar mas é meio que obrigatório além do + se for no protoboard! Ele dá uma última "limpadinha" na alimentação antes de entrar no mc. ok?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voltando à média!

1 - Considere uma estrada cheia de buracos, ou de paralelepípedos.

Quanto maior for o número de amostras para calcular a média, menor será o erro. Portanto, seria interessante usarmos o maior número de amostras possível ou permitida pela limitação da memória do uC.

Outro detalhe seria que, essas amostras sejam coletadas em um período tal, que possam abranger muitos ciclos gerados pela trepidação.

Se o veículo passa por um paralelepípedo a cada ms, o período das amostras deve durar o equivalente a pelo menos 10 paralelepípedos na menor velocidade do veículo. Algo em torno de 15km/h, por exemplo.

2 - Considere que a variação do volume de combustível é lenta.

Não poderá haver uma leitura, por exemplo, de 10 litros e na seguinte obter-se 20 litros ou 5 litros. Claramente isso ocorrerá devido a trepidação do veículo na rodovia.

Talvez fosse interessante o seguinte:

a - Medir o volume ao ligar a chave. Não há trepidação devido ao movimento. Então esta medida pode ser considerada quase correta. A exceção seria quando o veículo se encontrar em um local inclinado.

b - Usar um período de aprox. 5 a 10 segundos para a coleta das amostras.

c - Colher uma amostra a cada 200ms. Isso necessita de 25 a 50 registros de 1 byte de ram.

d - A média deverá ser calculada a cada nova amostra. Sempre descartando a mais antiga e incluindo a mais nova. Seria a média de valores em um loop de registros. A nova média substituindo a mais velha.

e - Como já dito anteriormente, procurar usar um número de amostras que seja fator de 2. A média é calculada simplesmente somando todos os valores e rotacionando para a direita o resultado da soma (descartando os bits que saem da soma).

f - Quando o valor da nova amostra for muito diferente do valor da amostra anterior, deve-se usar um artifício, já que certamente não ocorreu tal variação no volume do tanque. O valor da nova amostra deve se limitar a, digamos, mais ou menos 20% do valor da amostra anterior. Ou seja:

Calcule a diferença entre as amostras adjacentes. Se for maior que, digamos, 2 litros, então a diferença deverá ser de 2 litros.

Amostra anterior 15 litros. Amostra atual 10 litros. Diferença = 10-15 = -5 litros. Então a nova diferença seria de menos dois litros. O novo valor da amostra atual seria então de 15 litros - 2 litros = 13 litros.

Note que quanto menor for o valor escolhido para a diferença entre valores consecutivos de amostras, mais tempo vai levar para o valor se estabilizar no valor correto. Por outro lado, os valores não oscilarão tanto, quer seja no ponteiro, quer seja no mostrador numérico.

 

Não sei se vai lhe interessar, mas estes foram os pontos que me lembrei.

Bons projetos.

MOR_AL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual cristal esta usando?

Qual a frequência que deseja que o PIC utilize no seu core?

Você precisa usar o WatchDog?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Môr gostei da sua teoria. Tudo bem se a gente apimentar e colocar um pouco de prática nela? Um simples filtro RC pode "fazer a média" (rs) e servir como "amortecedor" e manter o sinal mais estável pra nós. Perdoe se já disseram isto antes.

Circuito.gif

Somando isso ao que dissestes teríamos uma boa leitura do sinal

Boa leitura a todos... rs

 

xeretando... Aparentemente ele não usa cristal. Nesta etapa de aprendizado, creio que ele não precisa de wdog. sorry

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Pessoal,

 

Primeiramente agradeço a ajuda de todos e o tempo dispensado para pensar com meu tópico...

 

Mor,

Vou dar uma lida melhor e ver se entendo melhor as suas colocações... Acredito que deva funcionar, mas também eu não sei se  nos carros que tem essa indicação de nivel baixo se é usado essa lógica de programação... 

 

 

Bom, vamos aos testes de ontem a noite...

 

Fiz o teste indicado pelo amigo Vinicius de um simples teste de Led piscando... Fiz inicialmente sem mudar nada na programação, simplesmente ocultei tudo que não ia usar para esse teste nas linhas de programação e deixei só as linhas para o led piscar... Ele funcionou só que para cada ciclo de piscada que estava programada com delay_ms(1000) demorava 48 segundos...

Só consegui fazer ele funcionar com o tempo de 1 segundo mudando na programação na parte de FUSES para o que esta abaixo... 

Ah.. Também mudei mais algumas coisinhas e tirei algumas coisas que não iria usar mesmo conforme as dicas de vocês

#use delay(clock=1000000)

Dessa forma ele piscou o led a cada 1 segundo.

 

Bom, ai voltei meu programinha todo para dentro para ver se funcionava...

E ele funcionou, só que agora estou com outro problema...

Não sei como pegar o sinal de tensão analógica no circuito para mandar para o PIC ler...

 

Simplificadamente o circuito é este abaixo...

Ligaccedilatildeo_Boia_zps9c721349.jpg

 

Então vamos entender o circuito...

 

A tensão vem da bateria, passa pelo regulador de tensão que mantem a tensão em +ou- 10Volts para quando a bateria do carro variar não ficar variando o ponteiro do combustivel... Aí entra no pino 2 do Rel. Combustivel... No pino 1 do Rel. Combustivel vem da boia do tanque, que nada mais é que um resistor que vem do Terra...

Então nesse dois pinos do Rel. Combustivel eu tenho uma variação de tensão que vai de 1,55 Volts(tanque vazio) até 5,52 Volts(tanque cheio) ou resistencia da boia em 280 Ohms (tanque vazio) até 40 Ohms(tanque cheio)...

 

Agora, gostaria de saber como faço para passar essa tensão para a porta analógica (AN0) do PIC, sendo que o PIC já tem seu terra e o que faz essa variação de tensão é o terra da boia ??? Não ter conhecimento é uma ***** pessoal... rsrs... Desculpem.

 

Já tentei jogar direto um fio do pino 2 do Rel. Comb. para o PIC mais a tensão fica alta, alguem pode me dar uma luz ?

 

Obrigado mais uma vez...

 

Abraços

Formigoni

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×