GithubHelp home page GithubHelp logo

joaozanlorensi / microcontrollers Goto Github PK

View Code? Open in Web Editor NEW
0.0 0.0 0.0 3.48 MB

Repository of projects from the Microcontrollers class at UTFPR (Electronic Engineering)

Assembly 11.00% Shell 0.01% C 88.22% HTML 0.05% CSS 0.03% JavaScript 0.53% Go 0.16%

microcontrollers's People

Contributors

fsmiamoto avatar joaozanlorensi avatar

Watchers

 avatar  avatar  avatar

microcontrollers's Issues

Final Project: Niwa - Smart Garden

Componentes - Geral


  • Definir lojas para comprar componentes
  • Definir funções para permitir a comunicação de cada componente com a Tiva (inicialização dos GPIO)

Para o sensor de temperatura:


  • Habilitar a comunicação 1-wire
  • Definir funções para a leitura
  • Definir funções para conversão (V -> ºC)

Para o sensor de umidade:


  • Definir funções de leitura do sensor de umidade
  • Definir funções para conversão (V -> % umidade)

Para a bomba


  • Definir funções de acionamento

Para a comunicação com o computador


  • Implementar comunicação UART
  • Implementar funções que permitam o armazenamento dos dados lidos

Para o software


  • Comunicação com um banco de dados
  • Geração de visualizações (gráficos)
  • Interface simples para modificar parâmetros e realizar acionamentos

Parâmetros do código

  • Definir threshold de umidade

Estrutura


  • Medir os componentes
  • Definir organização do hardware
  • Fazer desenhos no Fusion/AutoCAD
  • Impressão 3D
  • Definir tamanho ideal do tanque

Lab 4

Objetivo principal: controlar a velocidade de um motor DC por um PWM com tipos de entradas diferentes.

Funcionamento do programa:

  • Ao inicializar a placa ou “resetar” o motor deve estar parado (velocidade = 0) e o LCD deve indicar a seguinte mensagem “MOTOR PARADO”;

  • O programa deve requisitar se usuário deseja controlar a velocidade do motor pelo teclado, pelo potenciômetro ou pelo terminal;

  • Se o usuário optar pelo teclado ou pelo potenciômetro, o LCD deve pedir o sentido de rotação;

  • Se o usuário optar pelo terminal, o sentido de rotação deverá ser solicitado nele mesmo;

  • Opção "Teclado":

  • Botão 0 - Executa o comando de parar o motor, independente da velocidade que este se encontra;
  • Botão 1 - Executa o comando para deixar o motor girando a 50% de sua velocidade máxima em regime permanente;
  • Botão 2 - Executa o comando para deixar o motor girando a 60% de sua velocidade máxima em regime permanente;
  • Botão 3 - Executa o comando para deixar o motor girando a 70% de sua velocidade máxima em regime permanente;
  • Botão 4 - Executa o comando para deixar o motor girando a 80% de sua velocidade máxima em regime permanente;
  • Botão 5 - Executa o comando para deixar o motor girando a 90% de sua velocidade máxima em regime permanente;
  • Botão 6 - Executa o comando para deixar o motor girando a 100% (~99,99%) de sua velocidade máxima em regime permanente;
  • As velocidades e o sentido de rotação deverão ser mostrados no display LCD conforme a seleção do usuário;
  • A qualquer momento, se o botão ‘*’ for pressionado o motor deve alterar a rotação para girar no sentido horário e se o botão ‘#’ for pressionado o motor deve girar no sentido anti-horário;
  • Opção "Terminal":
  • Leitura 0 - Executa o comando de parar o motor, independente da velocidade que este se encontra;
  • Leitura 1 - Executa o comando para deixar o motor girando a 50% de sua velocidade máxima em regime permanente;
  • Leitura 2 - Executa o comando para deixar o motor girando a 60% de sua velocidade máxima em regime permanente;
  • Leitura 3 - Executa o comando para deixar o motor girando a 70% de sua velocidade máxima em regime permanente;
  • Leitura 4 - Executa o comando para deixar o motor girando a 80% de sua velocidade máxima em regime permanente;
  • Leitura 5 - Executa o comando para deixar o motor girando a 90% de sua velocidade máxima em regime permanente;
  • Leitura 6 - Executa o comando para deixar o motor girando a 100% (~99,99%) de sua velocidade máxima em regime permanente;
  • A qualquer momento, se no terminal for enviada: 'h', o motor deve alterar o sentido de rotação para horário; 'a', o motor deve alterar o sentido de rotação para anti-horário;
  • Opção "Potenciômetro":
  • O motor deve girar sua velocidade conforme o valor de tensão de entrada do potenciômetro lido pelo conversor A/D e este valor deve servir como porcentagem de giro do motor de 0 a 100% em relação a 3,3V;
  • As velocidades e o sentido de rotação deverão ser mostrados no display LCD conforme a seleção do usuário;
  • A qualquer momento, se o botão ‘*’ for pressionado o motor deve alterar a rotação para girar no sentido horário e se o botão ‘#’ for pressionado o motor deve girar no sentido anti-horário;
  • A qualquer momento se a USR_SW1 for pressionada, o programa deve voltar para o menu principal.

  • Cuidar com o bounce das teclas (por hardware ou software).

