|
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37
|
||||||
PIC, SPI и сдвиговый регистр.03.09.2012, 18:29. Показов 87260. Ответов 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
Регистрация: 08.08.2012
Сообщений: 49
|
|||||||
| 05.09.2012, 01:31 | |||||||
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 Начинаем с азов... инициализация МК...
0
|
|||||||
|
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
|
|
| 05.09.2012, 01:35 | |
|
kuvotdo, ну устал же просить, убирайте длинный код под спойлер, тяжело ползать взад/вперед.
0
|
|
|
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37
|
|
| 05.09.2012, 11:49 | |
|
kuvotdo, а в чем разница порядка инициализации? Я в даташите вроде бы не нашел никаких данных про это. И в таком случае, где я должен объявлять прерывания? Это очень важная информация, я думаю что нужно собрать статью на эту тему, для таких ламеров как я это бы сильно упростило жизнь и приблизило к понимаю происходящих процессов.
0
|
|
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
||
| 05.09.2012, 17:39 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37
|
|
| 05.09.2012, 18:37 | |
|
Так я ж спросил, что конкретно залить, протеус или проект в исходниках? Выкладываю оба.
https://dl.dropbox.com/u/25702... %20SPI.zip - Протеус https://dl.dropbox.com/u/25702... scan.X.zip - Исходники
0
|
|
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
|
| 05.09.2012, 19:01 | |
|
JikoKiy, проект Proteusа - *.dsn и ваш исходник вместе с *.coff ....
0
|
|
|
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37
|
|
| 05.09.2012, 20:09 | |
|
https://dl.dropbox.com/u/25702578/SPI%20test.zip
Вот. Положил оба файла.
0
|
|
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
|
| 05.09.2012, 20:37 | |
|
JikoKiy, Вы используете MPLABX , там все еще сырое .
Да и coff им генерируемый Proteus не видит... ЗЫ. Не прав. Сейчас поставил MPLABX свежий и компилятор XC8. Все видится и работает . Правда с шрифтами косяк. Почему я и не пишу комменты на кириллице... картинко <Изображение удалено>
0
|
|
|
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37
|
|
| 05.09.2012, 23:37 | |
|
То есть мой cof не видит, а точно такой же под другой платформой видит?
0
|
|
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
||
| 06.09.2012, 01:26 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 37
|
|
| 06.09.2012, 11:46 | |
|
А у меня 7.10, наверняка в этом проблема. Сейчас попробую вашу версию.
Не помогло, явно что то делаю не так, наставте на путь истиный пожалуйста. Жму паузу, в меню выбираю source code, и получаю пусто: <Изображение удалено>
0
|
|
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
|
| 08.09.2012, 01:22 | |
|
Попробуйте все пихнуть в одну папку и Proteusa файлы и исходник с coff.
В той же папке собрать. На MACe еще не пробовал , ибо нету...
0
|
|
|
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 275
|
||
| 08.09.2012, 05:54 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
||
| 08.09.2012, 10:41 | ||
В двух словах : Запись в порт происходит по схеме Read ->Modify->Write. Так как в 16х нет защелки порта, при последовательной записи бит в порт , в определенной ситуации, уровень на пине установиться не успевает ...
0
|
||
|
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 275
|
|
| 08.09.2012, 10:56 | |
|
Понятно. Спасибо
В заголовке темы PIC, в посте SWK написано что код для PIC, а я про AVR думаю
0
|
|
|
SWK
|
||
| 08.09.2012, 11:41 | ||
И аналогично на всех осталных портах. |
||
|
1 / 1 / 0
Регистрация: 08.08.2012
Сообщений: 49
|
|
| 08.09.2012, 12:22 | |
|
Приехали!!! ))))
Или вы издеваетесь??? )))))))))))))))) Тогда попробуйте прочитать состояние защёлки порта... что... не получается??? )))) Читаться то один фиг будет реальное состояние пина, а не защёлки... в отличие от 18-ых и 24-ых...)))) В этом-то и вся суть RMW... ))))))))
0
|
|
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
||
| 08.09.2012, 12:44 | ||
Гы... SWK, я и не знал что все так запущенно . Вы получаетесь последний из "могикан" , даже "птичья стая пастера" осознала RMW... Параграф 9.10 учить наизусть : http://ww1.microchip.com/downtoods/en/d ... 31009a.pdf
0
|
||
|
1 / 1 / 0
Регистрация: 22.09.2010
Сообщений: 393
|
||
| 08.09.2012, 12:50 | ||
0
|
||
|
SWK
|
||||
| 08.09.2012, 14:08 | ||||
Вы - то писали, что НЕТ защелки. А что чтение идет непосредственно из порта (что вполне логично, и не только в PIC), - так это только для вас - откровение. Читается именно состояние ног, что толку читать защелку, которая определяет лишь состояние ног, назначенных на вывод?
То это такая элементарщина, о которой лишний раз и упоминать - то не стоит. Просто это должно сидеть на уровне подсознания, и учитываться при проектировании, как и куча других мелочей. При моем более чем 40 летнем опыте занятий цифровой электроникой, напоминать мне о таких вещах - только пацан может, впервые о них прочитавший. И я при отладке всегда проверяю форму и длительность стробов, особенно их фронты. И уж никогда они у меня не затянутся на 4 такта, как показано на рисунке. Если же его длина меньше такта (62,5 нс при 16 МГц), то про упомянутую проблему можете и не вспоминать. И минимальную длительность строба в программе я заложил тоже намерянно. Если бы при отладке обнаружилась нестабильность или затянутость фронтов стробов, то вставить пустые команды между сменой состояния ног - ничего не стоило. Но все прекрасно работает и так, как и планировалось. У меня - всегда все работает, даже неинтересно... Но тем не менее, после изготовления очередной платы, я все тщательно проверяю. Не для перестраховки. Просто надежность - для меня всегда стояла высшим приоритетом.
Ну, я - то - не из вашей стаи, (нахватавшейся верхушек и всяких аббревиатур), к моему великому счастью. Я знаю суть вещей, и мне этого достаточно. И мне пофигу, какими буквами очередной пацан их окрестит. Но чтобы вас разочаровать - я сразу понял, о чем речь. А Челябинский Моторный помянул просто, чтобы посмеяться над очередным выскочкой - Моськой. Если вы еще этого не поняли... И не мочите штаны от радости - повода нет. |
||||
| 08.09.2012, 14:08 | |
|
Сдвиговый регистр 595N и SPI STM32F1038 74hc595d*2 сдвиговый регистр по spi ШД, Сдвиговый регистр и МК Сдвиговый регистр Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|