Pesquisar neste blog

09/07/2022

PF 2021/2

Questão 1) Projetar um sistema com PICSimLab que recebe o sinal do potenciômetro e apresenta o valor de 0 a 99% no LCD e no display de 7 segmentos. (Vale 3,0 pontos)










Resolução:

Código feito no CCS C Compiler

#include <16F877A.h>
#device adc = 8
#include <math.h>
#FUSES NOWDT, HS, NOPROTECT, NODEBUG
#FUSES NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(crystal = 20MHz)

#ifndef lcd_enable
   #define lcd_enable   pin_e1 // pino enable do LCD
   #define lcd_rs       pin_e2 // pino rs do LCD
   //#define lcd_rw       pin_e2 // pino rw do LCD
   #define lcd_d4       pin_d4 // pino de dados d4 do LCD
   #define lcd_d5       pin_d5 // pino de dados d5 do LCD
   #define lcd_d6       pin_d6 // pino de dados d6 do LCD
   #define lcd_d7       pin_d7 // pino de dados d7 do LCD
#endif

#include <mod_lcd.c>
unsigned int8 valor, aux, c, d, u;
unsigned int8 vetor[] = {0b00111111, 0b00000110, // 0 a 9
   0b01011011, 0b01001111, 0b01100110, 0b01101101,
   0b01111101, 0b00000111, 0b01111111, 0b01100111 };

void main(){
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);
   lcd_ini();

   while(TRUE){

      valor = read_adc();
      if(valor >= 99){
         valor = 99;
      }  
      aux = valor/100;     // extrai o primeiro piso das centenas
      c = (int)floor(aux); // converte para inteiro
      
      aux = ((valor/10)-(10*c)); //extrai o primeiro piso das dezenas
      d = (int)floor(aux);       //converte para inteiro
      
      aux = ((valor)-(100*c)-(10*d));  //extrai o primeiro piso das unidades
      u = (int)floor(aux);             //converte para inteiro
      
      printf (lcd_escreve,"\f\t\t\tIFMT\nValor = %u%%",valor);
      delay_ms(20);
      
      output_b(vetor[d]);
      output_c(vetor[u]);
      
   }
}
























Questão 2) Utilize os três timers para fazer três LEDs piscarem com frequência iguais a:

Vermelho (D0) ________________Hz
Azul (D1) _______________ Hz
Amarelo (D2) ________________Hz
Sabendo que no PIC tem um cristal de _______MHz












Resolução:

Aluno1 = 25 Hz, 5 Hz, 12 Hz

Código feito em CCS C Compiler

#include <16F877A.h>
#device adc = 8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT, NOWRT
#use delay(clock = 20MHz)

unsigned int16 cont1 = 0, cont2 = 0, cont3 = 0;

#int_TIMER0
void TIMER0_isr(void){
   if(++cont1 >= 394)  { cont1 = 0; output_toggle(pin_B0) ; } 
   if(++cont2 >= 1927) {cont2 = 0;output_toggle(pin_B1); }
   if(++cont3 >= 822) {cont3 = 0; output_toggle(pin_B2); }
}

void main(){
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1); // overflow 51,2 us
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);
   //disable_interrupts(GLOBAL);
   
   while(true);
}

Saída de frequencímetro no Proteus 7.9























Nenhum comentário: