Ну вот собственно что получилось. В архиве схема, асм, и готовый hex. Прошивка проверена на версии железа v1. У версии 2 имеются 7 кнопок + немного изменена схема включения LCD. В асме, (как и в hex) установлен номер счётчика 00000. Прошивать нужно Flash+EEP. При первом запуске нужно установить необходимый номер (см. инструкцию). Марку LCD указал, но данные на них нигде не нашёл, видимо заказные... Асм не стал разбирать подробно, думаю, если будет интерес - можно создать отдельную тему, а там и более грамотные товарищи подтянутся. Всем удачи
Загоняю параметры в трансивер, регистры записываются и читаются правильно, но никакой информации получить не удаётся Делаю запрос с родного пульта от счётчика, ни его ни ответа от счётчика трансивер не получает.
Показатели в статус-регистрах AGCTEST |0x002B|0x3F|AGC Test (Иногда меняется при отправке команды с пульта) FREQEST |0x0032|0x00|Frequency Offset Estimate from Demodulator RSSI |0x0034|0x00|Received Signal Strength Indication PKTSTATUS |0x0038|0x00|Current GDOx Status and Packet Status меняются и реагируют на окружающую обстановку, то есть трансивер вроде как живой
// Singleton instance of the radio driver RH_CC110 cc110;
void apply_mirtek_cc() { cc110.spiWrite(0x00, 0x0D); //GDO2 Output Pin Configuration cc110.spiWrite(0x01, 0x2E); //GDO1 Output Pin Configuration cc110.spiWrite(0x02, 0x06); //GDO0 Output Pin Configuration cc110.spiWrite(0x03, 0x4F); //RX FIFO and TX FIFO Thresholds cc110.spiWrite(0x04, 0xD3); //Sync Word, High Byte cc110.spiWrite(0x05, 0x91); //Sync Word, Low Byte cc110.spiWrite(0x06, 0x3C); //Packet Length cc110.spiWrite(0x07, 0x00); //Packet Automation Control cc110.spiWrite(0x08, 0x41); //Packet Automation Control cc110.spiWrite(0x09, 0x00); //Device Address cc110.spiWrite(0x0A, 0x16); //Channel Number cc110.spiWrite(0x0B, 0x0F); //Frequency Synthesizer Control cc110.spiWrite(0x0C, 0x00); //Frequency Synthesizer Control cc110.spiWrite(0x0D, 0x10); //Frequency Control Word, High Byte cc110.spiWrite(0x0E, 0x8B); //Frequency Control Word, Middle Byte cc110.spiWrite(0x0F, 0x54); //Frequency Control Word, Low Byte cc110.spiWrite(0x10, 0xD9); //Modem Configuration cc110.spiWrite(0x11, 0x83); //Modem Configuration cc110.spiWrite(0x12, 0x13); //Modem Configuration cc110.spiWrite(0x13, 0xD2); //Modem Configuration cc110.spiWrite(0x14, 0xAA); //Modem Configuration cc110.spiWrite(0x15, 0x31); //Modem Deviation Setting cc110.spiWrite(0x16, 0x07); //Main Radio Control State Machine Configuration cc110.spiWrite(0x17, 0x0C); //Main Radio Control State Machine Configuration cc110.spiWrite(0x18, 0x08); //Main Radio Control State Machine Configuration cc110.spiWrite(0x19, 0x16); //Frequency Offset Compensation Configuration cc110.spiWrite(0x1A, 0x6C); //Bit Synchronization Configuration cc110.spiWrite(0x1B, 0x03); //AGC Control cc110.spiWrite(0x1C, 0x40); //AGC Control cc110.spiWrite(0x1D, 0x91); //AGC Control cc110.spiWrite(0x1E, 0x87); //High Byte Event0 Timeout cc110.spiWrite(0x1F, 0x6B); //Low Byte Event0 Timeout cc110.spiWrite(0x20, 0xF8); //Wake On Radio Control cc110.spiWrite(0x21, 0x56); //Front End RX Configuration cc110.spiWrite(0x22, 0x10); //Front End TX Configuration cc110.spiWrite(0x23, 0xE9); //Frequency Synthesizer Calibration cc110.spiWrite(0x24, 0x2A); //Frequency Synthesizer Calibration cc110.spiWrite(0x25, 0x00); //Frequency Synthesizer Calibration cc110.spiWrite(0x26, 0x1F); //Frequency Synthesizer Calibration cc110.spiWrite(0x27, 0x41); //RC Oscillator Configuration cc110.spiWrite(0x28, 0x00); //RC Oscillator Configuration cc110.spiWrite(0x29, 0x59); //Frequency Synthesizer Calibration Control cc110.spiWrite(0x2A, 0x59); //Production Test cc110.spiWrite(0x2B, 0x3F); //AGC Test cc110.spiWrite(0x2C, 0x81); //Various Test Settings cc110.spiWrite(0x2D, 0x35); //Various Test Settings cc110.spiWrite(0x2E, 0x0B); //Various Test Settings
}
void setup() { Serial.begin(9600); while (!Serial)
cc110.setIs27MHz(false); // Anaren 430BOOST-CC110L Air BoosterPack test boards have 27MHz if (!cc110.init()) Serial.println("init failed"); cc110.setTxPower(RH_CC110::TransmitPowerM10dBm); cc110.setModemConfig(RH_CC110::GFSK_Rb10Fd19); cc110.setFrequency(433.868652); apply_mirtek_cc(); //cc110.printRegisters(); //cc110.setModeRx(); Serial.println("init ok"); pinMode(9,INPUT); //GDO0 - неиспользуемый }
void loop() { if (cc110.available()) { // Should be a message for us now Serial.println("INCOMMING MESSAGE"); uint8_t buf[RH_CC110_MAX_MESSAGE_LEN]; uint8_t len = sizeof(buf); if (cc110.recv(buf, &len)) { RH_CC110::printBuffer("request: ", buf, len); Serial.print("got request: "); Serial.println((char*)buf); Serial.print("RSSI: "); Serial.println(cc110.lastRssi(), DEC);
// Send a reply uint8_t data[] = "And hello back to you"; //cc110.send(data, sizeof(data)); //cc110.waitPacketSent(); //Serial.println("Sent a reply"); } else { Serial.println("recv failed"); } } }
UPD: Методом случайного тыка определил, что при замыкании GDO0 на землю VCC, вызывая тем самым прерывание, в терминал выплёвываются чередуясь данные сообщения: Спойлер
Код:
INCOMMING MESSAGE request: 9C 17 BA 7A 5B 6C AA 84 95 64 A4 45 60 C9 E4 F3 80 D 9D 47 CC 99 FF 82 3F A4 7E 26 92 5A D6 D8 CE DE A8 FB F7 C5 D7 A E9 28 79 F1 2 FE 40 BF 40 F9 20 F3 CE 89 EF 6C FE A 54 RSSI: -101
INCOMMING MESSAGE request: 17 BA 7A 5B 6C AA 84 95 64 A4 45 60 C9 E4 F3 80 D 9D 47 CC 99 FF 82 3F A4 7E 26 92 5A D6 D8 CE DE A8 FB F7 C5 D7 A E9 28 79 F1 2 FE 40 BF 40 F9 20 F3 CE 89 EF 6C FE A 54 54 RSSI: -97
Не могу понять, мусор ли эти сообщения, или не срабатывают вовремя прерывания на GDO0 из-за неправильного регистра, хз
...получает ответ, но дальше либо не получается распарсить значения, либо команды запроса показаний в этом счётчике другие...
У меня аналогичные показания. И на 12 и на 32 миртеке. Команды запроса у них одинаковые, сравнивал с запросами через опто порт. В результате прикупил на барахолке 2 пульта первой версии (4 кнопки) за 1500р. Бонусом - прошивка не залочена. PIC16LF1947 можно дебажить в реальном времени. Жаль марку LCD нигде не нашёл, нет надписей на нём. Схему разрисовал.
Вы не пробовали считать прошивку с самого счетчика?
Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России.
На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.
Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO
подробнее>>
shev377
Заголовок сообщения: Re: Модуль отображения информации МИРТ-830 из ардуины
А у Вас случайно нет возможности посмотреть какие параметры PIC отправляет в CC1101?
А то у всех получилось хотя бы на связь выйти со своим счётчиком, а я как-то вообще не прошёл начальный уровень сложности, так понимаю обломался на стадии настройки CC1101, хотя вроде бы использовал тот же конфиг из этой ветки)
Дошли руки помониторить протокол обмена SPI между PIC16 и CC1101. В каком виде лучше выложить ? Можно в файле анализатора LA1010 и ссылку на софт. Тогда желающие смогут (скачав и установив программу для анализатора) более детально рассмотреть кто кому и что шлёт Софт Спойлерhttps://disk.yandex.ru/d/nych7LjCo3tPhA
В прикреплённом архиве установки и собственно сами данные - настройка после вкл. питания и обмен.
28 00 29 59 2A 59 2B 3F 2C 81 2D 35 2E 0B 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F После подачи команды в СС1101 0х30 (RESET) и получения ответа 0х1F, засылаем в регистры конфигурацию. Верхний ряд - адрес регистра и собственно байт в регистр засылаемый. Нижний ряд - ответ от СС1101.
Скажите, получилось продвинуться в исследовании протокола? Оч хочется получить возможность снимать показания со счётчика...
Поскольку для меня это только хобби - то занимаюсь этим время от времени. Для снятия показаний есть решения от производителя - выносной пульт или модем. Первый для ручного сбора данных второй для автоматического.
Скажите, получилось продвинуться в исследовании протокола? Оч хочется получить возможность снимать показания со счётчика...
Поскольку для меня это только хобби - то занимаюсь этим время от времени. Для снятия показаний есть решения от производителя - выносной пульт или модем. Первый для ручного сбора данных второй для автоматического.
А можете поподробнее про модем: где почитать? Я правильно понимаю, что модем тоже работает по радиоканалу, и имеет некий API, с помощью которого можно общаться с счётчиком?
Спасибо! Да уж, ценник совсем не демократичный... не готов столько тратить. Что ж, буду пытаться продолжить ваш труд самостоятельно...
Доброго времени! Тоже уже несколько дней в фоновом режиме ковыряю идой прошивки из топика. Для оригинальной соорудил на коленках из схемы Dismas простенький симулятор lcd на svg+html+js, ест набор инструкций с bsf/bcf типа `bsf lcddata2, 6`(можно с адресами в начале, слушает paste на страницу, чтобы напрямую из дизасма вставлять) Пара пинов похоже была с опечатками, поправил по логике прошивки, вроде выдает адекватные результаты
...Скажите, получилось продвинуться в исследовании протокола?...
Так, совсем немного.
Код:
Первый запрос от пульта к счётчику: 73 55 20 00 7C 64 FE FF 01 00 00 00 00 CE 55 73 - преамбула 55 - начало пакета 20 - циклический адрес (ну или как там по умному) в зависимости от длинны пакета, по нему считается контрольная сумма 7C 64 - сетевой адрес в hex (мл. байт старший байт) FE FF - канал связи (от оптопорта другие значения) 01 - открыть канал связи 00 00 00 00 - пароль (по умолчанию - 0) CE - контрольная сумма 55 - конец пакета Эти данные появляются в RAM процессора при формировании запроса к счётчику. Затем загружаются в СС1101 по SPI и передаются в эфир.
Ответ так же начинается с
Код:
73 55 04 00 FE FF 7C 64 01 A8 05 5B 00 09 05 7C 64 A7 55 73 - преамбула 55 - начало пакета 04 - циклический адрес 00 FE FF - тип соединения (адрес или устройство ?) 7C 64 - сетевой адрес 01 - на какую команду ответ A8 - ? 05 - ? изменяется в зависимости от дня 5B - ? 00 - ? 09 05 - версия ПО (9.5) 7C 64 - сетевой адрес A7 - КС 55 - конец пакета
Есть файл в формате анализатора (раньше уже выкладывал подобный), но тут сразу два анализатора синхронно. Там видно что приходит на SPI что поступает уже по UARTу в процессор счётчика. Что отвечает и как эти данные соотносятся друг с другом. Спойлерhttps://disk.yandex.ru/d/mG4LZKesekNJrA
Может я чего не понял, но было бы здорово если бы после очистки экрана сегменты не гасли совсем, а оставалась некая их подсветка, указывающая на положение их относительно других. К примеру контуры сегментов.
Сейчас этот форум просматривают: серж99 и гости: 28
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения