Nano Hash - криптовалюты, майнинг, программирование

Несколько (4x) устройств SPI на rasberry pi 2 под управлением Windows 10 iot

Я успешно связался с одним устройством SPI (MCP3008). Возможно ли запустить несколько (4x) SPI-устройств на Raspberry Pi 2 с Windows 10 iot?

  1. Я думаю вручную подключить линию CS (выбор микросхемы) и активировать ее перед вызовом функции spi и отключить ее после выполнения функции spi. Можно ли работать на windows 10 iot?
  2. Как насчет настройки пин-кода выбора чипа spi? Изменить номер контакта во время инициализации SPI? Это возможно?
  3. Есть ли более разумный способ использовать несколько (4 x MCP3008) SPI-устройств в Windows 10 iot?

(Я планирую отслеживать 32 аналоговых сигнала, которые будут поступать на мой Raspberry Pi 2 под управлением Windows 10 iot)

Большое спасибо!


Ответы:


1

Конечно, вы можете использовать столько, сколько хотите (сколько контактов GPIO). Вам достаточно указать устройство, на которое вы звоните.

Во-первых, установите конфигурацию SPI, например, используя строку выбора микросхемы 0.

settings = new SpiConnectionSettings(0); //chip select line 0
settings.ClockFrequency = 1000000;
settings.Mode = SpiMode.Mode0;

String spiDeviceSelector = SpiDevice.GetDeviceSelector();
devices = await DeviceInformation.FindAllAsync(spiDeviceSelector);
_spi1 = await SpiDevice.FromIdAsync(devices[0].Id, settings);

Использовать этот пин в дальнейших действиях нельзя! Итак, теперь вы должны настроить выходные порты с помощью класса GpioPin, который вы будете использовать для обозначения устройства.

GpioPin_19 = IoController.OpenPin(19);
GpioPin_19.Write(GpioPinValue.High);
GpioPin_19.SetDriveMode(GpioPinDriveMode.Output);

GpioPin_26 = IoController.OpenPin(26);
GpioPin_26.Write(GpioPinValue.High);
GpioPin_26.SetDriveMode(GpioPinDriveMode.Output);

GpioPin_13 = IoController.OpenPin(13);
GpioPin_13.Write(GpioPinValue.High);
GpioPin_13.SetDriveMode(GpioPinDriveMode.Output);

Всегда перед передачей указывайте устройство: (пример метода)

private byte[] TransferSpi(byte[] writeBuffer, byte ChipNo)
{
    var readBuffer = new byte[writeBuffer.Length];

    if (ChipNo == 1) GpioPin_19.Write(GpioPinValue.Low);
    if (ChipNo == 2) GpioPin_26.Write(GpioPinValue.Low);
    if (ChipNo == 3) GpioPin_13.Write(GpioPinValue.Low);

    _spi1.TransferFullDuplex(writeBuffer, readBuffer);

    if (ChipNo == 1) GpioPin_19.Write(GpioPinValue.High);
    if (ChipNo == 2) GpioPin_26.Write(GpioPinValue.High);
    if (ChipNo == 3) GpioPin_13.Write(GpioPinValue.High);

    return readBuffer;
}
28.02.2017

2

Из: https://projects.drogon.net/understanding-spi-on-the-raspberry-pi/

В настоящее время Raspberry Pi реализует только основной режим и имеет 2 контакта выбора микросхемы, поэтому может управлять 2 устройствами SPI. (Хотя у некоторых устройств есть собственная схема дополнительной адресации, поэтому вы можете поместить большее их количество на одну шину)

Я успешно использовал 2 устройства SPI в DeviceTester. проект и проект алкотестера в репозитории IoT Devices GitHub Джареда Биенца.

Обратите внимание, что в каждом проекте дескриптор интерфейса SPI объявляется явно в свойстве ControllerName для ADC и Display, используемых в обоих этих проектах. Подробную информацию о проекте Breathalyzer можно найти в моем блоге.

    // ADC
    // Create the manager
    adcManager = new AdcProviderManager();

    adcManager.Providers.Add(
        new MCP3208()
        {
            ChipSelectLine = 0,
            ControllerName = "SPI1",
        });

    // Get the well-known controller collection back
    adcControllers = await adcManager.GetControllersAsync(); 

    // Create the display
    var disp = new ST7735()
    {
        ChipSelectLine = 0,
        ClockFrequency = 40000000, // Attempt to run at 40 MHz
        ControllerName = "SPI0",
        DataCommandPin = gpioController.OpenPin(12),
        DisplayType = ST7735DisplayType.RRed,
        ResetPin = gpioController.OpenPin(16),

        Orientation = DisplayOrientations.Portrait,
        Width = 128,
        Height = 160,
    };
26.02.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..