Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/443: Рейтинг темы: голосов - 443, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37

PIC, SPI и сдвиговый регистр.

03.09.2012, 18:29. Показов 86814. Ответов 115
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые гуру!
Настал для меня период слезть с ардуино и перейти на следующий уровень общений с МК. К тому же понадобилось перепрошить одну девайсину на PIC16F877.
Как нельзя лучше, пришлась среда разработки для PIC под разные платформы, в частности под Mac я запустил все без проблем.
Hello world в виде морганий светодиода и считываний кнопки вроде проблем не вызвали, однако этап освоения SPI поставил в тупик, в связи с чем прошу у вас помощи.

Написал небольшой код, который по нажатию кнопки должен отправить данные по SPI в сдвиговый регистр 74HC595:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <pic16f877.h>
#include <stdyo.h>
#include <stdlib.h>
#include <htc.h>
 
int main() {
 
ADCON1 = 0x06; //Порт А будет работать как цифровой вход-выход
 
SSPEN = 1; //Бит включения SPI
SMP = 1; //Фаза выборки бита, опрос входа в конце выборки данных
CKP = 1; //Полярность тактового сигнала
CKE = 1; //Определение фронта, по которому будут передаваться данные
 
SSPM3 = 0; //0000 тактовый сигнал SPI будет работать от 1/4 скорости процессора
SSPM2 = 0;
SSPM1 = 0;
SSPM0 = 0;
 
TRISC0 = 1; //C0 как вход, для тактовой кнопки
TRISC3 = 0; //C3  SCK ведущий режим
TRISC5 = 0; //C5  SDO
TRISA5 = 0; //A5 SS линия
 
TRISD = 0x00; //Порт D как выход
PORTD = 0x00; //Низкий уровень на весь порт D
 
//Цикл программы
while (1) {
 
if (PORTCbits.RC0 == 1) { //Если нажата кнопка, выполняем блок
PORTDbits.RD4 = 1; //Высокий уровень для записи в сдвиговый регистр
SSPBUF = 0b00001111; //Передает байт в регистр
PORTDbits.RD4 = 0; //Низкий уровень для записи в сдвиговый регистр
}
 
}
 
}
Программу я решил постестить в виртуальной машине, в программе Proteus (Штука мне показалась весьма глючная, постоянно виснет при симуляциях, хотя может руки у меня кривые), в связи с чем создал схему и залил туда свой HEX.
Первоночальный запуск происходит как надо, кнопка отрабатывает как и задумано, в первых 4х регистрах высокий уровень, в остальных низкий.

<Изображение удалено>
Однако нажимая кнопку несколько раз, наблюдается смещение регистров, хотя каждый раз посылается по 8 бит...

<Изображение удалено>
В связи с этим вопрос, что в данной программе не так? Возможно по окончанию передачи нужно записывать еще какой то служебный бит что мы закончили?
И должен ли на выходе SCK высокий уровень, если мы ничего не передаем, в случае работы с 595?
Заранее спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.09.2012, 18:29
Ответы с готовыми решениями:

Сдвиговый регистр без микроконтроллера
Добрый день, на работе грузчики притащили два огромных сегментных индикатора с азс, попросили как нибудь им его приспособить типа лампочки,...

Программный SPI для PIC
объясните пожалуйста реализацию SPI-интерфейса(передача 16 бит) для простейшего pic(12 серия), в котором нет аппаратного SPI. На языке C.

[VHDL] ПЛИС длинный сдвиговый регистр с параллельной загрузкой
Подтолкните в нужную сторону, никак не могу сообразить. С одной стороны поступают байты по 8-разрядной шине. Динные выдает контроллер...

115
1 / 1 / 0
Регистрация: 08.08.2012
Сообщений: 49
04.09.2012, 23:58
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от SWK
По мне - так хоть на Алголе пишите, мне - то что? Нет, как увидят Паскаль - сразу на дыбы... Двойка в вузе по Паскалю была, что такие комплексы?
Какие комплексы??? ))))))))))
У кого??? ))))))))))
Если вы не заметили косяков в проге ТСа, то это ваши проблемы...
Но ТС - начинающий... и ему простительно... Он не знает толком МК... он не знает толком СИ... и добавлять ему пассажи паскаля... зачем??? У него и так каша в голове!!!
Я дал конкретно свой вариант реализации записи в 595 регистры, и кусок реально работающего кода. Нет, налетели, развели опять треп ни о чем. Вместо того, чтобы просто выложить в качестве альтернативы свои куски кода, а не препираться по поводу Паскаля и моих методов. Все равно это ни украшает форум, ни повышает вашего статуса на нем в глазах участников.
У вас понимание статуса жёстко привязано к мегабайтам выплюнутого кода??? ))))))))))
Да "всё уже украдено до нас"!!! Многим просто лень в гугл зайти... )))))))))
Мне, например, код, как таковой, не интересен... мне интересны решения и различные фишки...
Люди же прекрасно видят, кто реально старается помочь, а кто просто флуд разводит, не показав еще ничего из своих наработок. Балтовня одна, да надувание щек для важности.
Да бросьте... ))))))))
Ну выложу я фотки коробок набитые готовыми платами... это кому-то поможет??? ))))))))))))))))))
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
05.09.2012, 00:08
Цитата Сообщение от kuvotdo
... это кому-то поможет??? ))))))))))))))))))
Если ТС еще не в шоке, мы ему в этом поможем. Своими драчками. Нам уже не до советов, опять принципиальная разница С & Паскаль, AMD& Intel, ATI&NVidia. Это уже достает.
Пианист играет на том, на чем умеет. И не обязательно на фортепиано.
0
1 / 1 / 0
Регистрация: 08.08.2012
Сообщений: 49
05.09.2012, 00:09
Цитата Сообщение от omokost
Ну батенька, это вы зря. Никак не могут закопать С51, а тут вы взялись закапывать Паскаль.
Паскаль не надо закапывать... его не надо откапывать... )))))))))
А С51... закопал в своё время... как К580ВМ80 и Z80... "У каждого свои скелеты в шкафу"(С)... )))))))
0
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
05.09.2012, 00:12
Цитата Сообщение от omokost
разница С & Паскаль, AMD& Intel, ATI&NVidia. Это уже достает.
Пианист играет на том, на чем умеет. И не обязательно на фортепиано.
Вы сами разводите флуд. Причем какими то аляповатыми примерами.
Пианист - специалист уже сделавший выбор.
Навичак же не может знать всех граблей на своем пути, и тем более самостоятельно сделать выбор.
Его нужно направить, а не загонять в болото...
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
05.09.2012, 00:16
Цитата Сообщение от dosykus
Его нужно направить, а не загонять в болото...
Согласен, возможно пример неудачный. Ну так давно не слышу ТС. Все (и я в том числе) говорим за него, бодаемся, а зачем?
0
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
05.09.2012, 00:29
Цитата Сообщение от omokost
Все (и я в том числе) говорим за него, бодаемся, а зачем?
Отстаивать свое мнение это мое полное право , или нет ?
А по существу - здесь весьма запущенный отдел форума ( я про PIC).
И все это благодаря нашему гуру.
А вкусностей у них весьма много, если конечно не зацикливаться на его "советах"...
0
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37
05.09.2012, 00:31
Цитата Сообщение от dosykus
У вас ошибка. Защелку нужно дернуть после полной передачи .
И защелка это не как CS у SPI slave устройств . Логика работы иная.
Строб защелки это перезапись с сдвигового регистра на выходы.
Это важное замечание, спасибо, я просто делал по старой памяти из мануала по http://robocraft.ru/btog/arduino/519.html, поэтому я сделал по аналогии, не задумываясь о конкретных тонкостях, мануал по 595 поленился почитать, а зря, теперь почитаю обязательно =)

Цитата Сообщение от omokost
Все (и я в том числе) говорим за него, бодаемся, а зачем?
Дык я только собирусь писать, как новое сообщение появляется, я начинаю читать, переваривать, опять пост на 2 листа =))
Язык С я выбрал для себя ввиду того что на работе пишу на php, который сделан на основе С, а некоторые примудрости все же передались из ардуино, вроде типизации итд.
Код который пишет dosykus мне, конечно, более понятен чем код на микропаскале. Но он был мной отвергнут по другим причинам, во первых когда я в гугле набрал "микропаскаль" , то второй же ссылкой получил статью с говорящим названием на этом ресурсе. Во вторых не нашел реализацию под мак. Ну а в третьих, смысл изобретать велосипед если есть вполне качественных инструменты от микрочип которые без танцев с бубнами завелись и работают в моих условиях?
0
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
05.09.2012, 00:34
JikoKiy, не обращайте внимания .
Пишите на С. И не бойтесь спрашивать .

