Ir ao conteúdo
  • Cadastre-se

Botao capacitivo (toush) para pic


cesarlg

Posts recomendados

Ola galera, ja vi alguns videos e achei bem interessante esse tipo de botao, que na vdd  nao precisa necessariamente ter contato direto, ou seja, atras de um plastico, vidro , etc...

Apesar de supor como funciona, me falta muito p iniciar algo...

A duvida é tanto no hardware qt no programacao do proprio pic.(utilizo CCS) se necessita de livraria. ou um codigo simples funciona.. ouvi dizer q a Microship tem um exemplo ,

alguns falam ate de testar na entrada analogica, mas nda encontrei..

Aguardo qq experiencia sobre o assunto 

 

Link para o comentário
Compartilhar em outros sites

@cesarlg,

 

Segue um link antigo, muito bom, com explicações bem detalhadas , acho que é exatamente o que voce procura.

 

http://www.pic24.ru/doku.php/en/osa/articles/pk2_osa_piano

 

 

Já se voce usasse um chip AVR (ou um Arduino), é bem mais simples ...

 

http://tuomasnylund.fi/drupal6/content/capacitive-touch-sensing-avr-and-single-adc-pin

 

 

Paulo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

cesarlg

 

 

 A ideia é trabalhar com a variação de capacitância, seu sensor capacitivo pode ser apenas uma placa dual Layer (cobreada pelos dois lados) dependendo da areá das placas você terá uma capacitância diferente, mais ou menos da ordem dos Pico Farads(da para calcular isso...hehe) ao aproximar o dedo ou tocar a placa, essa capacitância vai mudar. Sou software (e hardware também) devem detectar essa variação na capacitância, ai entra a parte mais complicada.

 Existem varias formas de fazer isso, você poderia modificar o código de um capacímetro com PIC e quando houver essa varição de capacitância, executar o Evento do Click do botão, ou usar um oscilador RC, com a variação da capacitância o valor da frequência mudaria também , talvez aplicar uma frequência conhecida e medir quanto passa (pois com a variação da capacitância, a reatância capacitiva muda também), enfim....  São muitos métodos, mas todos muito teóricos, as vezes até improváveis na pratica... Agora é questão de pesquisar e ver qual funciona melhor.

Um método que acho que daria certo é usar um pino do PIC em serie com um resistor para alimentar um capacitor em paralelo ao seu sensor, e medir com o timer o tempo de carga (e descarga) do conjunto, quando varia a capacitância esse tempo vai variar tambem.

ps: Esse link que o aphawk passou é muito bom, tem um exemplo bem pratico...

 

 Espero ter ajudado.

A) Luiz Gustavo.

Link para o comentário
Compartilhar em outros sites

@aphawk, hehehe essa foi a primeira impressão ....  ainda não li tudo ....

 

aproveitando o assunto, eu estava lendo o datasheet do pic 16F1823  http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en544838  e  nas suas caracteristicas diz que ele tem isso aqui:  

 

  • Integrated Capacitive mTouch Sensing Module

será algum hardware interno para ler esses  botões capacitivos??

 

a propósito achei muito boa a frequência do oscilador interno de 32Mhz...

Link para o comentário
Compartilhar em outros sites

@vtrx,

 

Antes de ser incisivo, e escrever em caixa alta e negrito, que tal ler o tópico todo, para ver se já não foi respondida a dúvida do autor ?

 

Ou voce espera que outros membros fechem o tópico ?

 

Já que voce passou por aqui, poderia responder à pergunta do @rodrigocirilo ?

 

Afinal voce usa muito mais os Pics, entende muito de C  e é a pessoa mais qualificada para responder.

 

Paulo

Link para o comentário
Compartilhar em outros sites

 

Já que voce passou por aqui, poderia responder à pergunta do @rodrigocirilo ?

A ultima vez que tentei ajuda-lo,postei um código completo incluindo simulação no Proteus e a resposta que tive foi  que ele se sentiu ofendido quando disse que ele não programava em CCS(não tive a intenção de ofender,mas sim de alertá-lo que não adiantava entrar em muitos detalhes num tipo de compilador).

