Ir ao conteúdo
  • Cadastre-se

Dúvida programação PIC18F4550


Posts recomendados

Bom dia galera.

 

Estou quase terminando meu programa e não estou conseguindo adicionar informação no display no momento que eu quero. No começo do processo, todas as entradas estão em "0". Logo, na tela deve constar "0" para todos. Quando eu tenho "1", no display, o sensor correspondente deve sair de 0 e ir para "1". Parece fácil, mas quando eu coloco as condições, ele trava em 0, não aparece os demais... um caos!!!! Segue meu programa e a foto de onde eu parei. Só quero atualizar na tela.

Estou usando o compilador MikroC pro for PIC.

 

Valeuuu!!!

 

////////////////////////////////////////////////////////////////////////////////
// Configuração do LCD
sbit LCD_RS at RD5_bit; // pino 28
sbit LCD_EN at RD6_bit; // pino 29
sbit LCD_D7 at RE2_bit; // pino 10
sbit LCD_D6 at RE1_bit; // pino 09
sbit LCD_D5 at RE0_bit; // pino 08
sbit LCD_D4 at RD7_bit; // pino 30
// Direcionamento dos dados
sbit LCD_RS_Direction at TRISD5_bit; // pino 28
sbit LCD_EN_Direction at TRISD6_bit; // pino 29
sbit LCD_D7_Direction at TRISE2_bit; // pino 10
sbit LCD_D6_Direction at TRISE1_bit; // pino 09
sbit LCD_D5_Direction at TRISE0_bit; // pino 08
sbit LCD_D4_Direction at TRISD7_bit; // pino 30
////////////////////////////////////////////////////////////////////////////////
 
// Variáveis do sistema
unsigned short current_duty,current_duty1;
char txt1[] = "Painel Solar";
char txt2[] = "PIC18F4550";
char txt3[] = "LCD 4bit";
char txt4[] = "Sistema pronto";
char txt5[] = "S1=";
char txt6[] = "S2=";
char txt7[] = "S3=";
char txt8[] = "S4=";
 
void main(){  // Início void main()
 
        TRISA=1;
        TRISB=1;
        TRISD=0;
        TRISE=0;
        ADCON1=0xF; // Definição I-O
 
        // Entradas do sistema
        #define S1 porta.f1 // Ldr 1  AN1
        #define S2 porta.f4 // Ldr 2  AN4
        #define S3 portb.f2 // Ldr 3  AN8
        #define S4 portb.f3 // Ldr 4  AN9
        #define FC porta.f5 // Fim de curso PV  AN5 noite
        #define FB portb.f4 // Fim de curso1 Base AN10
        #define FB1 portb.f5 // Fim de curso2 Base AN11
 
        // Saídas do sistema
        #define P1 portd.f4 // Corta Abre relé L298N (início da noite)  (((((RD4))))
        #define MA portd.f0 // Motor painel sentido anti-horário
        #define MH portd.f1 // Motor painel sentido horário
        #define RA portd.f2 // Motor base sentido anti-horário
        #define RH portd.f3 // Motor base sentido horário
 
        // Configuração PWM
        Pwm1_init(5000); // CCP2 16
        Pwm2_init(5000); // CCP1 17
        Pwm1_Start();
        Pwm2_Start();
        current_duty=127; // 50%
        current_duty1=127;
        Pwm1_Set_Duty(current_duty); // Set 1
        Pwm2_Set_Duty(current_duty1); // Set 2
 
        ////////////////////////////////////////////////////////////////////////
 
        // Interface de visualização 16x2
        delay_ms(1000);
        Lcd_Init();
        Lcd_Cmd(_LCD_CLEAR);
        Lcd_Cmd(_LCD_CURSOR_OFF);
        Lcd_Out(1,3,txt1); // Painel Solar
        delay_ms(1000);
        Lcd_Cmd(_LCD_CLEAR);
        delay_ms(1000);
        Lcd_Out(1,3,txt2); // PIC 18F4550
        delay_ms(1000);
        Lcd_Cmd(_LCD_CLEAR);
        delay_ms(1000);
        Lcd_Out(1,3,txt3); // LCD 4 bits
        delay_ms(1000);
        Lcd_Cmd(_LCD_CLEAR);
        delay_ms(1000);
        Lcd_Out(1,3,txt4); // Sistema pronto
        delay_ms(1000);
        Lcd_Cmd(_LCD_CLEAR);
        delay_ms(1000);
        Lcd_Out(1,1,txt5);
        Lcd_Out(2,1,txt6);
        Lcd_Out(1,10,txt7);
        Lcd_Out(2,10,txt8);
        
        // Aqui eu libero o sistema para operação
 
 
 
while(1){  // Início while(1)
 
         if((S1==1)&&(S2==1)){ // Intertravamento de rotação MA/MH
         MA=0;
         MH=0;
         }
         else if((S1==1)&&(FC==1)){ // Parada do fim de curso
         MA=0;
         delay_ms(1500);
         MH=1;
         delay_ms(1650);
         MH=0;
         P1=1; // Abre nível alto do L298N e suspende as rotações
         delay_ms(10);
         P1=1;
         }
         else if(S1==1){ // Primeiro passo é aqui
         MA=1;
         }
         else if(S1==0){ // Primeiro passo é aqui
         MA=0;
         }
         if((S1==1)&&(S2==1)){ // Intertravamento de rotação MA/MH
         MA=0;
         MH=0;
         }
         else if(S2==1){
         MH=1;
         
         }
         else if(S2==0){
         MH=0;
         }
 
 
// Fim execução de movimentos do painel superior
 
// Execução da base do painel poucos movimentos (usado estrategicamente)
 
        if((S3==1)&&(S4==1)){ // Intertravamento de rotação RA/RH
        RA=0;
        RH=0;
        }
        else if((S3==1)&&(FB==1)){ // Parada fim de curso RA
        RA=0;
        delay_ms(1500);
        RH=1;
        delay_ms(2500);
        RH=0;
        }
        else if((S4==1)&&(FB1==1)){ // Parada fim de curso RH
        RH=0;
        delay_ms(10);
        RH=0;
        RA=1;
        delay_ms(3000);
        RA=0;
        }
        else if(S3==1){ // Primeiro passo é aqui
        RA=1;
        P1=0;
        delay_ms(10);
        P1=0;
        }
        else if(S3==0){ // Primeiro passo é aqui
        RA=0;
        }
        if((S3==1)&&(S4==1)){ // Intertravamento de rotação RA/RH
        RA=0;
        RH=0;
        }
        else if(S4==1){
        RH=1;
        }
        else if(S4==0){
        RH=0;
        }
 
// Fim execução dos movimentos da base do sistema
} // Fim while(1)
} // Fim void main() início da noite

 

 

post-682250-0-03412400-1408361286_thumb.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...