Тот код что я выложил собственно не для замены вашего, это мерялки с SWK ...
0
1 / 1 / 0
Регистрация: 08.08.2012
Сообщений: 49
05.09.2012, 00:36
Цитата Сообщение от omokost
Все (и я в том числе) говорим за него, бодаемся, а зачем?
Согласен... пора перевести разговор в созидательное русло... ))))
Какие у вас будут замечания/ пожелания/ поправки по первому посту темы... в части кода/ схемотехники/ работы Протэуса ??? )))))
0
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
05.09.2012, 00:39
Цитата Сообщение от kuvotdo
работы Протэуса ??? )))))
Дык знамо что , счас ткнешь меня резиной... :)))))))
Лучше обязуем ТС тестить параллельно и в железе и в Proteus ...
0
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37
05.09.2012, 00:39
Цитата Сообщение от dosykus
JikoKiy, не обращайте внимания .
Пишите на С. И не бойтесь спрашивать .
Спасибо! Непременно!
Я кстати хотел поинтересоваться, какая у вас версия протеуса? В моей нет инструмента digital anotyzer, и не удается войти в режим отладки кода, хотя cof файл подсовываю, просто не показывает и все. Может быть такое что это из-за не совместимого компилятора?
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
05.09.2012, 00:43
Цитата Сообщение от dosykus
JikoKiy, не обращайте внимания .
Пишите на С. И не бойтесь спрашивать .
Пишите на том, что вам удобнее. Сам вырос на Object Pascal и Delphi (конец века), но с тех пор не применял, нет возможности (необходимости).
Немного напрягает забубенная запись некоторых операций в С.
0
1 / 1 / 0
Регистрация: 08.08.2012
Сообщений: 49
05.09.2012, 00:45
Цитата Сообщение от dosykus
Цитата Сообщение от kuvotdo
работы Протэуса ??? )))))
Дык знамо что , счас ткнешь меня резиной... :)))))))

Не... оставлю на потом... )))))))))))
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
05.09.2012, 00:48
Цитата Сообщение от JikoKiy
... В моей нет инструмента digital anotyzer...
Это дело не в версии, или плохая локализация или кривая сборка. В протеусе множественная проверка файлой на истинность. Если не совпадет - возможности не видны.
0
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
05.09.2012, 00:48
Цитата Сообщение от JikoKiy
Я кстати хотел поинтересоваться, какая у вас версия протеуса? В моей нет инструмента digital anotyzer, и не удается войти в режим отладки кода, хотя cof файл подсовываю, просто не показывает и все. Может быть такое что это из-за не совместимого компилятора?
Киньте проект в архиве.
0
1 / 1 / 0
Регистрация: 08.08.2012
Сообщений: 49
05.09.2012, 00:49
Цитата Сообщение от omokost
Немного напрягает забубенная запись некоторых операций в С.
Не только... ещё можно упомянуть некоторую вольность в различных компиляторах... ))))
0
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
05.09.2012, 00:59
Цитата Сообщение от JikoKiy
В моей нет инструмента digital anotyzer,
Это не инструмент , ищите в графах .


<Изображение удалено>


<Изображение удалено>

Да и по Proteus сюда http://kazus.ru/forums/showthread.php?t=13198
0
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
05.09.2012, 01:02
Цитата Сообщение от omokost
Это дело не в версии, или плохая локализация или кривая сборка. В протеусе множественная проверка файлой на истинность. Если не совпадет - возможности не видны.
Гы... А вы уверены? Он вылечен нормально. Nemo свое дело знает...
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
05.09.2012, 01:11
Цитата Сообщение от dosykus
Гы... А вы уверены? Он вылечен нормально. Nemo свое дело знает...
Как я могу быть уверен? У меня сборка другая...
0
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37
05.09.2012, 01:23
Цитата Сообщение от dosykus
Киньте проект в архиве.
Проект протеуса или исходники программы? Залью с утра, у меня на работе остались.
Про графы понял, завтра сразу попробую.
Начал читать тему на kazus, не кислый там фак, изучать и изучать =))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.09.2012, 01:23
Помогаю со студенческими работами здесь

Что такое регистр F в PIC-овском Assembler?
Здорово, всем. Что такое регистр F в PIC-овском Assembler? Т.е. это просто свободная ячейка ОЗУ?

Сдвиговый регистр 595N и SPI
Хотел бы запустить сабж с SPI для управления семисегментниками, да ещё с реализацией возможности подключать последовательно несколько таких...

STM32F1038 74hc595d*2 сдвиговый регистр по spi
Имеется ARM-PLC контроллер на stm32f103c8 https://plus.google.com/photos/10591585 ... 1263983601 У него есть 8 релейных выходов,...

ШД, Сдвиговый регистр и МК
Идея состоит в чём?! Есть Tiny13A, есть 155ир13, есть mosfit ы(либо транзисторы) допустим irf540n, униполярный ШД. Хотел намутить мини...

Сдвиговый регистр
http://iosyitistromyss.ru/sdvygovyj-registr.html http://iosyitistromyss.ru/img/storters/rikystir.GIF прочитал эту статью, и у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
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-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru