Ir ao conteúdo
  • Cadastre-se

Afonso tales

Membro Júnior
  • Posts

    10
  • Cadastrado em

  • Última visita

Tudo que Afonso tales postou

  1. @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.
  2. @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(); } } }
  3. @.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ê.
  4. 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.
  5. @.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.
  6. @.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); } } }
  7. @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
  8. 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

×
×
  • Criar novo...

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!