Moderadores: 51, guest2003, Renie, gpenga
EDSONCAN escreveu:Você quer gerar um interrupção a cada vez que a conversão esteja pronta ou gerar uma interrupção quando estiver acima ou abaixo de determinado valor?
Não mexo muito com os da NXP, mas com os da ST prefiro fazer um DMA e direto em um buffer, sobrecarrega menos o Hardware, mas é questão de gosto....
6.8 10-bit ADC
The LPC2131/32 contain one and the LPC2134/36/38 contain two ADCs. Thesevconverters are single 10-bit successive approximation ADCs with eight multiplexed channels.
6.8.1 Features
• Measurement range of 0 V to 3.3 V.
• Each converter capable of performing more than 400000 10-bit samples per second.
• Burst conversion mode for single or multiple inputs.
• Optional conversion on transition on input pin or Timer Match signal.
• Global Start command for both converters (LPC2134/36/38 only).
6.8.2 ADC features available in LPC213x/01 only
• Every analog input has a dedicated result register to reduce interrupt overhead.
• Every analog input can generate an interrupt once the conversion is completed.
EDSONCAN escreveu:Se fixar o canal do AD a conversão é rápida nos ARM, converte e compara o valor por software....
febupe escreveu:EDSONCAN escreveu:Você quer gerar um interrupção a cada vez que a conversão esteja pronta ou gerar uma interrupção quando estiver acima ou abaixo de determinado valor?
Não mexo muito com os da NXP, mas com os da ST prefiro fazer um DMA e direto em um buffer, sobrecarrega menos o Hardware, mas é questão de gosto....
Edson, o meu objetivo é para gerar uma interrupção tanto pra cima quanto pra baixo. Tipo assim, se meu sensor estiver acima de 511bits(metade de 1023) ele vai ter uma função e quando estiver abaixo desse valor outra função de acordo com o tempo que ficar entendeu? E quando o valor estiver em 511 ele sai da interrupção, mais ou menos isso que é o que preciso fazer.
Obrigado.
while(1){
Nivel_sinal=Ler_ADC(2)
}
unsigned short Ler_ADC(unsigned char canal)
{
unsigned short resultado;
signed char ret_code;
unsigned int canal_hex;
switch(canal)
{
case 2:
canal_hex=0x4;
break;
case 3:
canal_hex=0x8;
break;
case 4:
canal_hex=0x10;
break;
case 5:
canal_hex=0x20;
break;
}
// INICIA CONVERSÃO
MA_Start_ADC(MA_AD_CONVERTER_1,MA_AD_SOFTWARE_MODE,AD1CR_START_START_NOW,canal_hex);
ret_code=MA_EMPTY;
// LER O RESULTADO DA CONVERSÃO
while(ret_code==MA_EMPTY) ret_code = MA_Read_ADC(MA_AD_CONVERTER_1,&canal,&resultado);
if (ret_code != MA_OK) resultado=0;
// PARAR CONVERSAO
MA_Stop_ADC(MA_AD_CONVERTER_1);
return resultado;
}
if(Nivel_sinal > 511)
{
Posicao=Posicao + (((Nivel_sinal - 511)/511)*90);
}
if(Nivel_sinal < 511)
{
Posicao=Posicao + (((Nivel_sinal - 511)/511)*90);
}
if(Nivel_sinal > 511)
{
Posicao=Posicao + (((Nivel_sinal - 511)/511)*90);
}
if(Nivel_sinal < 511)
{
Posicao=Posicao + (((Nivel_sinal - 511)/511)*90);
}
x/512
com uma operação lógica x>>9
dando o mesmo resultado.Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante