Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

Characteristic Locus
Inheritance object ObservableBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)> SamplingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)> PollingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)> > Emc2101
Implements IObservable<IChangeResult<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>> ISamplingSensor<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)> ISensor<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)> II2cPeripheral
Inherited Members PollingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>.StartUpdating(TimeSpan?) PollingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>.StopUpdating() SamplingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>.samplingLock SamplingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>.Updated SamplingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>.SamplingTokenSource SamplingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>.Conditions SamplingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>.IsSampling SamplingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>.UpdateInterval SamplingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>.ReadSensor() SamplingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>.RaiseEventsAndNotify(IChangeResult<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>) SamplingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>.Read() ObservableBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>.observers ObservableBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>.NotifyObservers(IChangeResult<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>) ObservableBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>.Subscribe(IObserver<IChangeResult<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>>) ObservableBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>.CreateObserver(Action<IChangeResult<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>>, Predicate<IChangeResult<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>>) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString()
Namespace Meadow.Foundation.ICs.FanControllers
Assembly Emc2101.dll

Syntax

public class Emc2101 : PollingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>, IObservable<IChangeResult<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>>, ISamplingSensor<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>, ISensor<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>, II2cPeripheral

Constructors

Emc2101(II2cBus, byte)

Create a new EMC2101 object

Declaration
public Emc2101(II2cBus i2cBus, byte address = 76)

Parameters

Type Name Description
II2cBus i2cBus

I2CBus connected to display

byte address

Address of the EMC2101 (default = 0x4C)

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

Fields

i2cComms

I2C Communication bus used to communicate with the peripheral

Declaration
protected readonly II2cCommunications i2cComms

Field Value

Type Description
II2cCommunications

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

Properties

DACOutputEnabled

Enable or disable outputting the fan control signal as a DC voltage

Declaration
public bool DACOutputEnabled { get; set; }

Property Value

Type Description
bool

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

DefaultI2cAddress

The default I2C address for the peripheral

Declaration
public byte DefaultI2cAddress { get; }

Property Value

Type Description
byte

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

ExternalTemperature

The temperature as read by the external sensor

Declaration
public Temperature? ExternalTemperature { get; }

Property Value

Type Description
Temperature?

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

FanPwmDutyCycle

Get/Set the current manually set fan PWM duty cycle (0 - 1.0)

Declaration
public float FanPwmDutyCycle { get; set; }

Property Value

Type Description
float

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

FanSpeed

The current fan speed

Declaration
public AngularVelocity? FanSpeed { get; }

Property Value

Type Description
AngularVelocity?

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

Hysteresis

Get / set the amount of hysteresis applied to the temperature readings used in the fan speed lookup table

Declaration
public Temperature Hysteresis { get; set; }

Property Value

Type Description
Temperature

The hysteresis temperature value

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

InternalTemperature

The temperature as read by the internal sensor

Declaration
public Temperature? InternalTemperature { get; }

Property Value

Type Description
Temperature?

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

MinimumFanSpeed

Get/Set the minimum fan speed for the currently connected fan

Declaration
public AngularVelocity MinimumFanSpeed { get; set; }

Property Value

Type Description
AngularVelocity

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

PwmDivisor

The alternate PWM divide value that can be used instead of CLK_SEL bit function This can set anytime but will only be used if the clock override bit is enabled

Declaration
public byte PwmDivisor { get; set; }

Property Value

Type Description
byte

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

PwmFrequencyScaler

Scales the PWM frequency against the current fan settings Recommended to leave at max value of 0x1F The is a 5 bit value

Declaration
public byte PwmFrequencyScaler { get; set; }

Property Value

Type Description
byte

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

SensorDataRate

The temperature sensor data rate

Declaration
public Emc2101.DataRate SensorDataRate { get; set; }

Property Value

Type Description
Emc2101.DataRate

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

Methods

ConfigureFanSpinup(FanSpinupDrive, FanSpinupTime)

Configure the fan spinup behavior

Declaration
public void ConfigureFanSpinup(Emc2101.FanSpinupDrive spinupDrive, Emc2101.FanSpinupTime spinupTime)

Parameters

Type Name Description
Emc2101.FanSpinupDrive spinupDrive

The drive or percent to spin up to

Emc2101.FanSpinupTime spinupTime

The time taken to spin up to the drive speed

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

ConfigurePwmClock(bool, bool)

Configure the PWM clock

Declaration
public void ConfigurePwmClock(bool clockSelect, bool clockOverride)

Parameters

Type Name Description
bool clockSelect

true to use a 1.4kHz base PWM clock, false to use the default 360kHz PWM clock

bool clockOverride

true to override the base clock and use the frequency divisor to set the PWM frequency

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

EnableTachInput(bool)

Enable the TACH/ALERT pin as an input to read the fan speed (for 4 wire fans)

Declaration
public void EnableTachInput(bool enable)

Parameters

Type Name Description
bool enable

true to enable, false to disable

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

InvertFanSpeed(bool)

Invert the sensor's reading of fan speed

Declaration
public void InvertFanSpeed(bool invert)

Parameters

Type Name Description
bool invert

true to invert, false for normal

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

RaiseEventsAndNotify(IChangeResult<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>)

Raise changed events for subscribers

Declaration
protected override void RaiseEventsAndNotify(IChangeResult<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)> changeResult)

Parameters

Type Name Description
IChangeResult<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)> changeResult

The new sensor values

Overrides

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

ReadSensor()

Reads data from the sensor

Declaration
protected override Task<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)> ReadSensor()

Returns

Type Description
Task<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>

The latest sensor reading

Overrides

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

SetLookupTable(LutIndex, Temperature, float)

Set a temperature and fan duty cycle to the lookup table

Declaration
public void SetLookupTable(Emc2101.LutIndex index, Temperature temperatureThreshhold, float pwmDutyCycle)

Parameters

Type Name Description
Emc2101.LutIndex index

The LUT index to set

Temperature temperatureThreshhold

the temperature threshold

float pwmDutyCycle

the fan PWM duty cycle

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

Events

ExternalTemperatureUpdated

External Temperature changed event

Declaration
public event EventHandler<IChangeResult<Temperature>> ExternalTemperatureUpdated

Event Type

Type Description
EventHandler<IChangeResult<Temperature>>

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

FanSpeedUpdated

Fan Speed changed event

Declaration
public event EventHandler<IChangeResult<AngularVelocity>> FanSpeedUpdated

Event Type

Type Description
EventHandler<IChangeResult<AngularVelocity>>

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub

InternalTemperatureUpdated

Internal Temperature changed event

Declaration
public event EventHandler<IChangeResult<Temperature>> InternalTemperatureUpdated

Event Type

Type Description
EventHandler<IChangeResult<Temperature>>

Remarks

Emc2101
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.FanControllers.Emc2101

Code Example

Emc2101 fanController;

public override Task Initialize()
{
    Resolver.Log.Info("Initialize...");

    fanController = new Emc2101(i2cBus: Device.CreateI2cBus());

    return base.Initialize();
}

public override Task Run()
{
    Resolver.Log.Info("Run ...");

    return base.Run();
}

Sample project(s) available on GitHub