Mudanças entre as edições de "Sensores"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
(Limpou toda a página)
Etiqueta: anulando
 
(16 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
  
 
====ATUAL====
 
;Aula 30 (30 Nov):
 
*Apresentação do projeto Final
 
:* Descrição do projeto '''AE5 - Projeto de um Detector de DTMF'''
 
 
:* Estudar os blocos do Simulink: [https://www.mathworks.com/help/dsp/ref/timescope.html Time Scope], [https://www.mathworks.com/help/dsp/ref/spectrumanalyzer.html Spectrum Analyzer], [https://www.mathworks.com/help/dsp/ref/sinewave.html Sine Wave], [https://www.mathworks.com/help/dsp/ref/chirp.html Chirp], [https://www.mathworks.com/help/dsp/ref/randomsource.html Random Source], [https://www.mathworks.com/help/dsp/ref/signalfromworkspace.html Signal From Workspace], [https://www.mathworks.com/help/dsp/ref/frommultimediafile.html From Multimedia File].
 
 
;Aula 31 a 33 (4 Dez):
 
* Aula de projeto (implementação da AE5)
 
 
 
;Aula 34 (14 Dez):
 
:*Uso do HDL Coder
 
::* [http://www.mathworks.com/help/hdlcoder/hdl-code-generation-from-simulink.html HDL Code Generation from Simulink]
 
::* [http://www.mathworks.com/help/hdlcoder/simulink.html Simulink® blocks supported for HDL code generation]
 
 
:* Exemplo simples. 
 
::* Inicialmente construa a biblioteca de blocos suportados pelo HDLcoder
 
hdllib  [http://www.mathworks.com/help/hdlcoder/ug/show-blocks-supported-for-hdl-code-generation.html Show Blocks Supported for HDL Code Generation]
 
 
::*Construa o modelo mostrado na figura abaixo. (sugestão de frequência do sinal de 100Hz, e frequência de amostragem deve ser de 1000Hz)
 
<center>
 
[[Arquivo:teste_sin_HDLcoder.png | 600 px]]
 
</center>
 
::*coloque o modelo em um subsistema e conecte a saída a um '''Time Scope'''
 
<center>
 
[[Arquivo:subsistema_teste_sin_HDLcoder.png | 300 px]]
 
</center>
 
::*Salve o modelo como teste_sin_HDLcoder, e em seguida faça o ajuste automático das configurações usando o comando.
 
hdlsetup('teste_sin_HDLcoder')
 
::* Execute o HDLcoder
 
::* Siga o fluxo do HDLcoder passo a passo e corrija eventuais problemas conforme indicado nas mensagens de ERRO.
 
:::* Será necessário mudar o tipo de dado do bloco seno e constante para fix(16). 
 
::* Após ter concluído com sucesso o fluxo de codificação HDL, vá até a pasta onde os arquivos VHDL foram gerados e observe que devem ser sido gerados os seguintes arquivos (Subsystem_tb_pkg.vhd  Subsystem_tb.vhd  Subsystem.vhd) na pasta
 
cd  hdl_prj/hdlsrc/teste_sin_HDLcoder
 
ls *.vhd
 
 
::* Use o ModelSim para compilar os arquivos e em seguida simular
 
vsim &
 
 
::* No ModelSim execute os seguintes arquivos .do:
 
Subsystem_compile.do
 
Subsystem_tb_compile.do
 
Subsystem_tb_sim.do
 
 
::* Observe que o sinal gerado pelo código VHDL é igual ao sinal calculado pelo Simulink.
 
<center>
 
[[Arquivo:teste_sin_ModelSim.png | 600 px]]
 
</center>
 
::*Observe que no arquivo de testbench, existe uma instrução de ASSERT conferindo se os dois sinais são iguais:
 
<syntaxhighlight lang=vhdl>
 
IF Out1_testFailure = '0' THEN
 
ASSERT FALSE
 
REPORT "**************TEST COMPLETED (PASSED)**************"
 
SEVERITY NOTE;
 
ELSE
 
ASSERT FALSE
 
REPORT "**************TEST COMPLETED (FAILED)**************"
 
SEVERITY NOTE;
 
END IF;
 
</syntaxhighlight>
 
:* Exemplo mais complexo
 
::* Abra o modelo
 
sfir_fixed
 
::* ajuste as configurações
 
hdlsetup('sfir_fixed')
 
::*Siga o tutorial [http://www.mathworks.com/help/hdlcoder/gs/example-generating-hdl-code-from-a-simulink-model.html HDL Code Generation from a Simulink Model]
 
<!--
 
 
;Aula 35 a 37 (26 Jun a 3 Jul):
 
*Implementação do projeto final.
 
-->
 
{{collapse bottom}}
 
 
==Código==
 
 
Código para teste do sensor de temperatura MAX-31856 usando a placa NodeMCU DEVKIT V1.0 com chip esp8266-12E
 
 
 
<syntaxhighlight lang=c>
 
#include <Adafruit_MAX31856.h>
 
// Adaptado de https://github.com/adafruit/Adafruit_MAX31856/blob/master/examples/max31856/max31856.ino
 
 
//----------------------------------
 
 
// Use software SPI: CS, DI, DO, CLK
 
 
// Arduino Uno:
 
//Adafruit_MAX31856 maxthermo = Adafruit_MAX31856(10, 11, 12, 13);
 
 
//NODEMCU 1.0 ESP8266-12E:
 
// MAX-31856 /  NODEMCU
 
//    CS    /  GPIO 10 - SD3
 
//    SDI    /  GPIO 4  - D2
 
//    SDO    /  GPIO 5  - D1
 
//    SCK    /  GPIO 16 - D0
 
//Adafruit_MAX31856 maxthermo = Adafruit_MAX31856(10,4,5,16);
 
 
//----------------------------------
 
 
// Use hardware SPI, just pass in the CS pin
 
// Arduino Uno:
 
//Adafruit_MAX31856 maxthermo = Adafruit_MAX31856(10);
 
 
//NODEMCU 1.0 ESP8266-12E:
 
// MAX-31856 /  NODEMCU
 
//    CS    /  GPIO 15 - D8
 
//    SDI    /  GPIO 13 - D7
 
//    SDO    /  GPIO 12 - D6
 
//    SCK    /  GPIO 14 - D5
 
Adafruit_MAX31856 maxthermo = Adafruit_MAX31856(15);
 
 
//----------------------------------
 
 
void setup() {
 
  Serial.begin(115200);
 
  Serial.println("MAX31856 thermocouple test");
 
 
  maxthermo.begin();
 
 
  maxthermo.setThermocoupleType(MAX31856_TCTYPE_K);
 
 
  Serial.print("Thermocouple type: ");
 
  switch (maxthermo.getThermocoupleType() ) {
 
    case MAX31856_TCTYPE_B: Serial.println("B Type"); break;
 
    case MAX31856_TCTYPE_E: Serial.println("E Type"); break;
 
    case MAX31856_TCTYPE_J: Serial.println("J Type"); break;
 
    case MAX31856_TCTYPE_K: Serial.println("K Type"); break;
 
    case MAX31856_TCTYPE_N: Serial.println("N Type"); break;
 
    case MAX31856_TCTYPE_R: Serial.println("R Type"); break;
 
    case MAX31856_TCTYPE_S: Serial.println("S Type"); break;
 
    case MAX31856_TCTYPE_T: Serial.println("T Type"); break;
 
    case MAX31856_VMODE_G8: Serial.println("Voltage x8 Gain mode"); break;
 
    case MAX31856_VMODE_G32: Serial.println("Voltage x8 Gain mode"); break;
 
    default: Serial.println("Unknown"); break;
 
  }
 
}
 
 
void loop() {
 
  Serial.print("Cold Junction Temp: ");
 
  Serial.println(maxthermo.readCJTemperature());
 
 
  Serial.print("Thermocouple Temp: ");
 
  Serial.println(maxthermo.readThermocoupleTemperature());
 
  // Check and print any faults
 
  uint8_t fault = maxthermo.readFault();
 
  if (fault) {
 
    if (fault & MAX31856_FAULT_CJRANGE) Serial.println("Cold Junction Range Fault");
 
    if (fault & MAX31856_FAULT_TCRANGE) Serial.println("Thermocouple Range Fault");
 
    if (fault & MAX31856_FAULT_CJHIGH)  Serial.println("Cold Junction High Fault");
 
    if (fault & MAX31856_FAULT_CJLOW)  Serial.println("Cold Junction Low Fault");
 
    if (fault & MAX31856_FAULT_TCHIGH)  Serial.println("Thermocouple High Fault");
 
    if (fault & MAX31856_FAULT_TCLOW)  Serial.println("Thermocouple Low Fault");
 
    if (fault & MAX31856_FAULT_OVUV)    Serial.println("Over/Under Voltage Fault");
 
    if (fault & MAX31856_FAULT_OPEN)    Serial.println("Thermocouple Open Fault");
 
  }
 
  delay(1000);
 
}
 
</syntaxhighlight>
 

Edição atual tal como às 09h27min de 4 de maio de 2020