Ir ao conteúdo
  • Cadastre-se

PIC microcontrolador questão não estou conseguindo resolver


Posts recomendados

questão.docx AJUDA

 

Analise o programa e a figura com o diagrama esquemático abaixo. O programa é basicamente um pisca-pisca, acionado por botões (B1 a B4). Cada saída (P1 a P4) tem uma frequência quando o botão correspondente é acionado. O outro conjunto de saídas (L1 a L8) é acionada pelo potenciômetro, que está conectado na entrada analógica AN0.

Arquivo: Questao.h

============================================================================

#include

#device ADC=8

#use delay(crystal=4MHz)

#use FIXED_IO( B_outputs=PIN_B7,PIN_B6,PIN_B5,PIN_B4 )

#use FIXED_IO( C_outputs=PIN_C7,PIN_C6,PIN_C5,PIN_C4,PIN_C3,PIN_C2,PIN_C1,PIN_C0 )

#define EA1   PIN_A0

#define B1   PIN_B0

#define B2   PIN_B1

#define B3   PIN_B2

#define B4   PIN_B3

#define P1   PIN_B4

#define P2   PIN_B5

#define P3   PIN_B6

#define P4   PIN_B7

#define L1   PIN_C0

#define L2   PIN_C1

#define L3   PIN_C2

#define L4   PIN_C3

#define L5   PIN_C4

#define L6   PIN_C5

#define L7   PIN_C6

#define L8   PIN_C7

============================================================================

 

Arquivo: Questao.c

============================================================================

#include

short pisca_1, pisca_2, pisca_3, pisca_4;

int   ciclo_1, ciclo_2, ciclo_3, ciclo_4;

short le_adc;

long  aux_valor, valor_adc, saida;

#define  valor_1  25

#define  valor_2  75

#define  valor_3  125

#define  valor_4  225

#define  ajuste   131

 

#INT_RTCC

void  RTCC_isr(void)

{

   set_timer0(get_timer0() + ajuste);

   if (pisca_1)

   {

      ciclo_1--;

      if (ciclo_1 == 0)

      {

         output_toggle(P1);

         ciclo_1 = valor_1;

      }

   }

   if (pisca_2)

   {

      ciclo_2--;

      if (ciclo_2 == 0)

      {

         output_toggle(P2);

         ciclo_2 = valor_2;

      }

   }

   if (pisca_3)

   {

      ciclo_3--;

      if (ciclo_3 == 0)

      {

         output_toggle(P3);

         ciclo_3 = valor_3;

      }

   }

   if (pisca_4)

   {

      ciclo_4--;

      if (ciclo_4 == 0)

      {

         output_toggle(P4);

         ciclo_4 = valor_4;

      }

   }

   le_adc = 1;

}

 

void main()

{

   port_B_pullups(0xFF);

   setup_adc_ports(AN0);

   setup_adc(ADC_CLOCK_INTERNAL);

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8|RTCC_8_bit);

   output_low(P1);

   output_low(P2);  

   output_low(P3);  

   output_low(P4);  

   output_c(0);

   ciclo_1 = valor_1;

   ciclo_2 = valor_2;

   ciclo_3 = valor_3;

   ciclo_4 = valor_4;

   enable_interrupts(INT_RTCC);

   enable_interrupts(GLOBAL);

   while(TRUE)

   {

      if (input(B1) == 0)

      {

         pisca_1 = 1;

      }

      else

      {

         pisca_1 = 0;

      }

      if (input(B2) == 0)

      {

         pisca_2 = 1;

      }

      else

      {

         pisca_2 = 0;

      }

      if (input(B3) == 0)

      {

         pisca_3 = 1;

      }

      else

      {

         pisca_3 = 0;

      }

      if (input(B4) == 0)

      {

         pisca_4 = 1;

      }

      else

      {

         pisca_4 = 0;

      }

      if (le_adc)

      {

         le_adc = 0;

         valor_adc = read_adc() / 29;

         aux_valor = valor_adc;

         saida = 1;      

         while (aux_valor > 0)

         {

            saida = saida * 2;

            aux_valor--;

         }

         if (valor_adc > 0)

         {

            saida = saida - 1;    

         }

         else

         {

            saida = 0;

         }

         output_c(saida);

      }

   }

}

