Здравствуйте! Вот и настало время "победить" SPI. От помощи не откажусь. Появилось время. Сижу дома с температурой. Сегодня сдал тест на Ковид19. Сказали результат 4 дня ждать. Решил пополнить знания по указанному протоколу. И если я думал, что I2C это сложно, то в SPI вообще настроек оказалось море. Понимаю, что начнете сейчас закидывать камнями, но без вашей помощи не как... Итак начнем. Задача: передать через МК на РадиоМодуль (nRF24L01+) число (например: 100), это число отправить другому РадиоМодулю он своему МК, тот обрабатывает и возвращает обработанное число, например 100+1=101 и так далее. Затем зная базовые настройки можно вникать в детали.
Открываю ДатаШит по MSSP в режиме SPI.
17.2 Управляющие регистры. Их всего 2.
SSPSTAT: Регистр статуса модуля MSSP, выбираю нужные биты настройки.
бит 7: SMP: Фаза выборки бита Ведущий режим SPI 1 = опрос входа в конце периода вывода данных 0 = опрос входа в середине периода вывода данных Ведомый режим SPI Для режима ведомого SPI этот бит всегда должен быть сброшен в '0' бит 6: CKE:Выбор фронта тактового сигнала SPI режим, CKP=0 1 = данные передаются по переднему фронту сигнала на выводе SCK 0 = данные передаются по заднему фронту сигнала на выводе SCK SPI режим, CKP=1 1 = данные передаются по заднему фронту сигнала на выводе SCK 0 = данные передаются по переднему фронту сигнала на выводе SCK бит 0: BF: Бит статуса буфера Прием (SPI и I2C режимы) 1 = прием завершен, буфер SSPBUF полон 0 = прием не завершен, буфер SSPBUF пустЯ попробую объяснить своим КостноЯзычием, а вы меня поправьте пожалуйстаБит7 - для чтения "чужих" данных приемником после отправки "своих" данных (когда: после отправки или во время отправки) Бит6 - фронт это наверное когда отправляем посылку 10010011 выбираем где начало паровоза. Бит0 - всегда проверяем на наличие посылки в ящике, если полон, то сброс.
SSPCON: Регистр управления модуля MSSP
бит 6: SSPOV: Бит переполнения приемника SPI режим 1 = принят новый байт, а SSPBUF содержит предыдущие данные(байт в SSPSR будет потерян).В ведомом режиме пользователь должен прочитать содержимое регистра SSPBUF даже, если только передает данные. В ведущем режиме бит в '1' не устанавливается, т.к. каждая операция инициализируется записью в SSPBUF. (сбрасывается в '0' программно) 0 = нет переполнения бит 5: SSPEN: Бит включения модуля MSSP Когда модуль включен, соответствующие порты ввода/вывода настраиваются на выход или входSPI режим 1 = модуль MSSP включен, выводы SCK, SDO, SDI, -SS используются модулем MSSP 0 = модуль MSSP выключен, выводы работают как цифровые порты ввода/вывода бит 4: CKP: Бит выбора полярности тактового сигнала SPI режим 1 = пассивный высокий уровень сигнала 0 = пассивный низкий уровень сигнала биты 3-0: SSPM3:SSPM0: Режим работы модуля MSSP 0000 = ведущий режим SPI, тактовый сигнал = FOSC/4 0001 = ведущий режим SPI, тактовый сигнал = FOSC/16 0010 = ведущий режим SPI, тактовый сигнал = FOSC/64 0011 = ведущий режим SPI, тактовый сигнал = выход TMR2 / 2 0100 = ведомый режим SPI, тактовый сигнал с вывода SCK. Вывод -SS подключен к MSSP 0101 = ведомый режим SPI, тактовый сигнал с вывода SCK. Вывод -SS не подключен к MSSPИ опять мои корявые расшифровки на уровне "школота"Бит6 - почтовый ящик переполнен и из него вываливаются письма... Бит5 - тумблер включения модуля Бит4 - что такое пассивный уровень сигнала (загуглил: Пассивный уровень - это уровень, при котором исполнительное устройство выключено, так тумблер же в 5 бите... не понятно) Бит3-0 - это скорость для разных режимов. Если мой передатчик ведущий он передает радиомодулю сигнал который в свою очередь ведомый. А на приемнике наоборот.
Биты регистров TRIS должны бытьнастроены следующем образом: • SDI, бит TRIS должен быть установлен в '1'; • SDO, бит TRIS должен быть сброшен в '0'; • SCK (ведущий режим), бит TRIS должен быть сброшен в '0'; • SCK (ведомый режим), бит TRIS должен быть установлен в '1'; • -SS, бит TRIS должен быть установлен в '1'
Казалось бы все просто... Но это лишь даташит... Почему с I2C все проще было? Минимум настроек, передал-принял. Конечно же сам тоже не догнал как там делать только после того как вы мне дали пример подключения термодатчика, стало что-то проясняться.
Честно говоря дошел до картинки и все мозг закипел. У кого-нибудь есть пример (легкий) с минимальными настройками передачи-приема на nRF24L01+? Нашел пример на американском сайте, но там регистрация меня блокирует. Может я попал под санкции)
И еще. подскажите как в Протеус добавить nRF24L01+? Все эту проблемку решил... Есть модуль.
У кого-нибудь есть пример (легкий) с минимальными настройками передачи-приема на nRF24L01+?
Вот лови кучку примеров что у меня есть, отдельно по папкам и описание, скажу сразу - все примеры не мои, а собраны тут на форуме и на других англ. площадках, так что подсказать детально не смогу. Пару примеров были от форумчанина Mixas
Я думаю, что здесь проблема в том что это не модуль (не библиотека), а просто нарисованый компонент. Симулироватся он не может. Меня все время преследуют умные мысли...но я быстрее!!!
Ясно. Хотел попробовать передачу от МК к МК тоже оказалось не просто.... Придется искать что-то по проще. Не одолеть мне такие вещи. Подскажите какой-нибудь не дорогой радио модуль с общением через USART. Задача такая. Хочу сделать авто-финиш при приеме зачета 100 метровки и секундомер на челночный бег.
То есть в первом варианте на старте при пересечении линии (разрыве подсветки фоторезистора) начало отсчета и передача на финиш старта, а на финише остановка времени, тоже с разрывом подсветки. Во втором варианте при пересечении старта начало отсчета, при пересечении второй полоски (10 метров от старта) считает +10 метров и так далее... Почему рассматриваю бюджетный вариант, потому что как всегда все за свой счет, хоть и для общего дела (для студентов). Со студентов деньги не беру, так как это самый бедный слой населения.
Нашел такое: HC-12 дальность 1000 метров, 235 рублей. Вроде норм. Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
Сообщение отредактировал
Anatoliy1000 - Вс, 20.12.2020, 10:22
Пробуйте, дерзайте. Но тут нужны не фоторезисторы, а инфракрасный излучатель и приемник. А еще лучше старт нажимать вручную. А то где вы поставите датчик, что бы не было ложных срабатываний. Ну и NRF2401+, мне кажется, буде получше, они точно передадут, то что вы хотите, а с HC-12 нужно лепить какую то CRC, да и дороже они. Меня все время преследуют умные мысли...но я быстрее!!!
1. Вот попытка от МК к МК, что бы разобраться как вообще с этим работать. Вроде ошибки не выдает, но и передачу не производит. 2. Почему инфракрасный излучатель? Мне кажется проще направить лазерную указку на фоторезистор - пересечение это старт (финиш). К тому же минимум деталей: с одной стороны "коробочка с начинкой" в том числе указка + приемный фоторезистор, с другой зеркало. А как ИК точно рассчитает пересечение линии?
Anatoliy1000, Я, чесно говоря, сейчас не очень соображаю, что бы Вам помочь (коронавирус у меня и температура сморила). Но по беглому просмотру кода, там ничего и не будет передавать. Модуль NRF24L01+ не настроен вообще. И еще, Вам уже писали про это кучу раз, но вы упорно пишете одно и то же. В 18f252 НЕТУ ВНУТРЕННЕГО ГЕНЕРАТОРА!!!!!!! Меня все время преследуют умные мысли...но я быстрее!!!
Это я так называю RC. Мой сленг хромает... Сори. Это тоже самое когда люди говорят вместо деньги финансы - у меня мозг взрывается (я финансист), но я не поправляю. кому как удобней... А когда начал научную литературу "почитывать", так вообще вышел из рамок социального общения. Понял почему ученные это элита, голубая кровь, полубоги с одной стороны и люди из другого мира с другой. Сам давно пытаюсь написать научную статью, но не хватает терпения, времени, а может просто лень... В общем выздоравливайте. Я сам сегодня получил тест на КОВИД после самоизоляции (почти месяц на даче жил). Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
Попытка 2. Пока было время в выходные и немного во время болезни, начитался про этот спай. Оказалось все просто. Но в симуляции выдает ошибку. В железе не пробовал. Если будет время посмотрите ПЖ. Сделал передачу по 2 проводам от МК1 к МК2 числа 10. МК2 принимает 10, прибавляет 100 отображает 110. Вроде все учел, но симулятор гонит ошибку. Может мой косяк, но все на 100 раз проверил. Тем более что там настроек вообще мало оказалось.
Добавлено (21.02.2021, 17:30) --------------------------------------------- Пришли платки NRF24L01 со встроенным RX-TX. Стоимость на 30 рублей дороже, а в освоении "детский сад" + всего 2 ноги для приема передачи.