Если смотреть не на обозначения, а на номера контактов, то у меня так (сейчас смотрю на работающих устройствах, если ничего не попутал, то работает так): Тини: слева радиомодуль-справа тини (все питание 3.3 В, помеченная нога тини (1, она же Reset) никуда не подключена) 1-4 (земля) 2-8 (питание) 3-2 4-3 5-7 6-6 7-5 8-не подключено Мега слева радиомодуль-справа мега 1-земля 2-3.3v 3-48 4-49 5-52 6-51 7-50 Пины на радиомодуле идут так (смотреть со стороны радиодеталей, помеченный пин справа снизу) 8 | | 7 6 | | 5 4 | | 3 2 | | 1| Пины на тини идут так (смотреть со стороны, где метка, помеченный пин слева сверху) 1 |0 | 8 2 | | 7 3 | | 6 4 | | 5 Но проблема с контактами, конечно, имеет место. У меня радиомодули с платами соединены монтажными проводами М.М, чуть пошевелишь, сразу разъемы сходят с ножек, не до конца, но контакт где-то может потеряться, и в результате связь перестает работать.
возник вопрос, а почему закоментированы эти строки #include <MirfHardwareSpiDriver85.h> Mirf.spi = &MirfHardwareSpi; ведь они же настраивают SPI. По крайней мере у меня вроде как тини начал что-то передавать, после того, как я их раскоментировал, вот только передает он лажу
Когда я втискивал все это добро в 4киБ AtTiny45, то подкорректировал библиотеку и mirf85. Похоже, что это следы той самой корректировки в основном коде. Модифицированная версия файлов выложена в сообщении №10 (архив mirf45.zip). Надеюсь, больше ни о каких изменениях не забыл. PS, В библиотеке mirf85 есть пример, который, если я правильно понял, и лег в основу моего кода. Можно посмотреть там. Тот код как раз рассчитан на неизмененную библиотеку. Только все, что в setup() после строки // Print out register readinds for important settings это всего лишь отладочная выдача. В моем коде частично закомментировано, частично удалено.
да, с исправленной Вами библиотекой тоже идет какая-то передача. Пример я конечно смотрел и понял, что именно его Вы видоизменяли. Я уже несколько раз проверил подключение, у меня модуль приема все время сваливается на "Radio:No data"
В общем "ой бяда, огорчение"((( Не могу одолеть, ну никак. Есть подозрение, что новая версия библиотеки RF24 больше не контачит с библиотекой mirf85. Я проверил радиомодули и их подключение с помощью скетча GettingStarted из примеров RF24. Модули работают исправно, по крайней мере отзываются и показывают всю информацию о себе. Проверить их парную работу пока не могу, так как пока нет второй ардуино. Вдоль и поперек излазил скетч топикстартера для Attiny45. Сравнивал его с примером из библиотеки mirf85 в надежде найти проблему. Переписал код для ATtiny45, добавил мигание светодиода при успешной отправке (по идее) Код (Text): Mirf.send((byte *) &buffer); while( Mirf.isSending() ) //пакет отправляется { delay(1); } // delay(20000); delay(2000); //мигаем светодиодом по окончании отправки digitalWrite(4, HIGH); // turn the LED on (HIGH is the voltage level) delay(500); // wait for a second digitalWrite(4, LOW); // turn the LED off by making the voltage LOW delay(1000); Итог, светодиод мигает, то есть отправка идет. В основном скетче же все время получаю "Radio:No data", что свидетельствует о том, что не выполняется условие if ( radio.available( &pipe ) ). Соответственно, если предположить, что передающая часть, любезно выложенная ТС работает, можно сделать вывод что изменилось формирование pipe. В примере написано соответственно формирование адреса для ATTiny идет byte TADDR[] = {0xe3, 0xf0, 0xf0, 0xf0, 0xf0}; а для меги radio.openReadingPipe(1,0xF0F0F0F0E3LL); то есть перевернутый порядок Сама функция availible в библиотеке представляет собой Код (Text): RF24::available(uint8_t* pipe_num) { //Check the FIFO buffer to see if data is waitng to be read if (!( read_register(FIFO_STATUS) & _BV(RX_EMPTY) )){ // If the caller wants the pipe number, include that if ( pipe_num ){ uint8_t status = get_status(); *pipe_num = ( status >> RX_P_NO ) & B111; } return 1; } return 0; } В общем не хватает мне мозгов понять, что не работает((((
у меня стоит 1.5.7. может в этом проблема. попробую установить 1.0.5, накатить все Ваши библиотеки, посмотрю
Попробовал все-таки запустить датчик с DHT22. Увы, по неизвестной мне причине работать не захотело напрочь. При подключении модуля DHT22 к PB4 передавались нулевые данные. При подключении модуля DHT22 к PB3 не работала даже передача. Или DHT22 все-таки чем-то мешает передатчику, или передатчик DHT22, или они мешают друг другу. Или для DHT22 3.3 В маловато будет. Пробовал несколько раз, неверное подключение исключено. Так что есть большое подозрение, что для DHT22 надо все-таки использовать что-то с бОльшим числом ног.
Наконец разобрался, почему не было приема, необходимо было впаять конденсатор на приемнике для Меги. Теперь все хорошо, Тини отправляет, Мега получает. Дальше буду пробовать прикручивать DHT11. О результатах напишу.
Пытался прикрутить DHT11 к Attiny45, тоже не получилось, результат такой же пробовал и от 5 вольт запитывать контроллер, и обновлять инициализацию радиомодуля каждый раз перед отправкой - в общем не получилось. Зато взяв ATtiny84 проблема решилась. Подключние прошло успешно. Единственное, подключение CE и CSN а также датчика возможно только к ногам PB0-PB2. PB3 - это резет, а к остальным ногам (аналоговые входы) PA0-PA7 не получается подключиться. Не смотря на то, что датчик DHT11 должен как раз подключаться к аналоговому входу. ЗЫ. Спасибо geher за помощь и предоставленные материалы!!!
Энергосберегающая версия кода для ATTiny. Заодно выкинул код для DHT22, который, к сожалению, в данном проекте работать отказался. Насколько оно сберегает в точных цифрах пока не измерял, но от одного заряда аккумуляторов уже живет в несколько раз больше, чем раньше, и пока не вырубилось. Усыпление AtTiny и NRF24L01 честно сплагиачено из сети (первое слегка творчески доработано). Заодно пришлось еще немного ужать использованные библиотеки и код, чтобы выиграть еще несколько сотен байт памяти. Точнее одну, обновленную версию которой и прилагаю вместе со скетчем. Для просыпания используется WatchDog таймер, установленный на 8 секунд (в wdt_enable для этого передается 9, поскольку объявленные константы кончаются на WDTO_2S). Для организации паузы между передачами длительностью в минуту пришлось считать "побудки".
Не могу attiny84 подключить к nrf24l01, 45ку подключил. Каким образом вы меняли библиотеку spi85 для tiny? Не понимаю как соотнести указанные там выходы с spi 84 тиньки.