Ir ao conteúdo

Victor 222222

Membro Júnior
  • Posts

    8
  • Cadastrado em

  • Última visita

posts postados por Victor 222222

  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. 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){
         } 
    }

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

  4. 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 depois

    O alarme despertará  por hora mesmo e vou ter fazer via programação  em c

     

     

  5. 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);
    }
     

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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!