Hanna
Sourcecode Batteriemanagementsystem
Makrodefinitionen | Funktionen | Variablen
temp_mcp9843.h-Dateireferenz

Konstanten, Filter und Commands für den Temperatursensor MCP 9843. Mehr ...

#include <stdbool.h>
#include "twi_master_driver.h"
Include-Abhängigkeitsdiagramm für temp_mcp9843.h:
Dieser Graph zeigt, welche Datei direkt oder indirekt diese Datei enthält:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define MCP9843_CONF_HYST_00_MSB_bm   0x00
 bit 10-9 TUPPER and TLOWER Limit Hysteresis (THYST): 00 = 0°C (power-up default)
 
#define MCP9843_CONF_HYST_15_MSB_bm   0x02
 bit 10-9 01 = 1.5°C
 
#define MCP9843_CONF_HYST_30_MSB_bm   0x04
 bit 10-9 10 = 3.0°C
 
#define MCP9843_CONF_HYST_60_MSB_bm   0x06
 bit 10-9 11 = 6.0°C
 
TWI (I2C) Einstellungen
#define TWI_BAUDRATE   100000
 100 KHz Takt für I2C-Bus
 
#define TWI_BAUDSETTING   TWI_BAUD(F_CPU, TWI_BAUDRATE)
 
#define TWI_TEMPERATUR_MASTER_PORT   PORTE
 
#define TWI_TEMPERATUR   TWIE
 
Adresseinstellungen MCP9834
#define MCP9843_BASE_ADDR   0x18
 Basisadresse für I2C-Bus (7bit, ohne W/R)
 
#define Temp_MP   0x00
 
#define MCP9843_A0   1
 Adresspin, MCP9843 ermöglicht 8 Adressen auf einem I2C-Bus.
 
#define MCP9843_A1   2
 Adresspin, MCP9843 ermöglicht 8 Adressen auf einem I2C-Bus.
 
#define MCP9843_A2   3
 Adresspin, MCP9843 ermöglicht 8 Adressen auf einem I2C-Bus.
 
EEPROM (wird derzeit nicht verwendet)
#define EEPROM   0xA0
 EEPROM wird nicht verwendet.
 
#define EEPROM_1   ( EEPROM | (1<<MCP9843_A0) )
 EEPROM wird nicht verwendet.
 
Commands
#define SHDNStatus_bm   0x80
 Command.
 
#define tOUT_Range_bm   0x40
 Command.
 
#define VHV_bm   0x20
 Command.
 
#define Resolution_bm   0x18
 Command.
 
#define Range_bm   0x04
 Command.
 
#define Accuracy_bm   0x02
 Command.
 
#define Event_bm   0x01
 Command.
 
Registeradressen
#define MCP9843_CAP_REG   0x00
 Registeradresse.
 
#define MCP9843_CONFIG_REG   0x01
 Registeradresse.
 
#define MCP9843_TUPPER_REG   0x02
 Registeradresse.
 
#define MCP9843_TLOWER_REG   0x03
 Registeradresse.
 
#define MCP9843_TCRIT_REG   0x04
 Registeradresse.
 
#define MCP9843_TEMP_REG   0x05
 Registeradresse.
 
#define MCP9843_MANUFACTURER_ID_REG   0x06
 Registeradresse.
 
#define MCP9843_DEVICE_ID_REG   0x07
 Registeradresse.
 
#define MCP9843_RESOLUTION_REG   0x08
 Registeradresse.
 
CONFIG Register
#define MCP9843_CONF_INT_CLEAR_LSB_bm   0x16
 Bit5 = 1 Clear interrupt output. Nach jedem Interrupt muss das Signal vom User gesetzt werden.
 
#define MCP9843_CONF_INIT_ALL_LSB_bm   0x01
 Bit0 = 1 Initialisierung: Keine Locks; Events für Tcrit, Tupper, Tlower; Event Active Low; Event Interrupt.
 
#define MCP9843_CONF_INIT_TCRIT_LSB_bm   0x05
 Bit0 und Bit 2 = 1 Initialisierung: Keine Locks; Events nur Tcrit; Event Active Low; Event Interrupt.
 
#define MCP9843_CONF_RESET_EVENT_LSB_bm   ( MCP9843_CONF_INT_CLEAR_LSB_bm | MCP9843_CONF_INIT_TCRIT_LSB_bm )
 
RESOLUTION Register
#define MCP9843_RES_MED_bm   0x02
 10 = LSB = 0.125 °C (tCONV = 130 ms typical)
 
#define MCP9843_RES_HIGH_bm   0x03
 11 = LSB = 0.0625°C (tCONV = 260 ms typical)
 
Testbetrieb

Temperaturgrenzen festlegen

Rechenlogik (nur für positive Grenzwerte):

  • LSB-Wert ist 0.25°C
  • 16bit: (Grenztemperatur * 4) << 2
  • Aufteilung auf zwei 8bit-Werte
  • Beispiel 40°C: 40 * 4 = 160, 0000 0000 1010 0000 << 2 = 0000 0010 1000 0000 (=640) => LSB = 0x80, MSB = 0x02
  • Beispiel 45°C: 45 * 4 = 180, 0000 0000 1011 0100 << 2 = 0000 0010 1101 0000 (=720) => LSB = 0xD0, MSB = 0x02
  • Beispiel 30°C: 30 * 4 = 120, 0000 0000 0111 1000 << 2 = 0000 0001 1110 0000 (=480) => LSB = 0xE0, MSB = 0x01
  • Beispiel 32°C: 32 * 4 = 128, 0000 0000 1000 0000 << 2 = 0000 0010 0000 0000 (=512) => LSB = 0x00, MSB = 0x02
#define MCP9843_TCRIT_MSB   0x02
 32°C
 
#define MCP9843_TCRIT_LSB   0x00
 32°C
 
#define MCP9843_TUPPER_MSB   0x01
 30°C
 
#define MCP9843_TUPPER_LSB   0xE0
 30°C
 
#define MCP9843_TLOWER_MSB   0x00
 0°C
 
#define MCP9843_TLOWER_LSB   0x00
 0°C
 
Umrechnungskonstante für die Temperatur
#define MCP9843_BASE_VALUE   0.0625
 The LSB value (bit 0) is 0.0625 °C. Temperature (°C) = Temperature_code * 0.0625.
 
Filter zur Auswertung (siehe Header-Kommentar)
#define MCP9843_TEMPERATURE_FLT_bm   0x1FFF
 Temperatur ist ein 13bit-Wert,.
 
#define MCP9843_TEMPERATURE_SGN_bm   0x1000
 Bit 12 ist das Vorzeichenbit.
 
#define MCP9843_TEMP_GT_TCRIT_bm   0x8000
 Bit 15 zeigt, ob die Temperatur über der kritischen Temperatur liegt.
 
#define MCP9843_TEMP_GT_TUPPER_bm   0x4000
 Bit 14 zeigt, ob die Temperatur über der Obergrenze TUpper liegt.
 
#define MCP9843_TEMP_LT_TLOWER_bm   0x2000
 Bit 13 zeigt, ob die Temperatur unter der Untergrenze TLower liegt.
 

Funktionen

void determineTemp (void)
 
int mcp9843_calculate_value (uint16_t bitcode)
 Messwert berechnen und Zweier-Komplement-Berechnung starten. Mehr ...
 
void MCP9843_config (unsigned char Sensor_Nummer)
 Standardeinstellungen des Sensors einstellen. Mehr ...
 
void mcp9843_get_data (void)
 Die Daten des Temperatursensors werden ausgelesen. Mehr ...
 
void MCP9843_init ()
 Einstellungen des µC für die Arbeit mit MCP9843. Mehr ...
 
int mcp9843_temp (void)
 

Variablen

uint8_t sendRegData []
 
bool tcrit_flag []
 
int temp []
 
bool tlower_flag []
 
bool tupper_flag []
 
TWI_Master_t twi_TEMP_RTC
 TWI (I2C) Mastervariable, steuert die Register und speichert Daten.
 

