Victor 222222
-
Posts
10 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por Victor 222222
-
-
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-powerchar 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
-
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.RC0char 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){
}
} -
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.LATD1unsigned 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 prioridadevoid 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_prioridadevoid 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
-
10 horas atrás, ViniciusKruz disse:
Amigo, qual RTC você vai usar? Pra te ser sincero, os que existem no mercado são umas belas porcarias em se tratando de precisão, eu te aconselharia usar o DS3231, é o mais preciso que já vi, sem contar os recursos de correção que ele possui.
Caso você não vá usar um RTC e o relógio for implementado via programação, já te adianto que uma precisão razoável será difícil de ser conseguida, a não ser que você use uma frequência externa para servir de base ou então programe tudo em Assembler. Ainda assim insisto no RTC.
Outra coisa, o seu alarme, vai despertar por dias da semana ou será somente por horário mesmo?
adicionado 1 minuto depoisO 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.RA4char 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);
}
-
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);
}
}
}
-
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
tenho que fazer um projeto de um gerador ajustável de pwm com o pic 18f4520 no m
em Microcontroladores
Postado
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);
}
}