SPI_BUS

Сдвиговые регистры

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 22
Откуда: Кременчуг
Имя: Сергей

SPI_BUS

#1

Сообщение seri0shka » 01.02.2018{, 11:30}

Для расширения входов-выходов применяю сдвиговые регистры, до этого пользовался блоками Arisov77 с программным SPI, всё отлично работало. Сейчас осваиваю аппаратный SPI, попробовал блоки SPI_BUS_IN и SPI_BUS , их можно взять из пробного проекта здесь: Взято из форума http://forum.flprog.ru/viewtopic.php?p=12371#p12371
Теперь о проблеме. Блоки рассчитаны на отправку и получение байтовой переменной и работают отлично с одним регистром 74НС165 или 74НС595.
Как изменить блоки для работы с двумя регистрами, то есть отправлять и принимать нужно 16 бит.
Вот листинг блока SPI_BUS_IN для работы с входным регистром 74НС165 (8 входов, 8 бит):
СпойлерПоказать
#include <LineDriver.h>
#include <SPI.h>
#include <SPI_Bus.h>
SPI_Bus reg(_8bit, pin);
unsigned long time_=0;

reg.setSelectionPolicy(SPI_Bus::SELECT_BEFORE);

if (millis()>= time_)
{
time_ =millis()+ period_survey;
noInterrupts();
out = reg.read8bits();
interrupts();
}
Тип переменной на int менял, и пробовал в блоке менять 8bit на 16bit, не прокатило. Дальше уже сутки копаю, безрезультатно!

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

SPI_BUS

#2

Сообщение Sancho » 01.02.2018{, 15:09}

То есть вот так не работает?
Судя по библиотеке - должно.
Вложения
Test_SPI_16bit_out_v1.flp
(236.28 КБ) 66 скачиваний
SPI_BUS_16_v1_(CODE).ubi
(157.79 КБ) 74 скачивания
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 22
Откуда: Кременчуг
Имя: Сергей

SPI_BUS

#3

Сообщение seri0shka » 01.02.2018{, 15:39}

Сегодня уже не попробую. Но пока ждал ответа, методом научного тыка перепробовал много, получилось с таким вариантом блока:
СпойлерПоказать
#include <LineDriver.h>
#include <SPI.h>
#include <SPI_Bus.h>
SPI_Bus reg(_16bit, pin);
unsigned long time_=0;

reg.setSelectionPolicy(SPI_Bus::SELECT_BEFORE);

if (millis()>= time_)
{
time_ =millis()+ period_survey;
noInterrupts();
out = reg.read32bits();
interrupts();
}
Возможно, неправильно. Но работает.
_____ Только сейчас заметил: Вы ж мне блок вывода прислали, а я пока с блоками ввода пробую, вывода на 16 бит у меня нет ещё.

seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 22
Откуда: Кременчуг
Имя: Сергей

SPI_BUS

#4

Сообщение seri0shka » 04.02.2018{, 13:18}

Проверил, SPI_BUS_16_v1_(CODE) не работает.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

SPI_BUS

#5

Сообщение Sancho » 04.02.2018{, 14:35}

seri0shka писал(а):
04.02.2018{, 13:18}
Проверил, SPI_BUS_16_v1_(CODE) не работает.
Весёлая бибка....
Жаль, нет такого железа, для тестов.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

SPI_BUS

#6

Сообщение Sancho » 05.02.2018{, 10:04}

seri0shka,
Попробуй "пролеченную" библиотеку, должно работать.
Всё должно работать(95%). Чтение 100%. Наверно.
И цитата из обсуждения библиотеки ( не здесь)
Добрый день. Подскажите, пожалуйста, почему нельзя использовать общую линию SS при подключении 74*595 и 74*165 регистров? Или все-таки можно?
Ответ
Продублирую ответ из лички, дабы остальные тоже могли просветиться:
Потому что 74HC165 всю малину портит тем, что использует SS не совсем по-SPIшному. В SPI принято выбирать устройство прижатием соответствующей ему линии SS к земле на время работы с ним, тогда как для 74HC165 нужно сначала дёрнуть SS вниз-вверх, а потом уже считывать данные.(в общем-то, учитывая исключительную простоту устройства шины SPI, можно сказать, что 74HC165 не поддерживает SPI, а просто имеет общие с ней принципы работы)
Вложения
SPI_Bus-master_Sancho.zip
Заменить старую!
(15.91 КБ) 79 скачиваний
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 22
Откуда: Кременчуг
Имя: Сергей

SPI_BUS

#7

Сообщение seri0shka » 06.02.2018{, 23:03}

Спасибо, надо будет попробовать. Что интересно, несколько дней экспериментов показали проблемы с 74*595 , а не с 74*165.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

SPI_BUS

#8

Сообщение Sancho » 07.02.2018{, 10:39}

О, уже появились "железные выходы"!
Есть вариант попробовать чистую SPI, для 165 придётся слегка подправлять, что скажешь? У меня нету такого железа...
Если да, тему перенесём в "Разработка пользовательских блоков " - чего-то должно получится!
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

MegaF
Рядовой
Сообщения: 87
Зарегистрирован: 05.09.2018{, 10:09}
Репутация: 5
Имя: farad

SPI_BUS

#9

Сообщение MegaF » 20.07.2019{, 08:18}

Sancho писал(а):
07.02.2018{, 10:39}
О, уже появились "железные выходы"!
Есть вариант попробовать чистую SPI, для 165 придётся слегка подправлять, что скажешь? У меня нету такого железа...
Если да, тему перенесём в "Разработка пользовательских блоков " - чего-то должно получится!
интересная тема, есть железо ,хочу попробовать на аппаратном spi ,пробовал с блоком 165-595 по трем проводам, конфликтует зараза с лсд st7735.

seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 22
Откуда: Кременчуг
Имя: Сергей

SPI_BUS

#10

Сообщение seri0shka » 24.07.2019{, 13:00}

MegaF, в этой теме были? Эти блоки ни с чем конфликтовать не должны. Быстродействие только не очень.
viewtopic.php?f=10&t=885&start=60

MegaF
Рядовой
Сообщения: 87
Зарегистрирован: 05.09.2018{, 10:09}
Репутация: 5
Имя: farad

SPI_BUS

#11

Сообщение MegaF » 07.09.2019{, 06:55}

seri0shka писал(а):
24.07.2019{, 13:00}
MegaF, в этой теме были? Эти блоки ни с чем конфликтовать не должны. Быстродействие только не очень.
viewtopic.php?f=10&t=885&start=60
пробовал , st7735 не хочет работать с этими блоками вместе .мне надо чисто 165 spi аппаратный.у меня st7735 и 595 по spi уже работают и занимают 4 пина .
работаю я с есп8266 и не хватает уже пинов для подключения и клавиатуры ,так и так 12 пин еспешки не работает как вход или выход.
почему бы не использовать miso для приема байта от 165 по spi.

MegaF
Рядовой
Сообщения: 87
Зарегистрирован: 05.09.2018{, 10:09}
Репутация: 5
Имя: farad

SPI_BUS

#12

Сообщение MegaF » 08.09.2019{, 06:18}

74HC165_(CODE).ubi
(11.75 КБ) 59 скачиваний
сделал блок на аппаратный spi .теперь не конфликтует с st7735/

Ответить

Вернуться в «Спросить у знатоков»