Опрос счетчика СПТ-943.1
- Войдите на сайт для отправки комментариев
Пнд, 19/11/2018 - 13:12
Здравствуйте! Кто-нибудь опрашивал счетчик СПТ-943.1 через Ардуино по интерфейсу RS232? возникала cледующая проблема. Написал скетч который должен опрашивать данный счетчик согласно протоколу М4, но счетик никак не реагирует на запросы. Написал простенький эмулятор счетчика на другой плате Ардуино, который замечательно отвечает. Может кто сталкивался с подобной проблемой?
А как подключаете? Инфы крайне мало, как всегда в общем
Подключаю черзе преобразователь Rs232-TTL чип MAX3232 ESE. На счетчик выходит 3 провода RX, TX, CND, питается же счетчик со стороны 12В. (Так же CND выходящая от MAX3232 соединяется с землей провода 12В.) На плату Ардуино выходят 4 провода: TX, RX, VCC = 3.3В и соответственно CND.
PS. Простите за мой "Французкий" я просто в этом новичек.
скетч?
На ардуино можно использовать софт сериал для связи со счетчиком. А для вывода на экран - хард сериал.
rx счетчика (ну через преобразователь) подключить к tx ардуино (пин 8). tx счетчика через преобразователь подключить к rx ардуино (7 пин)
Подключиться и смотреть через терминальную программу или монитор порта ардуино. Скетч примерно такой
#include <SoftwareSerial.h> SoftwareSerial mySerial(7, 8); // RX, TX Сериал подключение к счетчику void setup() { Serial.begin(9600); mySerial.begin(9600); } void loop() { // run over and over if (mySerial.available()) { Serial.write(mySerial.read()); } if (Serial.available()) { mySerial.write(Serial.read()); } }//Тепловычислитель СПТ-943.1 | Интерфейс RS-232. #include <SoftwareSerial.h> #define DEBUGGING //Условная компиляция (Отладка) #define SIZE_ANS 100 //Размер строки ответов (Макс-ая строка ответа у СПТ-943.1 = 68 байт данных) #define DELAY_SYNC 50 //Таймаут синхронизации (предпочтительно 10-50) #define TSTART 2000 //Таймаут после передачи стартовой посл-ти. Для СПТ--943.1 = [1000 - inf] #define TPROC 2500 //Время обработки запроса. Для СПТ--943.1 = [0 - 2500мс] #define ONE_SEC_D 1000 //Таймаут для отладочного монитора /*------------------------------------------------- Структура соединения ------------------------------------------------*/ struct Connection{ byte answer[SIZE_ANS]; byte addrNet; int deviceCode; int versionSoft; int byteRecived; int byteRequested; String reqtTime, reqInfo, reqTecl, reqItogl; }newCon; /*--------------------------------------------------- Протокол M4 СПТ943.1 --------------------------------------------------* | |Connect = Стартовая последовательность (Код = 0x3F). Старт-ая послед-ть должна сост-ть не менее чем из 16 байтов 0xFF. | |ChannelGen = Соединение по Обшему каналу (Код Общ. канала = 0x00) | |SwapSpeed = Запрос на изменение скорости (Код = 0x42). В данном случае на 9600. | | |ReqError = Сообщение об ошибке (Код = 0x21). | |ReadFlash = Чтение Flash-памяти (Код = 0x45). | |ReadRAM = Чтение ОЗУ (Код = 0x52). | *---------------------------------------------------------------------------------------------------------------------------*/ byte Connect[] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; //byte ChannelGen[] = {0x10, 0xFF, 0x90, 0x01, 0x00, 0x05, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x32, 0x3A}; byte ChannelGen[] = {0x10, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x16}; byte SwapSpeed[] = {0x10, 0x00, 0x90, 0x01, 0x00, 0x05, 0x00, 0x42, 0x02, 0x00, 0x00, 0x00, 0x32, 0x3A}; byte ReqError[] = {0x10, 0x00, 0x90, 0x91, 0x00, 0x05, 0x00, 0x21, 0x03, 0x00, 0x00, 0x00, 0x79, 0x56}; byte ReadFlash[] = {0x10, 0x00, 0x90, 0x02, 0x00, 0x05, 0x00, 0x45, 0x00, 0x00, 0x01, 0x00, 0x77, 0x67}; byte ReadRAM[] = {0x10, 0x00, 0x90, 0x07, 0x00, 0x05, 0x00, 0x52, 0xF3, 0x00, 0x03, 0x00, 0x01, 0xD6}; /*------------------------------------------------ Инициализация портов RS-232 ----------------------------------------------*/ #define SS_RX 0 #define SS_TX 1 /*--------------------------------------------- Виртуальный последовательный порт -------------------------------------------*/ SoftwareSerial RS232Serial(SS_RX, SS_TX); void setup(){ //Выбор скорости соединения 9600 бод. RS232Serial.begin(9600); Serial.begin(9600); #ifdef DEBUGGING Serial.println("\t\t\t\t\tSPT-943.1"); for(int i = 0; i < 90; i++) Serial.print('*'); Serial.println(); #endif //!DEBUGGING for(int i = 0; i < sizeof(newCon.answer); i++) newCon.answer[i] = 1; /*----------------- Запрос на соединение ------------------*/ request(Connect, sizeof(Connect), newCon.answer, false); //Отправка стартовой последовательности delay(TSTART); //Таймаут после передачи стартовой посл-ти request(ChannelGen, sizeof(ChannelGen), newCon.answer, true); //Установка посл-го соединения initialization(); } void loop(){ #ifdef DEBUGGING Serial.println(); Serial.print("Adress SPT943: "); Serial.println(newCon.addrNet, HEX); Serial.println(sizeof(newCon.answer)); Serial.println(); delay(ONE_SEC_D); #endif //!DEBUGGING //При удачном соединении(NT = 0x00 или 0xFF) продолжаем опрос, иначе закрываем соединение if(!newCon.addrNet || 0xFF == newCon.addrNet){ #ifdef DEBUGGING Serial.println("Network addr is Good!!! BEST CONNECTION!!!\n"); delay(ONE_SEC_D); Serial.println("\nTHIS IS READ DATA: "); #endif //!DEBUGGING /*Опрос счетчика...........*/ request(ReadFlash, sizeof(ReadFlash), newCon.answer, true); request(ReadRAM, sizeof(ReadRAM), newCon.answer, true); } else{ RS232Serial.end(); #ifdef DEBUGGING Serial.println("Сonnection closed!"); delay(ONE_SEC_D); setup(); #endif //!DEBUGGING } } void request(byte *req, int len, byte *ans, bool con){ /*------------------- Запрос -------------------*/ Serial.print("\nInput-> "); //for(int i = 0; i < len; i++){ RS232Serial.write(req, len); //delay(DELAY_SYNC); //} #ifdef DEBUGGING for(int i = 0; i < len; i++) Serial.print(req[i], HEX); /* while(RS232Serial.available()){ Serial.print(RS232Serial.read(), HEX); delay(DELAY_SYNC); }*/ #endif //!DEBUGGING if(con){ //Время обработки запроса delay(TPROC); /*------------------- Ответ ----------------------*/ for(int i = 0; RS232Serial.available() && (i < sizeof(newCon.answer)); i++){ Serial.println("There is somethink!"); newCon.answer[i] = RS232Serial.read(); delay(DELAY_SYNC); } #ifdef DEBUGGING Serial.print("\nOutput: "); for(int i = 0; i < sizeof(newCon.answer); i++) Serial.print(newCon.answer[i], HEX); Serial.println(); #endif //!DEBUGGING } } void initialization(){ newCon.addrNet = newCon.answer[1]; newCon.versionSoft = newCon.answer[5]; newCon.deviceCode = newCon.answer[0]; } /* byte getTime(char fl){ switch(fl){ case 'gg': return 0; break; case 'mm': return 1; break; case 'dd': return 2; break; case 'hh': return 3; break; } }*/отредактируйте предыдущее сообщене и вставьте код правильно, так не варик
сделать так
строка 41 #define SS_RX 7
строка 42 #define SS_TX 8
и подключить физически соответственно. а вы похоже счетчикна 0 и 1 повесили, что не верно
Сделал так как вы сказали RX 7 TX 8, но счетчик отстается непоколебим. Посмотрел на осцеллографе соединение и вижу такую картину, что на счетсик прихрдят команды, но он упрно молчит. Такое ощущение будто он не понимает команды. Вот линк на протокол соединения http://www.teplocom.msk.ru/data/support/docs/gaz/spg/protM4_rev00.pdf
а он один подключен? или там сеть счетчиков. Если один возможно на нём скорость поменяли, пробуйте весь ряд стандартных
Да один. Пробовал уже разные скорости и к разным кананл подключаться. но увы все тщетно. Но все же счетчик работоспособный так как опрашивается через программу Пролог
читайте описания протокола по ссылке со стр21 и до конца
На всякий случай: то, что порт подключается перекрестно, т.е. RX подключается к TX и наоборот - в курсе?
Да, конечно
Данная схема подключения не работает. Во всяком случае у меня
может так
На счетчике у меня 4 выхода 2 из которых заняты источником внешнего питания (GND, VCC = 12 V.) Как мне реализовать вашу схему? На фото черные провода идут не от преобразователя, а от внешнего питания.
подключиться к счетчику программой пролог и снять осциллограммы. сдается мне там уровни сигналов 0В 12В, что не есть rs232
можно ещё так попробовать
Спасибо большое вам за помощь! Завтра приду на работу затестю.
в посте #18 в схеме ошибка. Должна заработать одна из этих схем.
Почитайте описание счётчика. Написано что в зависимости от комплектации может быть 3 разных интерфейса. Тот разьем который вы мучаете скорее всего простой TTL. К нему можно напрямую Tx цеплять, Rx к Tx счётчика через 2к попробывать, если сначала не померить тестером напряжение.
Подключился по первой схеме стали приходить нули. Но почему то светодиод RX на плате не мигает, а TX мигает
Ну дак попробуйте вторую . И где осциллограмма? Нужно узнать уровни сигнала тх от счетчика. большая вероятность что первая схема без преобразователя rs232-ttl должна заработать
непонятно в каких точках и какой схемы вы сняли осцилки. Нужно снять осцилки на первой схеме на разъёме х2 счетчика. общий провод осцила на пин 4. Изм щуп на 1 (Rx счетчика ), потом на 3 (Тх счетчика).
И желательно осцилку рабочего обмена счетчика и вашей программы на компе.
Подключился по первой схеме стали приходить нули. Но почему то светодиод RX на плате не мигает, а TX мигает
какие ещё светодиоды? вы как опять подключаетесь к счетчику? У вас подключение к счетчику должно быть на пин 7, 8 ардуино. Это софтсериал соединение. Никакие светодиоды rx и tx там не подключены. Эти светодиоды индицируют хард Serial подключение. В вашем скетче оно служит для связи с терминальной программой. Соответственно если вы с терминала ничего не отправляете на дуню Rx led и будет молчать. А вот когда ардуино в консоль что либо шлёт тогда и мигает tx led.
кстати на первой схеме необходимо попробовать установить подтягивающий резистор 10К между пинами ардуино "5V" и "7" (Rx)
Подключился по первой схеме стали приходить нули. Но почему то светодиод RX на плате не мигает, а TX мигает
какие ещё светодиоды? вы как опять подключаетесь к счетчику? У вас подключение к счетчику должно быть на пин 7, 8 ардуино. Это софтсериал соединение. Никакие светодиоды rx и tx там не подключены. Эти светодиоды индицируют хард Serial подключение. В вашем скетче оно служит для связи с терминальной программой. Соответственно если вы с терминала ничего не отправляете на дуню Rx led и будет молчать. А вот когда ардуино в консоль что либо шлёт тогда и мигает tx led.
Ошибочка! Да конечно они не должны мигать т.к. Rx 7 Tx 8 у меня. прошу прощения!
на второй схеме попробуйте убрать внешний источник питания +12В.
Не робит! Я думаю, что без внешнего питания никак ибо на счетчике единственный интерфес RS-232 которому необходимо внешнее питание 12В.
короче смотрите описание своего протокола, а также счетчика - там всё просто на разъёме x2. две оптопары. Поэтому нафиг не нужен преобразователь Rs232<->TTL.
Но логика у счетчика как у RS232, т.е. инверированная по сравнению с уарт ттл. Поэтому должна заработать нижняя схема.
так для инфы уровни двух стандартов
ещё такой вариант пробуем
Написал производителю, он говорит что для устойчивой работы на входе Rx+ со стороны СПТ должно быть не менее 5 В. У меня же Tx на контроллере выдает нужные 5 В. Прикрепляю скрин осциллографа на порту Tx контроллера.
дак если биты нужны инвертированные ваш счетчик ничего и не ответит. По какой схеме вы подключались? что у вас там 5В?
Нужна #31 нижняя схема, возможно без резисторов.
Не могли бы вы пояснить по поводу инвертированности битов?
смотрите пост #31 там есть рисунок с уровнями стандартов. Счетчик по всем описаниям поддерживает rs232. там лог "1" соответствует -12В (или 0В - счетчик по описанию работатает с уровнями от 0 до 12В). А логическому "0" соответствует напряжение +12В.
Чего не скажешь про уарт ттл ардуины, которой вы подключаетесь к счетчику. Там лог. "0" соответствует 0В, а лог. "1" соответствует 5В.
смотрите пост #31 там есть рисунок с уровнями стандартов. Счетчик по всем описаниям поддерживает rs232. там лог "1" соответствует -12В (или 0В - счетчик по описанию работатает с уровнями от 0 до 12В). А логическому "0" соответствует напряжение +12В.
Чего не скажешь про уарт ттл ардуины, которой вы подключаетесь к счетчику. Там лог. "0" соответствует 0В, а лог. "1" соответствует 5В.
Коль так, тогда как же будет работать 2-я схема пост #31? В таком случае необходим преобразователь РС232 - ТТЛ. Правильно ли я понимаю?
Нет. RS232-TTL нужен, если к вашему счётчику потавлялясь плата интерфейса RS232 и она включена в ваш разъём Х2. В посте #31 вам разрисовали две схемы подключения с прямой и инверсной полярностью Rx сигнала. На ней нет никаких преобразователей.
А для проверки связи я бы рекомендовал USB-TTL HA FT232R. Rx Tx подключить по первой схеме #31 поста, USB воткнуть в комп и попробывать соединиться. Если сразу не получится то для FT232 есть конфигурационная программа в которой можно менять полярность передаваемых и принимаемых битов. Не переконекчивая можно проверить все сочетания полярности битов. Какой нибудь заработает. Тогда можно будет уже про ардуину говорить.
Коль так, тогда как же будет работать 2-я схема пост #31? В таком случае необходим преобразователь РС232 - ТТЛ. Правильно ли я понимаю?
нет не правильно. рс232 тут не нужен. Схема должна работать , потому что будет поджигать светодиод Rx-а счетчика когда на Tx ардуино будет лог 0 , а не 1.
Согласен с коллегой, что проще при помощи юсб-ттл такую хрень налаживать .
не, там нет никакой платы RS232. Счетчик "из коробки" этот стандарт поддерживает. Вот картинка, что можно подключить компорт компа напрямую к счетчику.
также там подключается какойто прибор АПС45, уж очень подключение на уарт ттл похоже.
Ну так вместо АПС45 надо на ноги 1,2 ардуины наны подключать. Только я бы ещё Rx (2 нана - 3 Х2) ногу через 1к подключил, что бы программы можно было грузить. Ноги 2,4 разъёма Х2 на землю ардуины, ногу 3 разъёма Х2 на +5 ардуины через 3.3к .
нужно использовать софт сериал. Т.к. скетч у ТС вроде правильный, но там вывод на экран через Serial, а подключение к счетчику через софт сериал. Надеюсь ТС не забыл в скетче поменять ноги софтасериала (см. пост #7).
Также возможно в ходе опытов вылетели ноги 7 и 8 . Вот и не работает ничё.
Тогда рекомендую перевешать на 10 и 11 и не забыть поменять это в скетче. Рекомендована нижняя схема #31. без резистора 500 ом. 10К нужно оставить.
Или верхняя схема вообще без резюков .
Кстати инит в скетче идёт в сетапе. Такчто если счетчик молчит пробовать нажать ресет на ардуине.
Да, не забыл
//Тепловычислитель СПТ-943.1 | Интерфейс RS-232. #include <SoftwareSerial.h> #define DEBUGGING //Условная компиляция (Отладка) #define SIZE_ANS 100 //Размер строки ответов (Макс-ая строка ответа у СПТ-943.1 = 68 байт) #define DELAY_SYNC 50 //Таймаут синхронизации. Для СПТ--943.1 = [ 4 - infinity) #define T_START 3500 //Таймаут после передачи стартовой посл-ти. Для СПТ--943.1 = [1000 - inf) #define T_PROC 2000 //Время обработки запроса. Для СПТ--943.1 = [0 - 2200мс] #define T_ACC_MAN 2000 //Время обработки запросов управления счетом. Для СПТ--943.1 = [0 - 20000] #define ONE_SEC_D 1000 //Таймаут для отладочного монитора /*------------------------------------------------- Структура соединения ------------------------------------------------*/ struct Connection{ byte answer[SIZE_ANS]; byte addrNet; int deviceCode[2]; int versionSoft; int byteRecived; int byteRequested; String reqtTime, reqInfo, reqTecl, reqItogl; }newCon; /*-------------------------------------------------- Протокол СПТ943.1 -----------------------------------------------------* |Connect = Стартовая последовательность (Код = 0x3F). Старт-ая послед-ть должна сост-ть не менее чем из 16 байтов 0xFF. | |ChannelGen = Соединение по Обшему каналу (Код Общ. канала = 0x00) | |SwapSpeed = Запрос на изменение скорости (Код = 0x42). В данном случае на 9600. | |ReqError = Сообщение об ошибке (Код = 0x21). (0x00 - Нарушение структуры запроса, 0x01 - Защита от ввода парам. | | 0x02 - Недопустимые значения параметров запроса, 0x03 - Нет данных, 0x04 - Возможен только защищенный обмен) | |ReadFlash = Чтение Flash-памяти (Код = 0x45). Количество считываемых страниц одним запросом = [1..64] | |ReadRAM = Чтение ОЗУ (Код = 0x52). Количество считываемых байт ОЗУ = [1..64] | *---------------------------------------------------------------------------------------------------------------------------*/ /* Команды для соединения. Общие для всех версий ПО */ byte Connect[] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; byte ChannelGen[] = {0x10, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x16}; /* Базовый формат связи. Для версии ПО 1.0 */ byte SwapSpeedV1[] = {0x10, 0x00, 0x42, 0x02, 0x00, 0x00, 0x00, 0xBA, 0x16}; byte ReqErrorV1[] = {0x10, 0x00, 0x21, 0x03, 0x00, 0x00, 0x00, 0xDB, 0x16}; byte ReadFlashV1[] = {0x10, 0x00, 0x45, 0x01, 0x01, 0x01, 0x00, 0xB7, 0x16}; byte ReadRAMv1[] = {0x10, 0x00, 0x52, 0xF3, 0x00, 0xF3, 0x00, 0xC7, 0x16}; /* Базовый формат связи. Для версии ПО 2.0 и выше. Протокол М4 */ byte SwapSpeedV2[] = {0x10, 0x00, 0x42, 0x02, 0x00, 0x00, 0x00, 0xBA, 0x16}; byte ReqErrorV2[] = {0x10, 0x00, 0x21, 0x03, 0x00, 0x00, 0x00, 0xDB, 0x16}; byte ReadFlashV2[] = {0x10, 0x00, 0x45, 0x01, 0x01, 0x01, 0x00, 0xB7, 0x16}; byte ReadRAMv2[] = {0x10, 0x00, 0x52, 0xF3, 0x00, 0xF3, 0x00, 0xC7, 0x16}; /* Расширенный формат связи byte ChannelGen[] = {0x10, 0xFF, 0x90, 0x01, 0x00, 0x05, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x32, 0x3A}; byte SwapSpeed[] = {0x10, 0xFF, 0x90, 0x01, 0x00, 0x05, 0x00, 0x42, 0x03, 0x00, 0x00, 0x00, 0x79, 0x56}; byte ReqError[] = {0x10, 0xFF, 0x90, 0x91, 0x00, 0x05, 0x00, 0x21, 0x03, 0x00, 0x00, 0x00, 0x79, 0x56}; byte ReadFlash[] = {0x10, 0xFF, 0x90, 0x02, 0x00, 0x05, 0x00, 0x45, 0x00, 0x00, 0x01, 0x00, 0x77, 0x67}; byte ReadRAM[] = {0x10, 0xFF, 0x90, 0x07, 0x00, 0x05, 0x00, 0x52, 0xF3, 0x00, 0x03, 0x00, 0x01, 0xD6}; */ /*----------------------------------------------- Инициализация портов RS-232 ---------------------------------------------*/ #define SS_RX 7 #define SS_TX 8 /*-------------------------------------------- Виртуальный последовательный порт ------------------------------------------*/ SoftwareSerial RS232Serial(SS_RX, SS_TX); void setup(){ //Выбор скорости соединения 2400 бод. RS232Serial.begin(2400); Serial.begin(2400); #ifdef DEBUGGING Serial.println("\t\t\t\t\t\t\tSPT-943.1"); for(int i = 0; i < 120; i++) Serial.print('*'); Serial.println("\n\nCONNECT..."); #endif //!DEBUGGING clearAns(); /*----------------- Запрос на соединение ------------------*/ request(Connect, sizeof(Connect), newCon.answer, false); //Отправка стартовой последовательности delay(T_START); //Таймаут после передачи стартовой посл-ти request(ChannelGen, sizeof(ChannelGen), newCon.answer, true); //Установка посл-го соединения initialization(); clearAns(); #ifdef DEBUGGING Serial.println(); Serial.print("Adress SPT943: "); Serial.println(newCon.addrNet, HEX); Serial.print("Device code: "); Serial.print(newCon.deviceCode[0]); Serial.print(", "); Serial.println(newCon.deviceCode[1]); Serial.print("Sofware version: "); Serial.println(newCon.versionSoft); for(int i =0; i < 20;i++) Serial.print("-"); Serial.println("\n"); delay(ONE_SEC_D); #endif //!DEBUGGING /*------------- Запрос на изменение скорости -------------- if(!newCon.addrNet || 0xFF == newCon.addrNet){ request(SwapSpeed, sizeof(SwapSpeed), newCon.answer, true); RS232Serial.begin(9600); Serial.begin(9600); } */ } void loop(){ //При удачном соединении(NT = 0x00 или 0xFF) продолжаем опрос, иначе закрываем соединение if(!newCon.addrNet || 0xFF == newCon.addrNet){ #ifdef DEBUGGING Serial.println("\n\nREAD DATA... "); #endif //!DEBUGGING /*---------- Опрос счетчика ----------*/ if(0x01 == newCon.versionSoft){ request(ReadFlashV1, sizeof(ReadFlashV1), newCon.answer, true); clearAns(); request(ReadRAMv1, sizeof(ReadRAMv1), newCon.answer, true); } else if(2 == newCon.versionSoft){ //Описать логику!!! } } else{ RS232Serial.end(); #ifdef DEBUGGING Serial.println("\nСONNECTION CLOSED!"); delay(ONE_SEC_D); setup(); #endif //!DEBUGGING } } void request(byte *req, int len, byte *ans, bool con){ /*------------------- Запрос -------------------*/ for(int i = 0; i < len; i++){ RS232Serial.write(req[i]); delay(DELAY_SYNC); } #ifdef DEBUGGING Serial.print("\nInput-> ["); for(int i = 0; i < len; i++){ Serial.print(req[i], HEX); if(i+1 != len) Serial.print(","); } Serial.print("]"); //if(RS232Serial.isListening()) Serial.println("\nYES"); //else Serial.println("\nNO"); #endif //!DEBUGGING if(con){ //Время обработки запроса delay(T_PROC); /*------------------- Ответ ----------------------*/ for(int i = 0; RS232Serial.available() && (i < sizeof(newCon.answer)); i++){ newCon.answer[i] = RS232Serial.read(); delay(DELAY_SYNC); } #ifdef DEBUGGING Serial.print("\nOutput: ["); for(int i = 0; i < sizeof(newCon.answer); i++){ Serial.print(newCon.answer[i], HEX); if(i+1 != sizeof(newCon.answer)) Serial.print(","); } Serial.print("]"); Serial.println(); #endif //!DEBUGGING } } void initialization(){ newCon.addrNet = newCon.answer[1]; newCon.versionSoft = newCon.answer[5]; newCon.deviceCode[0] = newCon.answer[3]; newCon.deviceCode[1] = newCon.answer[4]; } void clearAns(){ for(int i = 0; i < sizeof(newCon.answer); i++) newCon.answer[i] = 0x1; }а скорость почему 2400? Там вроде изначальная 9600.
нет, подключение производится только на скорости 2400
значение КИ в меню настроек счетчика "0" ?
значение КИ в меню настроек счетчика "0" ?
Обязательно
Правильно ли я понимаю, что у СПТ следующие логические уровни: 0 В. = 1(true), 5 В. = 0 (false).
А у ардуино следующая: 0 В. = 0 (false), 5 В. = 1 (true) ???
И если это так то ведь я могу сделать инвентриование битов не аппаратно а программно т.е. при отправке команды с ардуино на СПТ инвентировать биты и так же при приемке с СПТ инвентировать биты?
Врядли можно программно инвертировать стоп и старт биты. Помоему проще логическую микруху инвертор поставить.
Я вообще не пойму че вы так долго копаетесь, имея осциллограф. Все ж видно, что на шине.