SPI_BUS
-
- Лейтенант
- Сообщения: 391
- Зарегистрирован: 09 апр 2016, 12:17
- Откуда: Кременчуг
- Имя: Сергей
SPI_BUS
Для расширения входов-выходов применяю сдвиговые регистры, до этого пользовался блоками 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, не прокатило. Дальше уже сутки копаю, безрезультатно!
Взято из форума 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, не прокатило. Дальше уже сутки копаю, безрезультатно!
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
SPI_BUS
То есть вот так не работает?
Судя по библиотеке - должно.
Судя по библиотеке - должно.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
-
- Лейтенант
- Сообщения: 391
- Зарегистрирован: 09 апр 2016, 12:17
- Откуда: Кременчуг
- Имя: Сергей
SPI_BUS
Сегодня уже не попробую. Но пока ждал ответа, методом научного тыка перепробовал много, получилось с таким вариантом блока:
[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 бит у меня нет ещё.
[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 бит у меня нет ещё.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
SPI_BUS
[ref]seri0shka[/ref],
Попробуй "пролеченную" библиотеку, должно работать.
Всё должно работать(95%). Чтение 100%. Наверно.
И цитата из обсуждения библиотеки ( не здесь)
Попробуй "пролеченную" библиотеку, должно работать.
Всё должно работать(95%). Чтение 100%. Наверно.
И цитата из обсуждения библиотеки ( не здесь)
Добрый день. Подскажите, пожалуйста, почему нельзя использовать общую линию SS при подключении 74*595 и 74*165 регистров? Или все-таки можно?
Ответ
Продублирую ответ из лички, дабы остальные тоже могли просветиться:
Потому что 74HC165 всю малину портит тем, что использует SS не совсем по-SPIшному. В SPI принято выбирать устройство прижатием соответствующей ему линии SS к земле на время работы с ним, тогда как для 74HC165 нужно сначала дёрнуть SS вниз-вверх, а потом уже считывать данные.(в общем-то, учитывая исключительную простоту устройства шины SPI, можно сказать, что 74HC165 не поддерживает SPI, а просто имеет общие с ней принципы работы)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
SPI_BUS
О, уже появились "железные выходы"!
Есть вариант попробовать чистую SPI, для 165 придётся слегка подправлять, что скажешь? У меня нету такого железа...
Если да, тему перенесём в "Разработка пользовательских блоков " - чего-то должно получится!
Есть вариант попробовать чистую SPI, для 165 придётся слегка подправлять, что скажешь? У меня нету такого железа...
Если да, тему перенесём в "Разработка пользовательских блоков " - чего-то должно получится!
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
SPI_BUS
интересная тема, есть железо ,хочу попробовать на аппаратном spi ,пробовал с блоком 165-595 по трем проводам, конфликтует зараза с лсд st7735.Sancho писал(а): 07 фев 2018, 10:39 О, уже появились "железные выходы"!
Есть вариант попробовать чистую SPI, для 165 придётся слегка подправлять, что скажешь? У меня нету такого железа...
Если да, тему перенесём в "Разработка пользовательских блоков " - чего-то должно получится!
-
- Лейтенант
- Сообщения: 391
- Зарегистрирован: 09 апр 2016, 12:17
- Откуда: Кременчуг
- Имя: Сергей
SPI_BUS
[ref]MegaF[/ref], в этой теме были? Эти блоки ни с чем конфликтовать не должны. Быстродействие только не очень.
viewtopic.php?f=10&t=885&start=60
viewtopic.php?f=10&t=885&start=60
SPI_BUS
пробовал , st7735 не хочет работать с этими блоками вместе .мне надо чисто 165 spi аппаратный.у меня st7735 и 595 по spi уже работают и занимают 4 пина .seri0shka писал(а): 24 июл 2019, 13:00 [ref]MegaF[/ref], в этой теме были? Эти блоки ни с чем конфликтовать не должны. Быстродействие только не очень.
viewtopic.php?f=10&t=885&start=60
работаю я с есп8266 и не хватает уже пинов для подключения и клавиатуры ,так и так 12 пин еспешки не работает как вход или выход.
почему бы не использовать miso для приема байта от 165 по spi.
SPI_BUS
сделал блок на аппаратный spi .теперь не конфликтует с st7735/
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей