Ir ao conteúdo
  • Cadastre-se

CLEUBER

Membro Júnior
  • Posts

    15
  • Cadastrado em

  • Última visita

Reputação

2
  1. @aphawk Paulo sua explicação nesse post é top demais ! Estou ainda estudando meu projeto e na verdade me confundi quando me perguntou sobre o circuito, estou utilizando um 4n25 e na saída dele está entrando no 4093 CMOS.
  2. @aphawk Bom dia Paulo ! Obrigado pelos sábios conselhos, vou me aprofundar mais no projeto, evoluindo vou mandando mensagem. Obrigado @vtrx Top demais. Já estou estudando o exemplo que me passou. Obrigado !
  3. @aphawk Paulo obrigado por contribuir, fico feliz de fazer parte desse universo de pensadores ! Então pensei no pulso de entrada no INT0 do PIC quando acusa a interrupção externa ele aciona o TIMER no ovf, quanto a 16 bists, pelo que ando estudando e pesquisando 16 bits pelo fato de haver a divisão do cálculo do tempo de estouro do timer. Na verdade a rede eléctrica AC aqui no BRASIL é de 60Hrz quando é feita o tratamento do sinal, esse rebate e soma os 60Hrz + 60Hrz totalizando os 120. como isso se acha o período dando início ao cálculo que no final se resulta em 8333 us. Então resumindo : 16bits = 65563 - 8333 = 57203 em decimal DF73 em hexadecimal - com isso a parte HIGH fica DF parte LOW fica 73 Como estou engatinhando nesse mundo,acredito que seja essa a ideia ! Quanto ao circuito de passagem por zero estou usando um 4023 . Paulo agradeço mais uma vez ! @vtrx Brother !!!!!!!!!!!!! Gostei demais do exemplo, vou estudar ele e adaptar para o mikroC . Testei no Proteus e as ondas são perfeitas. Muito obrigado por contribuir para meu conhecimento .
  4. Acredito que : Como tenho um interrupção externa devo habilitar o pino da interrupção externa. Porém estou habilitando o PINO RC0 para que ocorra a interrupção na borda de subida, então possa ser isso que esteja fazendo errado ! Habilitando os dois passa estar havendo um conflito. Na verdade não acompanhei seu raciocínio; Claro, tenho um algoritmo parecido com esse, só estou esperando para acertar a saída para controlar o triac e depois vou implementar o algoritmo de controle do ângulo , obrigado por essa dica. Vou fazendo por aqui e vou atualizando o projeto com você. Na verdade o que estou querendo é assim: Temos a nossa senoide vindo da rede elétrica, temos que tratar esse sinal de modo que consiga mandar um sinal a cada passagem por zero para o MC, pois bem, feito isso a cada passagem por zero, o MC entende que existe um interrupção externa, por essa vez acontece a habilitação da ocorrência e aciona o TIMER 1, sendo assim, existe a contagem em 16 bits o qual é dividido em TMR1H e TMR1L, quando isso ocorre ele dispara a saída do MC podendo controlar o ângulo de disparo e com isso consigo regular o quanto de energia quero para acionar o objeto. Mas essa é a primeira parte do projeto ! Tem muito para rachar a cuca.
  5. @.if Boa discussão referente ao caso, obrigado ! A interrupção do TIMER 1 está no registrador INTCON3, o bit INT1IE é responsável pela habilitação de interrupção externa do TMR1 (=1) O pino é o PORTC.RC0 / T13CKI Agora para esse protejo quero poder controlar o tempo de disparo no TRIAC. Pelo que está no algoritmo, ainda não consigo controlar, pois ainda não foi implementado, mas já era para poder aparecer uma saída no canal dois.
  6. @.if Obrigado mais uma vez ! Pois é, estou revirando o data dele, configurei como manda o escript. porém nada de sair um sinal no osciloscópio. Já fiz um teste mandando o pulso externo através de um botão, no modo contador, ele conta os pulsos certinho, mas quando mando o pulso de 5v com frequência de 120 Hrz ele não funciona !
  7. @.if Boa tarde ! O pino RC0 está recebendo o "sinal " no caso uma frequência de 120Hz, é uma simulação de um pulso quadrado. O pino RC0 se der uma olhada no algorítmico irá perceber que TRISC.RC0 = 0x01; // Apenas o pino RC0 configurado como entrada, o ANSELC responsável por habilitar os pinos em digitais. Acredito que tem algo que não consegui configurar,mas não estou conseguindo ver o erro !
  8. Boa tarde meus amigos do FORUM !!!!!!!!!! Estou estudando o PIC da família 18F, mais precisamente o PIC18F45k22, estou elaborando um protejo de um DIMMER, porém a dias estou tropeçando em algum detalhe que não consigo enxergar. Gostaria de obter ajuda no tocante a orientação dos colegas mais experientes nesse assunto. Segue os dados do protejo e desde á agradeço a todos. ***************************************************************************************************************************************************** Estou utilizando o MIKOC Pro For PIC Microcontrolado 18f45K22 Oscilador externo de 8MHz **************************************************************************************************************************************************************************************************** #define controle PORTD.RD0 unsigned short tempo_H = 0x00; // variável para o tempo mais significativo do TIMER1 unsigned short tempo_L = 0x00; // variável para o tempo menos significativo do TIMER1 void interrupcao_high() iv 0x0008 ics ICS_AUTO // Rotina especial de interrupção gerado pelo MIKROC { if(INTCON.INT1IF == 1) // Houve interrupção exertna no pino RC0 ? { // Houve ! INTCON.INT1IF= 0x00; // Limpa a flag de sinalização PIR1.TMR1ON = 0x01; // Liga o TIMER 1 } if(PIR1.TMR1IF == 1) // Houve estouro no ovf ? { // sim ! PIR1.TMR1IF = 0; // Limpa a flag TMR1H = tempo_H; // Carrega o valor de High TMR1L = tempo_L; // Carrega o tempo de Low controle = 0x01; // Aciona controle no pino RD0 delay_ms(200); // Um tempinho controle = 0x00; // Desliga o controle PIR1.TMR1ON = 0x00; // Desliga o TIMER 1 }// fecha int1if }//fecha interrupção void main() { ANSELC = 0; // Todos os pinos da PORTA C configurdo como digital ANSELD = 0; // Todos os pinos da PORTA D configurdo como digital TRISC.RC0 = 0x01; // Apenas o pino RC0 configurado como entrada, pois parao pulso externo é necessário configurar esse pino PORTC.RC0 = 0x01; // Nem era preciso ! TRISD = 0; // Configurado para todos os pinos da PORTA D como saída PORTD = 0; // Nem era preciso ! T1CON = 0b00000011; // config T1CON: /* RD16 = 0 -> leitura e escrita em 8 bits; T1RUN = 0 -> Oscilador do TIMER 1 não é sinal de clock; T1CKPS1 E T1CKPS0 = 0 -> prescaler 1:1; T1OSCEN = 0 -> Oscilador externo desabilitado; T1SYNC = 1 -> Sincronismo desligado; TMR1CS = 1 -> Incremento pelo sinal externo; TMR1ON = 1 -> Habilita o TIMER1.*/ PIR1.TMR1IE = 1; // Habilita a interrupção do TIMER1 INTCON.GIEH = 1; // Habilita interrupções global INTCON.PEIE = 1; // Habilita interrupções por periféricos INTCON2.INTEDG1 = 1; // Habilita borda de subida INTCON3.INT1IE = 1; // Habilta a interrupção externa INT1 /*inicializa o TIMER1 para contar até 8333 us (16bits - 8333 = 57203d; DF73h)*/ TMR1H = 0xDF; // Carrrega o valor com bit mais significativo em HIGH TMR1L = 0x73; // Carrrega o valor com bit menos significativo em LOW controle = 0x00; // Controle inicializa em zero while(1) {} //implementação futura }//fecha void A expectativa é gerar um sinal como mostra a figura abaixo : Mas a realidade é que estou gerando apenas o sinal de entrada no PINO RC0 e não está gerando o sinal de saída no PINO RD0, no canal dois do osciloscópio,como mostra a figura abaixo : A figura a baixo está o esquema do início do protejo gerado pelo PROTEUS 8 PROFISSINAL : Queiram ignorar o LCD e o BUTTON !
  9. kkkkkkkkkkkkkkkkk beleza vou pesquisar e ver se consigo ajustar o código.! valeu
  10. Ok! No caso estou usando o mikro C e me parece que tem uma biblioteca diferente dessa, acho até que esse é uma biblioteca do arduino, pelo que vejo existe uma rotina para poder chamar o incremento e decremento, más como posso ajustar esse exemplo para o código que postei ?
  11. Ok ! Agradeço imensamente a sua ajuda Isadora Ferraz.
  12. Bom dia grandes mestres do fórum. Bom sou iniciante na arte de microcontroladores, assistindo algumas videos aulas me interessei por um projeto, ele é um DIMER microcontrolado porém sua variação se dá através de um potenciômetro e o desafio foi de implementar botões de mais e menos, olha tentei fazer de várias formas mas não obtive exito no desbravamento do código fonte e por isso peço a ajuda dos mestres. Segue código e esquema montado no Proteus para simulação,esse esquema é bem simples tendo em vista a visualização e simulação onde não é necessário o esquema completo. Diante mão agradeço a atenção de todos !!!!!!!!!!!! #define B1 RB1_bit #define B2 RB2_bit #define triac_control RB4_bit int dimmer = 150; unsigned short time_L = 0x00, time_H = 0x00; unsigned time = 0x00; void interrupt() { if(INTF_bit) { INTF_bit = 0x00; TMR1ON_bit = 0x01; } if(TMR1IF_bit) { TMR1IF_bit = 0x00; TMR1H = time_H; TMR1L = time_L; triac_control = 0x01; delay_us(200); triac_control = 0x00; TMR1ON_bit = 0x00; } } void main() { CMCON = 0x07; TRISB = 0xEF; PORTB = 0xEF; OPTION_REG = 0x40; INTCON = 0xD0; TMR1IE_bit = 0x01; T1CON = 0x00; TMR1H = 0xDF; TMR1L = 0x73; triac_control = 0x00; while(1) { if (!B1) { delay_ms(40); dimmer ++ ; } else if (!B2) { delay_ms(40); dimmer --; } time = time*4; time = 65536 - time; time_H = (time>>8) - 1; time_L = time - (time_H<<8); } } O que vocês acham, estou no caminho ?
  13. @Isadora Ferraz observei que você está presente em vários tópicos do site, estou observando também que você conhece de eletrônica.Em um outro tópico você esclareceu uma dúvida interessante, tenho quase certeza que a dificuldade do Pedro seja parecida com a minha, como disse a lâmpada é uma carga resistiva e deve ser por esse motivo que funciona porém sem força, entendo que até a saída de controle do Arduino esteja normal o circuito e na parte de potência que deve estarmal desenvolvido.
  14. Bom dia meus caros amigos! Estou desenvolvendo um projeto para poder controlar uma carga de 8A e com aproximadamente 1000W, pois bem fuçando na internet consegui um esquema do circuito que poderia ser útil para o que iria usar, é um DIMMER que é controlado com o ARDUINO, ele funciona muito bem para a lâmpada de 220V com 40W de potência claro que ao terminar a montagem do mesmo fui fazer o teste em um alimentador vibratório aqueles que tem uma bobina, e adivinhem funcionou também porém muito fraco. Amigos acho que o esquema na parte de potência deverá ser mais forte porém não sei como fazer isso, será que alguém poderia me ajudar ???? Obrigado e abaixo o esquema do circuito e a programação usada no ARDUINO. Sketch //Pinos de Entrada/Saida int sync = 7; //sinal de sincronismo com a rede eletrica (entrada) int trigger = 4; //pino que aciona o MOC3020 (saida) int incButton = 12; //botao de incremento da potencia (entrada) int decButton = 10; //botao de decremento da potencia (entrada) //Variaveis unsigned int timeToWait; //tempo de espera apos a passagem pelo zero para disparar o TRIAC (em microssegundos) int pulseWidth; //tempo de duracao do pulso de disparo int state = 0; //status do sinal de sincronismo int previousState = 0; //estado anterior do sinal de sincronismo const int halfCycle = 8333; //tempo em microssegundos de um semiciclo da rede eletrica (constante) float increment; //variavel utilizada para variar mais lentamente a potencia quando o botao e mantido pressionado void setup(){ pinMode(trigger, OUTPUT); pinMode(sync, INPUT); pinMode(incButton, INPUT); pinMode(decButton, INPUT); timeToWait = 8333; //para lampada iniciar apagada increment = 8333.0; //nessa condicao nao ocorrera disparo do TRIAC digitalWrite(trigger, LOW); //assegura que a saida ira iniciar em zero } void loop(){ boolean turnOff = 0; //flag para indicar quando deve-se desligar a lampada boolean maxPower = 0; //flag para indicar quando deve-se transmitir potencia maxima para a lampada /*Testa botões e valores limite para a variavel timeToWait*/ if( (digitalRead(incButton) == LOW)&&(increment >= 200) ) increment -= 0.22; else if( (digitalRead(decButton) == LOW)&&(increment <= 6000) ) increment += 0.22; /*timeToWait recebe somente a parte inteira de increment*/ timeToWait = (int)increment; /*Habilita flags de acordo com o valor de timeToWait*/ if(timeToWait <= 200) maxPower = 1; else if(timeToWait >= 6000) turnOff = 1; /*Calcula tempo de duracao do pulso de disparo*/ if( (!maxPower)&&(!turnOff) ){ pulseWidth = halfCycle - timeToWait - 1000; if(pulseWidth < 0) pulseWidth = 0; } /*Le estado do sinal de sincronismo*/ state = digitalRead(sync); /*Se a potencia for maxima, deixa o trigger acionado direto*/ if(maxPower) digitalWrite(trigger, HIGH); /*Se o estado do sinal de sincronismo mudou e a lampada nao deve ficar apagada*/ else if( (turnOff == 0)&&(state != previousState) ){ previousState = state; //armazena estado atual delayMicroseconds(timeToWait); //espera tempo para disparo digitalWrite(trigger, HIGH); //aciona sinal de disparo (trigger) delayMicroseconds(pulseWidth); //aguarda largura de pulso digitalWrite(trigger, LOW); //desliga pulso de disparo (trigger) }//end if }//end void lo
  15. Boa tarde meus amigos !!!! Estou algum tempo projetando um PWM com o que mando o figurino, ele é um PWM com a configuração astável como mostr a figura anexa. Estou querendo controlar uma carga de 6A á 12A porém não estou conseguindo, estou usando o TRIAC BTA12 e um relé de 12V. Alguém poderia me apontar o erro cometido. Agradeço a todos.

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!