Ir ao conteúdo
  • Cadastre-se

Microcontrolador 18F4550


marczenom

Posts recomendados

Bom dia. Tenho a seguinte dúvida:

 

Eu consigo desabilitar uma linha de comando temporariamente mediante à uma condição? Vejam exemplo:

 

void main(){trisa=1;trisd=0;adcon1=0b00001111; while(1){ if(porta.f0==1){portd.f0=1; // liga motorelse{portd=0;} if(porta.f5==1){ portd.f0=0; // fim de curso para parar motor independente de RA0 estar em 1}

 

 

Existe como colocar uma parada para funcionar somente se um determinado ponto for acionado? Após isso, o comando parado volta a funcionar.

 

 

Obrigado

Link para o comentário
Compartilhar em outros sites

 

Existe como colocar uma parada para funcionar somente se um determinado ponto for acionado? Após isso, o comando parado volta a funcionar.

voce poderia explicar melhor?

Quando voce se refere a parada,voce esta referenciando um gíria(uma parada,um troço,uma coisa...)ou é uma condição de parar?

Link para o comentário
Compartilhar em outros sites

Ah, veja exemplo:

 

Eu coloco uma entrada em 1 para acionar uma saída (motor por exemplo). Eu não estou conseguindo colocar uma condição em que o fim de curso , ao ser acionado, coloque condição 0 neste motor. Quando eu entro com pulso 1 na entrada de fim de curso, o motor fica ligando e desligando. No programa original, o meu fim de curso é o FC. O sentido de giro do motor é MH. Quando MA estiver girando e encostar no fim de curso, ele será desligado independentemente de S1 estar em 1.  Veja:

 

/* Painel solar microcontrolado
PIC: 18F4550
Integrante: Edenilson
Objetivo do programa: Fazer que o painel solar absorva o máximo de energia
aproveitando todas as posições do Sol através de 4 LDR´s
*/
 
unsigned short current_duty,current_duty1; // definir set do PWM void main(){  // função principal         trisa=1; // define A como entrada        trisb=1; // define B como entrada        trisd=0; // define D como saída        trisc=0; // define C como saída PWM_INIT         #define S1 porta.f1 // LDR1 motor anti-horrario        #define S2 porta.f4 // LDR2 motor horario        #define S3 portb.f2 // LDR3 motor anti-horario        #define S4 portb.f3 // LDR4 motor horario        #define FC porta.f5 // fim de curso placa solar (noite)        #define MA portd.f0 // motor superior        #define MH portd.f1 // motor superior        #define RA portd.f2 // motor inferior        #define RH portd.f3 // motor inferior                Pwm1_init(5000); // inicia PWM em ...Khz        Pwm2_init(5000); // inicia PWM em ...Khz        Pwm1_Start(); // inicia pwm1        Pwm2_Start(); // inicia pwm2        current_duty=192; // define set point 75%        current_duty1=192; // define set point 75%        Pwm1_Change_Duty(current_duty); // executa set point 1        Pwm2_Change_Duty(current_duty1); // executa set point 2  adcon1=0b00001111; // define ADCON1 datasheet 18f4550 while(1){ // loop          if((S1==1)&&(S2==1)){ // intertravamento         MA=0; // motor anti-horário sem alimentação         MH=0; // motor horário sem alimentação         }         else if(S1==1){ // sol fora de posição         delay_ms(80); // conta tempo         MA=1; // liga motor anti-horario                 // Aqui o motor está acionado, e deveria parar assim que FC entrar em 1         }         else if(S1==0){ // sol dentro de posição         delay_ms(80); // conta tempo         MA=0; // desliga motor         }         if((S1==1)&&(S2==1)){ // intertravamento         MA=0; // motor parado         MH=0; // motor parado         }         else if(S2==1){ // sol fora de posição         delay_ms(80); // conta tempo         MH=1; // motor ligado horario         }         else if(S2==0){ // sol dentro de posição         delay_ms(80); // conta tempo         MH=0; // desliga motor         }         ////////////////////////////////////////////////////////////////////////////////          if((S1==1)&&(S2==1)&&(S3==1)&&(S4==1)){         MA=0;         MH=0;         RA=0;         RH=0;         }         else if(S1==1){ // sol fora de posição         delay_ms(80); // conta tempo         MA=1; // liga motor anti-horario         }         else if(S1==0){ // sol dentro de posição         delay_ms(80); // conta tempo         MA=0; // desliga motor         }         if((S1==1)&&(S2==1)){ // intertravamento         MA=0; // motor parado         MH=0; // motor parado         }         else if(S2==1){ // sol fora de posição         delay_ms(80); // conta tempo         MH=1; // motor ligado horario         }         else if(S2==0){ // sol dentro de posição         delay_ms(80); // conta tempo         MH=0; // desliga motor         }         else if(S3==1){ // sol fora de posição         delay_ms(80);  // conta tempo         RA=1; // liga motor         }         else if(S3==0){ // sol dentro da posição         delay_ms(80);  // conta tempo         RA=0;         }         if((S3==1)&&(S4==1)){ // intertravamento         RA=0; // motor anti-horário sem alimentação         RH=0; // motor horário sem alimentação         }         else if(S4==1){ // sol fora de posição         delay_ms(80); // conta tempo         RH=1; // liga motor         }         else if(S4==0){ // sol dentro da posição         delay_ms(80); // conta tempo         RH=0; // desliga motor         }         ////////////////////////////////////////////////////////////////////////////////          if((S3==1)&&(S4==1)){ // intertravamento         RA=0; // motor anti-horário sem alimentação         RH=0; // motor horário sem alimentação         }         else if(S3==1){ // sol fora de posição         delay_ms(80);  // conta tempo         RA=1; // liga motor         }         else if(S3==0){ // sol dentro da posição         delay_ms(80);  // conta tempo         RA=0;         }         if((S3==1)&&(S4==1)){ // intertravamento         RA=0; // motor anti-horário sem alimentação         RH=0; // motor horário sem alimentação         }         else if(S4==1){ // sol fora de posição         delay_ms(80); // conta tempo         RH=1; // liga motor         }         else if(S4==0){ // sol dentro da posição         delay_ms(80); // conta tempo         RH=0; // desliga motor         }         ////////////////////////////////////////////////////////////////////////////////        }}
Link para o comentário
Compartilhar em outros sites

Amigão, não resolveu ainda. Deve ser a construção da lógica anterior, pois, já existe uma comparação entre S1 e S2 no início do programa. Se não tiver solução na lógica, vou ter que habilitar uma "gambiarra" no sistema. Vai ser feio, mas, é o jeito.

 

Olha o arquivo que fica mais fácil de entender.

 

 

post-682250-0-10136300-1394112371_thumb.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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