Minha conclusão é que realmente não é interessante postar um código completo,mas sim ajudar em partes de código,deste modo o tópco teria ficado mais tempo aberto.

Link para o comentário
Compartilhar em outros sites

@vtrx meu caro, qual o seu problema comigo,  eu agradeci pelo código do outro tópico que me ajudou em muito!!!! mas não precisava falar daquele jeito meu caro, você me ofendeu sim!! Não tinha nada a ver você dizer aquilo !!! como eu disse lá, se eu fosse algum mestre em linguagem C, não viria aqui pedir ajuda, viria pra AJUDAR!!!! somente!!

 

Não desvie a pergunta que o @aphawk te fez falando de mim!!! ninguém pediu pra postar código inteiro aqui neste tópico!!!  caso a escrita "capslook" e negrito" tenha sido para mim NOVAMENTE você deve estar com algum problema, pois o que postei tem a ver sim com o tópico, pois se o pic tiver uma opção de hardware para tratar este tipo de botão ajudará o colega @cesarlg no implemento dos botões!!!

 

Não sabe responder, não responde!, quer ajudar! ajude! (nós iniciantes agradeceremos sempre) este tipo de atitude.  Mas pare de falar de mim, pois você não me conhece!!

Link para o comentário
Compartilhar em outros sites

Pessoal, se q as vezes atitudes liberta em nos uma revolta, kkk , mas temos q saber relevar.. Veja só aphawk, vtrx, nomes muitos conhecidos aqui por estarem sempre ajudando, incluido  rodrigocirilo q apesar de ser um colega "novo" no forum, ja mostra sua disposicao em aprender e a esclarecer duvidas aos demais!!  todos aqui, inclusive eu, somos gratos  pelo q fazem.. Vamos amenizar o clima, qm pode astear a bandeira branca, faça !! kkk nao vamos delongar os post de um assunto q pode ser simples (botao capacitivo), mas com muito pouco material por ai...

 Voltando....

vendo um trabalho de conclusao , adaptei alguma coisa e quero q opinem, claro q falta testar,  tenho o material , so falta o tempo .. kk

#include <16F877A.h>  #FUSES NOWDT                    #FUSES XT                       #FUSES PUT                      #FUSES NOPROTECT                #FUSES NODEBUG                  #FUSES NOLVP                    #FUSES NOCPD                    #use delay(clock=4000000)#include <lcd.C>        #define LED PIN_C7 #define LED1 PIN_C4  #define SENSOR1 PIN_B0 #define TOQUE 7 #define CICLOS 50 int8 ciclosS1 = 0; int1 state1 = 0; float32 c,t ;void testa_estado(int l) { if(l == LED1) { delay_ms(100); if(!state1) { output_high(LED1); state1 = 1; } else { output_low(LED1); state1 = 0; }}}void main() { lcd_init();output_high(LED); lcd_putc("\n     CESAR  ");delay_ms(400);lcd_putc("\f \n       ");delay_ms(200);while(true) {   c = cicloss1 ;  t = toque;  printf(lcd_putc,"\f  toque   %2.0f \n ciclos1  %2.0f ",c,t);output_low(SENSOR1); delay_ms(1); output_high(SENSOR1); delay_us(2); output_float(SENSOR1); ciclosS1 = 0; while(input(SENSOR1) && (ciclosS1 < CICLOS)) { delay_us(150); ciclosS1++; } if (ciclosS1 < TOQUE) { testa_estado(LED1); ciclosS1 = 0; delay_ms(400); } } }
Link para o comentário
Compartilhar em outros sites

@cesarlg, @vtrx, @rodrigocirilo

Excelente ideia , Cesar. Parece que o calor andou afetando as cabeças kkkkkkkk !

Vamos voltar ao nosso foco, que sempre foi ajudar a quem realmente quer aprender.

Peço desculpas a todos pela minha atitude, eu muitas vezes me deixo levar em tentar passar um pouco do que aprendí, e isso sempre dá origem a uma série de questões "alternativas" ao tópico original.

