Ir ao conteúdo
  • Cadastre-se

Maria Cristina Oliveira

Membro Pleno
  • Posts

    107
  • Cadastrado em

  • Última visita

Tudo que Maria Cristina Oliveira postou

  1. Então fica assim... if (digitalRead(BUTTON_PIN) == 1) { digitalWrite(led, HIGH); delay(100); digitalWrite(led,LOW); } while(digitalRead(BUTTON_PIN) ==1); delay(100); // para o caso de ter bouncing
  2. Vamos juntar nossos neurônios... O programa que eu copiei foi o seu, não o meu... É que às vezes, tem bouncing quando se desliga a chave.... O termo anti-debounce não existe (piada interna, descobri dias atrás). Ou é Anti-bouncing ou debounce Desculpe as brincadeiras... (acordei bem-humorada).
  3. Obrigada por lembrar, amigo! Às vezes me confundo, mas já fiz certo! P2_6=!P2_6; while (!P3_0); while (tempo<10000){ //tive que colocar isso porque também tem... Então fica assim... Interessante o programa que você fez (vou copiar pra mim). OBS: Anti-debounce é piada interna... https://www.clubedohardware.com.br/forums/topic/1533966-filtro-anti-debounce-na-linguagem-c/page/2/?tab=comments#comment-8161418
  4. if (digitalRead(BUTTON_PIN) == 0) { digitalWrite(led, HIGH); delay(100); digitalWrite(led,LOW); } while(digitalRead(BUTTON_PIN) ==0) //aqui no momento eu não sei se coloca ";" ou //não delay(100); // para o caso de ter anti-debounce
  5. @.if OOOps! Errata. No esquema que eu fiz, liguei o P0_3 na chave, quando na verdade, eu usei o P3_0. Troquei as bolas... E não deu para editar. É a pandemia que deixa a gente assim. Esse é o esquema correto:
  6. @.if Amigo: Passei aqui só pra te dizer que o teu filtro "ANTI"-debounce funcionou! Parabéns!! Tive que fazer pequenas alterações: relê = 5V X 56 ohms (bobina) resistor de base do transístor = 10k (tudo isso? foi só pra ver se saturava) transístor = BC558 CLOCK = 4MHZ uC = AT89S52 #include<at89x52.h> unsigned int tempo=0; //P3_0 ligado na chave //P2_6 aciona o relê no nível 0 void main(){ while(1){ if(!P3_0){ while(!P3_0 && (tempo<50000)) { tempo++; if (P3_0) tempo=0; } P2_6=!P2_6; while (!P3_0); while (tempo<10000){ //tive que colocar isso porque também tem boucing tempo++; } //quando desliga tempo=0; } }} E tem mais: main: if(!bot0) antdeb –-; else {goto bot0lib}; if(!antdeb)antdeb2--; else {goto main}; if(!antdeb2) goto bot0pres; else {goto main}; bot0lib: ... bot0pres: ... Esse programa que eu fiz e marquei como solução NÃO funcionou e eu sei porque: Eu usei a lógica do ASM na construção do programa na linguagem C. Através dos saltos, meu programa contava as linhas de programação para fazer o delay, mas uma linha de programa na linguagem C representa "n" linhas em ASM. Por isso não funcionou. Misturei tudo !!! O teu programa é a solução mas não consegui remarcar.
  7. Oi: Eu é que agradeço, amigo! Tempos atrás eu diria que você está falando grego (fluentemente). Mas hoje, felizmente eu consegui entender tudo o que você disse!!!!!!. Realmente eu constatei pelo datasheet, que os acionamentos funcionam melhor em nível baixo, onde há maior fluxo de corrente. Nisso, eu não tinha pensado...Eu estava concentrada no nível lógico 1, não analisei o nível lógico 0. Obrigada, Amigo! Eu só pareço burra...(brincadeira) Reconheço as limitações desse meu uC (8051), mas como eu compro ele a preço de banana (e consegui "desenrolar" bem a programação dele na linguagem C), continuarei utilizando essa tecnologia do passado... Outro abraço pra você, amigo. E obrigada pela aula!
  8. Oi: Obrigada pela ajuda, amigo! Por inexperiência eu pensava : - " P1.0 só fornece 1mA (8051)... se colocar um resistor, aí é que não vai passar corrente mesmo!" Eu achava que um resistor na base do BC 548 limitaria muito a já fraca corrente do P1.0 a ponto de não saturar o transístor. Agora posso concluir meu projetinho sem receio, mas infelizmente não poderei colocar um relê de 12V (minha fonte é de 5V). Se eu colocar um relê de 12V, terei que trocar de fonte e acrescentar um 7805 + dissipador (para o 8051). Que bom que podemos contar com seus conhecimentos e com sua experiência!
  9. Oi: Meu caso é diferente. Nesse tópico, o amigo queria ligar o relê diretamente no uC (?????????????????????). Eu quero usar um transístor para fazer a conexão. E logicamente, com um diodo 1N4148 em paralelo com o relê, inversamente polarizado, para evitar problemas.
  10. Oi: Estou com uma dúvida que a internet ainda não conseguiu solucionar... O pino RA1 (do PIC 16f628) fornece até 25mA em nível alto. Pelas minhas contas, cheguei à conclusão que um resistor de 4K7 na base de um transístor BC 548 fornece ao mesmo, corrente suficiente para saturá-lo (+ ou - 1mA) chaveando assim, um relê de 5v. O pino P1.0 (do port P1 do 8051) fornece até 1mA em nível alto ( se forem usados todos os 8 pinos como saída). Como fica então o cálculo do resistor de base nesse caso? Ou não precisa de resistor de base? Se ligar direto o P1.0 do 8051 na base de um BC 548, não vai danificar o uC? Eu tô com medo de ligar P1.0 direto na base do BC 548, exceder (de alguma forma) a capacidade de fornecimento de corrente do 8051 e queimar o mesmo... OBS: Não quero ter que usar um buffer (ULN 2001)
  11. Bem... Como eu não costumo "dar essas mancadas" (filtro anti-debounce), em minha defesa citarei a fonte: Livro: Microcontroladores PIC - Teoria e Montagens Práticas Prof. Eng. Geraldo Carvalho Editora Eltec Página 66, tópico : 4.8 - Filtros Anti De-bounce (Não vou assumir sozinha... ) OBS: Fora isso, o livro é muito bom! Aprendi muita coisa com ele (comprei na Santa Efigênia).
  12. Epa! Só mais uma coisinha... Eu estava falando errado o tempo todo. "Todas as chaves mecânicas possuem um comportamento indesejável chamado “bouncing“, mas existem várias formas de “debounce” para resolver esse problema." Ou seja, anti-debounce não existe (anti-bouncing = debounce). Desculpem nossa falha... (Droga! O título do post vai ficar errado pra sempre! Não dá para mudar... Agora vou ter que inventar um filtro anti-debounce para justificar o título...)
  13. unsigned int tempo=0; while(!bot && (tempo<10000)) //ajuste pra sua realidade { tempo++; //tempo time out if (bot) tempo=0; //se tiver repique recomeça } while (!bot); //tire o dedo do botão Excelente filtro anti-debounce, amigo! Vou testar, mas sei que vai funcionar! Meus filtros são em ASM, mas eu estava precisando de um bom filtro na linguagem C.
  14. Nunca vi um código anti-debounce assim. Se resolver seria muito bom. Mas acho que não funciona... Esse é um trabalho para o nosso amigo sumido @.if resolver...
  15. Espera aí.... Deixe eu pensar um pouco... enquanto o antdeb não é zero, tem o loop do else {goto main} Está tentando me confundir?????????????????? Brincadeira...
  16. Oi: Acompanhe a execução do programa passo a passo ( "gotos") e vai somando o tempo de cada instrução que fica mais fácil de entender. Não testei ainda mas acho que vai funcionar corretamente porque faz exatamente o que o outro código faz em ASM.
  17. Sempre uso o clock de 4Mhz e o decremento vai somando o tempo de cada instrução.
  18. O delay acontece com o decremento dos registradores antdeb e antdeb2.
  19. Ufa! Queimei meus neurônios (não sou loira), mas acho que consegui!!!!! main: if(!bot0) antdeb –-; else {goto bot0lib}; if(!antdeb)antdeb2--; else {goto main}; if(!antdeb2) goto bot0pres; else {goto main}; bot0lib: ... bot0pres: ... Muito simples, fiz agora, às pressas. Deve funcionar, se eu consegui escrever tudo corretamente! OBS:antdeb e antdeb2 são registradores de propósito geral de 8 bits
  20. Oi: Esse filtro é perfeito em assembly, mas não estou conseguindo passar esse trecho do programa para a linguagem C. Gostaria de aprender a fazer sem usar #asm e #endasm. Se alguém souber, eu ficaria muito agradecida! main: btfsc bot0 ; testa botão 0 goto bot0lib ; se liberado, vai para bot0lib decfsz antdeb,f ; se pressionado, decrementa filtro goto main ; volta para main decfsz antdeb2,f ; se acabou filtro 1, inicia filtro 2 goto main ; volta para main goto bot0pres ; vai para bot0pres bot0lib: goto main bot0pres: ... ... Quanto às intruções: (BTFSC f,b) - Testa o bit b, do registrador f, pula se for 0 (goto k) - desvia o programa para k (DECFSZ f,d) - Decrementa f, resultado no d, pula se for 0 antdeb e antdeb2 são registradores de propósito geral de 8 bits
  21. @eletron1791 Oi: Amigo, desculpe a minha ignorância mas, por que um diodo no pino 8 (VSS) do PIC 12F675 ajudaria ele a funcionar com baixa tensão? Acho que faltei a essa aula...
  22. Oi: Em anexo, um presentinho para os colegas. Obs: Coloque os valores de Valimentação, Vled e Corrente e obtenha o valor do resistor limitador de corrente R_Led.xls

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!