Ir ao conteúdo
  • Cadastre-se
marczenom

Microcontrolador 18F4550

Recommended Posts

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

Compartilhar este post


Link para o post
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?

Compartilhar este post


Link para o post
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         }         ////////////////////////////////////////////////////////////////////////////////        }}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hoje não to muito animado,mas veja se esta modificação funciona;

         else if(S1==1 && FC==0){          delay_ms(80);          MA=1;   

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×