-
Posts
9 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que Afonso tales postou
-
PIC Como usar um temporizador usando um potenciomentro?
Afonso tales respondeu ao tópico de Afonso tales em Microcontroladores
@alexandre.mbm Eu acreditava que através de um exemplo aprendia-se mais, eu não pedi que ninguém fizesse pra mim, apenas pedi um exemplo. Bom, mesmo assim eu agradeço e consegui o que queria. -
PIC Como usar um temporizador usando um potenciomentro?
Afonso tales respondeu ao tópico de Afonso tales em Microcontroladores
@aphawk Obrigado pelo retorno, na realidade eu talvez tenha me expressado mal. Eu tenho o programa quase pronto e criei dois topicos devido eu ter que resolver esses dois pontos. Eu postei tudo no outro topico, mas vou postar aqui para que possivelmente você possa me ajudar. No case 1, o motor gira direto até um no pressionamento, mas eu não estou conseguindo ter o controle quando entra a função quatro tempo, ou seja, o motor fica sem o controle. Quando eu pedi um exemplo de temporizador, era para colocar no case dois. Obs: antes de entrar no case 1, o botão do rb1 recebe ++ e ele transita em tres bits no portc, após para em um dos, terá que clicar no rb2 que seria um enter. #define t2 portb.rb0 // mapea t2, rb0 #define t1 portb.rb2 // mapea t1, rb2 #define l4 portb.rb4 // mapea L4, rb4 #define l5 portb.rb5 // mapea l5, rb5 #define b1 portb.rb1 // mapea b1 como entrada digital #define l1 portc.rc4 // mapea L1 como saida #define l2 portc.rc5 // mapea L2 como saida #define l3 portc.rc6 // mapea L3 como saida // variaveis globais int pwm2 = 0; int pwm1 = 0; // variavel para o pwm unsigned int motor_speed; // varial controle de velocidade char x1=0,x2=0,controle=0; //variaveis aux botao int cont=0; // varial aux botao char x3 = 0; // varial aux botao char x4 = 0; char x5 = 1; char x6 = 0; // funcão principal void main() { //OPTION_REG = 0x80; //GIE_bit = 0x01; //Habilita a interrupção global //PEIE_bit = 0x00; //Desabilita a interrupção por periféricos // INTE_bit = 0x01; //Habilita a interrupção externa //INTEDG_bit = 0x00; //Configura a interrupção por borda de descida trisa0_bit =1; // define ra0 como entrada trisb1_bit = 1; // define rb1 como entrada trisb2_bit = 1; // define rb2 como entrada trisc4_bit = 0; // define rc4 como saida trisb4_bit = 0; // define rb4 como saida trisb5_bit = 0; // define rb5 como saida trisc5_bit = 0; // define rc5 como saida trisc6_bit = 0; // define rc6 como saida trisc3_bit = 0; // define rc3 como saida rc3_bit = 1; // incia-se rc3 em nivel alto rb4_bit = 0; // incia-se rb4.rb5, em nivel baixo rb5_bit = 0; rb1_bit = 1; // incia-se rb1 em nivel alto rb2_bit = 1; // incia-se rb2 em nivel alto rc7_bit= 0; trisc7_bit= 0; trisb6_bit = 0; rb6_bit = 0; // configuração adc, pwm, e entrada analogica ra0 ADCON0 = 1; // habilita o conversor ADCON1 = 0; // declara ra0 como entrada analocica ADC_Init(); // incia-se PWM2_Init(1000); // pwm em 1kh PWM2_Start(); // starta o pwm ULPWUIE_bit = 0x00; ANSEL = 1; // registrador entradas analogicas ANSELH = 0X00; // coloca como entrada e saidas p portb C1ON_bit = 0; // desabilita os comparadores C2ON_bit = 0; // loop infinito while(1) { cont++;delay_ms(1); // incremento if((b1==0)&&(x1==0)){controle++;x1=1;x4;cont=0;} if((b1==1)&&(x1==1)&&(cont>100))x1=0; if(controle==0) {l1=0;l2=0;l3=0;} if(controle==1) { l1=1; } if((t1==0)) // botao rb2 pressionado? execute: { x4 = 1; // varial aux do botao rb0 rc7_bit =1 ; l1 = 1; delay_ms(100); l1 = 0; delay_ms(100); } if(( t2==0)&&( x4==1)) { // eu queria colocar o controle do motor( quatro tempo) aqui. // ao entrar no case 1, eu seleciono com o botão t1( tecla confirma) // e após isso, eu pressiono t2 e meu motor fica direto até ter // um novo toque no mesmo. } // botao rb0 pressionar? execute: // loop } if(controle==2){l1=0;l2=1;l3=0;} if(controle==3){l1=0;l2=0;l3=1;} if(controle==4)controle=0; // Aqui esta o controle do motor: ao pressionar o motor, ele liga // e ao solta-lo, ele desliga e tenho o controle do duty. if((t2==0)&&(x2==0)) { l4=1;l5=1; x2=1; x3 = 1; } if((t2==1)&&(x2==1)) { l4=0;l5=0;x2=0; x3 = 0; } if((pwm2 ==0)&&(x3==1)) { motor_speed = ADC_Read(0); PWM2_Set_Duty(motor_speed >> 2); delay_ms(50) ; } if((pwm2 ==0)&&(x3==0)) { motor_speed = 0x00; PWM2_Set_Duty(motor_speed = 0); } } } @aphawk Eu estou tentando fazer um exemplo somente para essa função de quatro tempos e em passos eu ir juntando os dois programas. Esse eu consegui desliga-lo, porém, ao pressionar o botão novamente eu não consigo ativa-lo novamente. o que acha? # define botao_start portb.rb0 unsigned int x; unsigned int motor_speed; char pwm2; char x3 = 0; char x4 = 1; void motor_para(){ //rotina deliga motor x++; if(x>=1) delay_ms(1); rb5_bit = 0; x = 0; } void motor_gira(){ //rotina liga motor x++; if(x>=0) delay_ms(1); while(botao_start==0); rb5_bit = 1; x3=1; } void controle_motor() { if( x3= 1) delay_ms(1); while(botao_start==0); motor_speed = ADC_Read(0); PWM2_Set_Duty(motor_speed >> 2); } // void controle_off() void main() { ADCON0 = 1; // habilita o conversor ADCON1 = 0; // declara ra0 como entrada analocica ADC_Init(); PWM2_Init(1000); // pwm em 1kh PWM2_Start(); // starta o pwm ULPWUIE_bit = 0x00; ANSEL = 1; // registrador entradas analogicas ANSELH = 0X00; // coloca como entrada e saidas p portb C1ON_bit = 0; // desabilita os comparadores C2ON_bit = 0; trisb0_bit = 1; trisb5_bit = 0; rb0_bit = 1; rb5_bit = 0; while(1){ if (botao_start==0 && x==1){ // se o botao start acionado,motor estiver lig delay_ms(5); while(botao_start==0); motor_para(); //rotina - motor desliga } if (botao_start==0 && x==0){ //se o botao start acionado,motor estiver deslig delay_ms(5); while(botao_start==0); motor_gira(); // rotina - motor liga } if( pwm2==0 && x3==1) { controle_motor(); } } } -
Modificar circuito Limitador RPM (Arduíno Nano)
Afonso tales respondeu ao tópico de GustavoH93 em Eletrônica
@.if parabéns! -
PIC Como usar um temporizador usando um potenciomentro?
Afonso tales respondeu ao tópico de Afonso tales em Microcontroladores
@.if Olá! Eu simplesmente fiz uma pergunta, perdoa-me, como não sou programador eu tenho muitas dificuldades para a construção de algumas coisas. A conversão eu sei, eu apenas pedi um exemplo, mas você deu a sua resposta e em outro topico meu também, não ajudando em nenhum dos dois. Espero que outra pessoa possa me ajudar, além de você. -
PIC Como usar um temporizador usando um potenciomentro?
Afonso tales postou um tópico em Microcontroladores
Estou necessitando de uma exemplo, por favor, caso alguém tenha ficarei grato. Irei usar o Mikroc com o pic16f883. Queria fazer um temporizador com potenciometro, ou seja, quero deixar um pwm ligado de acordo com a variação do mesmo. Ou seja, caso eu pare com o conversor em 2 segundos( relação a tempo) eu tenha um pwm até dois segundos e após isso ele se desliga. -
PIC Pic/ MIkro/Controle de um Motor via PWM/ quatro tempo e dois tempos.
Afonso tales respondeu ao tópico de Afonso tales em Microcontroladores
@.if Segue o programa a baixo. #define t2 portb.rb0 // mapea t2, rb0 #define t1 portb.rb2 // mapea t1, rb2 #define l4 portb.rb4 // mapea L4, rb4 #define l5 portb.rb5 // mapea l5, rb5 #define b1 portb.rb1 // mapea b1 como entrada digital #define l1 portc.rc4 // mapea L1 como saida #define l2 portc.rc5 // mapea L2 como saida #define l3 portc.rc6 // mapea L3 como saida // variaveis globais int pwm2 = 0; int pwm1 = 0; // variavel para o pwm unsigned int motor_speed; // varial controle de velocidade char x1=0,x2=0,controle=0; //variaveis aux botao int cont=0; // varial aux botao char x3 = 0; // varial aux botao char x4 = 0; char x5 = 1; char x6 = 0; // funcão principal void main() { //OPTION_REG = 0x80; //GIE_bit = 0x01; //Habilita a interrupção global //PEIE_bit = 0x00; //Desabilita a interrupção por periféricos // INTE_bit = 0x01; //Habilita a interrupção externa //INTEDG_bit = 0x00; //Configura a interrupção por borda de descida trisa0_bit =1; // define ra0 como entrada trisb1_bit = 1; // define rb1 como entrada trisb2_bit = 1; // define rb2 como entrada trisc4_bit = 0; // define rc4 como saida trisb4_bit = 0; // define rb4 como saida trisb5_bit = 0; // define rb5 como saida trisc5_bit = 0; // define rc5 como saida trisc6_bit = 0; // define rc6 como saida trisc3_bit = 0; // define rc3 como saida rc3_bit = 1; // incia-se rc3 em nivel alto rb4_bit = 0; // incia-se rb4.rb5, em nivel baixo rb5_bit = 0; rb1_bit = 1; // incia-se rb1 em nivel alto rb2_bit = 1; // incia-se rb2 em nivel alto rc7_bit= 0; trisc7_bit= 0; trisb6_bit = 0; rb6_bit = 0; // configuração adc, pwm, e entrada analogica ra0 ADCON0 = 1; // habilita o conversor ADCON1 = 0; // declara ra0 como entrada analocica ADC_Init(); // incia-se PWM2_Init(1000); // pwm em 1kh PWM2_Start(); // starta o pwm ULPWUIE_bit = 0x00; ANSEL = 1; // registrador entradas analogicas ANSELH = 0X00; // coloca como entrada e saidas p portb C1ON_bit = 0; // desabilita os comparadores C2ON_bit = 0; // loop infinito while(1) { cont++;delay_ms(1); // incremento if((b1==0)&&(x1==0)){controle++;x1=1;x4;cont=0;} if((b1==1)&&(x1==1)&&(cont>100))x1=0; if(controle==0) {l1=0;l2=0;l3=0;} if(controle==1) { l1=1; } if((t1==0)) // botao rb2 pressionado? execute: { x4 = 1; // varial aux do botao rb0 rc7_bit =1 ; l1 = 1; delay_ms(100); l1 = 0; delay_ms(100); } if(( t2==0)&&( x4==1)) // essa função é somente para ter uma ideia, pode ser desconsiderada. Após esse isso for verdadeiro, ele terá que acionar o pwm e ficar ligado até um proximo acionamento. Lembrando que terá que ter o controle do duty { // eu queria colocar o controle do motor( quatro tempo) aqui. // ao entrar no case 1, eu seleciono com o botão t1( tecla confirma) // e após isso, eu pressiono t2 e meu motor fica direto até ter // um novo toque no mesmo. } // botao rb0 pressionar? execute: // loop } if(controle==2){l1=0;l2=1;l3=0;} if(controle==3){l1=0;l2=0;l3=1;} if(controle==4)controle=0; // Aqui esta o controle do motor: ao pressionar o motor, ele liga // e ao solta-lo, ele desliga e tenho o controle do duty. if((t2==0)&&(x2==0)) { l4=1;l5=1; x2=1; x3 = 1; } if((t2==1)&&(x2==1)) { l4=0;l5=0;x2=0; x3 = 0; } if((pwm2 ==0)&&(x3==1)) { motor_speed = ADC_Read(0); PWM2_Set_Duty(motor_speed >> 2); delay_ms(50) ; } if((pwm2 ==0)&&(x3==0)) { motor_speed = 0x00; PWM2_Set_Duty(motor_speed = 0); } } } O problema é que o motor ( case 1), terá que ficar direto até eu pressionar o botão novamente, entretanto, até consegui fazer, mas eu não tenho controle ao movimentar o potenciometro. Caso alguém queira me ajudar, verás que após rb1 for pressionado ele andará em três bits no portc e então parando no case (1) rc4, eu tenho que dar um start com o rb2, e após isso, tenho que fazer a função do quatro tempo. -
Programação pic com botão liga/desliga
Afonso tales respondeu ao tópico de nil.34 em Microcontroladores
@.if Honrado por responder. O programa a baixo funciona perfeitamente, ou seja, quado pressiono t2, aciona duas saidas no portb e junto o pwm e tenho controle do mesmo, digo o duty. Construi três cases nesse programa, quando aperto rb1, ele vai incrementando e passando pelas saídas no portb. Cade led desse terá uma tarefa a executar, porém, a primeira( led 1) eu aciono o motor e ele fica direto, mesmo soltando o botão. Quando pressiono novamente, ele desliga o pwm. O problema é que já fiz varios procedimentos, mas quando consigo ligar e ao pressionar novamente, ele liga( pwm), mas eu não tenho controle, ou seja, quando vario o potenciômetro ele não aumenta o duty. Queria ter uma ajuda, sou medíocre ainda. #define t2 portb.rb0 // mapea t2, rb0 #define t1 portb.rb2 // mapea t1, rb2 #define l4 portb.rb4 // mapea L4, rb4 #define l5 portb.rb5 // mapea l5, rb5 #define b1 portb.rb1 // mapea b1 como entrada digital #define l1 portc.rc4 // mapea L1 como saida #define l2 portc.rc5 // mapea L2 como saida #define l3 portc.rc6 // mapea L3 como saida // variaveis globais int pwm2 = 0; int pwm1 = 0; // variavel para o pwm unsigned int motor_speed; // varial controle de velocidade char x1=0,x2=0,controle=0; //variaveis aux botao int cont=0; // varial aux botao char x3 = 0; // varial aux botao char x4 = 0; char x5 = 1; char x6 = 0; // funcão principal void main() { //OPTION_REG = 0x80; //GIE_bit = 0x01; //Habilita a interrupção global //PEIE_bit = 0x00; //Desabilita a interrupção por periféricos // INTE_bit = 0x01; //Habilita a interrupção externa //INTEDG_bit = 0x00; //Configura a interrupção por borda de descida trisa0_bit =1; // define ra0 como entrada trisb1_bit = 1; // define rb1 como entrada trisb2_bit = 1; // define rb2 como entrada trisc4_bit = 0; // define rc4 como saida trisb4_bit = 0; // define rb4 como saida trisb5_bit = 0; // define rb5 como saida trisc5_bit = 0; // define rc5 como saida trisc6_bit = 0; // define rc6 como saida trisc3_bit = 0; // define rc3 como saida rc3_bit = 1; // incia-se rc3 em nivel alto rb4_bit = 0; // incia-se rb4.rb5, em nivel baixo rb5_bit = 0; rb1_bit = 1; // incia-se rb1 em nivel alto rb2_bit = 1; // incia-se rb2 em nivel alto rc7_bit= 0; trisc7_bit= 0; trisb6_bit = 0; rb6_bit = 0; // configuração adc, pwm, e entrada analogica ra0 ADCON0 = 1; // habilita o conversor ADCON1 = 0; // declara ra0 como entrada analocica ADC_Init(); // incia-se PWM2_Init(1000); // pwm em 1kh PWM2_Start(); // starta o pwm ULPWUIE_bit = 0x00; ANSEL = 1; // registrador entradas analogicas ANSELH = 0X00; // coloca como entrada e saidas p portb C1ON_bit = 0; // desabilita os comparadores C2ON_bit = 0; // loop infinito while(1) { cont++;delay_ms(1); // incremento if((b1==0)&&(x1==0)){controle++;x1=1;x4;cont=0;} if((b1==1)&&(x1==1)&&(cont>100))x1=0; if(controle==0) {l1=0;l2=0;l3=0;} if(controle==1) { l1=1; } if((t1==0)) // botao rb2 pressionado? execute: { x4 = 1; // varial aux do botao rb0 rc7_bit =1 ; l1 = 1; delay_ms(100); l1 = 0; delay_ms(100); } if(( t2==0)&&( x4==1)) { // eu queria colocar o controle do motor( quatro tempo) aqui. // ao entrar no case 1, eu seleciono com o botão t1( tecla confirma) // e após isso, eu pressiono t2 e meu motor fica direto até ter // um novo toque no mesmo. } // botao rb0 pressionar? execute: // loop } if(controle==2){l1=0;l2=1;l3=0;} if(controle==3){l1=0;l2=0;l3=1;} if(controle==4)controle=0; // Aqui esta o controle do motor: ao pressionar o motor, ele liga // e ao solta-lo, ele desliga e tenho o controle do duty. if((t2==0)&&(x2==0)) { l4=1;l5=1; x2=1; x3 = 1; } if((t2==1)&&(x2==1)) { l4=0;l5=0;x2=0; x3 = 0; } if((pwm2 ==0)&&(x3==1)) { motor_speed = ADC_Read(0); PWM2_Set_Duty(motor_speed >> 2); delay_ms(50) ; } if((pwm2 ==0)&&(x3==0)) { motor_speed = 0x00; PWM2_Set_Duty(motor_speed = 0); } } } -
Programação pic com botão liga/desliga
Afonso tales respondeu ao tópico de nil.34 em Microcontroladores
@nil.34 Estou tento o mesmo problema, porém, estou usando o mikroc. O meu problema e que ligo o pwm, mas nao tenho controle de duty -
PIC Pic/ MIkro/Controle de um Motor via PWM/ quatro tempo e dois tempos.
Afonso tales postou um tópico em Microcontroladores
Olá, a todos os membros! Preciso controlar um motor via potenciômetro e botão, mas o problema não esta sendo isso. Estou tentando desenvolver um programa para uma maquina de solda e ao pressionar um botão, gero o pwm e tenho o controle do mesmo, porém, ao solta-lo ele se desliga. A maquina tem três funções: case 1, case 2, case 3. Quando entro no case 1, seleciono o motor quatro tempos, ou seja, ao pressionar o mesmo botão do paragrafo a cima, eu entro nessa função e se solta-lo ele continua ligado. Tendo um novo pressionamento, o mesmo se desliga. Tive algumas ideias, porém, não consegui obter o controle do duty dele, ou seja, somente conseguia liga-lo e desliga-lo. Peço desculpas pela a minha ignorância e falta de conhecimento ainda na área, espero ter uma ajuda. Segue á baixo o programa( esta ainda precisando de uma melhora, mas já é um começo): Meu nome é tales
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