AtTiny45 и nrf24l01

Тема в разделе "Микроконтроллеры AVR", создана пользователем geher, 22 мар 2014.

  1. geher

    geher Гуру

    Если смотреть не на обозначения, а на номера контактов, то у меня так (сейчас смотрю на работающих устройствах, если ничего не попутал, то работает так):
    Тини:
    слева радиомодуль-справа тини (все питание 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

    Но проблема с контактами, конечно, имеет место.
    У меня радиомодули с платами соединены монтажными проводами М.М, чуть пошевелишь, сразу разъемы сходят с ножек, не до конца, но контакт где-то может потеряться, и в результате связь перестает работать.
     
  2. gonzales

    gonzales Гик

    возник вопрос, а почему закоментированы эти строки
    #include <MirfHardwareSpiDriver85.h>
    Mirf.spi = &MirfHardwareSpi;

    ведь они же настраивают SPI. По крайней мере у меня вроде как тини начал что-то передавать, после того, как я их раскоментировал, вот только передает он лажу
     
  3. geher

    geher Гуру

    Когда я втискивал все это добро в 4киБ AtTiny45, то подкорректировал библиотеку и mirf85.
    Похоже, что это следы той самой корректировки в основном коде.
    Модифицированная версия файлов выложена в сообщении №10 (архив mirf45.zip).
    Надеюсь, больше ни о каких изменениях не забыл.
    PS, В библиотеке mirf85 есть пример, который, если я правильно понял, и лег в основу моего кода. Можно посмотреть там. Тот код как раз рассчитан на неизмененную библиотеку.
    Только все, что в setup() после строки
    // Print out register readinds for important settings
    это всего лишь отладочная выдача. В моем коде частично закомментировано, частично удалено.
     
    Последнее редактирование: 27 авг 2014
  4. gonzales

    gonzales Гик

    да, с исправленной Вами библиотекой тоже идет какая-то передача.
    Пример я конечно смотрел и понял, что именно его Вы видоизменяли.
    Я уже несколько раз проверил подключение, у меня модуль приема все время сваливается на "Radio:No data"
     
  5. gonzales

    gonzales Гик

    В общем "ой бяда, огорчение"(((
    Не могу одолеть, ну никак. Есть подозрение, что новая версия библиотеки 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;


    }
     
    В общем не хватает мне мозгов понять, что не работает((((
     
  6. geher

    geher Гуру

    Выкладываю ту версию RF24, которую я использую.
     

    Вложения:

    • RF24.zip
      Размер файла:
      313,7 КБ
      Просмотров:
      1.016
  7. gonzales

    gonzales Гик

    спасибо за библиотеку. а какая версия Ардуино?
     
  8. geher

    geher Гуру

    Arduino mega 2560
    Arduino IDE 1.0.5 Linux.
     
  9. gonzales

    gonzales Гик

    у меня стоит 1.5.7. может в этом проблема. попробую установить 1.0.5, накатить все Ваши библиотеки, посмотрю
     
  10. geher

    geher Гуру

    Попробовал все-таки запустить датчик с DHT22.
    Увы, по неизвестной мне причине работать не захотело напрочь.
    При подключении модуля DHT22 к PB4 передавались нулевые данные.
    При подключении модуля DHT22 к PB3 не работала даже передача.
    Или DHT22 все-таки чем-то мешает передатчику, или передатчик DHT22, или они мешают друг другу. Или для DHT22 3.3 В маловато будет.
    Пробовал несколько раз, неверное подключение исключено.
    Так что есть большое подозрение, что для DHT22 надо все-таки использовать что-то с бОльшим числом ног.
     
  11. gonzales

    gonzales Гик

    Наконец разобрался, почему не было приема, необходимо было впаять конденсатор на приемнике для Меги. Теперь все хорошо, Тини отправляет, Мега получает. Дальше буду пробовать прикручивать DHT11. О результатах напишу.
     
  12. gonzales

    gonzales Гик

    Пытался прикрутить DHT11 к Attiny45, тоже не получилось, результат такой же
    пробовал и от 5 вольт запитывать контроллер, и обновлять инициализацию радиомодуля каждый раз перед отправкой - в общем не получилось.

    Зато взяв ATtiny84 проблема решилась. Подключние прошло успешно. Единственное, подключение CE и CSN а также датчика возможно только к ногам PB0-PB2. PB3 - это резет, а к остальным ногам (аналоговые входы) PA0-PA7 не получается подключиться. Не смотря на то, что датчик DHT11 должен как раз подключаться к аналоговому входу.

    ЗЫ. Спасибо geher за помощь и предоставленные материалы!!!
     
  13. geher

    geher Гуру

    Энергосберегающая версия кода для ATTiny.
    Заодно выкинул код для DHT22, который, к сожалению, в данном проекте работать отказался.
    Насколько оно сберегает в точных цифрах пока не измерял, но от одного заряда аккумуляторов уже живет в несколько раз больше, чем раньше, и пока не вырубилось.
    Усыпление AtTiny и NRF24L01 честно сплагиачено из сети (первое слегка творчески доработано).
    Заодно пришлось еще немного ужать использованные библиотеки и код, чтобы выиграть еще несколько сотен байт памяти.
    Точнее одну, обновленную версию которой и прилагаю вместе со скетчем.
    Для просыпания используется WatchDog таймер, установленный на 8 секунд (в wdt_enable для этого передается 9, поскольку объявленные константы кончаются на WDTO_2S).
    Для организации паузы между передачами длительностью в минуту пришлось считать "побудки".
     

    Вложения:

  14. Tittyfriend

    Tittyfriend Нуб


    Не могу attiny84 подключить к nrf24l01, 45ку подключил. Каким образом вы меняли библиотеку spi85 для tiny? Не понимаю как соотнести указанные там выходы с spi 84 тиньки.