LOJA FÍSICA
Praça Mauá, 4541 - Sala 22
09580-050 - São Caetano do Sul / SP
CENTRAL DE ATENDIMENTO
(11) 3522-7626
info@robocore.net
HORÁRIO DE FUNCIONAMENTO
De segunda à sexta das 9:00 às 19:00
Sábado das 9:00 às 13:00
Retornar
ao topo

Classifique este tópicoPéssimoRuimMedianoBomÓtimo
Ir para página 1 2  Next
Autor
Mensagem

HP

Level 6
6442393 xp

Registrado em:
09/08/2006

Local:
Curitiba / PR

Equipe:
Guaxinim Furioso

Mensagens:
144

HP

Responder com citações
Mensagem Seg Nov 09, 2009 3:42 pm
Entrada analógica no PIC
Pessoal tem alguns tópico aqui que falam da entrada analógica do PIC.

Eu mesmo já respondi algumas perguntas falando para utilizar a entrada analógica do PIC na aplicação, por saber a sua utilidade e o que ela é capaz de fazer, mas nunca implementei nada.

Agora eu penso em utilizar esta funcionalidade do PIC e gostaria de um 'Ponta Pé' pra iniciar.

Minha aplicação funciona assim: Eu tenho um sensor que vai estar na entrada analógica do PIC. Este sensor manda níveis de tensão entre 3.5 e 0.5 V. Se o sensor mandar um valor de 0.5 a 3 V para esta entrada eu quero sair com nível lógico 1 em qualquer outro pino do PIC, senão fica em 0.

Encontrei alguma coisa na Internet, porem o código sempre é feito em Assembly. E eu programo em C.

Será que alguém tem um programa em C utilizando uma entrada analógica do PIC pra eu me basear no desenvolvimento do meu projeto?

[]s

laerciovp

Level 3
3265887 xp

Registrado em:
26/06/2006

Local:
Cascavel / PR

Equipe:
LVP Labs

Mensagens:
52

laerciovp

Responder com citações
Mensagem Ter Nov 10, 2009 12:42 am
Entrada analógica no PIC
para Vref = 5 volts e AD de 8 bits, para a faixa de 0.5 a 3 volts:

unsigned int sensor; (variável global)
sensor = read_adc();
if (sensor > 25 && sensor < 153) output_high(pin_xx);
else output_low(pin_xx);

para vref = 5 volts e AD de 10 bits, para a faixa de 0.5 a 3 volts:

unsigned int16 sensor; (variável global)
sensor = read_adc();
if (sensor > 102 && sensor < 614) output_high(pin_xx);
else output_low(pin_xx);

HP

Level 6
6442393 xp

Registrado em:
09/08/2006

Local:
Curitiba / PR

Equipe:
Guaxinim Furioso

Mensagens:
144

HP

Responder com citações
Mensagem Ter Nov 10, 2009 10:17 am
Entrada analógica no PIC
Obrigado laerciovp, era isso ai mesmo.

Eu só tenho o PIC16F84 aqui comigo e pelo que vi este CI não tem ADC. Sad  Sad  Sad 

Alguém poderia me indicar um PIC simples que tenha entrada ADC?

[]s

Lokasso

Level 3
3410390 xp

Registrado em:
26/06/2006

Local:
Campinas/Araraquara / SP



Mensagens:
81

Lokasso

Responder com citações
Mensagem Ter Nov 10, 2009 12:10 pm
Entrada analógica no PIC
Tem, por exemplo, o PIC16F628A. É relativamente comum e barato.

_________________
Felipe Lopasso Rodrigues
Equipe Phoenix - Unicamp
www.fem.unicamp.br/~phoenix

Lokasso

Level 3
3410390 xp

Registrado em:
26/06/2006

Local:
Campinas/Araraquara / SP



Mensagens:
81

Lokasso

Responder com citações
Mensagem Ter Nov 10, 2009 12:14 pm
Entrada analógica no PIC
Ops, desculpe, o 16F628A se não me engano tem comparador analógico. O 16F877A é certeza que tem AD, mas é um pouco mais caro, e talvez meio grande demais dependendo da aplicação.

_________________
Felipe Lopasso Rodrigues
Equipe Phoenix - Unicamp
www.fem.unicamp.br/~phoenix

HP

Level 6
6442393 xp

Registrado em:
09/08/2006

Local:
Curitiba / PR

Equipe:
Guaxinim Furioso

Mensagens:
144

HP

Responder com citações
Mensagem Ter Nov 10, 2009 12:22 pm
Entrada analógica no PIC
Então Lokasso, eu vou utilizar o PIC12F675.

Me parece ser bem simples e esta muito barato aqui em Curitiba, R$4,00

Vou tentar codificar o que o laerciovp me passou e posto aqui se funcionou  Cool,  ou não  Sad 

[]s

Lokasso

Level 3
3410390 xp

Registrado em:
26/06/2006

Local:
Campinas/Araraquara / SP



