laboratórios do handson de mbedos - ftf connects sp 2016
TRANSCRIPT
Hands-On Workshop: ARM®-mbedon LPCXpressoLab 1 - LED, PWM e JoyPad
André CurvelloFelipe Neves
Lab 1 - Preparando o Ambiente
»Abra sua workspace em:
»https://developer.mbed.org/compiler/
»Ao abrir o workspace clique em Import;
»Na caixa de pesquisa busque por:
»ftf_mbed_lab1
»Importe o projeto, compile, grave e rode o código.
2
Lab 1 - Considerações
»Exploraremos algumas API para acesso ao hardware da placa;
»Observe o display, um menu será a apresentado;
»Navegue com as teclas cima e baixo utilizando o JoyPad;
»Selecione o LED desejado pressionando o botão central do JoyPad;
»Com o potenciômetro, selecione a intensidade de cada LED
»Observe as diversas cores formadas;
»Monitore os valores de cor para cada canal.
3
Lab 1 - Exercícios
»Adicione uma opção no menu que possua valores de cor pré-definidos.
»Utilize o botão central do JoyPad para entrar no menu e as teclas cima e
baixo para seleção.
»Quando encontrar a cor desejada a mesma só será inserida nos LEDs com o
pressionamento do botão central, saindo do menu.
»Adicione a opção de piscar o LED com a cor corrente, o tempo de pisca e o
número de repetições fica a cargo do usuário;»**DICA: utilize a classe Timeout para anexar um callback ao término da execução do pisca.
»Adicione um fator de escala de modo a controlar a intensidade da cor
corrente do LED.
4
Lab 1 - Resultado 5
Hands-On Workshop: ARM®-mbedon LPCXpressoLab 2 - Prompt de comandos utilizando a UART
André CurvelloFelipe Neves
Lab 2 - Preparando o Ambiente
»Abra sua workspace em:
»https://developer.mbed.org/compiler/
»Ao abrir o workspace clique em Import
»Na caixa de pesquisa busque por:
»ftf_mbed_lab2
»Importe o projeto, compile, grave e rode o código.
7
Lab 2 – Considerações – O Prompt e o Controle»Ferramente muito desejada durante o desenvolvimento Um prompt de
commandos!
»Alguns comandos disponíveis controlam alguns atuadores ou dão informações
sobre a placa.
»Não esqueça de conectar a placa ao TeraTerm Setup: 8-N-1 115200bps.
»Para verificar a lista de comandos do prompt, pressione Enter.
»Digite os comandos conforme as instruções do terminal.
»Observe o que ocorre na placa.
»Digite comandos incorretos e verifique que podem ser corrigidos usandobackspace.
8
Lab 2 - Exercícios
»A função shell_parser() contém um trecho localizado na linha 204
responsável por identificar o comando digitado.
»Sabendo disso, adicione um comando nessa lista para controlar um atuador
de sua preferência na placa!»DICA: importe a API de PWM do lab anterior e crie um comando para gerar cores nos LEDS.
»Adicione um comando para ler os valores do acelerômetro da placa.
»Lembre – se de utilizar a API I2C() para se comunicar com ele:-Slave address: 0x68 << 1
-Valor de configuração em 0x40: 0x28;
-Valor de sw reset em 0x7E: 0xB6 **DICA: aguarde um tempo após executar esse comando
-Registrador base dos dados: 0x12 **DICA: [0x12] ->X_msb, [0x13] -> X_lsb, [0x14]->Y_msb,…
**DICA os pinos SDA e SCL são respectivamente: P2_3, P2_4
9
Lab 2 - Resultado 10
Hands-On Workshop: ARM®-mbedon LPCXpressoLab 3 - Mbed OS, controlando Threads
André CurvelloFelipe Neves
Lab 3 - Preparando o Ambiente
Abra sua workspace em:
»https://developer.mbed.org/compiler/
Ao abrir o workspace clique em Import
Na caixa de pesquisa busque por:
»ftf_mbed_lab3
»Importe o projeto, compile, grave e rode o código.
12
Lab 3 – Considerações – Tarefas com Threads
»Conectar a placa ao Tera Term configurado em 8-N-1 115200bps
»Verificar a lista de comandos pressione Enter;
»Nesse lab, exploraremos o tipo de objeto mais primitivo de todo RTOS, as threads;
»Através do prompt de comandos é possível suspender ou executar uma determinada
thread.
»Para isso utilize o comando thread e acompanhe a execução no LCD;
»Threading do Mbed OS possui duas políticas: Preemptiva e Cooperativa (com round-
robin);
-Preemptivo: execute a thread app1, em seguida execute a thread app2, observer o LCD
em seguida suspenda app2. Observe novamente o LCD;
-Cooperativo: execute a thread app1 e em seguida a thread app3, observe no LCD, o que
mudou?
13
Lab 3 - Exercícios
»A função shell_thread_execute_command() localizada na linha 97 é responsável por
receber as opções do comando ”thread”.
»Analise e adicione uma opção que permita mudar a prioridade das threads existentes
sem ter que recompilar o código;
»Modifique o código de cada thread de modo que cada thread controle um LED da
placa, em seguida adicione na função shell_parser() um comando para controlar a taxa
de pisca de cada LED;
»Reescreva as threads de modo que todas tenham a mesma prioridade, e faça com que
cada thread consiga executar na seguinte ordem: app1,app2, app3, app1,app2,app3…-DICA: verifique o método yield() dentro da classe Thread;
-Registre a execução de cada thread no prompt de comando.
14
Lab 3 - Resultado 15
Hands-On Workshop: ARM®-mbedon LPCXpressoLab 4 - Mbed OS, sincronizando com semáforos
André CurvelloFelipe Neves
Lab 4 - Preparando o Ambiente
»Abra sua workspace em:
»https://developer.mbed.org/compiler/
»Ao abrir o workspace clique em Import;
»Na caixa de pesquisa busque por:
»ftf_mbed_lab4.
»Importe o projeto, compile, grave e rode o código.
17
Lab 4 - Considerações»Conectar a placa ao Tera Term configurado em 8-N-1 115200bps Inicialmente… SEM terminal;
»Os semáforos são utilizados para sincronizar a execução de duas threads de baixa prioridade com
eventos ocorridos em uma thread de alta prioridade;
»O acelerômetro funciona como uma thread periódica (não pode sofrer atrasos), então sua prioridade é a
mais alta do Sistema.
»As threads de LCD e evento por sua vez precisam ser executadas uma vez a cada nova leitura tomada
pelo acelerômetro garantindo o processamento dos eventos em tempo real;
»Observe no código a utilização dos semáforos acc_sema e align_event_sema;
»Movimente a placa e observe o LCD, alinhe a placa em algum eixo cartesiano primitivo, observe os
LEDS;
-Analise: Cada thread executa uma vez por ciclo?
-Se não houvesse o semáforo aconteceria a mesma coisa?
18
Lab 4 - Exercícios
»O shell não foi utilizado nesse laboratório, porém ele possui o inconveniente de
rodar de forma assíncrona (a cada 50ms) exigindo que sua thread possua
prioridade alta e que execute muitas vezes sem necessidade (sem caractere
novo no buffer).
»Sabendo disso, modifique o código da shell_task para que ela somente
execute quando um novo caractere chegar pela serial.-DICA: Veja o método attach na classe Serial.
-DICA: Utilize um semáforo para aguardar na task, e o mesmo para sinalizar na callback chamada pelo
método attach.
»Adicione o comando ”thread” do Lab 3 para suspender e resumir as tarefas,
utilize o semáforo para controlar o sinal de execução e suspensão.
19
Lab 4 - Resultado 20
Hands-On Workshop: ARM®-mbedon LPCXpressoLab 5 - Mbed OS, mensagens entre threads com Mail Queue
André CurvelloFelipe Neves
Lab 5 - Preparando o Ambiente
»Abra sua workspace em:
»https://developer.mbed.org/compiler/
»Ao abrir o workspace clique em Import;
»Na caixa de pesquisa busque por:
»ftf_mbed_lab5
»Importe o projeto, compile, grave e rode o código.
22
Lab 5 - Considerações
»Não esqueça de conectar a placa ao Tera Term configurado em 8-N-1 115200bps;
»Pressione Enter para ver a lista de comandos!
»Lab muito parecido com o Lab 2 e combinado com o Lab 3, os comandos controlam as
threads, e a thread do prompt consegue enviar mensagens dizendo o que cada thread
deve fazer;
»Observe que o sistema de Mail Queue do mbed OS funciona por referência.
»O usuário é responsável por alocar a memória que será anexada a Mail para transmitir a
mensagem;
»Observe que com isso podemos criar comandos mais complexos (Ex. leds).
23
Lab 5 - Exercícios
»Utilizando a Mail Queue, adicione uma thread para comunicação com o
acelerômetro.
»Com isso crie um descritor de comando I2C e opere os registradores do
acelerômetro pelo prompt de comandos (não esqueça de adicionar um
comando função shell_parser()), dados:-Slave address: 0x68 << 1
-Valor de configuração em 0x40: 0x28;
-Valor de sw reset em 0x7E: 0xB6 **DICA: aguarde um tempo após executar esse comando
-Registrador base dos dados: 0x12 **DICA: [0x12] ->X_msb, [0x13] -> X_lsb, [0x14]->Y_msb,…
-DICA os pinos SDA e SCL são respectivamente: P2_3, P2_4
24
Lab 5 - Resultado 25
Dúvidas?
É só chamar ;-)
Links úteis logo adiante!
26Obrigado!
Links Úteis - 1
-Placa de Desenvolvimento LPCXpresso4337: https://www.embarcados.com.br/lpcxpresso4337/-LPCXpresso4337 no mbed: https://www.embarcados.com.br/lpcxpresso4337-no-mbed/-Usando o display gráfico na LPCXpress4337 com mbed:https://www.embarcados.com.br/display-grafico-na-lpcxpresso4337-no-mbed/-Usando Leds e Joystick no mbed: https://www.embarcados.com.br/usando-os-leds-e-joystick-na-lpcxpresso4337-no-mbed/
27
Links Úteis - 2
-Shield OM13082 para placas LPCXpresso:https://www.embarcados.com.br/shield-para-as-placas-lpcxpresso/
-mbed OS: Primeiros passos: https://www.embarcados.com.br/mbed-os/
-Como utilizar as Threads no mbed OS:https://www.embarcados.com.br/threads-no-mbed-os/
28
Links Úteis - 3
-Semáforos no mbed OS: https://www.embarcados.com.br/semaforos-no-mbed-os-sincronizacao/
-Semáforos para Compartilhar recursos no mbed OS:https://www.embarcados.com.br/semaforos-mbed-os-recurso-compartilhado/
-Entrada analógica e comunicação Serial com a LPCXpresso4337:https://www.embarcados.com.br/entrada-analogica-e-comunicacao-serial-na-lpcxpresso4337-no-mbed/
29
Agradecimentos
Agradecimentos