Ir ao conteúdo

Delta-Sigma


Pedrolobo8

Posts recomendados

Postado

Venho trazer um projeto que me ajudou muito e espero que ajude muitos outros, também.

Uma forma de fazer leitura analógica com PICs que possuem apenas comparadores. Neste exemplo eu usei o 16F628A

Para quem se interessar e quiser saber mais, este link é ótimo:http://ww1.microchip.com/downloads/en/AppNotes/00700a.pdf

Vídeo do exemplo:

O código foi feito para o MikroC.

Código:


sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RA6_bit;
sbit LCD_D7 at RA7_bit;

sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISA6_bit;
sbit LCD_D7_Direction at TRISA7_bit;

//----------------------------------------------------------------------------//

char TXT[5];
int Leitura=0;
//----------------------------------------------------------------------------//

void Delta_Sigma_Init(){
VRCON = 0xEC;
TRISA3_bit = 0;
CMCON = 0x06;
}
//----------------------------------------------------------------------------//

int Delta_Sigma_Leitura (int Valor){
int ADC_Valor = 0;

T0CS_bit = 0;
PSA_bit = 1;
CMCON = 0x03;

while (Valor){

TMR0 = 0xF7;
T0IF_bit = 0;

if (C1OUT_bit){
RA3_bit = 1;
}
else{
RA3_bit = 0;
ADC_Valor++;
}
Valor--;
while (!t0if);
}

CMCON = 0x06;
return (ADC_Valor);
}
//----------------------------------------------------------------------------//

void main(){

Delta_Sigma_Init();

Delay_ms(200);

Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,3,"Delta Sigma.");

while (1){
Leitura = Delta_Sigma_Leitura(16384);
IntToStr(Leitura,TXT);
Lcd_Out(2,1,TXT);
Delay_ms(10);
}
}
//----------------------------------------------------------------------------//

Hardware:

post-892805-13884963405084_thumb.jpg

Postado

**, cara, que ótimo. Se tiver algo para acrescentar no tópico fique a vontade. Fiquei satisfeito com os resultados, ficou bem mais estável do que eu imaginava.

Postado

Pedro,

Excelente ideia, vou adaptar para uso nos AVR's também !

Só uma coisa, o link do site da Microchip está errado..... altera ele !

Paulo

Postado

Paulo, obrigado pela correção, já alterei. :)

Se possível, poste o código para AVR aqui, também. Tenho certeza de que enriquecerá, e muito, o tópico.

Grande abraço.

  • 3 semanas depois...
Postado

Não consegui um bom resultado, pois os números ficam variando muito quando mostrados no display mesmo com o RV1 na mesma posição. Vocês tem ideia do que pode estar acontecendo? O código no mikroC está completo? Alguma configuração adicional deve ser feita no projeto em mikroC?

Obrigado!!!!

Postado

Opa, beleza?

Então, caso esteja simulando apenas no Proteus, ele ira variar muito mesmo.

Caso esteja montando no protoboard e se mesmo assim estiver variando dê uma checada no circuito, em especial no capacitor de 100nf.

Se tiver dúvidas, é só postar.

Postado

Obrigado Pedro pela resposta rápida, e também pelo seu exemplo.

Estou aqui analisando o código do application notes que você passou (em assembly)

e parece que você seguiu a risca mesmo a coversão...

No entanto, fiquei com uma dúvida na inicialização da sua rotina "Delta_Sigma_Init", onde você coloca "TRISA3_bit = 0;", não entendi, não deveriam ser os dois pinos configurados como entrada? Tanto RA0 quanto RA3? Ou seria talvez para garantir a descarga do capacitor na inicialização?(Se este for o caso ainda seria necessário configurar novamente como entrada após esta descarga não seria?)

Ficando::::

void main(){

Delta_Sigma_Init();

Delay_ms(200);

TRISA3_bit = 1; // Linha acrescentada

...

(Continuacao do código normalmente)

}

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

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

×
×
  • Criar novo...