Ausführliche Beschreibung

Konstanten, Filter und Commands für den Temperatursensor MCP 9843.

Autor
Hanna Burggraf
Datum
12.09.2015
    $Revision: 363 $
    $Date: 2016-03-21 21:28:33 +0100 (Mon, 21 Mar 2016) $
Bitmuster für Filter Temperatur (Register 0x05 MSB und LSB) in 16bit-Darstellung

Bitmuster für Filter in 16bit-Darstellung

Definiert in Datei temp_mcp9843.h.

Dokumentation der Funktionen

int mcp9843_calculate_value ( uint16_t  bitcode)

Messwert berechnen und Zweier-Komplement-Berechnung starten.

Zweier-Komplement

Parameter
bitcodeDie 16bit-Zahl, die vom Sensor zurückgegeben wird
bitcode_filterFilter, mit dem die Zahl auf die relevante Länge gekürzt wird (z.B. 12bit gültige Stellen => 0x0FFF)
signbit_filterFilter, mit dem ermittelt wird, ob das Vorzeichenbit 1 (negativ) oder 0 (positiv) ist (z.B. 12bit gültige Stellen => 0x0800)

Messwert berechnen

Parameter
base_value
Rückgabe
Rückgabewert ist der dezimale Messwert
Zweier-Komplement berechnen
  • Erste Stelle prüfen: wenn Ziffer = 1 ist die Zahl negativ, Ziffer = 0, Zahl ist positiv.
  • Zahl ist positiv: Umrechnung vom Binärsystem ins Dezimalsystem ist bereits möglich.
  • Zahl ist negativ: Man subtrahiert 1 und negiert die einzelnen Ziffern. Die entstandene, entsprechend positive Zahl im Binärsystem rechnet man ins Dezimalsystem um.
  • Wenn negativ, ein "-" vor die Zahl setzen.
Beispiel
  • 11111101
  • 1 subtrahieren = 11111100
  • invertieren = 00000011
  • 00000011 im Dezimalsystem = 3
  • 3 negativ = -3

Definiert in Zeile 154 der Datei temp_mcp9843.c.

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

void MCP9843_config ( unsigned char  Sensor_nummer)

Standardeinstellungen des Sensors einstellen.

Parameter
Sensor_nummerDie Standardeinstellungen des Sensors werden hier konfiguriert:
  • Bit 0 und Bit 2 = 1
  • Keine Locks
  • Events werden nur für Ta >= Tcrit ausgelöst. Kein Alarm für Ta > Tupper.
  • Event Pin: Active Low
  • Event Typ: Interrupt

Definiert in Zeile 64 der Datei temp_mcp9843.c.

Hier ist ein Graph, der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

void mcp9843_get_data ( void  )

Die Daten des Temperatursensors werden ausgelesen.

Parameter
sensor_nrNummer des Sensors, der ausgelesen werden soll.
Rückgabe
Berechneter Temperaturwert als int16_t.
Temperatursensor auslesen
Die Daten des Temperatursensors werden ausgelesen.
  • Temperatur wird ausgefiltert und per 2er Komplement umgerechnet. Der Wert ergibt mit 0.0625 multipliziert die aktuelle Temperatur.
  • Das Flag Temperatur >= T_kritisch (Bit15) wird ermittelt und zurückgegeben.
  • Das Flag Temperatur > T_upper (Bit14) wird ermittelt und zurückgegeben.
  • Das Flag Temperatur >= T_lower (Bit13) wird ermittelt und zurückgegeben.

Definiert in Zeile 185 der Datei temp_mcp9843.c.

Hier ist ein Graph, der zeigt, was diese Funktion aufruft:

void MCP9843_init ( )

Einstellungen des µC für die Arbeit mit MCP9843.

Einstellungen des µC für die Arbeit mit MCP9843.
Insbesondere Interrupts und Eingang für den Event Pin werden aktiviert.

Definiert in Zeile 100 der Datei temp_mcp9843.c.

Hier ist ein Graph, der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird: