Pesquisar neste blog

09/06/2023

Mini teste 1 2022/2

1. Projete o circuito e o programa (compilador CCS) de um sistema baseado no microcontrolador PIC16F877A que faça a leitura da entrada analógica PIN_A0, via conversor AD configurado em 8 bits. O  sistema deve apresentar 7 níveis de alerta através de um dispositivo de 3 segmentos (figura 1).


























RESOLUÇÃO FEITA EM CCS C Compiler:



















#include <16F877A.h>
#device adc = 8
#use delay(clock = 20M)
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
#include <lcd.c>
unsigned int8 analog ;

#INT_TIMER0
void TIMER0_isr(void){
   if (analog >= 127 && analog < 142){ // N1
      output_low(PIN_B5);
      output_low(PIN_B6);
      output_toggle(PIN_B7);
   }
   if (analog >= 175 && analog < 191) { // N4
      output_toggle(PIN_B5);
      output_low(PIN_B6);
      output_low(PIN_B7);
   }
   if (analog >= 159 && analog < 175) { // N3
      output_low(PIN_B5);
      output_toggle(PIN_B6);
      output_toggle(PIN_B7);
   }
   if (analog >= 191 && analog < 207) { // N5
      output_toggle(PIN_B5);
      output_low(PIN_B6);
      output_toggle(PIN_B7);
   }
   if (analog >= 143 && analog < 159) { // N2
      output_low(PIN_B5);
      output_toggle(PIN_B6);
      output_low(PIN_B7);
   }
   if (analog >= 207 && analog < 223) { // N6
      output_toggle(PIN_B5);
      output_toggle(PIN_B6);
      output_low(PIN_B7);
   }
   if (analog >= 223 && analog < 239) { // N7
      output_toggle(PIN_B5);
      output_toggle(PIN_B6);
      output_toggle(PIN_B7);
   }
   
}

void main(){
   // Configuração do LCD
   lcd_init();

   // Configuração do ADC
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_DIV_8);
   set_adc_channel(0);
   
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_2); // overflow 51,2 u
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);
   
   while (1){
      analog = read_adc();
      printf(lcd_putc, "\fLeitura: %u", analog);
      delay_ms(1000); 
   }
}

Saída gerada






















2. Faça o circuito e o programa (compilador CCS) que liga um LED 1 e desliga o LED 2 quando um botão (Bot1) estiver apertado e desligar LED1 e liga o LED 2 se o botão (Bot1) estiver solvo. Os LED 3, 4 e 5 devem ficar piscando com frequências de 1.3, 2 e 3.5 vezes n Hz. Onde n é igual a soma do último e penúltimo número da sua matrícula.















RESOLUÇÃO FEITA EM CCS C Compiler :

#include <16F877A.h>
#use delay(clock = 20MHz)

// Configuração do microcontrolador
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
#include <lcd.c>
// Variáveis globais
int flag1 = 0, flag2 = 0;
unsigned int16 cont1 = 0, cont2 = 0, cont3 = 0;

#int_TIMER0
void TIMER0_isr(){
   if(flag1 == 0 && flag2 == 1 && ++cont1 >= 85){
      cont1 = 0; output_toggle(PIN_B5); // 114 Hz
   }
   if(flag1 == 0 && flag2 == 1 && ++cont2 >= 55){
      cont2 = 0; output_toggle(PIN_B6); // 176 HZ
   }
   if(flag1 == 0 && flag2 == 1 && ++cont3 >= 32){
      cont3 = 0; output_toggle(PIN_B7); // 308 Hz
   }
   
}
// Função de tratamento da interrupção do TIMER1
#int_timer1
void timer1InterruptHandler(){
   if (input(PIN_B0) == 1){
      flag1 = 1;
      flag2 = 0;
      output_high(PIN_B3);
      output_low(PIN_B4);
      
   }
   if(input(PIN_B1) == 1){
      flag1 = 0;
      flag2 = 1;
      output_low(PIN_B3);
      output_high(PIN_B4);
   }
   
   // Limpa a flag de interrupção do TIMER1
   clear_interrupt(INT_TIMER1);
}

void main(){
   // Configuração do TIMER1
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
   
   // Configuração das interrupções
   enable_interrupts(INT_TIMER1); // Habilita a interrupção do TIMER1
   enable_interrupts(GLOBAL);    // Habilita todas as interrupções globais
   
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1); // overflow 51,2 us
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_TIMER0);
   
   lcd_init();
   
   while (1){
      printf(lcd_putc,"\f%d : %d",flag1, flag2);
      delay_ms(50);
      
   }
}

Saída gerada






Nenhum comentário: