
Victor 222222
Membro Júnior-
Posts
8 -
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); } }
-
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); } } }
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