PSI3441 Documentação¶
Atividade 1 (LEDs)¶
Problema¶
Fazer um programa para piscar os 3 LEDs como em um semáforo utilizando uma máquina de estados.
Perguntas¶
Por que os LEDs são Active Low (acendem quando se coloca 0 na saída)?
Quais funções você usou para acender e apagar os LEDs?
Explique o que é o Device Tree.
Explique as abstrações feitas pelo Sistema Operacional.
Atividade 2 (Controle Interativo de Cor e Intensidade)¶
Problema¶
Fazer um programa para que o LED da placa frdm-kl25z, exiba a cor laranja e seja possível variar a intensidade em tempo real pelo terminal serial (UART).
Ajuste de Cor: Utilize canais de PWM para misturar as cores e obter o tom laranja. Ajuste a frequência do sinal para que a oscilação não seja perceptível ao olho humano.
Interatividade via Terminal: O programa deve solicitar que o usuário digite um valor de 0 a 100 (porcentagem) no console.
Cálculo de Duty Cycle: O código deve calcular o novo duty cycle dos LEDs mantendo a proporção da cor laranja, mas alterando a intensidade total conforme o valor digitado.
Abstração de Hardware: É obrigatório o uso do _Device Tree_ (DTS) e das APIs do Zephyr para acessar os controladores de PWM, evitando o uso de endereços ou pinos fixos (hardcoded) no meio do código principal.
Atividade 3 (blink bare metal)¶
Problema¶
Desenvolva um programa, utilizando acesso direto aos registradores, para fazer o LED verde piscar com período de 2 segundos.
Sequência de execução do programa:
Habilitar clock da porta B.
Configurar o registrador de controle do pino 19 (Pin Control Register).
Configurar o pino 19 como saída.
Acionar a saída do pino 19.
Executar a função de espera (utilizar a função fornecida:
void delay_ms(int n), em quenrepresenta o tempo em milissegundos).Desacionar a saída do pino 19.
Executar novamente a função de espera.
Repetir continuamente os passos 4 a 7.
Atividade 4 (adc bare metal)¶
Problema¶
Escreva um código em C configurando os registradores da frdm-kl25z para realizar as seguintes tarefas:
Efetuar uma aquisição analógica utilizando o conversor A/D (ADC).
2. Acender o LED azul quando a tensão medida estiver próxima de 3,3 V; 2. Acender o LED verde quando a tensão medida estiver próxima de 0 V.
Atividade 5 (Biblioteca para Sensor Ultrassônico)¶
Problema¶
O módulo de ultrassom pode ser utilizado para medir distâncias por meio do envio e da recepção de ondas sonoras. Nesta atividade, você deverá desenvolver uma biblioteca para facilitar a utilização desse módulo em projetos futuros.
Geração do sinal de Trigger com PWM
Crie o sinal de
triggerutilizando um periférico de PWM. O sensor requer um pulso de, no mínimo, 10 μs para iniciar uma medição.Escolha uma frequência e um duty cycle adequados para gerar esse pulso.
Defina também a taxa de atualização das medições, ou seja, quantas vezes por segundo o sensor realizará uma nova medida de distância.
Observe que é possível alterar a fonte de clock do PWM. Considere utilizar uma fonte mais lenta (por exemplo, 8 MHz) para facilitar a geração de períodos maiores entre as medições.
Medição da largura de pulso com Input Capture
Utilizando o recurso de Input Capture, desenvolva um programa capaz de medir a largura de um pulso PWM gerado na etapa anterior.
Conecte a saída do PWM diretamente à entrada configurada para captura.
Valide o funcionamento comparando o valor medido com a largura de pulso configurada.
Medição de distância com o sensor ultrassônico
Após validar o mecanismo de captura:
Conecte o sinal PWM ao pino Trigger do módulo de ultrassom.
Utilize o Input Capture para medir a duração do pulso presente no pino Echo.
A partir do tempo medido, calcule a distância até o objeto utilizando a velocidade do som.
Criação de uma biblioteca
Depois de validar o funcionamento completo do sensor organize o código desenvolvido em uma biblioteca reutilizável.
Atividade 6 (Threads)¶
Problema¶
Nesta atividade, você deverá integrar diferentes periféricos e utilizar múltiplas threads para executar tarefas concorrentes no sistema.
Integre ao projeto os exemplos de leitura do ADC, botão com interrupção e acelerômetro.
Implemente uma _thread _responsável pela leitura do ADC, executando periodicamente a cada 500 ms. Os valores lidos devem ser enviados para a interface serial.
Implemente uma segunda thread responsável pela leitura do acelerômetro, executando periodicamente a cada 1000 ms. Os valores dos eixos X, Y e Z devem ser exibidos na interface serial.
Configure o botão utilizando interrupção, conforme apresentado no tutorial.
- A cada acionamento do botão, alterne entre os seguintes modos de operação:
Modo ADC: exibe somente os valores lidos pelo ADC.
Modo Completo: exibe os valores do ADC e do acelerômetro.
Inicialize as duas threads utilizando a mesma prioridade de execução.
Em seguida, modifique as prioridades das threads, observe o comportamento do sistema e descreva os efeitos observados. Explique como o escalonador utiliza as prioridades para determinar a execução das tarefas.
Atividade 8 (Aquisição de Dados em Tempo Real)¶
Nesta atividade deverá ser feito:
Implementar uma aplicação multitarefa utilizando o Zephyr RTOS.
Realizar aquisição contínua de dados a partir de um periférico da frdm-kl25z.
Transmitir e visualizar dados em tempo real em um computador.
Implementar e avaliar um filtro FIR para processamento digital de sinais.
Medir e analisar o desempenho do sistema sob diferentes cargas de processamento.
Investigar limitações relacionadas à comunicação UART e ao sistema de logging do Zephyr.
Problema¶
Aquisição e Comunicação¶
- Escolha uma das seguintes fontes de dados:
- Conversor Analógico-Digital (ADC).Acelerômetro mma8451q.
- Desenvolva uma aplicação contendo:
uma thread dedicada à aquisição de dados.
uma thread dedicada à comunicação dos dados adquiridos.
Registre um timestamp para cada amostra adquirida.
Desenvolva um script em Python capaz de receber e exibir os dados em tempo real.
Determine a maior taxa de aquisição que o sistema consegue atingir de forma estável.
Calcule a taxa de aquisição efetiva a partir dos timestamps registrados.
Implementação do Filtro FIR¶
Implemente um filtro FIR simples para processamento das amostras adquiridas.
- Execute os testes sem o filtro e registre:
taxa de aquisição.
utilização da comunicação.
comportamento geral do sistema.
Repita os testes com o filtro habilitado.
Compare os resultados obtidos nas duas configurações.
Logging e Comunicação UART¶
Utilize o sistema de logging do Zephyr para monitorar a execução da aplicação.
Avalie o comportamento do sistema em diferentes taxas de aquisição.
- Investigue a ocorrência de:
perda de mensagens.
atrasos na transmissão.
saturação da UART.
Discuta as limitações observadas na comunicação UART e no sistema de logging.
Análise¶
Qual foi a maior taxa de aquisição obtida pelo sistema?
Qual foi a taxa de aquisição efetiva após a inclusão do filtro FIR?
Qual foi o impacto do filtro FIR no desempenho do sistema?
O sistema de logging conseguiu transmitir todas as mensagens geradas?
Em quais condições ocorreu perda de mensagens?
O principal gargalo do sistema foi o processamento dos dados ou a comunicação? Justifique.
Qual configuração apresentou o melhor equilíbrio entre taxa de aquisição, qualidade do sinal e utilização dos recursos do sistema?