Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
marczenom

Dúvida programação PIC18F4550

Recommended Posts

marczenom    0

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.

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






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

×