예제 #1
0
        private const int LatencyTimer    = 255;  // Hz

        static void Main(string[] args)
        {
            var adcSpiConfig = new FtChannelConfig
            {
                ClockRate     = ConnectionSpeed,
                LatencyTimer  = LatencyTimer,
                configOptions = FtConfigOptions.Mode0 | FtConfigOptions.CsDbus3 | FtConfigOptions.CsActivelow
            };



            var adcConfig = new Maxim186Configuration
            {
                Channel        = Maxim186.Channel.Channel0,
                ConversionType = Maxim186.ConversionType.SingleEnded,
                Polarity       = Maxim186.Polarity.Unipolar,
                PowerMode      = Maxim186.PowerMode.InternalClockMode
            };



            var adc = new Maxim186(adcConfig, adcSpiConfig);

            do
            {
                Console.WriteLine(adc.GetConvertedSample());
            } while (true);
            //*/
        }
예제 #2
0
        public int Begin(int address)
        {
            if (_i2cDevice == null)
            {
                var adci2cConfig = new FtChannelConfig
                {
                    ClockRate    = ConnectionSpeed,
                    LatencyTimer = LatencyTimer
                };

                if (_i2cDevice == null)
                {
                    _i2cDevice = new I2CDevice(adci2cConfig, address);

                    var b = _i2cDevice.Read(1);

                    if (b == null)
                    {
                        Debugger.Break();
                    }

                    _shadow      = Convert.ToInt32(b[0]);
                    _initialised = true;
                }
            }

            return(1);
        }
예제 #3
0
 public I2CDevice(FtChannelConfig config, int deviceAddress)
 {
     _i2cConfig     = _i2cConfig ?? I2CConfiguration.ChannelZeroConfiguration;
     _cfg           = config;
     _deviceAddress = deviceAddress;
     InitLibAndHandle();
 }
예제 #4
0
        private void InitLibAndHandle()
        {
            FtResult result;

            if (_handle != IntPtr.Zero)
            {
                return;
            }


            LibMpsse.Init();
            result = LibMpsseSpi.SPI_OpenChannel(_spiConfig.ChannelIndex, out _handle);

            CheckResult(result);

            if (_handle == IntPtr.Zero)
            {
                throw new SpiChannelNotConnectedException(FtResult.InvalidHandle);
            }

            result = LibMpsseSpi.SPI_InitChannel(_handle, ref _cfg);

            CheckResult(result);

            _currentGlobalConfig = _cfg;
        }
예제 #5
0
 private void EnforceRightConfiguration()
 {
     if (_currentGlobalConfig.configOptions != _cfg.configOptions)
     {
         LibMpsseSpi.SPI_ChangeCS(_handle, _cfg.configOptions);
         _currentGlobalConfig = _cfg;
     }
 }
예제 #6
0
        public async Task <bool> Init()
        {
            var config = new FtChannelConfig
            {
                ClockRate    = ConnectionSpeed,
                LatencyTimer = LatencyTimer
            };

            _i2cConfig = _i2cConfig ?? I2CConfiguration.ChannelZeroConfiguration;
            _cfg       = config;

            InitLibAndHandle();

            return(true);
        }
예제 #7
0
        void InitLibAndHandle()
        {
            FtResult result;

            if (_handle != IntPtr.Zero)
            {
                return;
            }

            LibMpsse.Init();

            var num_channels = 0;

            var channels = LibMpsseI2C.I2C_GetNumChannels(out num_channels);

            CheckResult(channels);

            //if (num_channels > 0)
            //{
            //    for (var i = 0; i < num_channels; i++)
            //    {
            //        FtDeviceInfo cInfo;
            //        var channelInfoStatus = LibMpsseI2C.I2C_GetChannelInfo(i, out cInfo);
            //        CheckResult(channelInfoStatus);
            //        Debug.WriteLine($"Flags: {cInfo.Flags}");
            //        Debug.WriteLine($"Type: {cInfo.Type}");
            //        Debug.WriteLine($"ID: {cInfo.ID}");
            //        Debug.WriteLine($"LocId: {cInfo.LocId}");
            //        Debug.WriteLine($"SerialNumber: {cInfo.SerialNumber}");
            //        Debug.WriteLine($"Description: {cInfo.Description}");
            //        Debug.WriteLine($"ftHandle: {cInfo.ftHandle}");
            //    }
            //}

            result = LibMpsseI2C.I2C_OpenChannel(_i2cConfig.ChannelIndex, out _handle);

            CheckResult(result);

            if (_handle == IntPtr.Zero)
            {
                throw new I2CChannelNotConnectedException(FtResult.InvalidHandle);
            }

            result = LibMpsseI2C.I2C_InitChannel(_handle, ref _cfg);

            CheckResult(result);
            _currentGlobalConfig = _cfg;
        }
예제 #8
0
 public static extern FtResult I2C_InitChannel(System.IntPtr handle, ref FtChannelConfig config);
예제 #9
0
 public extern static FtResult SPI_InitChannel(IntPtr handle, ref FtChannelConfig config);
예제 #10
0
 protected SpiDevice(FtChannelConfig config, SpiConfiguration spiConfig)
 {
     _spiConfig = spiConfig ?? SpiConfiguration.ChannelZeroConfiguration;
     _cfg       = config;
     InitLibAndHandle();
 }
예제 #11
0
 protected SpiDevice(FtChannelConfig config)
     : this(config, null)
 {
 }
예제 #12
0
 public Maxim186(Maxim186Configuration adcConfig, FtChannelConfig config, SpiConfiguration spiConfig)
     : base(config, spiConfig)
 {
     _adcConfig = adcConfig;
 }
예제 #13
0
 public Maxim186(Maxim186Configuration adcConfig, FtChannelConfig config)
     : this(adcConfig, config, null)
 {
 }