Victor 222222
Membro Júnior-
Posts
10 -
Cadastrado em
-
Última visita
Reputação
0-
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); } }
-
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
-
tenho que fazer um radar com o pic 18f4520
Victor 222222 respondeu ao tópico de Victor 222222 em Microcontroladores
Ele não conta -
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){ } }
-
PIC 18F4520 preciso fazer uma varredura de botões utilizando timer1
Victor 222222 respondeu ao tópico de Victor 222222 em Microcontroladores
Obg vou tentar fazer essa logica, mas aonde você configurou os timer? -
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
-
estou precisando programar um relógio com alarme usando o pic 18f4520
Victor 222222 respondeu ao tópico de Victor 222222 em Microcontroladores
adicionado 1 minuto depois O alarme despertará por hora mesmo e vou ter fazer via programação em c -
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); }
-
estou com problema na programação do pic 18f4520
Victor 222222 postou um tópico em Microcontroladores
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); } } } -
pic 18f4520 acender um Led quando B1 for pulsado
Victor 222222 postou um tópico em Microcontroladores
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