Conversão A/d e interrupções

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Conversão A/d e interrupções

Mensagempor itamar » 25 Mai 2011 20:48

olá galera.
Queria saber se existe como gerar uma interrupção cada vez que houver uma mudança na entrada analógica.
Basicamente o que eu quero é que sempre que o valor da tensão mude, o pic desvie o que está fazendo e trate uma determinada rotina.
tudo isso sem que haja necessidade de realizar uma leitura periódica do canal AD, por exemplo por meio de um loop while, que é o que tenho visto quando queremos ver, por exemplo, a leitura de um sensor em um LCD .
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Mensagempor MOR_AL » 25 Mai 2011 21:22

Bom.
Pelo que eu sei, para o PIC (ou qualquer micro) detectar uma alteração na entrada analógica, só mesmo medindo. Ele só vai saber se alterou, se comparar a leitura anterior, ou a última guardada, com a leitura atual. Isso acarreta em manter o loop.
Não imagino como poderia ser uma lógica que leia a entrada analógica, sabendo que ela alterou; antes de lê-la. :?:
Talvez com um circuito externo ...
... Me veio agora uma dica ... :idea:
Se o seu PIC tiver comparador analógico, entre com o sinal em uma das entradas e na outra coloque um filtro passa-baixa (um RC). Quando houver mudança, tal que a tensão em uma das entradas cruze a tensão da outra, haverá um pulso na saída.
Faça o mesmo com um segundo comparador. Só que desta vez com as entradas invertidas em relação ao primeiro. Assim você detecta tanto alteração para mais como para menos.
Bom.
Como você não comentou minha postagem, editei porque imaginei que você não entendeu o que eu postei.
No circuito abaixo, há mudança na saída dos comparadores, toda vez que a entrada altera mais de 10% do seu valor. Se você desejar uma mudança mais sensível, troque o resistor de 10R para 100R.

Imagem
MOR_AL
Editado pela última vez por MOR_AL em 27 Mai 2011 08:11, em um total de 1 vez.
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor andre_luis » 26 Mai 2011 08:47

Itamar


Voce pode pensar em utilizar uma entrada digital que possua interrupção de I/O por borda.

Porém fica restrito ás seguintes condições :
> O nível para disparo dessa interrupção será sempre o mesmo.
> Se a capacidade de corrente da sua entrada analógica não for baixa terá de bufferizar ( tipo..AmpOp )
> Se a precisão necessária for muito alta a entrada digital poderá propagar algum ruído da alimentação digital para a entrada analógica - que agora estarão conectadas.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor Red Neck Guy » 26 Mai 2011 10:57

Daria pra usar os comparadores como trigger pra o evento de mudança de nível... Porém, seria necessários alguns componentes...
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Mensagempor andre_luis » 26 Mai 2011 20:20

Aquino escreveu:Daria pra usar os comparadores como trigger pra o evento de mudança de nível... Porém, seria necessários alguns componentes...


Mas seriam só 2 resistores Aquino...

Bem lembrado. Tem PIC que tem comparador interno. Além disso tem alta impedancia de entrada; o que não atrapalharia o A/D.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor itamar » 26 Mai 2011 20:31

andre_teprom escreveu:Itamar


Voce pode pensar em utilizar uma entrada digital que possua interrupção de I/O por borda.

Porém fica restrito ás seguintes condições :
> O nível para disparo dessa interrupção será sempre o mesmo.
> Se a capacidade de corrente da sua entrada analógica não for baixa terá de bufferizar ( tipo..AmpOp )
> Se a precisão necessária for muito alta a entrada digital poderá propagar algum ruído da alimentação digital para a entrada analógica - que agora estarão conectadas.

+++


desculpa pela minha ignorância mas eu não entendi como poderia utilizar uma interrupção em uma porta digital para monitorar uma variação analógica. pelo que me lembro existe uma referência minima de tensão para que o micro reconhrça os níveis lógicos por exemplo até 2,5--->0 e maior que isso --> 1. se for assim não resolve, pois quero que o micro detecte por exemplo 0,1V em cima de um potenciometro.
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Mensagempor itamar » 26 Mai 2011 20:32

andre_teprom escreveu:
Aquino escreveu:Daria pra usar os comparadores como trigger pra o evento de mudança de nível... Porém, seria necessários alguns componentes...


Mas seriam só 2 resistores Aquino...

Bem lembrado. Tem PIC que tem comparador interno. Além disso tem alta impedancia de entrada; o que não atrapalharia o A/D.


+++

Posta aew um esquema dos triggers para ver se eu consiigo entender como eles me ajudariam
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Mensagempor andre_luis » 26 Mai 2011 21:01

Itamar


Como sugerido pelo aquino e como dito anteriormente...alguns modelos de PIC possuem módulo comparador embutido.
Ao menos os PICs que conheço possuem 2 desses módulos.
Os 2 comparadores poderiam ser usados para estabelecer o valor máximo e mínimo de comparação; e assim qualquer coisa fora dessa janela seria detectado.
Posso estar enganado...mas também há interrupção para esse comparador.

Espero que essas informações o ajudem a resolver o problema.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor Red Neck Guy » 26 Mai 2011 21:19

