Ir ao conteúdo
  • Cadastre-se

eletron1791

Membro Pleno
  • Posts

    187
  • Cadastrado em

  • Última visita

Tudo que eletron1791 postou

  1. Boa ederlap, e como tem que ficar para rorarem juntos ?
  2. Já fiz de tudo. Não dá certo. Ou funciona o primeiro conjunto de comandos que chama uma função (sensor_ir) dentro do laço for. Ou funciona uma lógicazinha boba referente a dois botões. Já tentei pôr FOR dentro de WHILE e vice-versa, nada. Compila sem erros (ccs), mas os dois juntos não funcionam. Como tem que ficar pra funcionar os dois juntos ? ...alguém sabe (e quer dizer) ? ,,,mas assim, direto, sem mandar eu ler livros, tutoriais, etc. Desconfio que o motivo seja que ambos são laços de repetição infinita, mas preciso que as duas funções funcionem, e não aceita pôr os comandos juntos dentro de for ou dentro de while. GRATO for(;;){ if(sensor_ir()){ while(sensor_ir()){ output_high(PIN_B3); delay_ms(5); } } output_low(PIN_B3); } while(TRUE) { if(input(PIN_B0)==0){ while(input(PIN_B0)==0) delay_ms(100); output_high(PIN_B1); }
  3. Prezados, Alguém tem o esquema de um simples dimmer para uma lâmpada 24 volts que possa ser ligado direto no secundário de um transformador (24 volts AC) ? ao invés de diac usar 2 diodos 1N4148 ou 1N4007 em contraposição. Usar Triac (BTA08 ou BTA12) para a lâmpada ir até o seu máximo brilho (onda completa). Enfim, alguém tem algo já testado ? PWM tem aos montes por aí, mas e dimmer ?
  4. Prezados, encontrei um artigo que despertou interesse pois eu já tinha uma placa led P10 parada aqui. O artigo é pequeno e esta neste link: https://circuitdigest.com/microcontroller-projects/digital-notice-board-using-p10-led-matrix-display-and-arduino Montei e funcionou. Só que a placa-led P10 possui 32 leds na horizontal e 16 leds na vertical. E eu queria aproveitar todo este tamanho, ou seja, exibir caracteres de matriz de pixels maior. Notem que no começo do programa há dois includes, um deles é de uma matriz 5x7.h, mas na prática (vejam o desenho que eu fiz em anexo) está aparecendo caracteres 8x14, tá sobrando 1 linha em cima e três linhas em baixo. Eu queria caractere de 16 de altura, poderia ser 8x16. Aí me surgiram três dúvidas: A__ Tentei encontrar os includes e abrir para ver como foi feita a formação dos caracteres mas não consegui localizar. Onde fica no PC ? B__ Tem alguma forma de eu baixar caracteres já prontos de algum site e 'jogar' para dentro do código ? como ? C__ Se eu quiser que uma palavra (apenas duas letras) fiquem paradas no painel, sem o efeito de rolar da direita para a esquerda, como teria que ficar o código ?
  5. Achei bem legal esta fonte que usa um capacitor supressor e consegue fornecer 12 volts para o relé e 5 volts para o resto, sem transformador (entrada 85 a 220 volts AC). Bem compactado e sem as, difíceis de encontrar, bobinas. Alguém tem o esquema ?
  6. Isso Paulo, é o que estamos tentando fazer aqui. Consertar códigos.
  7. Paulo, essa linguagem c é doida mesmo, estamos apanhando bastante aqui. E acho que já fizemos sua sugestão mas não quis funcionar. PATO, Gp0 é o pino 7, tem que ficar como entrada pois é o botão. E Gp3 é o pino 4, que não está sendo usado (mesmo assim tá com R 10K indo para o +5). O que falta entenderemos é por que parece que não está aceitando este trecho do código ? delay_ms(1); tempo++; if (tempo==5000){
  8. Desta outra forma é curioso pois o led pisca após eu fechar e abrir o botão 6 vezes. Então tá contando ? mas ainda não é o caso. Teria que contar 5 segundos e não quantidade de vezes. Isso me faz crer que eu preciso remover o while, mas se eu remover o while vai contar direto, e não é para contar direto mas sim somente quando a chave abrir depois de ter estado fechada. while(botao==1){ delay_ms(20); if(botao==0){ x++; if(x==6){ led=1; delay_ms(400); led=0; x=0; Mas se eu fizer assim, o led pisca direto assim que a chave fechar, ou seja, ignora totalmente a variável x, como se não existisse as linhas x++ e if(x==6000). if(botao==1){ x++; delay_ms(1); if(x==6000){ led=1; delay_ms(400); led=0; x=0;
  9. O melhor código é este, nele o led só pisca quando a chave abre, ou seja, quando Gp0 = 0 (resistor de 10K para o GND). Sem ruído, só pisca 1 vez, etc. Tá beleza. Mas o propósito é: O led só pode piscar se a chave abrir e ficar 5 segundos aberta, aí sim o led pisca só 1 vez. O problema é que não adianta pôr uma variável x e fazer x++ e depois x==5000 pois não funciona de jeito nenhum. Parece estar faltando settar algum recurso interno do PIC para que ele possa contar. #include <12F675.h> #device adc=8 #use delay(clock=4000000) #fuses NOWDT,INTRC_IO, NOCPD, NOPROTECT, NOMCLR, PUT, BROWNOUT #byte tris=0x85 #bit led = 0x5.4 //pino 3 #bit botao = 0x5.0 //pino 7 void main() { tris=0b001101; //gp0 como entrada while(true){ while(botao==1){ delay_ms(20); if(botao==0){ delay_ms(20); led=1; delay_ms(500); led=0; } } } } Ali onde o delay_ms(20) eu mudei para delay_ms(6000), quase que resolveu de vez. Pois, ao abrir a chave, o led só pisca após os delay, que aliás na prática dá quase 4 segundos e não os 6s previstos. Mas o detalhe é que se a chave tornar a ser fechada antes do tempo terminar, o led não pode piscar e o tempo tem que reiniciar. Isso com delay não acontece. Depois que a chave abriu, não importa se ela torna a fechar que o led vai piscar de qualquer maneira.
  10. Realmente não poderei usar o timer. Já está previsto usá-lo depois em outra etapa. Mas o que me confunde é que a tarefa é tão simples que não é possível gerar tantas linhas de código. Veja, é só isso:
  11. OK, feito. Voltou àquelas duas mensagens das linhas 18 e 19 Será que não tem que setar nenhum timer interno do PIC...pra contar ? ...sei lá OK, compilou, vou testar Deu no mesmo, quando abre o botão, o led pisca imediatamente. Eu tinha até agora as 21:00. Que troço essa linguagem, tanta coisa pra piscar um led com retardo. Mas enfim, grato demais, se você puder e quiser amanhã poderei fazer mais testes. Valeu.
  12. Tornei a colocar os int´s para sumir alguns erros, mas ainda tem os erros das linhas 18 e 19, veja
  13. Coloquei. Agora toda vez que fecha e abre o botão, atua só na abertura, o led pisca imediatamente. Vale dizer que estou usando um pic 12f629 que na maioria dos casos funciona beleza com código para 12f675, acho que a única diferença de um pro outro é que o 675 tem conversor AD. Já mudei o include e setei para 12f629 no compilador, nada mudou. Ficou assim, só pra confirmar: #include <12F675.h> #device adc=8 #use delay(clock=4000000) #fuses NOWDT,INTRC_IO, NOCPD, NOPROTECT, NOMCLR, PUT, BROWNOUT #ZERO_RAM #byte tris=0x85 #bit led = 0x5.4 //pino 3 #bit botao = 0x5.0 //pino 7 int tempo; int flag_led_piscou; void main() { tris=0b001101; //gp0 como entrada tempo=0; flag_led_piscou=0; while(true){ if(botao==1){ delay_ms(100); // filtro de ruído while(botao==0 && flag_led_piscou==0){ delay_ms(1); tempo++; if (tempo==5000){ led=1; delay_ms(500); led=0; flag_led_piscou=1; } } flag_led_piscou=0; tempo=0; led=0; } } }
  14. coloquei int1, mas agora troquei para apenas int. Mas o resultado é o mesmo.
  15. Agora o que mudou foi que até então ao fechar e abrir o botão e mantê-lo aberto, o led piscava sem parar. Agora, ao fazer o mesmo procedimento, o led pisca só 1 vez. Nunca mas ele pisca. Porém pisca imediatamente quando abre o botão. Ou seja, continua não dando bola para a variável tempo Troço chato #include <12F675.h> #device adc=8 #use delay(clock=4000000) #fuses NOWDT,INTRC_IO, NOCPD, NOPROTECT, NOMCLR, PUT, BROWNOUT #use fast_io(A) //#end if #ZERO_RAM #byte tris=0x85 #bit led = 0x5.4 //pino 3 #bit botao = 0x5.0 //pino 7 int tempo; int1 flag_led_piscou; void main() { tris=0b001101; //gp0 como entrada tempo=0; flag_led_piscou=0; while(true){ if(botao==1){ delay_ms(100); // filtro de ruído while(botao==0 && flag_led_piscou==0){ delay_ms(1); tempo++; if (tempo==5000){ led=1; delay_ms(500); //led aceso led=0; flag_led_piscou=1; // poderia ser um return ou sei la } } tempo=0; led=0; } } }
  16. Fala aí meu nobre, veja, deu uns 5 erros na tentativa de compilar Ops, três eram erros bobos meus. Falta só saber como eu declaro esta flag Veja OK, usei int1 flag_led_piscou=0; Compilou sem erros Vou testar
  17. Vejam, reduzi meu código até este limite. Querendo com isso fazer apenas a função do led piscar se a chave (esquema elétrico nos tópicos mais acima) abrir e ficar aberta por 5 s. Assim o led deve piscar só 1 vez. Mas o que está acontecendo é que o led, ao abrir a chave, pisca direto, pisca em 500ms direto, não respeita a variável <tempo>. Como tem que ficar este código para passar a respeitar a variável tempo ? e por quenão está respeitando ? #include <12F675.h> #device adc=8 #use delay(clock=4000000) #fuses NOWDT,INTRC_IO, NOCPD, NOPROTECT, NOMCLR, PUT, BROWNOUT #use fast_io(A) #endif #ZERO_RAM #byte tris=0x85 #bit led = 0x5.4 //pino 3 #bit botao = 0x5.0 //pino 7 int tempo; void main() { tris=0b001101; //gp0 como entrada tempo=0; while(true){ if(botao==1){ delay_ms(100); // filtro de ruído while(botao==0){ delay_ms(1); tempo++; if (tempo==5000){ led=1; delay_ms(500); //led aceso led=0; } } tempo=0; rele=0; } } } GRATO
  18. Fiz isso. Mas estou com problemas na variável x, por algum motivo que desconheço ela não está sendo respeitada. Eu a declarei como int x=0; em variáveis globais. E deixei x=0; em void main (inicialização de portas e registradores). Mas, com o botão aberto, o led começa a piscar direto (500ms), mostrando que de fato não está respeitando o x (uso o CCS e compila sem erros). O código tem mais coisas, esta seria só uma pequena intervenção. Não quero postá-lo aqui pois não tenho domínio sobre ele. Sei que assim fica difícil mas se tiver alguma ideia...beleza. Com o botão fechado, o led fica apagado..
  19. Legal demais. Te agradeço pela força, mesmo sem testar. Mas vou testar sim. Com certeza. Boa noite.
  20. Só pra ficar mais organizado. Alguém sabe como fazer isso ? GRATO
  21. Fazendo mais testes acho que encontrei o foco de toda a minha dificuldade. A variável z que declarei como int z=0: não funciona. O código não conta como deveria. Se desarma == 1 nada acontece. Se eu comentar a variável aí sim, funciona. Por que será ? Alguém tem alguma ideia ? if(desarma==1){ delay_ms(1); z++; if(z==5000){ rele=1; z=0; } } O certo seria, se desarma for = 1 por 5 segundos, o relé liga e o tempo z zera.
  22. Criei este pequeno código onde chamo uma entrada de desarma e uma saída chamo de relé. O desarma tem a conotação de pausar, Ou seja, se desarma for igual a 1, o tempo x começa a incrementar e quando ele for igual a 5s o relé dá um pulso de 400ms (o rele na prática é um led). Mas notem que este trecho está abaixo do fechamento do //void while (true) e acima do fechamento do void main. Não funciona de jeito nenhum. Se eu colocar este pequeno código acima do fechamento do //void while (true) aí funciona a lógica mas não respeita o tempo, ou seja, basta eu fazer desarma == 1 e manter que o relé começa a piscar indefinidamente. Como fazer funcionar este pequeno código ? }//void while(true) if(desarma==1){ z++; delay_ms(1); if(z==5000){ rele=1; delay_ms(400); rele=0; z=0; } } }//void main

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!