Главная > Программирование, Радиоэлектроника > Прототип удаленного датчика на базе модуля TR24A

Прототип удаленного датчика на базе модуля TR24A

Как и обещал, выкладываю начальную версию удаленного малопотребляющего датчика на основе 2,4ГГц радиомодуля TR24A.
В данной версии связь односторонняя, т.е. датчик только передает данные хосту. По этому, при использовании нескольких устройств в одной сети возможны «коллизии».
Данная схема позволяет подключать «народный» термометр DS18B20, а также емкостный датчик относительной влажности воздуха HCH-1000


В качестве ядра устройства выступает микроконтроллер ATMega48PA. PA в названии обозначет, что кристалл разработан с применением технологии picoPower, что означает возможность полноценной работы на напряжениях от 1,8В, а также сверхнизкое потребление, особенно в спящих режимах. Так, заявлено, что в спящим режиме с включенным генератором 32768Гц контроллер будет потреблять порядка 0,7мкА.


Плату как всегда разводил, чтоб на одну сторону и без дырок. И из-за этого наступил на грабли с ногой SS. Для разводки было удобно на вход — так и сделал… Но, если SPI-интерфейс используется в режиме мастера, то нога SS контроллера должна быть или выходом или вообще не использоваться. Иначе, она переключает режим работы SPI из мастера в слейв. Потому, на картинке схема и плата уже переделанные и появился еще одна дорожна на «втором» слое.


В данной прошивке таймер2 работает от внешнего кварца на 32,768КГц. Прерывание по переполнению раз в секунду. Раз в минуту происходит опрос датчиков температуры, влажности, а также измерение напряжения батареи. После чего, опять же, происходит отправка данных по радиоканалу.
Подключение DS18B20 — не совсем стандартное — в качестве подтяжки используется внутренняя подтяжка порта. При том что датчик находится прямо на плате, это не столь критично.
Измеритель влажности основан на емкостном принципе. Для того чтобы узнать влажность, необходимо измерить емкость датчика в пределах 300-400пФ. Для этого измеряется время заряда «конденсатора» при помощи аналогового компаратора и режима «захвата» таймера1. Единица измерения 1/8мкс.
Для приема сигнала применяется USB-донгл с TR24A на борту. Немного изменил конфигурацию регистров, в частности касается преамбулы и скремблирования
Осталось добавить режим калибровки (возможно, через радио). А также обратную связь для организации нормального обмена данными с многими датчиками. Хватит, 1:10 отношения приема к отправке.
Также, думаю, не помешает отправка в пакете данных не только за текущий период, но и за несколько предыдущих, на случай, если не все пакеты дошли к мастеру.

Файлы:

mega48-tr24a-v0.1

Добавлено 30.05.2011:

 


 

Добавлено 31.05.2011:

 
Графики падения напряжения на ионисторе емкостью 1Ф с датчиком температуры и без(по Y — напряжение в мВ, по X — время в минутах):

 

Отсюда выходит, что средний ток потребления в первом случае ~53мкА, во втором — 25мкА, что в принципе, соответствует расчетам. Правда, дс-ка не работает при питании ниже 3В…

комментариев 45 to “Прототип удаленного датчика на базе модуля TR24A”

  1. Boris:

    Спасибо, поехал на кардачи 🙂

  2. Boris:

    А как Вы заливаете пошивку в микроконтроллер?

    • Klim:

      С самого начала — 5 проводков LPT порта и программатор uniprof
      Потом когда ЛПТ порт спалил, спаял типа такого. Но он омобо не использовался, потому как купил AVR Dragon.

  3. Boris:

    Припаять проводки к соответсвующим выводам на плате удаленного датчика (MISO, MOSI, Reset, SCK, VCC, GND) и подключить к программатору?

  4. Boris:

    Какие значения фьюзов?

  5. Boris:

    HI и LO фьюзы прошились а вот EXTENDED = 0x01 и никак не могу его изменить на 0xFF

    • Klim:

      ну я его в принципе, и не трогал. но судя по всему там 0xFF должно быть изначально

  6. Boris:

    а без HCH-1000 будет работать?

  7. Boris:

    хочу проверить инициализацию трансивера, вместо HCH-1000 припаял светодиод, если инициализация трансивера пройдет удачно диод мигнет, если нет будет гореть постоянно (буду считывать значение регистров tr24a), как в исходнике отключить измерение влажности (какие строчки закомментировать) ?

    • Klim:

      В блоке if (timer4Hz==20) закоментировать всё кроме

      				ow_reset(); 
      				ow_command(DS18X20_READ, 0xFF);
      				for ( j=0 ; j< DS18X20_SP_SIZE; j++ ) 
      					packetBuf[j+3]=ow_byte_rd();
      
      

      Но в текущей версии библиотеки для TR24A функция инициализации всегда выдаст 0. Так что для проверки желательно прочитать какой-нибудь регистр и сравнить его с тем что там должно быть.
      Также можно смотреть по ноге PKT.

  8. Boris:

    в заметил что в исходниках у датчика channel=9 а у USB-TR24A канал 85, так нужно?

    • Klim:

      забыл поменять наверное… Игрался с настройками USB-варианта.
      Но в консоли можно задать 9й канал, чтоб не менят. исходники. Только после этого перезапустить прием командой r
      Также проверьте идентичность регистров инициализации.

  9. Boris:

    правильно проверяю 9й регистр?
    PORTC |= _BV(PC3);
    TR24Init();

    if (TR24ReadReg(0x09)==0x3003) {PORTC &= ~_BV(PC3);}

  10. Boris:

    схему прозвонил, светодиодом помигал, а регистр не читается, наверно tr24a бракованый

  11. Boris:

    3,3 от Carduino 4+ он у меня в роли ISP программатора

  12. Boris:

    я правда вместо L1 поставил перемычку и добавил разьём для ISP программирования

  13. Boris:

    собрал датчик на макетке, результат тот же

    • Klim:

      странно. попробую себе перезалить прошивку из последних исходников

      • Klim:

        хм. что-то скомпиленный хекс не пошел))
        Перекомпилил, перезалил — вроде работает.
        Теперь и хост и датчик инициализируются на 85м канале.
        Для инициализации хоста достаточно только написать в консоли v,1 или v,3 — тогда будет видно содержимое пакета.

      • Klim:

        Архив с исходниками обновил.

  14. Boris:

    вопрос по инициализации регистров трансивера, в масиве regsFramer[] значения регистров 48-58 адрес 48го передается SPISend(0x30) а остальные? трансивер сам вычисляет следующий адрес регистра?

    • Klim:

      да, там все по даташиту. этот блок регистров можно гнать последовательно, если не поднимать SS.

  15. Boris:

    а если кварц на 32,768КГц убрать датчик запустится? немогу понять почему у меня этот датчик не запускается, есть подозрение на кварц.

    • Klim:

      без кварца не будет работать таймер2 — то что все зависнет.
      можно закомментировать строчку if (status & ST_TX)
      тогда хотя бы одие пакет при запуске отправится

  16. Boris:

    У меня датчик и на 2v работает

  17. Boris:

    Продвижение с проектом есть?

    • Klim:

      Идеи как все должно выглядеть — есть, а вот на реализацию, к сожалению, времени совсем нет…

  18. Boris:

    Я програмку начал писать, для роутера tplink , уже данные с датчика ложатся в базу

  19. Boris:

    Если частоту контроллера Atmega 48PA понизить до 1мгц средний ток потребления уменьшиться?

    • Klim:

      Вполне возможно, но не факт. Основное потребляющее устройство — трансивер. Если будет 1МГц, то возможно ему придется дольше быть во включенном режиме, медленнее будте идти иницилизация. В общем, надо считать, или мерять в реале.

  20. Валерос:

    Объясните пожалуйста, как у Вас реализовано(я так понмаю програмнно) измерене ёмкост датчика влажности?

    • Klim:

      >Для того чтобы узнать влажность, необходимо измерить емкость датчика в пределах 300-400пФ.
      >Для этого измеряется время заряда «конденсатора» при помощи аналогового компаратора и режима «захвата» таймера1. Единица измерения 1/8мкс. [/quote]
      Время заряда до половины напряжения питания пропорционально емкости.

  21. Victor:

    Интересно, какова дальность работы у этой схемы, на сколько метров можно удалять приемник от передатчика ?

    • Klim:

      В пределах квартиры — две бетонные стены работает нормально, хотя есть «мертвые зоны».
      На улице — 100м на прямой видимости.
      Хотя, мне кажется, основная проблема — антенна. В даташите на микросхему явно указана F-антенна (с отводом на землю) в то время как тут в модуле, антенна непонятной формы и висит в воздухе

Оставить комментарий

Или