Ir ao conteúdo
  • Cadastre-se

Rafael Ortiz Rinco

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

posts postados por Rafael Ortiz Rinco

  1. Ao apertar um botão uma das fileiras dos LEDS permanece acesa e é ligada a ventoinha, e a velocidade rpm é exibida no painel LCD, o processo funciona por 30 segundos e desliga.Bom eu consegui fazer funcionar a fileira de led e a ventoinha....ai mostra a rpm na tela mas n to conseguindo adicionar um botão para inicializar tudo e nem um tempo de 30 segundos para finalizar o programa, alguém pode me ajudar?  PFV
     PIC18F4520 
     CRISTAL: 8Mhz

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     

    // vARIAVEIS GLOBAIS
    unsigned char ucTexto[10];   // Matriz para armazenamento de texto.
    unsigned char ucPorcentagem; // Armazena a porcentagem do PWM.
    unsigned int iLeituraAD = 0; // Define variável para armazenamento da leitura AD.
    unsigned int iReg_timer1;    // Armazena o RPM.


    // CONFIGURAÇÃO DOS PINOS DO LCD.
    sbit LCD_RS at RE2_bit;
    sbit LCD_EN at RE1_bit;
    sbit LCD_D7 at RD7_bit;
    sbit LCD_D6 at RD6_bit;
    sbit LCD_D5 at RD5_bit;
    sbit LCD_D4 at RD4_bit;

    // DIREÇÃO DOS PINOS.
    sbit LCD_RS_Direction at TRISE2_bit;
    sbit LCD_EN_Direction at TRISE1_bit;
    sbit LCD_D7_Direction at TRISD7_bit;
    sbit LCD_D6_Direction at TRISD6_bit;
    sbit LCD_D5_Direction at TRISD5_bit;
    sbit LCD_D4_Direction at TRISD4_bit;


    void interrupt(){
       if (INTCON.TMR0IF == 1){    // Se o flag de estouro do TIMER0 for igual a 1, então
          PORTB.RB0 = ~PORTB.RB0;  // Inverte o estado do PORTB.RB0.
           TMR0L = 0XCB;       // Carrega valores de contagem
           TMR0H = 0XF3;       // Carrega valores de contagem
          INTCON.TMR0IF = 0;             // Seta T0IE, apaga flag de entouro do TIMER0
          iReg_timer1 = TMR1L*(600/7);    // Pega valor lido do timer1 e multiplica por 600 para saber rotação por minuto.
                                         // e divide por 7 pois a ventoinha para dar uma volta completa realiza 7 pulsos.
          TMR1L = 0;                     // Limpa contador.
       }
    }

    void main(){

       TRISB = 0;                        // Define PORTB como saida.
       TRISD = 0;                        // Define PORTD como saida.
       TRISC.RC0 = 1;                    // Define PORTC.RC0 como entrada.
       TRISC.RC2 = 0;                    // Define PORTC.RC2 como saida.
       TRISE = 0;                        // Define PORTE como saida.
       PORTB = 0;                        // Limpa PORTB.

       // Configuração das interrupções
       INTCON.GIEH = 1;   // Habilita as interrupções e a interrupção de alta prioridade.
       INTCON.GIEL = 1;   // Habilita as interrupções e a interrupção de baixa prioridade
       RCON.IPEN = 1;     // Configura 2 niveis de interrupção.

       // Timer 0
       INTCON.TMR0IF = 0;
       INTCON2.TMR0IP = 1;
       INTCON.TMR0IE = 1;

       //temporização de 100 milisegundos
       T0CON = 0B10000101; // Configura timer modo 16 bits, com prescaler 64
       TMR0L = 0XCB;       // Carrega valores de contagem
       TMR0H = 0XF3;       // Carrega valores de contagem
       INTCON.TMR0IF = 0;  // Apaga flag de estouro do TIMER0

       // Timer 1 para modo contador de pulsos externos
       T1CON = 0B10000011; // Liga TIMER1 como Contador em RC0, prescaler 1:1, modo 16bits.
       TMR1L = 0;          // Carrega valor de contagem baixa do TIMER1
       TMR1H = 0;          // Carrega valor de contagem alta do TIMER1
       PIR1.TMR1IF = 0;    // Apaga flag de estouro do TIMER1

       ADCON0 = 0b00000001;              // Configura conversor A/D Canal 0, conversão desligada, A/D ligado.
       ADCON1 = 0b00001110;              // Configura todos canais como Digital menos AN0 e REF Interna.
       ADCON2 = 0b10111110;              // Configura conversor A/D para resultado justificado a direita, clock de 20 TAD, clock de Fosc/64.

       // Config. LCD no modo 4 bits
       Lcd_Init();                               // Inicializa LCD.

       Lcd_Cmd(_LCD_CLEAR);                      // Apaga display.
       Lcd_Cmd(_LCD_CURSOR_OFF);                 // Desliga cursor.
       Lcd_Out(1, 1,"velo  :");            // Escreve mensagem no LCD

       PWM1_Init(5000);                  // Inicializa módulo PWM com 5Khz
       PWM1_Set_Duty(255);               // Seta o Duty-cycle do PWM em 100%.
       PWM1_Start();                     // Inicia PWM.

       while(1){   // Aqui Definimos Uma Condição Sempre Verdadeira Como Parametro, Portanto Todo O Bloco Será Repetido Indefinidamente.
          iLeituraAD= ADC_Read(0);          // Lê Canal AD 0
          iLeituraAD=(iLeituraAD*0.24);     // Converte valor para o duty cycle [255/(1023 pontos do A/D)]
          PWM1_Set_Duty(iLeituraAD);        // Envia o valor lido de "iLeituraAD" para o módulo CCP1 PWM
          iLeituraAD=(iLeituraAD*0.41);     // Converte valor para o duty cycle em %
          WordToStr(iLeituraAD, ucTexto);   // Converte o valor lido no A/D em string
          Lcd_Out(1,11,ucTexto);            // Imprime no LCD o valor do Duty Cycle.
          PORTD=0;
          PORTB=0;
          PORTD=255;
          PORTB=255;

          WordToStr(iReg_timer1, ucTexto);  // Converte o valor lido no iReg_timer1 em string
          Lcd_Out(2,1,ucTexto);             // Imprime no LCD o valor da RPM.
          Lcd_Out_CP(" RPM");               // Unidade "RPM".
          Delay_10us;
       }
    }

    <>

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!