Instruções adicionais:

1. Gerando um PWM com um Timer:

Na Tiva um PWM pode ser gerado de várias formas. Uma das formas é por meio de um timer periódico em que em cada estouro do timer o valor de uma porta é alternada e o valor de contagem é alterado conforme o valor total do período. Por exemplo:
Suponha um PWM com período 1ms, para um duty cycle de 60% o período em alta deve permanecer por 600us e o período em baixa por 400us. Desta forma, pode-se configurar para o timer contar inicialmente para 600us e ligar a porta PF2 (que neste caso está ligada ao enable da ponte H). Quando o timer estourar, na rotina de tratamento de interrupção pode-se recarregar com o valor que o timer deveria permanecer em baixa, neste caso por 400us, e desligar a porta PF2 e repetir o procedimento indefinidamente;

Screenshot_1

2. Utilizar o P5 da PAT para controle bidirecional do motor DC que já possui saída de um L293.

Lab 1

LAB 01 - GPIO

Objetivo:

  1. Interface com entrada e saída básica.
  2. Implementar um código em assembly para Cortex que faça interface com a Tiva contador de 0 a 99 progressivo, utilizando dois displays de 7 segmentos.
  3. Apresentar fluxograma do código.

Roteiro:

  1. Inicializar a placa e contar de 0 a 99, com passo 1, e chegando a 99 a contagem deve recomeçar para 0.
  2. A cada clique em USR_SW1, o passo aumenta em 1, com limite de passo igual a 9. Se o usuário pressionar USR_SW2, o passo é decrementado até chegar no passo 1.
  3. O driver decodificador para os dois displays de 7 segmentos deve ser feito por software, ou seja, os pinos devem ser mapeados em dígitos para os displays.
  4. Ao se utilizar a PAT Daeln, notar que os dois displays de 7 segmentos estão multiplexados pelos pinos PB4 e PB5, que estão ligados nas bases de dois transistores. Estes transistores devem alternar funcionamento. Uma pequena temporização entre o chaveamento deve ser adicionada uma vez que eles são um pouco lentos.
    (1,0 ponto)
  5. Paralelamente aos displays de 7 segmentos, os LEDs de LED1 a LED8 devem fazer o algoritmo do passeio do cavaleiro. Os LEDs também são multiplexados com os displays de 7 segmentos, o pino PP5 cuja base do transistor Q1 está ligada controla os LEDs.

Observações:

Método para ativar os displays de 7 segmentos e os LEDs.
Os displays de 7 segmentos e os LEDs estão multiplexados nos pinos PA7:PA4 e PQ3:PQ0, desta forma, para a visualização dos mesmos, deve-se acender por um instante de tempo cada um, observar no esquemático da PAT Daeln.
Por exemplo, para acender o display DS1, deve-se colocar a informação desejada em PA7, PA6, PA5, PA4, PQ3, PQ2, PQ1, PQ1, depois ativar o Q2 por um instante de tempo, por exemplo 1ms e depois desativar Q2 por um instante de tempo para fornecer um tempo de guarda, por exemplo, por mais 1ms.

Tarefas:

  • Desenhar o fluxograma
  • Inicializar as portas e pinos (setup da placa)
  • Implementar um decodificador para o display de 7 segmentos
  • Acionar os dois displays de 7 segmentos (conseguir mostrar dois dígitos simultâneos)
  • Implementar a lógica de contagem
  • Adaptar a lógica de contagem com o acionamento de mudança de passo

Extra: Implementar o passeio do cavaleiro

  • Mapear os LEDS
  • Acionar os LEDS
  • Implementar a lógica de rotação

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.