Mensagens:
81

Lokasso

Responder com citações
Mensagem Ter Nov 10, 2009 12:26 pm
Entrada analógica no PIC
Poxa, não sabia que tinha PIC tão barato assim com AD ! Legal !

 Mal aí pela informação "furada", mas é que faz um tempinho já que não uso PIC. Depois que comecei a usar AVR nem quis mais saber deles...

_________________
Felipe Lopasso Rodrigues
Equipe Phoenix - Unicamp
www.fem.unicamp.br/~phoenix

HP

Level 6
6442393 xp

Registrado em:
09/08/2006

Local:
Curitiba / PR

Equipe:
Guaxinim Furioso

Mensagens:
144

HP

Responder com citações
Mensagem Ter Nov 10, 2009 12:31 pm
Entrada analógica no PIC
Que é isso cara, não da nada não, eu ate tinha visto este PIC que vc me passou, mas como este que eu falei tava muito barato, nem fui atraz de outro  Cool 

[]s

HP

Level 6
6442393 xp

Registrado em:
09/08/2006

Local:
Curitiba / PR

Equipe:
Guaxinim Furioso

Mensagens:
144

HP

Responder com citações
Mensagem Sab Nov 14, 2009 9:39 pm
Entrada analógica no PIC
Pessoal, eu coloquei o seguinte programa no micro-controlador:
Código:

Como vocês podem ver, estou utilizando o clock interno deste micro-controlador e estou com o seguinte problema.

Quando ligo o microcontrolador, o programa funciona perfeitamente durante um tempo, mas depois a saída A1 fica sempre em nivel lógico 1.

Alguem tem ideia do que pode estar acontecendo? O que eu posso fazer pra tentar resolver este problema?

* Eu já tentei utilizar clock esterno e o erro eh o mesmo.

[]s

laerciovp

Level 3
3265887 xp

Registrado em:
26/06/2006

Local:
Cascavel / PR

Equipe:
LVP Labs

Mensagens:
52

laerciovp

Responder com citações
Mensagem Sab Nov 14, 2009 10:11 pm
Entrada analógica no PIC
HP
faça as mudanças a seguir e teste novamente:

1. Mesmo usando o oscilador interno, você precisa declarar a freqüência de clock:

      #use(clock=4000000)

2. Evite ao extremo declarar variável tipo float. Aliás, é um enorme desperdício alocar um valor de 10 bits numa variável com 32 bits. Use:

      unsigned int16 sensor;

3. Declare a variável fora do while(true). Deixe declarada entre o #fuse NOMCLR e o void(main);

4. Introduza um delay dentro do while(true), pode ser de 1 mili segundo:

     delay_ms(1);

Referente ao software, acho que é isso. Quanto ao hardware:

1. Certifique que a alimentação não tem ripple. Use dois capacitores em paralelo, próximos aos pinos de vcc e gnd do pic, de 100nF e 10uF.

2. Verifique se o sensor não está com histerese.

3. Consulte o datasheet do sensor na seção do "Typical application", geralmente o fabricante indica a aplicação típica do sensor, onde ele funcionará de acordo com a especificação.

Poste os resultados para acompanharmos o funcionamento. Boa sorte!

HP

Level 6
6442393 xp

Registrado em:
09/08/2006

Local:
Curitiba / PR

Equipe:
Guaxinim Furioso

Mensagens:
144

HP

Responder com citações
Mensagem Dom Nov 22, 2009 8:28 am
Entrada analógica no PIC
Pessoal, desculpa a demora pra responder...

Então, da forma com que o laerciovp falou funcionou.

No código que eu passei a única coisa que estava diferente era realmente a variável float que eu já estava utilizando int16.

O que eu tive que fazer para funcionar foi somente colocar a declaração da variável sensor fora do while, e colocar um delay de 10ms.

O código ficou assim:

Código:

[]s
3
DanielMA

Level 0
0 xp

Registrado em:
02/11/2010

Local:
salvador / BA



Mensagens:
1
3
DanielMA

Responder com citações
Mensagem Ter Nov 02, 2010 8:29 pm
Entrada analógica no PIC
O código do amigo está correto, funciona certo. Mas tenho uma dúvida, como faço pra usar em vez de 1, 2 sensores?
3
gastaoc

Level 0
204485 xp

Registrado em:
01/11/2010

Local:
Petropolis / RJ



Mensagens:
6
3
gastaoc

Responder com citações
Mensagem Qua Nov 03, 2010 1:00 pm
Entrada analógica no PIC
Caro HP,

Como diria Jack vamos por partes.

1) Verifique se o PIC utilizado tem conversor AD. Parece ridículo mais é um erro comum.

Os PICs tem alguns pinos que podem ser configurados como entradas analógicas e um único conversor.

2) Ajuste o clock do conversor para que seja respeitado o tempo mínimo de conversão que é de 1,6uS para PICs das familias 16F e 18F.

