====== Exercicios ====== O objetivo é escrever um programa que é capaz de realizar tarefas descritas abaixo. ===== Exercicios de aquecimento ===== *Ao pressionar S1 um LED acende, pressionando S2 dois LEDs acendem e S3 três LEDs acendem. ===== Para iniciantes ===== - Isto simula semáforos de carros. - Isto simula semáforos manuais para peões. Enquanto nenhum botão seja pressionado um LED verde está aceso para os carros. Depois de pressionar um botão (S1), o LED verde começará a piscar durante 3 segundos, o que é seguido da iluminação do LED amarelo por 3 segundos e vermelho durante 10 segundos, depois desta sequência o LED verde fica aceso novamente. Quando o LED vermelho está aceso, o display de 7 segmentos indica a contagem decrescente dos segundos até que o LED verde se ligue. - Isto conta quantas vezes o botão é pressionado. O resultado é exibido através do piscar dos LEDs. Após cada pressionamento o número de piscar aumentada de um. Um botão aleatório pode ser seleccionado. Para que o LED pisque uma sub função deve ser utilizada, com parâmetros definidos no número de piscadelas. - Apresentar números em sistema hexadecimal aleatóriamente no display de 7 segmentos. A freqüência é de 1 Hz. - Ao pressionar o botão S1, a velocidade intermitente de todos os três LEDs é diminuida duas vezes. Ao pressionar o botão S3, o piscar torna-se 2 vezes mais rápido, e ao pressiona a tecla S2 a frequência do piscar será re-definido para 1 Hz. É necessário usar interruptor (não funções de atraso por software). - Criar três músicas, que são tocadas quando o botão é pressionado. A alteração da música deve ser instantânea quando outro botão for pressionado. ===== Para avançados ===== - Quando pressionar os botões em sequência S3 - S2 - S1, o LED verde fica aceso. Todas as outras combinações resultam no LED vermelho. Cada vez que algum botão seja premido um LED amarelo irá piscar. - Há um botão para cada LED. O controlador pisca LEDs aleatoriamente e o utilizador tem de repetir a seqüência. A sequência de piscar fica maior - um LED aleatório é adicionado em cada ronda. A sequência é controlada depois de cada utilizador. O intervalo de tempo entre cada entrada é de dois segundos. No caso de uma entrada incorreta todos os LEDs piscam três vezes. (O número de entradas corretas por parte do utilizador pode ser exibido no ecrãn LCD). - Luz em sequência de 6 segmentos de fora circulares sobre o indicador de 7 segmentos com o período de 500 ms. - Faça um programa onde pode mover o símbolo "X" no ecrãn. Use o botão S1 para mover para a esquerda, botão S3 para mover para a direita e S2 para mudar de linha. - Implemente o jogo da cobra no ecrãn LCD. A largura da cobra é de 1 pixel e o comprimento é de 5 pixels. A cobra pode ser programada para virar usando os botões de esquerda ou direita. A cobra deve ser capaz de evitar a colisão com a borda do ecrãn (girando antes). Os pontos de bónus são para a capacidade de apanhar as maças e fazer a cobra crescer. A solução mais simples é desenhar a cobra usando a letra "O". ===== Questões ===== - Qual é a diferença entre as operações "=" e "=="? Dê dois exemplos que ilustrem. - Qual é a diferença entre as operações "|" e "||"? Dê dois exemplos que ilustrem. - Escreva uma expressão utilizando a equação "x = x + 1" doze vezes. - Como é que um loop infinito é escrito em linguagem de programação C? Forneça dois exemplos diferentes. - Que tipo de variável pode ser escolhida em linguagem C para apresentar valores positivos entre 7 e 154? - Que tipo de registo determina a direção de uma porta? Dê um exemplo de como configurar as definições de entrada e saída de portos. - Quais são os métodos para eliminar o salto dos contactos e as falsas ligações causados ​​por cintilação? Dê exemplos de soluções usando hardware e software. - O que é um bit shift? Dê um exemplo prático com uma explicação. - Por que motivo são as resistências pull-up usadas ​​em interruptores? Como é a sua resistência determinada? - Calcule a resistência para a regulação da corrente LED, a tensão é de 5 V, tensão para a frente do LED é de 2,7 V e a corrente é 30 mA. - Quantos pinos usa o indicador de números de 7 segmentos (com segmento de ponto), se estiver conectado diretamente ao controlador? Quantos pinos seria necessário se fosse controlado através do registo de deslocamento 74HC595? - O que determina o brilho do indicador de números de 7 segmentos? Como ele pode ser ajustado se o indicador de número é controladao a) diretamente b) através do registo de deslocamento 74HC595? - Como podem os números no sistema decimal ser convertidos em sistema binário (de texto) e vice-versa? - Como é o LCD monocromático (preto e branco) diferente do LCD de cor? - Como é criado o atraso por software? Em que parâmetros depende a duração do atraso de software? - O que nos faz usar atraso de hardware / temporizador com interrupções? - Calcular o período de interrupção de estouro de 8-bit timer, se a velocidade do relógio é de 16 MHz e freqüência de divisão é 1024. - O que pode ser feito com os temporizadores AVR além de contar o tempo? - Qual é a maior duração das interrupções em milissegundos que pode ser alcançado com o microcontrolador ATxmega128A1U que trabalham na frequência de relógio de 32 MHz? Mostrar a fórmula de cálculo. - No caso de o processador estar muito carregado com uma execução de um programa (por exemplo, que controla diversos motores e os valores de vários sensores de uma só vez), isto tem um efeito sobre a precisão do temporizador? Explique sua resposta.