Assim, liga os dois comparados no mesmo sinal, porém, ligando o sinal na entrada positiva de um e negativa do outro.
No inicio dos tempos, configura a referência deles pra 0, digamos assim. Dessa forma irá ocorrer uma interrção por mudança de estado - não lembro se o pic gera essa int, os msps e hcs08 geram...
Assim dentro da int, tu mede o nível dessa tensão com o adc e seta a referência dos comparadores pra esse valor, assim quando mudar ocorrerá outra interrupção.
Como fazer pra mudar a referência se a ref interna é de baixa resolução?
Usando um DA feito com um filtro de segunda ordem e um sinal PWM, ou utilizando uma rede R2R, ou utilizando um CI pra isso. Mas sei lá, saí caro...
Mas eu só faria isso tudo, se por algum motivo muito especial, esse tipo de aquisição fosse necessário, pois saí muito mais barato ficar fazendo amostragem da tensão...
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Mensagempor andre_luis » 26 Mai 2011 21:37

Aquino

Essa idéia de programar o limiar de comparação por firmware também é muito interessante.
Acredito que se a histerese de comparação for maior que a amplitude do ripple gerado pelo PWM filtrado...isso solucionaria.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor ze » 27 Mai 2011 07:35

mas um loop principal é obrigratório. voce pode encaixar sua comparação nele uai. a não ser que vá dormir.

voce pode fazer por leitura de ad dentro de uma interr por timer. neste caso fica fora do loop. algo como
int adantigo,adnovo;//global
static bit tg;
...
void interrupt timer0(){
if (tg) adatingo=readadc();
else adnovo=read(adc);
if (adnovo!=adantigo) façaisso(); //sua falsa interrupção
tg^=1;//um ad a cada passada pela interr
...
}
pensando bem isso num deve dar muito certo. mas sei lá... fica anotado aí.
abç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor luisf.rossi » 27 Mai 2011 08:32

Para baixa resolução e uma bw ridiculamente baixa você poderia mudar os taps da referencia do comparador "on-the-fly". Isso seria uma mega gambiarra e vai te dar poucos niveis de variação.... mas é simples de se fazer. A ideia do PWM é muito boa, mas mesmo assim ainda teria o tempo de acomodação do filtro.. o que reduz a banda.. mas tem resultados infinitamente melhores do que com apenas os taps internos... Mas existe algum motivo para todo esse trabalho? Se você tiver DMA você pode criar um buffer com duas posições e sempre que der (mais rapido que o AD) comparar as duas. Isso seria um gasto ridiculo de instruções...

Abs
luisf.rossi
Byte
 
Mensagens: 109
Registrado em: 28 Nov 2010 12:48
Localização: São Paulo, SP

Mensagempor andre_luis » 27 Mai 2011 09:00

luisf.rossi escreveu:...A ideia do PWM é muito boa, mas mesmo assim ainda teria o tempo de acomodação do filtro...


Luis


Concordo contigo. Mas, o próprio firmware pode realizar a medição após esse tempo de acomodação. A frequencia do PWM pode ser bem alta ( KHz ) e a constante do filtro também terá um valor baixo.

Outra opção é estabelecer o período de medição após o um intervalo de T= (K)R.C ( K por exemplo 0.5 ) -> Supondo um filtro de 1a ordem.

Ou seja, como opções o programa pode, ou esperar a nova tensão filtrada atingir um limiar assintótico para o novo valor, ou considerar essa diferença por firmware.

Esse segundo caso teria de tomar bastante cuidado, pois essa compensação deveria ser multiplicada pela diferença de Duty-cicle do PWM. Assim o valor medido não seria exatamente a tensão estabilizada. Seria lida num tempo inferior á constante do filtro.

Enfim. Como se diz :
"Por firmware é possível corrigir qualquer deficiencia do Hardware".

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor itamar » 28 Mai 2011 08:05

MOR_AL escreveu:Bom.
Como você não comentou minha postagem, editei porque imaginei que você não entendeu o que eu postei.
No circuito abaixo, há mudança na saída dos comparadores, toda vez que a entrada altera mais de 10% do seu valor. Se você desejar uma mudança mais sensível, troque o resistor de 10R para 100R.

É, realmente não havia entendido a idéia... mas agora que entendi me parece ótima, genial, fenomenal, vou testar e ver se resolve meu problema.

Valew mesmo
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Mensagempor MOR_AL » 28 Mai 2011 15:52

itamar escreveu:
MOR_AL escreveu:Bom.
Como você não comentou minha postagem, editei porque imaginei que você não entendeu o que eu postei.
No circuito abaixo, há mudança na saída dos comparadores, toda vez que a entrada altera mais de 10% do seu valor. Se você desejar uma mudança mais sensível, troque o resistor de 10R para 100R.

É, realmente não havia entendido a idéia... mas agora que entendi me parece ótima, genial, fenomenal, vou testar e ver se resolve meu problema.

Valew mesmo


Quando não entender, pergunte! Afinal ninguém nasceu sabendo e estamos aqui para trocarmos experiências.

Tomara que dê certo! É quase garantido! Usei esta técnica para detectar onda quadrada com alguns milivolts, proveniente de um amplificador de transimpedância (entra corrente e sai tensão) conectado a um fotodiodo.

Só complementando...
A saída dos comparadores também retorná ao seu estado inicial, após algum tempo depois da alteração, devido à mudança na entrada. É uma falsa alteração na entrada. Quando isso ocorrer, você deve saber identificar e descartar o tratamento.
É o caso de transição positiva no comparador de cima e transição negativa no comparador de baixo.
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x