Ir ao conteúdo
  • Cadastre-se

Rafael Ortiz Rinco

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

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