============================================================================

Pede-se:

a) A frequência de acionamento dos LED P1 e P2.

B) O intervalo de interrupção do TIMER0.

c) Indicar os LEDS que estarão acesos se o potenciômetro estiver fornecendo 3,5 V na entrada analógica, cuja faixa vai de 0 a 5 V.

d) O menor degrau de tensão detectado pelo conversor analógico do PIC.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Eu não deveria mas como não começou com galera (aliás só deu ctrc-ctrl-v né seu sem noção!), veja isso:

 

Azidéia ... Mande rodar na simulação com osciloscópio e copie as respostas dele.  Use também um potenciômetro.

 

Vou falar com seu professor te tirar 50% da nota.

Link para o comentário
Compartilhar em outros sites

Obrigado pela dica Isadora, mas meu professor não aceita só a resposta. faço faculdade a distância estou com dificuldade nesse exercício. você pode me ajudar me mostrando alguma formula sei la.

 
Em 11/04/2018 às 15:58, Isadora Ferraz disse:

Eu não deveria mas como não começou com galera (aliás só deu ctrc-ctrl-v né seu sem noção!), veja isso:

 

Azidéia ... Mande rodar na simulação com osciloscópio e copie as respostas dele.  Use também um potenciômetro.

 

Vou falar com seu professor te tirar 50% da nota.

Valeu pela ajudamas meu professor não aceita só a resposta. Se puder me ajudar um pouco mais me passando as formulas e mostrando o passo a passo eu agradeço

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

A essência tá aqui...

2 horas atrás, Smith Smith disse:

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8|RTCC_8_bit);

esse é 1 dos problemas (e no seu caso solução) do ccs. Problema: quer mastigar tanto que engessa o cérebro do utilizador. Solução: vai ter que dar uma olhadela no help do compilador e verificar a função de cada argumento, pra qual registro ele vai, o que vai ocorrer na contagem e etc. É facin. É isso que seu professor (e eu) quer que você faça. Dica: olhe/avalie o datasheet do ci na parte dos registros do timer. Compare com o resultado da simulação. Neste caso só vou pedir pra ele lhe tirar só 20% da nota ok? Responda aqui primeiro e se estiver certo, deixo ele decidir se te dá 100%.

  • Curtir 1
  • Haha 1
Link para o comentário
Compartilhar em outros sites

5 minutos atrás, Isadora Ferraz disse:

A essência tá aqui...

esse é 1 dos problemas (e no seu caso solução) do ccs. Problema: quer mastigar tanto que engessa o cérebro do utilizador. Solução: vai ter que dar uma olhadela no help do compilador e verificar a função de cada argumento, pra qual registro ele vai, o que vai ocorrer na contagem e etc. É facin. É isso que seu professor (e eu) quer que você faça. Dica: olhe/avalie o datasheet do ci na parte dos registros do timer. Compare com o resultado da simulação. Neste caso só vou pedir pra ele lhe tirar só 20% da nota ok? Responda aqui primeiro e se estiver certo, deixo ele decidir se te dá 100%.

Obrigado mestre dos magos!!!

  • Haha 2
Link para o comentário
Compartilhar em outros sites

22 horas atrás, Smith Smith disse:

Obrigado mestre dos magos!!!

 

22 horas atrás, Isadora Ferraz disse:

A essência tá aqui...

esse é 1 dos problemas (e no seu caso solução) do ccs. Problema: quer mastigar tanto que engessa o cérebro do utilizador. Solução: vai ter que dar uma olhadela no help do compilador e verificar a função de cada argumento, pra qual registro ele vai, o que vai ocorrer na contagem e etc. É facin. É isso que seu professor (e eu) quer que você faça. Dica: olhe/avalie o datasheet do ci na parte dos registros do timer. Compare com o resultado da simulação. Neste caso só vou pedir pra ele lhe tirar só 20% da nota ok? Responda aqui primeiro e se estiver certo, deixo ele decidir se te dá 100%.

AGORA VALENDO 50 REAIS..COM A RESOLUCÃO

  • Triste 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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