Skip to content
SPONSORS

Lab 2 - ISR - Prática 70% da nota do lab

Neste laboratório, aplicaremos os conceitos de Interrupção de Hardware/GPIO (IRQ). Como desafio, vamos desenvolver um telégrafo digital!

Material

Para isso, você vai precisar de:

Lista de MateriaisValor
2x Botões de pressãoR$ 0,20
1x BuzzerR$ 2,70

O buzzer é um dispositivo piezoelétrico capaz de vibrar quando acionado corretamente (leia mais em Consulta/Buzzer). Com ele, seremos capazes de gerar o tom necessário para simular o telégrafo e reproduzir um código Morse:

Hello World

Note que existem dois tipos de sinal: curto e longo. O desafio deste laboratório será gerar automaticamente esses dois tons.

Requisitos

Seu projeto deve possuir dois botões (btn1 e btn2) e um buzzer. Cada botão deve reproduzir um tom diferente (indicamos freq1 e freq2). O código deve fazer uso de IRQ para a leitura dos botões. O btn1 deve reproduzir freq1 por um determinado tempo, e o btn2 deve reproduzir freq2 por um tempo três vezes maior que o do outro botão. A ideia é que não precisemos contar o tempo na nossa cabeça (curto/longo); o sistema faz isso por nós!

Parâmetrovalor
freq11000 hz
time1100 ms
freq26000 hz
time2300 ms

Resultado esperado:

Função tone

Você deve implementar uma função com o seguinte protótipo: tone(int freq, int periodo) que deve realizar o acionamento do buzzer na frequencia e no tempo determinado.

Medindo (item novo 2026-2)

Após implementar a função, utilize um osciloscópio do laboratório para verificar se o sinal gerado está de acordo com os parâmetros informados.

A validação deve incluir:

  • medição da frequência do sinal;
  • medição do período da onda;
  • verificação do tempo total de acionamento do buzzer;
  • uma imagem ou captura de tela do osciloscópio, mostrando o sinal medido;
  • uma breve explicação comparando os valores esperados com os valores obtidos experimentalmente.

Considere que pequenas diferenças podem ocorrer devido à resolução dos temporizadores, ao clock do microcontrolador e ao próprio processo de medição.

Dicas

A seguir, algumas dicas de como fazer. Você pode ou não seguir:

  1. Comece pelos botões e suas IRQs
  2. Reproduza um som no buzzer
  3. Crie uma função que recebe uma frequência, tempo e um pino e reproduz um tom.
  4. Implemente a lógica

TIP

Não se esqueça de verificar o code quality! Agora ele vai começar a apitar na cabeça de vocês!

Desafios extras

Gostou e quer fazer mais? Que tal:

  1. Olhando para o futuro... Dê uma olhada no RP2040/Timer e tente usar o periférico do timer para contar tempo!
  2. Entre cada tom deve haver um silêncio. Se o usuário pressionar muito rápido cada botão, insira o silêncio automaticamente.
  3. Adicione dois buzzers e gere um tom composto (cada som é composto por duas notas)
  4. Receba um texto via UART, converta para código morse e transmita!
    • Pode usar comandos básicos de c e leitura de terminal!