Ir ao conteúdo
  • Cadastre-se

Victor 222222

Membro Júnior
  • Posts

    10
  • Cadastrado em

  • Última visita

Reputação

0
  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. Obg vou tentar fazer essa logica, mas aonde você configurou os timer?
  5. 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
  6. adicionado 1 minuto depois O alarme despertará por hora mesmo e vou ter fazer via programação em c
  7. 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); }
  8. 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); } } }
  9. 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...