Ir ao conteúdo
  • Cadastre-se

eletron1791

Membro Pleno
  • Posts

    187
  • Cadastrado em

  • Última visita

Tudo que eletron1791 postou

  1. Olha eu te agradeço demais o seu empenho. Peço que deixe para ver se aparece mais alguém disposto a dar a resposta do primeiro post desta série.
  2. Mas e aquele seu primeiro código ? Como seria a inclusão deste while ? Já testei várias configurações com while e parênteses, nenhuma atendeu exatamente o propósito while(Gp0==1){ if(Gp0==0){ z++; delay_ms(1); if(z==1000) //>=5000 { Gp4=1; delay_ms(500); Gp4=0; z=0; } } }
  3. Daqui eu não passo, já tentei de tudo: if(Gp0==0){ z++; delay_ms(1); if(z==1000) //>=5000 { Gp4=1; delay_ms(500); Gp4=0; z=0; } } O problema tá no seguinte: Quando liga, Gp0 já está em zero (10K para GND), então o Led em Gp4 já começa piscando independente de qualquer coisa. Não pode. Tem que esperar Gp0 ir a nível 1 (áudio entrando) para daí aguardar Gp0 ir para nível 0 (áudio parou) para daí iniciar a contagem do tempo na variável z (ver se áudio parou por mais que z milisegundos). Se sim, pisca Gp4. Se não, reseta z=0. Deixei z = 1000 só pra agilizar nos testes aqui..
  4. Veja se entendi certo o seu código: if (!botão) x=0; .............................. se botão é igual a zero, variável x é igual a zero delay_ms(1); ................................ passam 1 ms x++;............................................... a variável x vai somando + 1 if (x==5000) { ............................... quando x for igual a 5000 Gp4=1; ........................................ pino 3 fica em 1 delay_ms(500); ........................... pausa 400ms Gp4=0; ........................................ pino 3 fica em 0 x=0; .............................................. variável acumuladora do tempo, zera }
  5. Aí o led fica piscando direto, pois há um 10K mantendo Gp0 em nível baixo Assim: Gp0 = 0 , led = 0 Gp0 = 1 , led = 0 Gp0 = 0 , inicia tempo interno , led continua = 0 Gp0 = 0 por mais que 5s , led = pisca só 1 vez Outra interpretação: O tempo interno só deve começar quando Gp0 passar de 1 para 0
  6. Assim quase deu certo. Com o botão fechado (ou seja, áudio rolando no alto-falante a ser monitorado) o led pisca e se deixar vai piscando enquanto houver áudio. No caso, o led só deve piscar quando o áudio cessar. Começa sem áudio, led apagado. Começa o áudio, led apagado. Aí para o áudio por 5s, led pisca só 1 vez.
  7. Em outro post semelhante a este deixei uma dúvida sobre o 12f675 e depois fui modificando a dúvida, e tal. Enfim, ficou meio confuso. Agora que tenho noção exata do que busco, decidi colocar aqui neste novo post: Tenho um botão do pino 7 (Gp0) ao + 5 Volts com 10 K indo para o GND. Tenho um led no pino 3 (Gp4) com catodo para o GND. Vou ligar o pino 7 num alto-falante externo. Quando ocorrer o primeiro áudio, o PIC inicia um contador interno. Quando o áudio cessar por tempo = x, o led no pino 3 deve piscar 1 única vez por 500 ms; Digamos que x seja 5 segundos. Então quando o áudio cessar e transcorrer 5000ms o led deve piscar só 1 vez. Se antes dos 5000ms tornar a ocorrer áudio, o contador interno deve resetar (x=0;) Pensei assim, mas seu que está errado: while(!botão){ delay_ms(1); if(botão==1) { x++; if(x==5000){ Gp4=1; delay_ms(500); Gp4=0; x=0; } } } Como tem que ser ? GRATO
  8. CONSEGUI, fiz assim: int x=0; if (Gp0==1) { x++; delay_ms(500); if(x>5){ Gp4=1; delay_ms(500); Gp4=0; x=0; } } No caso quando x for maior que 5. Só esta parte que fiquei sem entender pois se eu colocar x == 5 o compilador CCS exibe um warning, condition always FALSE Mas tá bom, com x > 5 também resolve meu problema. Saudações !
  9. Meu 555 acabou não dando tão certo quanto eu pensei E agora a ajuda que eu preciso é: Gp0 tem 10K para GND e botão para o +5. Quando eu pressionar ele 4 vezes, Gp4 tem que pulsar por 500ms (tem um led no pino 3) int1 cont=0; if (Gp0==1) { cont++; } if (cont==4) { Gp4=1; delay_ms(500); Gp4=0; cont=0; } Não aconteceu nada como tem que ficar ? Ah, sobre o botão, tem que atuar quando ele abrir os contatos
  10. Acabei resolvendo de outra forma adaptando um 555. Muito grato pela ajuda. Bom feriado.
  11. Fui mexendo de curiosidade e desconfio que o tal tempo++ não está funcionando. Pois eu comentei todo aquele trecho do seu código e deixei somente isso: int1 tempo=0; if (tempo++>999) {gp4=1;delay_ms(500);gp4=0;tempo=0;} Ou seja, sem mexer em nada, só ao energizar o PIC era para gp4 pulsar quando tempo for maior que 999 (alias este 999 é em que ? microsegundos ?) Mas nada acontece (eu sei, postar código completo, fotos, etc...mas é que é uma bobagem tão boba, é só pra dar certo um lance aqui. Quero dar um pausa automático numa caixinha de som). Foi mal, o PIC é o 12f629, esqueci de dizer desde o inicio
  12. As portas estão assim: tris=0b001101; //gp0, gp2 e gp3 como entradas O catodo do led está no GND, ou seja, acende com nível alto no pino do PIC
  13. Declarei a variável tempo assim: int1 tempo=0; mas nada aconteceu, coloco 1 no pino 7, tiro e deixo só 10K para o GND, aguardo 1s e o led colocado no pino 3 não pisca Tô usando o CCS
  14. Colegas, como seria o trecho do código (só a parte ali dos IF´s) que faria um 12f675 agir assim: Assim que Gp0 recebe um nível alto (1), inicia um monitoramento interno e quando Gp0 ficar em nível 0 por mais que 1000ms (1 segundo) o pino 3 (GP4) pisca por 500 ms. Por exemplo: Pino 7 começa a receber pulsos, se parar de recebê-los por 1 s ou mais, imediatamente pino 2 pulsa só 1 vez. Depois, o pino 7 voltará a receber pulsos, e aí ocorre tudo de novo, ou seja, recebe os pulsos no pino 7 e só vai piscar o pino 2 quando parar de entrar pulsos no pino 7 por 1 s ou mais. if (gp0==1) { delay_ms(1000); if(gp0==0{ gp4=1; delay_ms(500); gp4=0; } } Tá errado. Como seria o correto ? GRATO
  15. MESTRE-ANDREI grato pela participação Vou pegar um adaptador daqueles de camelô e a segunda placa da sua imagem, esta que tem o slot para cartão maior. Pois ela me permite soldar com mais facilidade fios ali nos terminais. Vou soldar fios destes terminais até os terminais do adaptador-camelô e assim criar um cartão-USB paralelo a esta plaquinha. O objetivo é ler/escrever/formatar o cartão sem tirá-lo do slot. Pois eu teria que tirá-lo dezenas de vezes por dia e o slot não vai aguentar. alexandre.mbm são placas comuns, módulos muito utilizados por quem lida com arduino. Módulo SD micro card. A outra acho que tem a ver com MP3, só a coloquei para embasar minha dúvida.
  16. Você é demais Maria, Funcionou Muito grato
  17. Oi Maria, no caso quem seria x e y ? Como declarar x e y ?
  18. Colegas, só a parte da lógica, dos IF´s. Como seria o código c (ccs) para fazer o que escrevi neste esqueminha ? Algo assim: if (Gp0=0) { Gp4=1; delay_ms(300); Gp4=0; } etc...
  19. Alguém pode ajudar corrigindo este código para que o PIC ao perceber frequência igual ou maior que 30 Khz no pino 5 (A2), o led no pino 3 (A4) acenda e fique aceso enquanto a condição for verdadeira ? #include <12F675.h> #device ADC=10 #use delay(internal=4MHz) #include <main.h> #define LED1 pin_A4 #define Entrada pin_A2 unsigned int TEMPO=0; #INT_TIMER1 void estouro_timer1(){ set_timer1(3000); // ajusta o estouro do TIMER1 para 500ms TEMPO++; } void controle_led1(){ if(input(Entrada)); output_high(LED1); if(input(Entrada)) TEMPO=0; // reseta a contagem quando necessário } void main() { set_timer1(0); enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER1); setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //524 ms overflow while(TRUE) { controle_led1(); } }
  20. PAULO, realmente sofri aqui com o LM 567 exatamente com os problemas que você citou. Abandonei ele e usei um LM 331 e fiz um conversor frequência tensão. Frequência de 30 Khz. Tá funcionando bem. O PIC detecta um aumento de tensão no seu pino 7 e acende um led no pino 3. Mas meu problema continua sendo a falta de espaço, e este LM 331 também não encontra fácil na versão SMD. IF, procurei no google, até encontrei códigos de frequencímetros, porém muito complexos para eu colar aqui e fazer funcionar. Portanto, quem puder ajudar, ainda preciso de um trecho de um código que faça o PIC 12F675 manter o pino 3 em nível alto enquanto estiver entrando no pino 7 onda quadrada acima de 30 Khz (não precisa ser exato 30 Khz, basta ser qualquer valor igual ou maior). OPS, são pinos pino 5 e 2. Recebe a frequência no pino 5 e mantém pino 2 em nível alto enquanto a frequência estiver presente na linguagem c (ccs)
  21. Ah se eu soubesse fazer isso. Economizaria componentes. Tive que recorrer a um LM 567. É uma pena pois tô sofrendo com pouco espaço na plaquinha que vou fazer. E o LM 567 depende de capacitores, e tal. E é bem raro encontrar este C.I. na versão SMD. Mas, como eu disse, não sei programar. valeu Paulo.
  22. Fala aí Paulo, pois é, eu consegui chegar no meu objetivo sem precisar de um código, mudei as coisas aqui e acabou dando certo para mim. Enfim, nada importante. Muito grato.
  23. Colegas, como seria um trecho do código c em que um PIC 12F675, ao perceber um sinal de onda quadrada de 20.000 Hz no seu pino 7 faz 1 led piscar (1Hz) só 1 vez no pino 6. Para o led piscar novamente teria que parar o sinal de 20Khz e tornar a ocorrer. A percepção do sinal tem que ser imediata, tipo, logo nos primeiros 100 ms. Alguém sabe ?
  24. Já consegui Deixa pra lá Não vi jeito de apagar este post

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!