0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37

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

03.09.2012, 18:29. Показов 87061. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru