Страница 1 из 1
SPI_BUS
Добавлено: 01 фев 2018, 11:30
seri0shka
Для расширения входов-выходов применяю сдвиговые регистры, до этого пользовался блоками Arisov77 с программным SPI, всё отлично работало. Сейчас осваиваю аппаратный SPI, попробовал блоки SPI_BUS_IN и SPI_BUS , их можно взять из пробного проекта здесь: [spoiler]
http://forum.flprog.ru/download/file.php?id=3015[/spoiler]
Взято из форума
http://forum.flprog.ru/viewtopic.php?p=12371#p12371
Теперь о проблеме. Блоки рассчитаны на отправку и получение байтовой переменной и работают отлично с одним регистром 74НС165 или 74НС595.
Как изменить блоки для работы с двумя регистрами, то есть отправлять и принимать нужно 16 бит.
Вот листинг блока SPI_BUS_IN для работы с входным регистром 74НС165 (8 входов, 8 бит):
[spoiler]#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();
}[/spoiler]
Тип переменной на int менял, и пробовал в блоке менять 8bit на 16bit, не прокатило. Дальше уже сутки копаю, безрезультатно!
SPI_BUS
Добавлено: 01 фев 2018, 15:09
Sancho
То есть вот так не работает?
Судя по библиотеке - должно.
SPI_BUS
Добавлено: 01 фев 2018, 15:39
seri0shka
Сегодня уже не попробую. Но пока ждал ответа, методом научного тыка перепробовал много, получилось с таким вариантом блока:
[spoiler]#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();
}[/spoiler]
Возможно, неправильно. Но работает.
_____ Только сейчас заметил: Вы ж мне блок вывода прислали, а я пока с блоками ввода пробую, вывода на 16 бит у меня нет ещё.
SPI_BUS
Добавлено: 04 фев 2018, 13:18
seri0shka
Проверил, SPI_BUS_16_v1_(CODE) не работает.
SPI_BUS
Добавлено: 04 фев 2018, 14:35
Sancho
seri0shka писал(а): 04 фев 2018, 13:18Проверил, SPI_BUS_16_v1_(CODE) не работает.
Весёлая бибка....
Жаль, нет такого железа, для тестов.
SPI_BUS
Добавлено: 05 фев 2018, 10:04
Sancho
[ref]seri0shka[/ref],
Попробуй "пролеченную" библиотеку, должно работать.
Всё должно работать(95%). Чтение 100%. Наверно.
И цитата из обсуждения библиотеки ( не здесь)
Добрый день. Подскажите, пожалуйста, почему нельзя использовать общую линию SS при подключении 74*595 и 74*165 регистров? Или все-таки можно?
Ответ
Продублирую ответ из лички, дабы остальные тоже могли просветиться:
Потому что 74HC165 всю малину портит тем, что использует SS не совсем по-SPIшному. В SPI принято выбирать устройство прижатием соответствующей ему линии SS к земле на время работы с ним, тогда как для 74HC165 нужно сначала дёрнуть SS вниз-вверх, а потом уже считывать данные.(в общем-то, учитывая исключительную простоту устройства шины SPI, можно сказать, что 74HC165 не поддерживает SPI, а просто имеет общие с ней принципы работы)
SPI_BUS
Добавлено: 06 фев 2018, 23:03
seri0shka
Спасибо, надо будет попробовать. Что интересно, несколько дней экспериментов показали проблемы с 74*595 , а не с 74*165.
SPI_BUS
Добавлено: 07 фев 2018, 10:39
Sancho
О, уже появились "железные выходы"!
Есть вариант попробовать чистую SPI, для 165 придётся слегка подправлять, что скажешь? У меня нету такого железа...
Если да, тему перенесём в "Разработка пользовательских блоков " - чего-то должно получится!
SPI_BUS
Добавлено: 20 июл 2019, 08:18
MegaF
Sancho писал(а): 07 фев 2018, 10:39
О, уже появились "железные выходы"!
Есть вариант попробовать чистую SPI, для 165 придётся слегка подправлять, что скажешь? У меня нету такого железа...
Если да, тему перенесём в "Разработка пользовательских блоков " - чего-то должно получится!
интересная тема, есть железо ,хочу попробовать на аппаратном spi ,пробовал с блоком 165-595 по трем проводам, конфликтует зараза с лсд st7735.
SPI_BUS
Добавлено: 24 июл 2019, 13:00
seri0shka
[ref]MegaF[/ref], в этой теме были? Эти блоки ни с чем конфликтовать не должны. Быстродействие только не очень.
viewtopic.php?f=10&t=885&start=60
SPI_BUS
Добавлено: 07 сен 2019, 06:55
MegaF
пробовал , st7735 не хочет работать с этими блоками вместе .мне надо чисто 165 spi аппаратный.у меня st7735 и 595 по spi уже работают и занимают 4 пина .
работаю я с есп8266 и не хватает уже пинов для подключения и клавиатуры ,так и так 12 пин еспешки не работает как вход или выход.
почему бы не использовать miso для приема байта от 165 по spi.
SPI_BUS
Добавлено: 08 сен 2019, 06:18
MegaF
74HC165_(CODE).ubi
сделал блок на аппаратный spi .теперь не конфликтует с st7735/