Ir ao conteúdo
  • Cadastre-se

Victor 222222

Membro Júnior
  • Posts

    10
  • Cadastrado em

  • Última visita

posts postados por Victor 222222

  1. o programa consiste em sempre que aperta B1 ele incrementa  e se apera b2 ele decrementa ..

    0v  =duty 0%

    1v =duty 20%

    2v  =duty 40%

    3v =duty  60%

    4v=duty 80%

    5v=duty 100%

    não sei muito bem por onde começar alguém ai pode me ajudar fiz um código assim mais ta dando erro .SEGUE ABAIXO MEU CODIGO;

    #include <p18f4520.h>     //bibiblioteca do PIC18f4550
           
    #include <stdio.h>        //bibilioteca  de entradas e saídas
    #include <delays.h>          //Adiciona a bibilioteca de funcões do delay 
    #include <adc.h>          //Adiciona a bibilioteca de funções para o conversor A/D
    #include <timers.h>       //Adiciona a bibilioteca de funções do timer 
    #include "lcd_lib.h"        // lib.lcd

    #pragma config OSC = HS      //Oscilador e cristal 20Mhz
    #pragma config PWRT = ON     //Power Up Time Enable 
    #pragma config BORV = 1         //tensão do BOR é 4,33v
    #pragma config WDT = OFF     //Desabilita o Watchdog Timer
    #pragma config PBADEN = OFF  //RB0:RB4 I/O Digital
    #pragma config LVP = OFF     //ICSP. Low power programming Digital
    #pragma config LPT1OSC = ON  //programado pra operar no modo Low-power
    char lcd[17];

    #define B1 PORTBbits.RB0
    #define B2 PORTCbits.RC0

    int duty1 = 5;
    char cont=0;

    unsigned  char conta_100ms =0;
    void ISR_alta_prioridade(void); //Protótipo da função de interrupção
    #pragma code int_alta=0x08      //Vetor de interrupção de alta prioridade 
    void int_alta(void)
    {
        _asm goto ISR_alta_prioridade _endasm  //Desvia o programa para a função ISR_alta_prioridade

    #pragma code 
    #pragma interrupt ISR_alta_prioridade
    void ISR_alta_prioridade(void)
    {
        WriteTimer1(40535);
        if(PIR1bits.TMR1IF){
         cont++;
          PIR1bits.TMR1IF = 0;
        
        if(cont==0x05){
           cont=0x00;
        if (!B1){
            duty1++;
        }
        if(!B2){
          duty1--;
        }
        if(duty1>500){
           duty1=0;
        }
        if(duty1<0){
           duty1=500;
        
        }
        }
        }
    }

    void main(void){
        CMCON = 0x07;

        OpenTimer0(    TIMER_INT_ON
                    &T0_8BIT
                    &T0_SOURCE_INT
                    &T0_PS_1_128);

        INTCONbits.GIE = 1;
        INTCONbits.PEIE=1;
        INTCONbits.TMR0IE=1;
        INTCONbits.TMR0IF=0;

        TRISB=0x01;
        TRISC=0x01;
        TRISD=0x00;
        ADCON1=0x0F;
        PORTD=0;

        while(1){
            
                  OpenPWM1(5);    
                  SetDCPWM1(500);        
                ComandoLCD(0xC0);  
                sprintf(lcd,"Duty = %0.2lu %  "cont);    
                putsLCD(lcd);
        }
    }            

  2. preciso fazer um teclado matricial cuja o LED1  pisque o numero de vezes que o numero do teclado for acionado (ex se aperta o numero 4 o led deve aperta 4 vezes e assim por diante)

    devo usar o time 1 e não delay mais sempre que vou compilar ele aparece erro alguém ai pode me ajudar.egue meu código abaixo:

    #include<adc.h>
    #include <p18f4520.h>                        //Biblioteca do PIC18F4550
    #include <stdlib.h>                            //Biblioteca geral C
    #include <stdio.h>                            //Biblioteca geral entradas e saídas
    #include <timers.h>                            //Adiciona a biblioteca de função de TIMER
    #include <delays.h>

    #pragma config OSC = HS                        //Oscilador a cristal 20MHz
    #pragma config PWRT = ON                    //Power-UP timer enable
    #pragma config WDT = OFF                    //Watchdog Timer disable
    #pragma config PBADEN = OFF                    //RB0: RB4 I/O Digital
    #pragma config LVP = OFF                    //ICSP. Low Power Programming Disable
    #pragma config BOREN = SBORDIS                //Brown-out Reset (BOREN) Habilitado somente no hardware
    #pragma config BORV = 1                        //tensão do BOR é 4,33v
    #pragma config LPT1OSC = ON                    //TIMER1 programado para operar no modo low-power

    char lcd[17];

    #define S1 PORTBbits.RB0
    #define S2 PORTCbits.RC0  
    #define LED1 PORTDbits.RD1

    #define col_1 PORTBbits.RB1
    #define col_2 PORTBbits.RB2
    #define col_3 PORTBbits.RB3
    #define row_A PORTBbits.RB4
    #define row_B PORTBbits.RB5
    #define row_C PORTBbits.RB6
    #define row_D PORTBbits.RB7
     
     void pulser (unsigned char number);              // Funçao para pulsar led1                                                            
    unsigned char control = 0x01;

    void ISR_alta_prioridade(void);             //Protótipo da função de interrupção

    #pragma code int_alta = 0x08                //Vetor de interrupçao de alta prioridade
    void int_alta(void)
    {
        _asm goto ISR_alta_prioridade _endasm    //Desvia o programa para a função ISR_alta_prioridade
    }
    #pragma code
    #pragma interrupt ISR_alta_prioridade
    void ISR_alta_prioridade(void){
        
        //Note que o TMRL1 não é alterado o que permite que ele continue incremetando
        WriteTimer0(0X6C); // Carrega o valor de 40535 para dentro do registro TMR1H
        if(INTCONbits.TMR0IF){
            INTCONbits.TMR0IF=0;    //T0IE_bit = 0x01;
        }
        WriteTimer0(0X6C);
        if(col_1 && control ==1){             //coluna em nivel alto? control igual a 1?
           control = 0x02;                    //sim
           col_1 = 0x00;                      //apenas a coluna 2 em nivel baixo
           col_2 = 0x01;
           col_3 = 0x01; 
           if(!row_A){
            pulse(1); 
           }  
           if(!row_B){
            pulse(4);
         } 
           if(!row_C){
            pulse(7);
        }
           if(!row_D){
            pulse (11);
          }
        }
          if (col_2&& control ==2){          //coluna 2 em nivel alto? control igual a 2 ? 
              control = 0x03;                  //sim... 
            col_1 = 0x01;
            col_2 = 0x00;                   //apenas a coluna 2 em nivel baixo
            col_3 = 0x01;
         }   
            if(col_3 && control==3){       //coluna 3 em nivel alto? control igual a 1?
            control = 0x01;                //sim...
            col_1 = 0x01;
            col_2 = 0x01;
            col_3 = 0x00;                  //apenas coluna 3 em nivel baix0
         }    
    }       
     
    void pulse( unsigned char number){              //desenvolver a funçao
      unsigned char i;                             //variavel de interaçao
      for(i=0;i<number;i++){
          LED1 = 0x01;
          Delay10KTCYx(255);
          LED1 = 0x00;
          Delay10KTCYx(255); 
      }
    }  
    void main(void){
        CMCON = 0x07;

        OpenTimer0(    TIMER_INT_ON
                    &T0_8BIT
                    &T0_SOURCE_INT
                    &T0_PS_1_128);

        INTCONbits.GIE = 1;
        INTCONbits.PEIE=1;
        INTCONbits.TMR0IE=1;
        INTCONbits.TMR0IF=0;
        
        TRISA = 0x3;               //Entrada em RA0 e RA1
        TRISB = 0xF0;              //Mais significativo entrada
        TRISC = 0x00;              
        TRISD = 0x00;
        ADCON1 = 0x0F;
        PORTB = 0xFF;             //mais significativo nivel alto
       while(1){
           
      
                 
        }

    }

    e ajudar ,segue meu codigo abaixo

  3. Meu programa e basicamente  assim quando aperto B1 o tempo começa  a contar e se pulsar B2  a contagem para e o display muda de frase mostrando o tempo da velocidade .Estou tentando esse codigo so que nao ta dando certo

    #include <p18f4520.h>     //bibiblioteca do PIC18f4550
           
    #include <stdio.h>        //bibilioteca  de entradas e saídas
    #include <delays.h>          //Adiciona a bibilioteca de funcões do delay 
    #include <adc.h>          //Adiciona a bibilioteca de funções para o conversor A/D
    #include <timers.h>       //Adiciona a bibilioteca de funções do timer 
    #include "lcd_lib.h"        // lib.lcd

    #pragma config OSC = HS      //Oscilador e cristal 20Mhz
    #pragma config PWRT = ON     //Power Up Time Enable 
    #pragma config BORV = 1         //tensão do BOR é 4,33v
    #pragma config WDT = OFF     //Desabilita o Watchdog Timer
    #pragma config PBADEN = OFF  //RB0:RB4 I/O Digital
    #pragma config LVP = OFF     //ICSP. Low power programming Digital
    #pragma config LPT1OSC = ON  //programado pra operar no modo Low-power
    #define B1 PORTBbits.RB0
    #define B2 PORTCbits.RC0

    char lcd[17];
    unsigned  long conta_100ms =0, segundo=0, velocidade=0,aa=0, KMH=0;
    float cont,VELOCIDADE;
    void ISR_alta_prioridade(void); //Protótipo da função de interrupção
    #pragma code int_alta=0x08      //Vetor de interrupção de alta prioridade 
    void int_alta(void)
    {
        _asm goto ISR_alta_prioridade _endasm  //Desvia o programa para a função ISR_alta_prioridade

    #pragma code 
    #pragma interrupt ISR_alta_prioridade
    void ISR_alta_prioridade(void)
    {
        WriteTimer1(40535);
        if(PIR1bits.TMR1IF){
         if(aa){
          conta_100ms++;
         } 
          PIR1bits.TMR1IF = 0;
        }
        if(B1){
            aa=1;
            segundo=0;
            ClearLCD();
        
        }        
        if(conta_100ms == 10){
          segundo++;
          conta_100ms = 0;
        }
        if(B2){
            aa=0; 
        cont=(1/1000000);
        VELOCIDADE=cont/segundo;
        }    
    }          
          
        
    void main (void)
    {
        TRISA = 0x00;
        TRISB = 0x00;
        TRISC = 0x00;
        TRISD = 0x00;
        TRISE = 0x00;
        ADCON1 = 0x0F;
        OpenTimer1(TIMER_INT_OFF
                     &T1_8BIT_RW
                     &T1_SOURCE_INT
                     &T1_OSC1EN_ON
                     &T1_SYNC_EXT_OFF
                     &T1_PS_1_1);
         PORTD = 0x00;
         PORTE = 0x00;
         Delay10KTCYx(100);
         
         PIR1bits.TMR1IF = 0;
         IPR1bits.TMR1IP = 1;
         PIE1bits.TMR1IE = 1;
         RCONbits.IPEN = 1;
        INTCONbits.GIEH = 1;
        INTCONbits.GIEL = 1;
        TMR1H = 0x80;
        TMR1L = 0x00; 
        
         InitLCD();
      while(1){
         } 
    }

  4. Preciso fazer uma varredura de botões utilizando timer1  (não pode ser utilizado delay)

    O programa tem que começar com o LED2 piscando e quando apertado o botão B1 o LED   começa a piscar e quando e apertado B2 o LED1 e apagado

    meu código só ta fazendo com que o LED2 pisque ,segue meu codigo abaixo:

    #include <p18f4520.h>     //bibiblioteca do PIC18f4550 
    #include <stdio.h>        //bibilioteca  de entradas e saídas
    #include <delays.h>
    #include <adc.h>
    #include <timers.h>       // Low power programming Digital

    #pragma config OSC = HS     //Oscilador e cristal 20Mhz
    #pragma config PWRT = ON     //Power Up Time Enable 
    #pragma config BORV = 1
    #pragma config WDT = OFF     //Desabilita o Watchdog Timer
    #pragma config PBADEN = OFF  //RB0:RB4 I/O Digital
    #pragma config LVP = OFF     //ICSP. Low power programming Digital
    #pragma config LPT1OSC = ON

    #define B1 PORTBbits.RB0
    #define B2 PORTCbits.RC0
    #define LED2 LATDbits.LATD2
    #define LED1 LATDbits.LATD1

    unsigned  char conta_100ms =0,segundo                                                                                                                                                                                                                                          ;
    void ISR_alta_prioridade(void); //Protótipo da função de interrupção
    #pragma code int_alta=0x08      //Vetor de interrupção de alta prioridade 

    void int_alta(void)
    {
        _asm goto ISR_alta_prioridade _endasm  //Desvia o programa para a função ISR_alta_prioridade

    #pragma code 
    #pragma interrupt ISR_alta_prioridade

    void ISR_alta_prioridade(void)
    {
             if(!B1)
             { 
             conta_100ms;
             LED1 =1;
            }
            else{
                if(!B2){
                     conta_100ms;
                    LED1=0;
                }
            }
    }            
             
    void main(){
    TRISA = 0x00;
    TRISB = 0x01;
    TRISC = 0x01;
    TRISD = 0x03;
    TRISE = 0x00;
    ADCON1 = 0x0F;
        RCONbits.IPEN = 1;
        INTCONbits.GIEH = 1;
        INTCONbits.GIEL = 1;
         OpenTimer1(TIMER_INT_OFF
                     &T1_8BIT_RW
                     &T1_SOURCE_INT
                     &T1_OSC1EN_ON
                     &T1_SYNC_EXT_OFF
                     &T1_PS_1_1);
         PORTD = 0x00;
         PORTE = 0x00;
         Delay10KTCYx(255);     
         
         PIR1bits.TMR1IF = 0;
         IPR1bits.TMR1IP = 1;
         PIE1bits.TMR1IE = 1;
         RCONbits.IPEN = 1;
           INTCONbits.GIEH = 1;
         INTCONbits.GIEL = 1;

    while(1){
        
        LED2 = 0;
         conta_100ms;
        LED2 = 1;

    }
    }    

    ALGUEM PODE ME AJUDAR

  5. 10 horas atrás, ViniciusKruz disse:

    Amigo, qual RTC você vai usar? Pra te ser sincero, os que existem no mercado são umas belas porcarias em se tratando de precisão, eu te aconselharia usar o DS3231, é o mais preciso que já vi, sem contar os recursos de correção que ele possui.

     

    Caso você não vá usar um RTC e o relógio for implementado via programação, já te adianto que uma precisão razoável será difícil de ser conseguida, a não ser que você use uma frequência externa para servir de base ou então programe tudo em Assembler. Ainda assim insisto no RTC.

     

    Outra coisa, o seu alarme, vai despertar por dias da semana ou será somente por horário mesmo?

     

    adicionado 1 minuto depois

    O alarme despertará  por hora mesmo e vou ter fazer via programação  em c

     

     

  6. preciso programar um relogio em tempo real com alarme so que nao sei como devo encaixar a programaçao do alarme alguém ai pode me ajudar?

    LEMBRANDO QUE o ALARME DEVE SER ACIONADO QUANDO PULSAR B3.ESTOU ULTILIZANDO também O DISPLAY DE LCD 16X2
    segue abaixo meu codigo:

    #include <p18f4520.h>     //bibiblioteca do PIC18f4550
           
    #include <stdio.h>        //bibilioteca  de entradas e saídas
    #include <delays.h>          //Adiciona a bibilioteca de funcões do delay 
    #include <adc.h>          //Adiciona a bibilioteca de funções para o conversor A/D
    #include <timers.h>       //Adiciona a bibilioteca de funções do timer 
    #include "lcd_lib.h"        // lib.lcd

    #pragma config OSC = HS      //Oscilador e cristal 20Mhz
    #pragma config PWRT = ON     //Power Up Time Enable 
    #pragma config BORV = 1         //tensão do BOR é 4,33v
    #pragma config WDT = OFF     //Desabilita o Watchdog Timer
    #pragma config PBADEN = OFF  //RB0:RB4 I/O Digital
    #pragma config LVP = OFF     //ICSP. Low power programming Digital
    #pragma config LPT1OSC = ON  //programado pra operar no modo Low-power

    #define B1 PORTBbits.RB0
    #define B2 PORTCbits.RC0
    #define B3 PORTAbits.RA4

    char lcd[17];
    unsigned  char conta_100ms =0 , segundo ,minuto ,hora ;
    void ISR_alta_prioridade(void); //Protótipo da função de interrupção
    #pragma code int_alta=0x08      //Vetor de interrupção de alta prioridade 
    void int_alta(void)
    {
        _asm goto ISR_alta_prioridade _endasm  //Desvia o programa para a função ISR_alta_prioridade

    #pragma code 
    #pragma interrupt ISR_alta_prioridade
    void ISR_alta_prioridade(void)
    {
        WriteTimer1(40535);
        if(PIR1bits.TMR1IF){
          conta_100ms++;
          PIR1bits.TMR1IF = 0;
        }
        if(conta_100ms == 10){
          segundo++;
          conta_100ms = 0;
        }          
              
        
        if(segundo==60)
        {
            minuto++;
            segundo = 0;
         if(minuto==60)
        {
            hora++;
            minuto =0;
        if(hora==24)
            hora=0;
        }
        }
    }
    void main (void)
    {
        TRISA = 0x00;
        TRISB = 0x01;
        TRISC = 0x00;
        TRISD = 0x00;
        TRISE = 0x00;
        ADCON1 = 0x0F;
        OpenTimer1(TIMER_INT_OFF
                     &T1_8BIT_RW
                     &T1_SOURCE_INT
                     &T1_OSC1EN_ON
                     &T1_SYNC_EXT_OFF
                     &T1_PS_1_1);
         PORTD = 0x00;
         PORTE = 0x00;
         Delay10KTCYx(100);
         
         PIR1bits.TMR1IF = 0;
         IPR1bits.TMR1IP = 1;
         PIE1bits.TMR1IE = 1;
         InitLCD();
      while(1){
        ComandoLCD (0x81);                 //posiciona o cursor linha 1 coluna
        sprintf(lcd,"REAL TIME CLOCK");      //Envia a msg para o vetor
        putsLCD(lcd);                 // posiciona o cursor linha 2 coluna 4
        ComandoLCD(0xC3);
        sprintf(lcd,"%02d:%02d:%02d",hora,minuto,segundo);    //Envia a mensagem para o vetor
        putsLCD(lcd);
        RCONbits.IPEN = 1;
        INTCONbits.GIEH = 1;
        INTCONbits.GIEL = 1;
        TMR1H = 0x80;
        TMR1L = 0x00; 
            }
            Delay10KTCYx(100);
    }
     

  7. preciso que o led acenda assim que e pulsado B1 .quando copilo ele ele nao da erro mas quando vou simular ele no proteus o led nao acende alguem pode me ajudar .Segue abaixo meu codigo:

    #include <p18f4520.h>                // Biblioteca do PIC18F4550
      #include <stdlib.h>                // Biblioteca geral C
      #include <stdio.h>                // Biblioteca de entradas e saídas
      
      #pragma config OSC = HS            // Oscilador a cristal 20MHz
      #pragma config PWRT = ON            // Power-up timer enable
      #pragma config WDT = OFF            // Watchdog Timer disable 
      #pragma config PBADEN = OFF        // RB0:RB4 I/O Digital
      #pragma config LVP = OFF          // ICSP. Low Power Programing disable 
        
      #define B1 PORTBbits.RB0
      #define LED LATDbits.LATD1
      
      void main(){
      TRISB = 0x01;
      TRISD = 0x00;
      while(1){
          if(B1==0){
           LATD=1;
           Delay10KTCYx(250);
          }
      }
      }
     

  8. preciso fazer um programa no mplab que quando pulsar  a chave b1 o led acenda  .

    o meu código e esse aqui :

    #include <p18f4520.h>                // Biblioteca do PIC18F4550
      #include <stdlib.h>                // Biblioteca geral C
      #include <stdio.h>                // Biblioteca de entradas e saídas
      
      #pragma config OSC = HS            // Oscilador a cristal 20MHz
      #pragma config PWRT = ON            // Power-up timer enable
      #pragma config WDT = OFF            // Watchdog Timer disable 
      #pragma config PBADEN = OFF        // RB0:RB4 I/O Digital
      #pragma config LVP = OFF          // ICSP. Low Power Programing disable 
        
      #define B1 PORTBbits.RB0
      #define LED LATDbits.LATD0
      
      void main(){
      TRISB = 0x01;
      TRISD = 0x01;
      while(1){
          if(B1==1){
           LATD=0;
           Delay10KTCYx(250);
          }
      }
      
      }

     

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!