TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: MAUTV en 14 de Abril de 2012, 22:50:29
-
Olá a todos! Hoje estava verificando a possibilidade de utilizar o PIC 16F877A para realizar uma aplicação com Touch (capacitivo) conforme documento da Microchip AN1298.
Abaixo segue o código que criei mas não funcionou muito bem.
unsigned long int TOUCH ()
{
unsigned long int VALOR = 0;
//ADRESH = 0X00;
//ADRESL = 0X00;
ADCON1 = 0b11000010;
RA0 = 1; // Seta RA0 hight
TRISAbits.TRISA0 = 0; // Seta AN0 como RA0
__delay_ms(30);
ADCON0 = 0b10000001; // Faz AN0 como analógico
RA1 = 0; // Seta saída em zero
TRISAbits.TRISA1 =0; // Seta AN1 como RA1
TRISAbits.TRISA1 =1; // Seta RA1 como AN1
ADCON0 = 0b10001001; // Faz AN1 como analógico
__delay_us(30);
ADCON0bits.GO_DONE =1;
while(GO_DONE);
VALOR = ADRESH;
VALOR <<= 8;
VALOR = VALOR | ADRESL;
ADCON0bits.ADON = 0;
TRISAbits.TRISA1 =0; // Seta AN1 como RA1
return VALOR;
}
O erro que ocorre é o seguinte.
A variável VALOR não tem um valor constante, ele varia de 0000 até 500 aleatoriamente, assim não consigo assertividade na detecção do acionamento da tecla capacitiva.
Alguém poderia me ajudar a encontrar o problema?
Muito obrigado novamente!
-
Boa noite!
Ainda estou estudando este documento, entretanto consegui obter algo já usual como abaixo:
unsigned long int TESTE ()
{
unsigned long int VALOR = 0;
ADRESH = 0X00; // Zera registros
ADRESL = 0X00; // Zera registros
ADCON1 = 0b10001110; // Justificar a direita & Fosc/64 & AN0 com referencias internas
PORTA=0X00; // Zera valor do capacitor interno do AD (CHOLD)
TRISA=0X00; // Porta A como saída
__delay_ms(10); // Tempo para garantir 0v no CHOLD
PORTA=0XFF; // Carrega o CHOLD com Vdd
ADCON0bits.CHS = 0b000; //Liga canal AN0
ADCON0bits.ADCS = 0b10; // Fosc/64
ADCON0bits.ADON = 1; // Liga ADC
TRISA=0XFF; // Porta A como entrada
__delay_us(30); // Tempo para realizar a leitura
ADCON0bits.GO_DONE =1; // Inicia a conversão
while(GO_DONE); // Aguarda finalizar a conversão
VALOR = ADRESH;
VALOR <<= 8;
VALOR = VALOR | ADRESL;
ADCON0bits.ADON = 0; // Desligar ADC
return VALOR ;
}
Agora sem toque 850 e 830, conforme vou aproximando o dedo este valor vai diminuindo gradativamente até o valor de 650. Já pode-se utilizar para detectar entretanto ainda que realizar conforme material da Microchip.
Aguardo ajudas, muito obrigado!
-
fantastico!! espero ver los resultados! saludos!
-
Aca también hablamos del tema, hay videos y ejemplos
http://www.todopic.com.ar/foros/index.php?topic=35513.0
Saludos!!