Vou me ater apenas a responder as perguntas, creio que isso vai tornar os tópicos mais objetivos.

Paulo

Link para o comentário
Compartilhar em outros sites

@cesarlg, @vtrx, @aphawk

Concordo com vocês, peço desculpas a todos pelo ocorrido aqui e em outro tópico! Estou aqui pra aprender com vocês tenho mais é que acatar o que vocês dizem!.

Este tópico muito me interessa este tipo de botão deve ser bem legal pois acaba por se tornar mais durável pois não tem contato mecânico! Estou respondendo do cel. Mas assim que der vou verificar o tópico sugerido pelo amigo vtrx!!

Desculpa ai pessoal pelo meu mal comportamento, como disse via mp pro vtrx, eu na condição de iniciante dependo da boa vontade de vocês!!

Abrs

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@rodrigocirilo,

Uma coisa eu posso te garantir : aqui, temos um objetivo apenas : ensinar !

Não visamos brigas, negócios, desprezos, apenas queremos ajudar da maneira que cada um pode no momento.

Mas desde que entrei aqui, sempre ví a atitude de membros como o Vtrx, Matheus, Faller, e muitos outros , sempre com muita vontade de ajudar, com muito respeito, a quem solicita.

Me sinto honrado na presença de pessoas com esse nível, e tento fazer a minha parte aqui, como eles.

É muito legal ver que você entendeu o ponto que o Vtrx quis mostrar a todos nós, e continue conosco, ok ?

Paulo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...

@aphawk, caro amigo, li todos os exemplos citados neste tópico ( nenhum em português hehe) e não consegui digerir como é o processo de leitura dos botões....

 

Pelo pouco que entendi, tem haver com o capacitor interno dos canais AD, você carrega e descarrega ele e ..... :confused:  :confused:  :confused:  :confused:  

 

Se alguem tiver algum exemplo para somente 1 botão em linguagem C acho que seria bem útil.

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo,

 

A leitura ?????

 

Se for usado o comparador analógico, é por ele que voce vai saber se teve um toque.

 

Se for usado ADC mesmo, é ler a tensão no tempo correto e ver se passou de um certo limite.

 

Na verdade tem a ver com o resistor interno de pull-up também, quem faz a carga do capaitor interno é ele, e o programa chaveia essa carga...

 

Paulo

Link para o comentário
Compartilhar em outros sites

@aphawk nosinhora, acho que isso está alem do meu conhecimento.. hehe

 

achei um tutorial interessante na internet, mas é em asm (incompreendível para mim hehe) segue: http://larios.tecnologia.ws/iBlog/archives/3431

 

Bem, vou ir lendo até entender.

 

A propósito ja estou lendo seu tutorial para os AVR.. 

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo,

 

Infelizmente tudo o que eu achei que explica a teoria é em inglês mesmo. Mas se voce já está lendo meu tutorial, existe uma aplicação prontinha para o Bascom, faz tempo que o pessoal usa isso. Vou postar no meu tutorial o código e comentar o funcionamento.

 

Paulo

Link para o comentário
Compartilhar em outros sites

@aphawk, então vou ler bem detalhadamente seu tutorial e tudo que puder....Você acha melhor entrar no mundo dos AVR/Arduino com linguagem C ou Basic(Bascom)??

 

Ps: Na pagina 5 do PDF (AVR-Projeto DEsing...) está assim "Para concluir esta comparação, vou dar um exemplo de um PIC muito usado hoje em dia, que é o ATMEGA 48 . Vamos ver o que temos dentro dele :"   Ali você está falando dos AVR´s certo?

 

vou ver este exemplo depois.. 

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo,

 

Opa falha da revisão kkkkkkk  Sim, é do Avr. 

 

Em 2009, eu escreví um tutorial para PIC, usando um Basic para Pic, o nome é PIC SIMULATOR IDE :

 

http://www.oshonsoft.com/pic.html

 

voce encontra ele ainda aqui no CDH, neste lugar :

 

http://forum.clubedohardware.com.br/forums/topic/555975-microcontroladores-circuitos-linguagens-tutorial-em-basic-para-pics-e-avrs/?p=3539926

 

Eu acabei aproveitando o texto onde falo sobre a parte interna dos microprocessadores quando resolví fazer este de AVR e BASCOM, e tive de mudar os nomes dos microprocessadores kkkk essa que você reparou "escapou" na revisão....

 

Quanto à sua pergunta, eu respondo da seguinte maneira : Se voce está aprendendo, e quer trabalhar com isto, vá direto ao C, nem veja a linguagem nativa do Arduíno, pois é muito parecida. Se voce quer aprender como hobbysta, ou já tem uma certa idade, como eu ( kkkk ) , fique no Bascom. Tudo é bem mais fácil de se fazer , pois a linguagem tem muitos comandos totalmente orientados ao hardware, e trata direto tudo que existe no hardware, sem você ter de se preocupar com muita coisa.

 

Por exemplo, buffers para comunicação serial, usando interrupts, voce implementa direto em um só comando. Falar com I2c, 1-Wire, Can, SPI, tudo prontinho também em um só comando.

 

Aguarde que eu só estou esperando a opinião do Mr. Nintendo e do MatheusLPS, para ver se poderemos publicar em conjunto uma série de pequenos Tutoriais, tipo uma séria APRENDA COMO FAZER , e nela iremos explicar tudo para se fazer vários projetos, como displays de Led 7 segmentos multiplexados, Medições de temperatura , Medições de corrente, comuninicação serial, comunicação SPI, displays gráficos, displays LCDs, etc, estamos tendo algumas ideias legais, para que qualquer um possa aprender como fazer, independente de ser Pic ou Avr.

 

No primeiro existem uns programinhas que fiz em Bascom, que usam comandos bem interessantes do Basic.

 

Paulo

Link para o comentário
Compartilhar em outros sites

Ok, tomara que dê certo esse projeto que vocês estão fazendo....Mas ir lendo o que puder sobre os AVR´s...

 

Mas voltando ao titulo do tópico antes que tomemos outro C̶a̶r̶c̶a̶ bronca, ainda está escuro para mim o caminho a seguir sobre os botões capacitivos.

 

Queria saber a sequencia certa pra setar o canal AD, e como fazer as comparações....

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo,

 

Vou tentar explicar. Olhe este link :

 

http://www.pic24.ru/doku.php/en/osa/articles/pk2_osa_piano

 

Repare que externamente o cara ligou um resistor à entrada do conversor A/D, e esse resistor está ligado a um dos pinos de saída, para poder controlar. Mas é um resistor de alto valor, assim qualquer capacitância que porventura exista na entrada A/D vai influenciar, e vai demorar mais para a tensão subir.

 

Essa "capacitância" externa é justamente o seu dedo !!!!

 

Inicialmente, o cara usa os dois pinos citados como SAIDA DIGITAL, e coloca valor 0 em ambos. Assim, não existirá nenhum tensão na entrada do ADC.

E ainda configura o conversor ADC para deixar a entrada desconectada do capacitor de Holding

 

Em seguida, ele reconfigura o pino do ADC para virar de novo uma ENTRADA ANALÓGICA. E muda a saida que alimenta o resistor, colocando nivel 1 nela. A tensão na entrada do conversor ADC vai subir, muito rápido se não tiver dedo, e mais devagar se tiver um dedo.

 

Em seguida, ele liga o capacitor de Holding ao pino de entrada, mandando fazer a conversão do valor. Vai obter um determinado resultado, e é por este valor que se determina se existiu um dedo naquele momento, ou se não existia....

 

Em seguida, reconfigura a entrada analógica como SAIDA DIGITAL, e zera a saida, descarregando o capacitor.

E também desliga a alimentação do resistor, colocando nivel lógico 0 na saída.

 

Não é tão complicado, é ? 

 

O exemplo que usa o AVR já é bem mais engenhoso....

 

Paulo

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!