3) Defina quais as tensões que serão utilizadas como referência, ou seja, qual a menor e a maior tensão do sinal de entrada.

Lembre de utilizar tensões de referência estáveis e isentas de ruídos.

Para aplicações mais simples podemos definir que o sinal esteja compreeendido na alimentação do PIC, ou seja, usar como referência o VDD e o VSS de alimentação.
  
4) Selecione a entrada a ler (na verdade este comando vai controlar o multiplex analógico da entrada do conversor).

5) Aguarde o tempo de acomodação do sinal de entrada no capacitor de amostragem.

Atenção para definir este tempo é muito importante saber qual a impedância do sinal a ser medido. Tente que a impedância seja igual ou menor que 2500 ohms.
Para esta impedância o tempo mínimo é de 20uS. 

6) Dê o comando de conversão.

Badabim foi pra conta, ou seja, a variável recebeu o valor correspondente a conversão.


Todas as informações são encontradas no Data Sheet do PIC.


Vamos agora dar um exemplo em C para compilador CCS :

PIC18F877A
Clock 20 MHz
Sinal de entrada de 0 até 5 volts ligado no pino AN0 ( Pino 2 )
conversão de 8 bits (valor default)

#device adc=8

#FUSES NOWDT
#FUSES HS
#FUSES NOPUT
#FUSES NOPROTECT
#FUSES NODEBUG
#FUSES NOBROWNOUT
#FUSES NOLVP
#FUSES NOCPD
#FUSES NOWRT

#use delay(clock=20000000)

void main(void)
  {
  int leitura;
  setup_adc_ports(AN0);
  setup_adc(ADC_CLOCK_DIV_16);  // 20M/4/16=312500Hz -> 3,2uS

  // Se escolher (CLOCK_DIV_8) fica muito no limite

  while(true)
    {
    set_adc_channel(0);
    delay_us(20);
    leitura=read_adc();
    }
  //end while(true)
  }
//end void main(void)


Espero ter ajudado,
Gastão.

caio_azb

Level 22
22937416 xp

Registrado em:
01/06/2009

Local:
Campinas / SP



Mensagens:
533

caio_azb

Responder com citações
Mensagem Qui Nov 04, 2010 4:55 pm
Entrada analógica no PIC
HP, só uma dúvida =D.

Como você sabe qual o valor que cada voltagem vai ter depois de lida pelo canal AD?

Tenho uma idéia, mas acho que está errada, então gostaria de uma explicação mais completa, por favor.

Valeu, Caio

_________________
Cursando USP - Engenharia Aeronáutica

evristow
Moderator
Level 111
111244875 xp

Registrado em:
25/04/2006

Local:
Rio de Janeiro / RJ

Equipe:
ODDBotz

Mensagens:
3997

evristow
Moderator
Responder com citações
Mensagem Dom Dez 26, 2010 3:26 pm
Entrada analógica no PIC
PIC não é muito a minha área, mas basta você ver quantos bits tem a váriável usada no sensor, converter isso para o respectivo valor numérico e aplicar uma regra de 3.

Usando o exemplo do tópico:

laerciovp Escreveu:
para Vref = 5 volts e AD de 8 bits, para a faixa de 0.5 a 3 volts: unsigned int sensor; (variável global) sensor = read_adc(); if (sensor > 25 && sensor < 153) output_high(pin_xx); else output_low(pin_xx);
"unsigned int" é uma váriável de 8 bits, assim consegue representar valores numéricos de 0 a 255 (256 valores). Como Vref é 5V, o valor por Volt será 51.2. Daí basta multiplicar pelas tensões desejadas: 0.5V x 51.2 = 25.6 3.0V x 51.2 = 153.6 Claro que os valores normalmente não ficam redondinhos no desejado, contudo cabe ao projetista/programador adequar a sensibilidade do programa a precisão desejada com o sensor. Para isso basta usar variáveis com maior capacidade de armazenamento, como long int / int16 (16bits), int32 (32bits) ou mesmo float (32bits e ponto flutuante). De qualquer forma variáveis maiores implicam em programas mais pesados, logo é um trade off. Se interessar, segue uma fonte para consulta: http://www.swarthmore.edu...IC/C_Intro.html Abraços, Dudu

_________________
1 - Leia as Regras de Conduta do Forum!
2 - Não respondo dúvidas por mensagem privada. Poste-as no fórum! Sério!
3 - Só crie uma equipe se for competir!
Mostrar mensagens desde a última:
Ir para página 1 2  Next




Ir para:  
Todos os horários são GMT - 3 HorasVocê não tem permissão para escrever novas mensagens
v não tem permissão para responder às mensagens
Você não tem permissão para editar suas mensagens
Você não tem permissão para deletar suas mensagens
Você não tem permissão para classificar tópicos
Você não tem permissão para classificar mensagens
Você não tem permissão para votar em enquetes
Anexar downloads : Proibido
Fazer Download de Arquivos: Permitido
Powered by phpBB © 2001 phpBB Group