EA871 Laboratório de Programação Básica de Sistemas Digitais
FEEC/ Unicamp
Primeiro Semestre de 2024
Turma Q
Turma R
Turma S
Profa. Wu, Shin - Ting
http://www.dca.fee.unicamp.br/cursos/EA871/1s2024/
[Site Oficial] [Objetivo] [Período Letivo e Local] [Ementa] [Ementa Detalhada] [Planejamento] [Calendário de Atividades] [Auxiliares Didáticos] [Critério de Avaliação] [Notas e Frequência] [Manuais] [Folhas Técnicas] [Referências Complementares] [Entrevistas] [Moodle]

Objetivo

A disciplina EA871, de 4 créditos, foi idealizada como complemento à disciplina teórica EA869, Introdução a Sistemas de Computação. Esta disciplina de laboratório tem como objetivo consolidar conceitos básicos associados à organização/arquitetura de microcontroladores através de uma série de atividades de introdução a um ambiente de desenvolvimento integrado de software para sistemas embarcados e programação dos diversos módulos dedicados no microcontroladores da série Kinetis KL25Z4 da NXP (Freescale).


Período Letivo e Local

O acesso ao LE-30 é permitido para os alunos fora dos horários de aula, mediante identificação na entrada do Bloco E. Antes de sair do laboratório, favor desliguem TODOS os equipamentos sobre as bancadas e arrumem a bancada utilizada. Se forem os últimos, fechem as janelas, desliguem o ar condicionado, e apaguem as luzes.

Seguem-se algumas boas práticas para uso compartilhado das bancadas:

Haverá manuntenção periódica das máquinas que será avisada previamente. Arquivos podem ser removidos. Ajude-nos manter as bancadas operantes em 24 horas. Quando identificar algum problema nas bancadas, avise o monitor ou o suporte.


Ementa

Programação em linguagem assembly. Instruções de máquina. Diretivas do montador. Depuradores. Interfaces de entrada/saída. Programação de interface serial. Comunicação entre computadores. Programação de interface paralela. Interrupções.


Ementa Detalhada

São programadas 9 atividades práticas com a finalidade de praticar os conceitos relacionados com a arquitetura, linguagem de programação de máquina, linguagem de programação de médio nível (C), memória, periféricos de entrada e saída, comunicações paralelas e seriais, mecanismos de interrupção e temporizadores. Os alunos devem ser capacitados a desenvolver um projeto de software de baixa complexidade reusando o hardware disponível.


Dinâmica do Curso

A técnica adotada nesta disciplina é o paradigma de desenvolvimento modular. Desenvolveremos 9 módulos (led RGB, botoeiras, LCD, relógio, potenciômetro, comunicação serial, PWM/Input Capture/Output Compare) que poderão ser reusados no projeto final. As primeiras 6 atividades são individuais e as restantes 3 atividades em grupo. Todas devem ser entregues, de acordo com a orientação dada em cada roteiro, via Moodle.

Antes de cada aula, o roteiro do experimento da aula está disponível no Moodle. Os roteiros visam proporcionar uma revisão dos conceitos e orientá-los na consulta dos manuais e folhas de dados. Leia o roteiro primeiro para compreender o conteúdo do experimento. Em seguida, faça uma segunda leitura procurando responder às questões do estudo dirigido. Finalmente, leia o roteiro das atividades e procure resolver os exercícios relacionados à análise dos projetos desenvolvidos. Anote todas as suas dúvidas durante esse processo.

As aulas serão compostas por testes preparatórios, breves apresentações dos tópicos e tarefas propostas nos roteiros. Espera-se que os alunos concluam as implementações dos esqueletos básicos das tarefas no final das aulas.

O desempenho dos alunos na execução de cada roteiro é avaliado considerando as atividades preparatórias, que incluem a compreensão do roteiro, as anotações feitas e as dúvidas levantadas, além das implementações realizadas durante as aulas. Uma avaliação sobre a leitura do roteiro, disponível no Moodle, é aberta nos primeiros 30 minutos de cada aula.

Calendário de Atividades

Tópico Exp. Quartas S(19:00 - 21:00h) Sextas Q(8:00 - 10:00h)/R(10:00 - 12:00h) Roteiro Materiais de Consulta
De Python para C para programar placa FRDM-KL25 com shield EA871; IDE CodeWarrior 1 28/02 01/03 roteiro 1
pertence.c
pertence.py
ocor_palavras.py
ocor_palavras.c
bit_op.py
bit_op.c
fatorial.c
Referência Comparativa Rápida entre Python e C para Sistemas com Recursos Limitados
Projeto MAC Multimídia - Exercícios
Quick Reference Guide for C language
Interactive C Tutorial
C Tutorial: Learn C Programming
Ambiente de Desenvolvimento - Software
Introdução ao ambiente de desenvolvimento de firmware (CodeWarrior); Introdução ao Depurador e a Doxygen 2 06/03 08/03 roteiro 2
rot2_aula.zip
Ambiente de Desenvolvimento - Hardware
Freescale FRDM-KL25Z User's Manual
Nova versão do esquemático do shield FEEC
ARM Developer Suite CodeWarrior IDE Guide
Tabela de teclas de atalho no CodeWarrior IDE
KL25 Sub-Family Reference Manual: Seções 4.2 (p. 105), 11.5 (p. 177), 12.2 (p. 192) e 41.2 (p. 773)
Kinetis L Peripheral Module Quick Reference: Cap. 1 (p. 11)
Registers and Bit Masks
How to use C's volatile Keyword
Pointers and addresses
Global and Local Variables in Embedded C Programs
MCU on Eclipse
Documentação
Linguagem de Montagem (Assembly ARM/Thumb/Thumb 2); Apresentação do Analisador Lógico Saleae 3 13/03 15/03 roteiro 3
rot3_aula.zip
Linguagem de Montagem
CodeWarrior - Kinetis Assembler Reference Manual
ARMv6-M Architecture Reference Manual: Seção A2.2 (p. 31), A2.3 (p. 35), A5.2 (p. 84), A6.2 (p. 98), A6.7 (p. 105)
Cortex-M0+ Technical Reference Manual: Seção 3.3 (p. 26)
Thumb 16-bit Instruction Set Quick Reference Card
KL25 Sub-Family Reference Manual: Tabela 4-1 (p. 105), Capítulo 21 (p. 331 e p. 335)
ARM GCC Inline Assembler Cookbook
How to Use Inline Assembly Language in C Code
Analisador Lógico Saleae
Módulos SIM, PORT, GPIO, NVIC: LED RGB e Push Buttons 4 20/03 22/03 roteiro 4
rot4_aula.zip
KL25 Sub-Family Reference Manual: Tabelas 3-7 (p. 52), 5-2 (p. 121), Seções 5.4 (p. 116), 5.7 (p. 121), 10.3.1 (p. 161), 11.5 (p. 177), 11.5.1 (p. 183), 11.5.4 (p. 186), 11.6.3 (p. 188), 12.2 (p. 191), 12.2.2 (p. 210), 12.2.9 (p. 206), 24.3 (p. 371), 41.2 (p. 773), 41.2.2, 41.2.3 (p. 776), 41.2.6 (p. 778)
ARMv6-M Architecture Reference Manual: Seção B3.4 (p.281)
Kinetis L Peripheral Module Quick Reference: exemplos de aplicação dos módulos
What is polling in embedded systems?
Switch Bounce and How to Deal with It
A practical guide to ARM Cortex-M exception handling
How to write ISR Handlers?
What is embedded testing in software testing?
Linguagens de Modelagem
Temporizador Pomadoro: Módulos GPIO (Interface paralela), MCG, SysTick: LCD; Introdução à programação modular e legível 5 27/03 05/04 roteiro 5
rot5_aula.zip
An introduction to Parallel Port
LCD 16x2
LCD Tutorial for Interfacing with Microcontrollers
LCD Custom Character Generator
ARMv6-M Architecture Reference Manual: Seção B3.3 (p.275)
Switches vs. if else
Simplifique: use macros (ou não)
Enumerations Q & A
A pox on globals
Programação Modular em C
Cronômetro (MCG, LPO, PIT, RTC) 6 03/04 12/04 roteiro 6
rot6_aula.zip
Microcontroller Timers, Their Types and Applications
KL25 Sub-Family Reference Manual: Seções 3.3.1.3 (p. 51), 3.8.2 (p. 87), 3.8.3 (p. 88), 3.8.4 (p. 90), 5.7 (p. 121), Caps. 32 (p. 573), 34 (p. 597)
Kinetis L Peripheral Module Quick Reference: Cap. 4 (p. 33)
ARMv6-M Architecture Reference Manual: Seção B3.3 (p.275)
The importance of real-time clocks in IoT applications
Convert HH:MM:SS to seconds
Calculadora (UART: Terminal) 7 10/04 19/04 roteiro 7
rot7_example1.zip rot7_example2.zip rot7_aula.zip
Serial Communication
KL25 Sub-Family Reference Manual: Seções 3.9.4 (p. 98), 5.7.7 (p. 125), 24.4.1.1 (p. 385), Caps. 39 (p. 721) e 40 (p. 747)
Kinetis L Peripheral Module Quick Reference: Seção 4.1.3 (p. 35) e Cap. 8 (p. 77)
ARMv6-M Architecture Reference Manual: Seção B1.4 (p.211)
Implementing Circular/Ring Buffer in Embedded C
Serial Terminal Basics
8 17/04 26/04
Medidor de Tempos de Reações (TPM, DMA e DMAMUX: Buzzer) 9 24/04 03/05 roteiro 8
rot8_example1.zip rot8_example2.zip rot8_aula_PWM.zip rot8_aula_ICOC.zip
KL25 Sub-Family Reference Manual: Seções 3.3.2.3 (p. 52), 3.4.8.1 (p. 64), 3.8.1 (p. 84), 10.3.1 (p. 162), 22.4 (p. 340), 23.2 (p. 351), 23.4.2.2 (p. 362), 31.1 (p. 547), 31.4.1 (p. 561), 31.4.2 (p. 562), 31.4.3 (p. 562), 31.4.6 (p. 567), 31.4.7 (p. 568), 31.4.8 (p. 570)
Kinetis L Peripheral Module Quick Reference: Cap. 7 (p. 67) e Cap. 12 (p. 123)
Direct Memory Access (DMA)
68HC08 Timer Interface Module Tutorial
Pulse Width Modulation (Eletronics)
Pulse Width Modulation (Sparkfun)
Pulse Width Modulation usando um oscilador 555
Introduction to timer-based measurement
IEEE754 Converter
10 08/05 10/05
Controlador de Velocidade de Cooler (ADC e LPTMR) 11 15/05 17/05 roteiro 9
rot9_example1.zip rot9_cooler.zip rot9_aula.zip
Analog to Digital Conversion, Data Acquisiton and Control
O que é o Conversor ADC (conversor Analógico-Digital)?
KL25 Sub-Family Reference Manual: Seções 3.2.1 (p. 45), 3.2.2 (p. 48), 3.7.1.3 (p. 9), 3.8.2 (p. 87), 5.7.4 (p. 124), Cap. 28 (p. 457), Cap. 33 (p. 587)
Kinetis L Peripheral Module Quick Reference: Cap. 11 (p. 115)
Understanding SAR ADCs: Their Architecture and Comparison with Other ADCs
ADC Input Noise: The Good, The Bad, and The Ugly. Is No Noise Good Noise?
12 22/05 24/05
Integração
Projeto final
13 29/05 31/05 Propostas pelos grupos de até 2 alunos.
Periféricos disponíveis para empréstimo: Kit Arduino 37-em-1;
Periféricos adicionais;
Protocolo de comunicaçao que alguns sensores usam: SPI e I2C (displayOLED_I2C.zip)
14 05/06 07/06
15 12/06 14/06
Prazo de apresentação oral do projeto - 19/06 21/06 -

Auxiliar Didático

Neste semestre, não teremos o suporte didático do PAD. Vamos desenvolver juntos uma dinâmica para que isso não comprometa o aprendizado. Sugiro que quaisquer dúvidas essenciais para a conclusão das tarefas sejam levantadas antes de cada aula do roteiro e esclarecidas durante a mesma, de modo que ao final da aula vocês já tenham uma base sólida das soluções das tarefas. Além disso, há um grupo no WhatsApp para esclarecer dúvidas, onde todos são convidados a contribuir com respostas. Esta é uma maneira não apenas de auxiliar seus colegas, mas também de consolidar os conhecimentos adquiridos. Além disso, a frequência de contribuições pertinentes às tarefas dos roteiros no grupo do WhatsApp será considerada para a avaliação da participação.

Critério de Avaliação

M = 0.2P + 0.5R + 0.3I ,
onde P é a média do desemepenho nas etapas preparatórias dos experimentos, R é a média das notas dos 9 relatórios (1 a 9) dos 6 experimentos realizados individualmente (1 a 6) e em grupo de até 2 (do roteiro 7 em diante, 2 relatórios por roteiro), e I é o projeto final de integração dos módulos. Os estudos dirigidos devem ser respondidos no Moodle e os relatórios devem ser postados também no Moodle dentro dos prazos programados. Para o projeto final de integração, além do relatório, será agendado um horário para apresentação individual do projeto que entrará no cômputo da nota I.

É imprescindível a presença nos horários da aula e a entrega dos relatórios no prazo. Relatórios entregues fora do prazo podem comprometer a realização dos experimentos que se seguem.

Serão aprovados os alunos que satisfizerem as duas condições:

A média final, Mfinal, destes alunos é igual a M.

Exame Final

Não haverá exame final.

Notas e Frequência


Manuais


Folhas Técnicas


Referências Complementares


Entrevistas


Sugestões: ting at dca dot fee dot unicamp dot br

Última modificação: Ter Fev 6 23:41:25 -03 2024

"Esta página, assim como todas as páginas sob esta mesma árvore, não é uma publicação oficial da UNICAMP, seu conteúdo não foi examinado e/ou editado por esta instituição. A responsabilidade por seu conteúdo é exclusivamente do autor."

"This page, as well as all pages under this same tree, is not an official publication from UNICAMP; its content has not been verified and/or edited by this institution. The author is solely responsible by its contents."