|
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37
|
||||||
PIC, SPI и сдвиговый регистр.03.09.2012, 18:29. Показов 86807. Ответов 115
Метки нет (Все метки)
Здравствуйте уважаемые гуру!
Настал для меня период слезть с ардуино и перейти на следующий уровень общений с МК. К тому же понадобилось перепрошить одну девайсину на PIC16F877. Как нельзя лучше, пришлась среда разработки для PIC под разные платформы, в частности под Mac я запустил все без проблем. Hello world в виде морганий светодиода и считываний кнопки вроде проблем не вызвали, однако этап освоения SPI поставил в тупик, в связи с чем прошу у вас помощи. Написал небольшой код, который по нажатию кнопки должен отправить данные по SPI в сдвиговый регистр 74HC595:
Первоночальный запуск происходит как надо, кнопка отрабатывает как и задумано, в первых 4х регистрах высокий уровень, в остальных низкий. <Изображение удалено> Однако нажимая кнопку несколько раз, наблюдается смещение регистров, хотя каждый раз посылается по 8 бит... <Изображение удалено> В связи с этим вопрос, что в данной программе не так? Возможно по окончанию передачи нужно записывать еще какой то служебный бит что мы закончили? И должен ли на выходе SCK высокий уровень, если мы ничего не передаем, в случае работы с 595? Заранее спасибо!
0
|
||||||
| 03.09.2012, 18:29 | |
|
Ответы с готовыми решениями:
115
Сдвиговый регистр без микроконтроллера Программный SPI для PIC [VHDL] ПЛИС длинный сдвиговый регистр с параллельной загрузкой |
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
|
| 03.09.2012, 19:33 | |
|
Как вы думаете , если с такой скоростью, как вы долбите SPI и без проверки окончания передачи , долбить по голове - быстро ли дойдет ????
Далее - видите серый уровень на пине куда кнопка подключена? Что означает серый цвет ? В аурдино так же кнопки подключаются ? Зато диагноз вынесен - Proteus глючит...
0
|
|
|
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37
|
|
| 03.09.2012, 21:11 | |
|
Про серый уровень осознал, приделал подтягивающий резистор с земли.
Про протеуст я же написал, что руки скорее всего кривые, я первый раз использую его, не знаю примудростей симуляции и почему он может вылетать. Про проверку окончания передачи я же написал еще в первом сообщении, в этом собственно и вопрос, кто из них отвечает за окончание передачи? В даташите есть бит BF и SSPOV, вроде бы оба подходят, какой из них нужно использовать для проверки? Спасибо за комментарии!
0
|
|
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
|||||||
| 03.09.2012, 22:10 | |||||||
Тяжело конечно после облегчалок аурдуньи ... Кстати Hi Tech какой версии? Они не все хороши, последняя неглючная 9.63 STD .
0
|
|||||||
|
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37
|
|
| 04.09.2012, 00:21 | |
|
Hi tech это компилятор? У меня его нет, с сайта микрочипа для мака доступен только XC8. В них есть принципиальная разница?
0
|
|
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
||
| 04.09.2012, 09:21 | ||
У вас получилось ?
0
|
||
|
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37
|
|||||||
| 04.09.2012, 13:13 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 04.03.2011
Сообщений: 594
|
|
| 04.09.2012, 13:36 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37
|
|
| 04.09.2012, 13:58 | |
|
По сути его принцип работы и есть SPI, по тактам проталкивает биты, затем закрывает защелку для изменения состояния ног разом.
http://robocraft.ru/btog/arduino/519.html
0
|
|
|
SWK
|
||||||||||||
| 04.09.2012, 15:34 | ||||||||||||
А для записи в регистры проще сделать программмно, там скорость особой роли не играет. Например, в контроллере башни своего робота - - я для расширения ввода - вывода использую запись в 3 регистра 74HC595, и ввод с 8 линий через 74HC165. Запись в регистры делаю через запараллеленные входы данных и сдвига, а потом защелкиваю данные в буфере выбранного регистра. Процедура (на МикроПаскале для PIC) предельно проста, и много времени не отнимает:
Использование отдельных процедур для каждого регистра - тем более более громоздко и не так универсально. Тут легко расширить количество регистров хоть до десятка. И удобно, когда запись в регистры делается через команды извне. Работает надежно (второй год уже гоняю). Вызов тоже прост. Кладем байт в соответствующий буфер (буфера нужны, чтобы можно было потом в любое время считать содержимое этих регистров, или изменить отдельные биты, не трогая остальных), и вызываем процедуру с указанием номера нужного регистра:
В данном случае - PORTA.2, PORTD.4, PORTD.5, PORTD.6, PORTD.7. |
||||||||||||
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
||||
| 04.09.2012, 15:53 | ||||
0
|
||||
|
SWK
|
||||
| 04.09.2012, 16:44 | ||||
Считайте: на 3 регистра у меня 1 - данные, 1 - тактовый, по 1 - стробы защелки на каждый регистр. Итого - 2 общих + 3 индивидуальных = 5 ног. На SPI будем иметь: SS, SDI, SDO, SCK, + 3 линии сторобов защелки. Итого = 7 штук! У иеня - 5. Ну, SS можно не использовать. SDI - можно не подключать, но все равно он занят! В любом случае, у меня - меньше. С чего вы взяли 2 лишних? Покажите меньше. В любом случае для 3х регистров 595 нужны данные, такт и стробы записи. (Если не городить всякие там RC цепочки, формирующие строб записи после пачки тактовых, что для 3х регистров все равно не проканает).
Это - универсальная процедура для записи в любой из 3 (можно и более) регистров 74HC595. С буферизацией записываемых в каждый регистр данных. Для 1 регистра, с передачей данных напрямую в процедуру, получится порядка 20-30 байт(лень проверять). Не думаю, что у JikoKiy аналогичная запись через SPI на С скомпилируется намного меньше. Не говоря уже о записи в несколько регистров. Плюс - использование любых свободных ног, и остается аппаратный SPI для более серьезных вещей. |
||||
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
|
| 04.09.2012, 16:57 | |
|
Я собственно не о хардварном SPI .
74HC595 соединяются последовательно . Выход сдвигового регистра первой с входом второй и т.д. Тактовые и защелки параллелятся . И того получаем 3 вывода. Динные, Тактовые и Защелки. Получаем возможность наращивать количество 74HC595, не увеличивая количества выводов. Собственно это же классика , удивительно что вы этого не знаете. Далее софт . Создается буфер равный(в байтах) количеству 74HC595. В функции вывода выводим сразу весь буфер . После вывода строб защелки. Плюсы: Динный вывод можно автоматизировать : повесить его на прерывание. То есть мы только изменяем то что нужно в буфере , а все остальное сделается автоматом. Вся эта байда не может весить 100 байт . Конкретно покажу вечером . На счет Челябинского моторного , вы меня удивляете - это распространенные грабли новичков. Хотя ваш пасксраль мог и задержек нафигачить ...
0
|
|
|
1 / 1 / 0
Регистрация: 08.08.2012
Сообщений: 49
|
|
| 04.09.2012, 17:24 | |
|
Интересно... а ресетом регистров... чё, никто никогда не рулит??? )))))
0
|
|
|
SWK
|
||||
| 04.09.2012, 17:27 | ||||
Для однозадачного режима на макетке, может и устроит. У меня же - режим мультизадачный, несколько задач (в том числе и УЗ дальномер, и измерение освещенности с TST230R, и куча менее критичных) крутятся параллельно, и мне нет смысла терять время на монопольные действия, типа вывода в регистры, которые выполняются одним куском. Утроение времени работы процедуры вывода - мне не надо. Тем более - ради экономии пары выводов. Когда только использование 3х 595 и одного 165 регистров дало мне их сразу 24 выхода и 8 входов. Когда у контроллера - 33, а потребность платы была 53. Получилось же 60. То есть с запасом. Незадействованные ноги контроллера вывел на разьемы, для возможности будущих расширений. Например, подключение серв, или еще чего. Там среди свободных есть и ШИМ, и АЦП. Прерывание же в мультизадачных системах - довольно ценный и критичный ресурс, влияющий на многие задачи. Не стоит вешать на него такую ерунду, как вывод в регистры.
А задержки я привых в наносекундах считать еще со времен жесткой логики, в 70х годах. В данном случае (при тактовой 16 МГц) я имею четкий строб длиной 250нс, что для моей платы вполне достаточно. И более чем на порядок превосходит минимально допустимый для 74HC595. (Паспортная частота клока до 100 МГц). Ваше же нелюбовь к Паскалю - всего лишь от его незнания. Меня он устраивает. Не будет устраивать - буду использовать что другое. Не проблема. Я - не фанат, как некоторые. Много чего пробовал. Использую же то, что мне удобно. |
||||
|
1 / 1 / 0
Регистрация: 08.08.2012
Сообщений: 49
|
||
| 04.09.2012, 17:28 | ||
0
|
||
|
SWK
|
||
| 04.09.2012, 17:30 | ||
|
||
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
||
| 04.09.2012, 17:38 | ||
Кстати не порите чушь , вывод 3х байт займет не так много времени сколько вы расписываете .
0
|
||
|
1 / 1 / 0
Регистрация: 08.08.2012
Сообщений: 49
|
|
| 04.09.2012, 17:47 | |
|
А в условиях нехватки времени и ресурсов SPI вполне становится палочкой-выручалочкой... ))))
Чем ногами дрыгать... ))))
0
|
|
|
SWK
|
||||
| 04.09.2012, 18:15 | ||||
[35.65 Кб]
Я же использую в программах своего робота то, что считаю нужным, и удобным. И просто так, ни за что что ни про что, увеличивать время записи в регистр втрое, не получая какого - либо для себя преимущества (при наличии кучи свободных ног), - не вижу смысла. Как и нет пока необходимости использовать для этого аппаратный SPI.
Контролирую при отладке времена главного цикла, и отводимого задачам на монопольные куски, постоянно, (вставляя в нужных местах изменения состояния какой - либо из ног для контроля), мне хватает. Многозадачные режимы на флаговом автомате в реальном времени в контроллерах использую давно, с 80х годов. Опыт есть. |
||||
| 04.09.2012, 18:15 | |
|
Помогаю со студенческими работами здесь
20
Сдвиговый регистр 595N и SPI STM32F1038 74hc595d*2 сдвиговый регистр по spi ШД, Сдвиговый регистр и МК Сдвиговый регистр Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|