Инфа по трансиверу TR24

Тема в разделе "WASM.ELECTRONICS", создана пользователем a9d, 3 фев 2010.

  1. Fortune

    Fortune New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2011
    Сообщения:
    3
    Добрый день. Заинтересовался этой темой. Скачал Ваш protokol.rar и пытаюсь откомпилировать код под winavr. Опыт программирования - небольшой. Вообщем получил такие сообщения при компиляции:
    Код (Text):
    1. In file included from main.c:6:
    2. protocol.h: In member function 'void PROTOCOL::CProtocol::init(unsigned char)':
    3. protocol.h:60: error: 'MyTr' was not declared in this scope
    4. protocol.h: In member function 'unsigned char PROTOCOL::CProtocol::read(unsigned char, unsigned char*)':
    5. protocol.h:75: error: 'MyTr' was not declared in this scope
    6. protocol.h: In member function 'unsigned char PROTOCOL::CProtocol::send(unsigned char, unsigned char, unsigned char*, unsigned char, unsigned char, unsigned char)':
    7. protocol.h:197: error: 'MyTr' was not declared in this scope
    8. In file included from main.c:8:
    9. tr24a.h: In member function 'void TR24A::CTr24a::ModeSleep(unsigned char)':
    10. tr24a.h:414: error: 'MySpi' was not declared in this scope
    11. tr24a.h:415: error: '_delay_ms' was not declared in this scope
    12. tr24a.h: In member function 'void TR24A::CTr24a::reset()':
    13. tr24a.h:685: error: '_delay_ms' was not declared in this scope
    14. tr24a.h: In member function 'void TR24A::CTr24a::write(unsigned char, unsigned int)':
    15. tr24a.h:703: error: 'MySpi' was not declared in this scope
    16. tr24a.h:704: error: '_delay_us' was not declared in this scope
    17. tr24a.h: In member function 'unsigned int TR24A::CTr24a::read(unsigned char)':
    18. tr24a.h:724: error: 'MySpi' was not declared in this scope
    19. tr24a.h:727: error: '_delay_us' was not declared in this scope
    20. tr24a.h: In member function 'unsigned char TR24A::CTr24a::init()':
    21. tr24a.h:809: error: '_delay_ms' was not declared in this scope
    22. tr24a.h: In member function 'void TR24A::CTr24a::PkgSend(unsigned char, unsigned char*)':
    23. tr24a.h:876: error: 'MySpi' was not declared in this scope
    24. tr24a.h:877: error: '_delay_us' was not declared in this scope
    25. tr24a.h: In member function 'unsigned char TR24A::CTr24a::PkgRead(unsigned char*)':
    26. tr24a.h:902: error: 'MySpi' was not declared in this scope
    27. tr24a.h:903: error: '_delay_us' was not declared in this scope
    28. make.exe: *** [main.o] Error 1
    Где и как обьявить MyTr и MySpi?

    Вообщем не знаю, правильно ли это (в с++ соображаю не сильно), но обьявил в main.c так:
    Код (Text):
    1. #include "spi.h"
    2. SPI::CSpi MySpi;
    3. #include "tr24a.h"
    4. TR24A::CTr24a MyTr;
    Спаял макет на ATmega1280 (все что было трехвольтовое под рукой:) ) буду пробовать отлаживать код.
     
  2. Valeri4

    Valeri4 New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2011
    Сообщения:
    20
    С MySpi я не разбирался и использовал библиотечную функцию из компиляторовского spi.h файла : прочитать порт x=spi(0); записать в порт spi(x); только в программе SS ножку нужно дергать местами.
    delay.h не указали.
     
  3. Valeri4

    Valeri4 New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2011
    Сообщения:
    20
    У меня другая проблема возникла.
    Когда проверяю записанные регистры инициализации нахожу 8 ошибок несоответствия того что я записал и то что там в результате осталось. Причем отличаются все бракованные регистры лишь старшим битом старшего байта.
    Может у кого такое было. как боротся?надо ли, или оно не влияет на работу а просто причуд модуля.
     
  4. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Это не причуда модуля. Это твой косяк в SPI(настройки или схема).
    На работу еще как влияет.
     
  5. Valeri4

    Valeri4 New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2011
    Сообщения:
    20
    Возможно и связь, но почему только старший бит и всегда одни и те же регистры?
     
  6. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Это твой косяк в SPI. У меня такое было на арм. Там конфигов на SPI много.
    Скорей всего ты его неправильно настроил.
     
  7. Valeri4

    Valeri4 New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2011
    Сообщения:
    20
    Просмотрел апноуты и все конфиги. Начал пробовать, связь вообще пропала. По апноуту минимальный период такта SPI составляет 78нс что есть 12мГц - странно как-то. Дальше судя по даташиту тактирующие импульсы идут от 0В Mode 0 SPI (тоесть когда импульсов нет тогда на ногк sck 0В). У меня же хоть как-то работало при варианте наоборот - Mode 2 SPI. Продолжаю изучения...
     
  8. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Модуль стабильно работает на частоте SPI 3Мгц. Я об этом не раз писал. Также в моем коде приведен правильный конфиг для AVR. На арм смотреть смысла нет. Там у каждого кристала SPI настраивается по своему.
     
  9. Fortune

    Fortune New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2011
    Сообщения:
    3
    Не ну если нога железная а не софтовая, то она сама будет дергаться поидее.
     
  10. Valeri4

    Valeri4 New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2011
    Сообщения:
    20
    Нога SS особая, по ней даже отдельный раздел в даташите есть. Иногда приходится софтово дергать.
     
  11. Fortune

    Fortune New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2011
    Сообщения:
    3
    Хорошо, надо будет почитать на счет этой ноги. Сейчас чтобы далеко не ходить пытаюсь запустить класс CUART топикстартера. Если все пойдет, тогда - инициализацию трансивера.

    Cудя по ответу, полученному от метода CTr24a::init() инициализация трансивера прошла успешно. Осталось только спаять еще один макет и попытаться установить связь.
     
  12. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    SS не будет дергаться сама. Да и зачем это вообще нужно в SPI?
    SS это crystal select. Это нужно для слейва.
     
  13. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    SS не будет дергаться сама. Да и зачем это вообще нужно в SPI?
    SS это crystal select. Это нужно для слейва.
     
  14. Valeri4

    Valeri4 New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2011
    Сообщения:
    20
    Точнее Slave Select, используется как выход когда мк работает в режиме мастера.
     
  15. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Этот вывод работает в режиме слейва. Или как ты думаешь МК должен узнать о входящих данных?
     
  16. Valeri4

    Valeri4 New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2011
    Сообщения:
    20
    С ошибками инициализации поборолся. Все было в настройках SPI. Не мог разобраться так как в ДШ на микросхему указан пример для режима с детекцией по фронту, а в модуле тупо бит фазы подтянут к питанию и идет детекция по спаду. Пришлось прошерстить даташит и по битикам набрать настройку SPI.

    Взялся все оптимизировать. Вроде прием идет нормально от передатчика.
    Появилась такая проблема.
    Приемник принимает пакеты почти безошибочно на протяжении минут 10, потом резко все пакеты приходят или пустые или битые и в нормальное состояние приемник возвращается только ресетом мк. Както смахивает на какой-то разогрев трансивера.
    Читаю так:
    Код (Text):
    1. moderx(); // входим в режим приема
    2. while ((TXRX!=1)&&(get_state()!=0))  delay_ms(300); //  ждем признака удачного приема
    3. pkgread(data); // читаем в буфер
     
  17. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Это у тебя буфер слетает на трансивере. Скорей всего гдето не так сбрасываешь указатель на голову.
    Хотя он автоматом сбрасывается, но его все же нужно вручную сбрасывать.
     
  18. Valeri4

    Valeri4 New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2011
    Сообщения:
    20
    a9d, у меня такой вопрос. буфер нужно сбрасывать как только перешел в режим приема или уже после принятия пакета перед выходом в идл?
    Как в первом случае не убить данные которые могут уже начать приниматся?
     
  19. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    смотри в последней версии кода. Там все сбрасывается верно.
     
  20. Kopatel

    Kopatel New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2011
    Сообщения:
    10
    Приветствую всех! Давно интересуюсь данным модулем, тему и выложенные исходники прочел от корки до корки, но тем не менее, не ясен ряд моментов по логике работы устройства.
    Копать и пытаться понять чужой код та еще задачка, лучше написать свой, потому прошу, если не сложно, подробно описать алгоритм работы с FIFO(до сих пор не пришло понимание), как я понял, это некий блок регистров в общем банке, суммарной длиной в 64 байта, и он полностью отправляется в виде одного пакета при цикле приема/передачи, по окончанию которых ставится флаг окончания операции?

    Итого, правильно ли я понял:
    1) Инициализируем устройство, прописывая в нужные регистры нужные данные, оно входит в режим ожидания Idle
    2) В зависимости от прописанного в регистр 7 трансивер включается на нужный канал и номер приемника/передатчика в режим готовности к приему/передачи пакета
    3) Вот тут самое темное - устройство готово к передаче, как работать с этим FIFO, по каким адресам в какой последовательности совать данные, и по какому алгоритму (что есть что в пакете) Та же ботва и с приемом.

    В конечном итоге мне не нужен весь функционал модуля, достаточно лишь совать по каналу нужные мне байты. Купил сразу 2 модуля TR24P