был бы ещё человек, умеющий конвертировать в формат, который китайцы берут на изготовление. Gerber чтоли. А вообще, нужно, конечно, самому разбираться.
есть теперь такой чел. Я. Разобрался. Берём эти gerber_файлы закидываем прямо в окно онлайн сервиса по просмотру gerber проектов. Крутим плату и любуемся ей в 3д. Эти же файлы можно отправить китайцу на изготовление. Исходник от layout6 - V8.2
Но сильно не спешим - нужно ещё с разъемом разобраться.
Всё, разъем трассировал. Разъем Micro-Fit 3.0 2x10 на али не нашёл в единичной продаже, поэтому лучше в радиомагазе брать.
Плата v8.3. Gerber файлы исходник на файл_layout . В принципе специально делал одностороннюю и дорожки не сильно мелкие, чтобы ЛУТом тоже можно было развести. Только металлизацию лучше убрать при этом. Конечно перед заказом в Китай надо бы ЛУТом проверить.
Всем привет. Только что присоединился к проекту, достаточно интересное устройство. Большое уважение автору, считаю что проделана громандная работа с которой он поделился с остальными.
Когда то сомибирал эмулятор 1533 на атмега48, до сих пор работает.
По W-bus получилось у кого получить ответ от котла, темпретаруту, напряжение, наличие пламени? Температура на Thermo TOP C - (с другими дел не имел у уеня догреватели с Туарега, и одна плата с Ауди Q7 все что тут пишу о них) - имеет нелинейную зависимость, то что тут где то было на писано , что надо отнять 50 С - не верно, у меня не так , как вариант строить таблицу, типа ниже нуля - Cold, 0-10 С, 10-20С, 30-40С, 40-50С, выше 50 - Hot. Напряжение -там АЦП с линейной зависимостью, пламя 00 или 01- соответственно есть или нету пламени.
Тут кто то спрашивал Webasto Thermo Call - родня программа - может управлять посылая комманды по СМС - Start, Stop, Temp и режимы работы, причем температуру она хочет брать с внешнего датчика, а не с котла, видимо с ней не все так просто даже немцам. То есть что бы ее пользовать достаточно поменять в коде программы комманды Webasto-On - на Start - и должно работат через Themo Call.
У меня пока только теория, с ардуино дела не имел, ничего нет, только заказал.
По W-bus получилось у кого получить ответ от котла, темпретаруту, напряжение, наличие пламени? Температура на Thermo TOP C - (с другими дел не имел у уеня догреватели с Туарега, и одна плата с Ауди Q7 все что тут пишу о них) - имеет нелинейную зависимость, то что тут где то было на писано , что надо отнять 50 С - не верно, у меня не так , как вариант строить таблицу, типа ниже нуля - Cold, 0-10 С, 10-20С, 30-40С, 40-50С, выше 50 - Hot. Напряжение -там АЦП с линейной зависимостью, пламя 00 или 01- соответственно есть или нету пламени.
Ранее речь шла про котлы Thermo TOP C и E, предназначенные для допустановки. А у вас штатные, поэтому протокол отличается.
Нужно просто создать эмпирическую формулу для температуры. Это делается при помощи эмулятора котла. чуть выше написано как заснифить обмен данными между диагностикой и котлом при помощи K-line адаптера и инженерной версии программы Webasto TermoTest (сокращённо WTT). Когда будет сниф, я легко напишу эмулятор, подсунем его программе WTT и будете менять байт температуры и посмотрите по какой зависимости он будет меняться в диагностике.
А что снифить то нужно? У меня есть блок управления от вебасты, можно и без эмулятора (пока нет возможности его реализовать), адаптер тоже есть, WWT 2.16 (расширенная) есьь, если будет сниф просто, то там не видно будет реальной температуры, только ответ от котла, или я ошибаюсь. Я могу снять показания котла по температуре, +1С - ответ котла и так далее, осталось придумать как нагревать плавно на 1С.
в WTT есть функция чтобы показывать весь протокол обмена (читай выше как это сделать). Если снимете лог общения, я сделаю эмуль, и скажу какая зависимость байта температуры. Тем более лог будет полезен для коллекции
вот следующая продвинутая версия эмулятора котлов TTC/E . Верхние две строки скетча смотрим настраиваем (комментируем либо нет).
Там настраивается как подключаемся к WTT либо без к-лайн адаптера (через юсб ардуины), либо через к-лайн
Когда через к-лайн адаптер - есть возможность изменять значения байтов ответного сообщения (PIDa) "на лету" через сериал терминал.
если подключаемся к WTT через юсб ардуины значение байтов можно менять только вручную в скетче, каждый раз его перезаливая.
отправляя через терминал (9600 без переноса каретки и конца строки) символы '1' '2' или '3' выбираем какой ответный пид меням 2А 01 01, 2А 01 02 или 2А 01 05.
отправляя '+' или '-' выбираем номер изменяемого байта
отправляя ',' или '.' изменяем значение байта на -1 или +1 соответственно
отправляя 'm' - делаем значение байта поочереди либо 0 либо FF
#define K_LINE_COM_WTT // закоментировать эту строку если собираемся подключать эмулятор напрямую к WTT без к-лайн адаптера, через юсб ардуины
// (если строка закоментирована в WTT выбираем компорт, на котором висит ардуино, если строка раскоментирована выбираем в WTT компорт К-лайн адаптера)
//#define ARDUINO_MEGA // закоментировать эту строку, если используем НЕ Мегу2560 (на меге к-лайн подключен к Serial1)
#ifdef K_LINE_COM_WTT
byte bytenumber = 5;
byte numberMAX = 5;
byte pid=2;
bool f = 0;
#ifdef ARDUINO_MEGA
#define K_LINE Serial1 // сериал, на котором висит к-лайн адаптер (для меги)
#else
#include <SoftwareSerial.h> // софт сериал, на котором висит к-лайн адаптер
// (при этом строка выше "#define ARDUINO_COM" должна быть закоментирована)
#define RX 7 // это пины К-лайн адаптера, висящего на софт сериал
#define TX 8 // это пины К-лайн адаптера, висящего на софт сериал
SoftwareSerial K_LINE (RX, TX);
#endif
#else
#define K_LINE Serial // работаем через Serial, когда выбрано без к-лайн адаптера
#endif
#define MY_ADDRESS 0x51 // прикидываемся котлом (адрес котла 0x51)
#define RX_ADDRESS 0xF1 // соответственно получаемые сообщения от диагностики (0хF1)
uint32_t timerdelay = 0; // таймер ожидания байт (для успевания появления данных в буфере UART)
bool Delay = 0; // таймер ожидания байт (для успевания появления данных в буфере UART)
byte waitbyte_RX = 1; // задержка, мс для успевания появления данных в буфере RX
// (подрегулировать в зависимости от уровня жизнидеятельности на Марсе)
#define TIMER_DELAY Delay = 0; timerdelay = curmillis // включение этого таймера
uint32_t prevRESETheader=0; // таймер сброса заголовка если в момент приёма заголовка данные оборвались
bool RESETheader_timer; // таймер сброса заголовка если в момент приёма заголовка данные оборвались
byte delaybyte_TX = 1; // задержка между посылкой байт в запросе, мс
byte header = 0; // состояние заголовка
byte message_size = 0; // размер тела сообщения
byte j = 3; // инкремент
byte n = 3; // количество старт байт
const byte bufsize = 100; // размер буфера принятого сообщения
byte buf [bufsize] = {0}; // буфер принятого сообщения
byte crc =0; // байт контрольной суммы
#define sizeMes 19
byte answ_message[][sizeMes] = {
{0x83, RX_ADDRESS, MY_ADDRESS, 0xC1, 0xC2, 0x46, 0x8E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 81 51 F1 81 44
{0x8F, RX_ADDRESS, MY_ADDRESS, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x12, 0x07, 0x04, 0x26, 0x99, 0x22, 0x66}, // 82 51 F1 3C 00 00
{0x87, RX_ADDRESS, MY_ADDRESS, 0x6A, 0x01, 0xAF, 0x00, 0xB9, 0x00, 0x50, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 83 51 F1 2A 01 01 F1
{0x88, RX_ADDRESS, MY_ADDRESS, 0x6A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 83 51 F1 2A 01 02 F2
{0x84, RX_ADDRESS, MY_ADDRESS, 0x6A, 0x05, 0x70, 0xC3, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 83 51 F1 2A 01 05 F5
{0x84, RX_ADDRESS, MY_ADDRESS, 0xE1, 0xFF, 0xFF, 0x00, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 81 51 F1 A1 64
};
byte answ_unknown_command[] {0x83, 0xF1, 0x51, 0x7F, 0x31, 0x23, 0x98}; // 82 51 F1 31 03 F8
#define sizetabl 37
byte tabl[][sizetabl] = {
{0x17, 0x20, 0x22, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE8, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE},
{0x00, 0x3F, 0x8F, 0x5F, 0x88, 0x00, 0xAB, 0x80, 0x10 ,0x01, 0x17, 0x01, 0x08, 0x01, 0x20, 0x01, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x41, 0x17, 0x98, 0x01, 0x15, 0x00, 0x60, 0xA4, 0x07, 0x24, 0x26, 0x41, 0x06, 0x98, 0x45}
};
void setup()
{
Serial.begin (9600);
K_LINE.begin (10400);
}
void loop() {
uint32_t curmillis = millis();
#ifdef K_LINE_COM_WTT
if (Serial.available()) {
byte inbyte=0;
inbyte = Serial.read(); delay(2);
if (inbyte == '-') {bytenumber --; if (bytenumber< 5) bytenumber = numberMAX+4; Serial.print (" bytenumber: "); Serial.println (bytenumber);}
if (inbyte == '+') {bytenumber ++; if (bytenumber> numberMAX+4) bytenumber = 5; Serial.print (" bytenumber: "); Serial.println (bytenumber);}
if (inbyte == '.') {answ_message[pid][bytenumber]++;Serial.print ("byte value: "); Serial.println (answ_message[pid][bytenumber], HEX);}
if (inbyte == ',') {answ_message[pid][bytenumber]--;Serial.print ("byte value: "); Serial.println (answ_message[pid][bytenumber], HEX);}
if (inbyte == '1') {pid = 2; Serial.println (" PID: 2A 01 01");}
if (inbyte == '2') {pid = 3; Serial.println (" PID: 2A 01 02");}
if (inbyte == '5') {pid = 4; Serial.println (" PID: 2A 01 05");}
if (inbyte == '1' || inbyte == '2' || inbyte == '5' ) { bytenumber = 5; numberMAX = answ_message[pid][0]; bitWrite (numberMAX, 7, 0); numberMAX-=2; }
if (inbyte == 'm') {if (f)answ_message[pid][bytenumber]=255;
else answ_message[pid][bytenumber]=0; f=!f;
Serial.print ("byte value: "); Serial.println (answ_message[pid][bytenumber], HEX);}
Serial.flush();
return;}
#endif
if (K_LINE.available() ){
// первый старт байт
if (header == 0 && Delay){TIMER_DELAY ; buf[0]=K_LINE.read();
if (!bitRead (buf[0],6) && bitRead (buf[0],7)&& buf[0]!=0x03){header = 1; RESETheader_timer=1; prevRESETheader = curmillis; }
else if (buf[0]==0x03)header = 6;
}
// второй старт байт
if (header == 1 && Delay){TIMER_DELAY ; buf[1]=K_LINE.read(); if (buf[1]==MY_ADDRESS){ header = 2;} else {header = 0; RESETheader_timer=0;}}
// третий старт байт
if (header == 2 && Delay){
TIMER_DELAY ;
buf[2]=K_LINE.read();
if (buf[2]==RX_ADDRESS){ message_size = buf[0];
if (buf[0] !=0x80) {header = 4; bitWrite (message_size, 7 , 0);j=3;n=3;}
else {header = 3; j=4;n=4;}
if (message_size > bufsize) message_size = bufsize; crc = 0;} else {header = 0; RESETheader_timer=0; }
}
// если размер сообщения указан в дополнительном байте (нулевой байт 0x80) читаем этот дополнительный байт:
if (header == 3 && Delay){
TIMER_DELAY ;
buf[3]=K_LINE.read();
message_size = buf[3];
if (message_size > bufsize) message_size = bufsize;
crc = 0; header = 4;
}
// пишем тело сообщения
if (header == 4 && Delay && j< message_size+n+1) {
buf[j] = K_LINE.read();
if (j<message_size+n) crc+= buf[j]; // подсчёт КС
if (j==message_size+n) header = 5;
TIMER_DELAY ; j++;}
if (header == 6 && Delay){TIMER_DELAY ; buf[1]=K_LINE.read(); header = 7;}
if (header == 7 && Delay){TIMER_DELAY ; buf[2]=K_LINE.read(); header = 8;}
} // end of K_LINE.available()
// сообщение приняли, действуем
if (header == 5) {TIMER_DELAY ;
#if not defined K_LINE_COM_WTT
for (byte i=0; i< message_size+n+1; i++){ K_LINE.write (buf[i]); delay (delaybyte_TX);}
#endif
for(byte i = 0; i<n; i++) crc+=buf[i]; // прибавляем к контрольной сумме старт байты
// если контрольная сумма верна:
if ( crc == buf[message_size+n]) {
bool message_found = 0;
byte crc_answ;
for (byte j = 0; j < sizeof(answ_message)/sizeMes; j++) {
if (
((answ_message[j][3]&~0x40)==buf[3] && answ_message[j][4] == buf[5] && (buf[0]&0xF)==3) ||
((answ_message[j][3]&~0x40)==buf[3] && (buf[0]&0xF)==1) ||
((answ_message[j][3]&~0x40)==buf[3] && answ_message[j][4] == buf[4] && (buf[0]&0xF)==2)
)
{
for (byte i=0; i<(answ_message[j][0]&0xF)+4 ; i++) { if (i!=((answ_message[j][0]&0xF)+3)) crc_answ+=answ_message[j][i];
else {answ_message[j][i]= crc_answ;}
K_LINE.write (answ_message[j][i]); delay (delaybyte_TX);
}
message_found = 1;
}
}
if (!message_found){
answ_unknown_command[4] = buf[3];
for (byte i = 0; i < ((answ_unknown_command[0]&0xF)+4); i++) { if (i!=((answ_unknown_command[0]&0xF)+3)) crc_answ+=answ_unknown_command[i]; // если неизвестное сообщение
else {answ_unknown_command[i]= crc_answ;} K_LINE.write (answ_unknown_command[i]); delay (delaybyte_TX);
}
}
}
// если контрольная сумма не совпала:
//else Serial.println("CRC fail!!!" );
message_size = 0; header=0; RESETheader_timer=0; j=3; crc = 0;
}
if (header==8) { header=0;
#if not defined K_LINE_COM_WTT
for (byte i=0; i<3; i++) {K_LINE.write (buf[i]); delay (delaybyte_TX);} // делаем эхо принятого сообщения для WTT т.к. проверяем без К-Line адаптера (на нём эхо и так возникнет)
#endif
for (byte j = 0; j < sizetabl; j++) {if (buf[1] == tabl[0][j]) K_LINE.write (tabl[1][j]); delay (delaybyte_TX);}
}
// таймер ожидания байт (для успевания появления данных в буфере UART)
if (!Delay && curmillis - timerdelay > waitbyte_RX) Delay = 1;
// таймер сброса заголовка если данные оборвались во время приёма заголовка
if (RESETheader_timer && curmillis - prevRESETheader > 500) {RESETheader_timer = 0; header = 0;}
}
попробовал эмулятором. На универсальных котлах такие же данные. Пока не могу подобрать формулу. Не ужели там просто таблица соостветсвия значений заложена в WTT. Врядли , какая то должна быть зависимость.
а напряжение вычисляется так. напряжение сидит в 7 байте ответа, отметил жирным
Пока не могу подобрать формулу. Не ужели там просто таблица соостветсвия значений заложена в WTT. Врядли , какая то должна быть зависимость.
нет, линейной зависимости не наблюдается. Вероятно значения в этом байте температуры это показания АЦП. А показания датчика t видимо нелинейны. Поэтому либо здоровенную таблицу соответсвия в скетч закладывать (222 значения *2 итого 450 байт) - слишком жирно. Сделал парсинг температуры по диапазонам через функцию map.
Почти во всём диапазоне точно показывает (ну кое где в диапазоне есть отличия максимум на пару градусов).
получилось так, по лучше и красивее мозгов у меня не хватило
if (byte_temp >= 242) temperature = -40;
else if (byte_temp >= 229 && byte_temp <= 241) temperature = map (byte_temp, 241,229,-35,-12);
else if (byte_temp == 228) temperature = -11;
else if (byte_temp == 227) temperature = -10;
else if (byte_temp >= 217 && byte_temp <= 226) temperature = map (byte_temp, 226,217,-8,1);
else if (byte_temp >= 211 && byte_temp <= 216) temperature = map (byte_temp, 216,211,1,5);
else if (byte_temp >= 168 && byte_temp <= 210) temperature = map (byte_temp, 210,168,6,30);
else if (byte_temp >= 124 && byte_temp <= 167) temperature = map (byte_temp, 167,124,30,50);
else if (byte_temp >= 83 && byte_temp <= 123) temperature = map (byte_temp, 123,83,50,70);
else if (byte_temp >= 67 && byte_temp <= 82) temperature = map (byte_temp, 82,67,71,80);
else if (byte_temp >= 53 && byte_temp <= 66) temperature = map (byte_temp, 66,53,81,90);
else if (byte_temp >= 42 && byte_temp <= 52) temperature = map (byte_temp, 52,42,91,100);
else if (byte_temp >= 34 && byte_temp <= 41) temperature = map (byte_temp, 41,34,101,110);
else if (byte_temp >= 27 && byte_temp <= 33) temperature = map (byte_temp, 33,27,111,120);
else if (byte_temp >= 20 && byte_temp <= 26) temperature = map (byte_temp, 26,20,122,133);
else if (byte_temp <= 19 ) temperature = 135;
Не взлетело, думаю дальше. В общем поведение следующее: при подаче питания кратковременно мигает светодиод на 13ом пине, далее через секунд 10 мигает светодиод подключенный к wbus (через транзистор) 4 раза и всё на этом, на нажатие кнопки не реагирует (В скетче сменил пин кнопки на 22) Попробую сейчас из скетча все что не относится к запуску по шине закоментить
//курю велосипед, интересная штука, не там оказывается сменил номер пина но все равно пока что не работает
Всем привет. Нужна консультация от тех кто в теме. Есть вебасто ттс аналогавая которая пускается плюсом, естественно бе wbus, но присутствует пин для диагностики и если я правильно понимаю то там передача данных происхрдит по k-line. Так же прикупил для дистанционного пуска altox wbus 5 она пускает котлы как аналоговые так и wbus, так же у алтокса есть обратная связь, она читает по wbus данные с котла(температуру и прочее). Так вот вопрос если подключить wbus от алтокса к пину диагностики аналогового котла, будет ли он что то видеть, и если нет то что можно сделать чтоб читал? (поменять котел самый крайний вариант).
Это значит добавить в разъем недостающий контакт.
Если есть провод для диагностики котла то это и есть wbus, что бы убедиться можно проверить что он выходит из 6ти контактного разъема под номером 2
Отлично. То есть получается он может запускаться и плюсом и через второй пин wbus-ом? Или в данной ситуации запускаться плюсом а со второго пина может читать данные?
На сколько знаю, вообще wbus ом называется шина только для котлов эво. Физически она такаяже как у ттс, т.е. к-лайн. Но настройки уарт этой шины 2400 8Е1. А у ттс 10400 8И1. И вроде у ттс все таки шина не wbus зовется , а просто линия диагностики.
Но запускать котел ттс по этой линии можно (даже не подавая 12в на пин запуска), также вытягивать все параметры и смотреть ошибки. Короче делать все то , что творит диагностика WTT.
Также будет работать и вариант запуска по +12в, и при этом читать параметры и ошибки из шины
Протокол обмена с ттс я конкретно поисследовал, скоро выложу описание протокола.
Не взлетело, думаю дальше. В общем поведение следующее: при подаче питания кратковременно мигает светодиод на 13ом пине, далее через секунд 10 мигает светодиод подключенный к wbus (через транзистор) 4 раза и всё на этом, на нажатие кнопки не реагирует (В скетче сменил пин кнопки на 22) Попробую сейчас из скетча все что не относится к запуску по шине закоментить
//курю велосипед, интересная штука, не там оказывается сменил номер пина но все равно пока что не работает
13 мигает при старте это нормально. LED w-bus мигает в начале это МК на котёл шлёт сообщение "стоп".
а почему тот пин кнопки не устроил? и 22 это что мега чтоли?
пины кнопок настраиваются так, покажу на примере, где подключены 3 кнопки :
#include <Button.h>
Button test;
#define StartButtonpin 7 // пин старт кнопки 7
#define LEFTButtonpin 8 // пин кнопки лево 8
#define RIGHTButtonpin 9 // пин кнопки право 9
#define StartButton 0
#define LEFTButton 1
#define RIGHTButton 2
void setup() {
test.NO();
test.pullUp();
test.duration_bounce ( 50);
test.duration_click_Db ( 250);
test.duration_inactivity_Up(5000);
test.duration_inactivity_Dn(1000);
test.duration_press ( 500);
// ниже через запятую пишутся пины кнопок, соответственно в скетче программные номера у этих кнопок будут 0, 1 , 2 и т.д. и обращение к ним далее уже будет по программым номера, поэтому выше рядом с дефайнами пинов сделаны дефайны программных номеров:
test.button(StartButtonpin, LEFTButtonpin, RIGHTButtonpin);
}
void loop (){
test.read();
if (test.event_click_Dn (StartButton)){ если нажата старт};
if (test.event_click_Dn (LEFTButton)){ если нажата лево};
if (test.event_click_Dn (RIGHTButton)){ если нажата право};
}
Нет, ардуино промини, пин а7, как понимаю это 22, просто удобнее на плате к нему было подпаяться.
В общем сделал как должно было быть изначально по условиям скетча, завтра попробую.
Есть вот такая мысль, а не может ли быть что промини (mega328) некорректно обрабатывает инициализацию для общения по шине (Не подтягивает к 1 и 0)? Спрашиваю так как встречалось что пины 1 и 0 вроде проблематично использовать как аналоговые, отсюда появилась мысль а может Serial и SoftwareSerial местами махнуть? Для SoftwareSerial есть библиотеки что бы он умел 8E1
не тут то было. Как цифровые пины аналоговые могут работать до А5. А6 и А7 могут быть чисто аналоговыми входами!!! Так что для кнопок выбирай другие пины . С этим внимательнее. Тем более А7 было бы 21!!! потому что А0 это 14 и т.д.
На счёт пинов 0 и 1. Установка лог "1" или "0" это нормальная работа этих портов, проблем тут нет. (и вообщето это нельзя называть "использовать как аналоговые", аналоговый выход это типа цифрового потенциометра)
Последнее предложение это вопрос или утверждение? Я не искал библу софт сериал с нестандартными настройками UART. Если найдёшь дай линк.
Всем привет! Давно меня тут не было. Что по поводу потребления тока этим устройством? У моего устройства (Sim800L + arduino PRO mini), потребление по 12 вольтам 15-16мА. И это я еще не усыплял девайсы и не ковырял светодиоды со стабилизатором.
Sim800 удалось усыпить?
Сейчас бьюсь с подключением rfm69. Смысл: считать код брелка webasto, а потом, по команде с arduino, воспроизводить этот код штатно запуская котел.
Ок, может из-за этого и не работает, сейчас попробовал и снова нет результата, вечером поправленный скетч залью и проверю
//попробовал просто TX RX местами поменять, и снова нет результата, но ардуино реагирует на нажатие кнопки включения котла, светодиод на 15 пине включается
Нет. Надо не менять местами, а чтобы дефайн Tx вверху скетча был 1 . Рекомендую также при попытке подключиться, смотреть что творится на шине монитором шины wbus программой WTT.
Заработало!)
Котел стартует (включается продувка, начинается розжиг) но я не стал из-за помпы дожидаться когда выйдет на полную мощность. Самое главное что оно работает)
Теперь надо GSM заказывать с али и собирать полную версию
пытаюсь доделать скетч, но ппц голова кипит. Большой код уже слишком стал. Шарики за ролики. Главное всё понимаю, как всё работает и как нужно сделать, но когда приступаю писать программу, охота сразу посидеть кино лучше посмотреть)))
И облегчением, а то уже начинал думать может я просто рукожоп и даже готовое не могу запустить)
Вечером включу на запущенном моторе (дорога занимает 15-20 минут) посмотрим работает ли поддержание работы. Циркуляции помпы в климате вроде хватает что бы котел не ушел в перегрев.
Сделай перерыв пару дней, работа и правда большая проделана. Я к сожалению настолько хорошо не разбираюсь в кодинге, вряд ли смогу как то помочь допилить))
вытягивание данных из различных котлов (не только пламя) , чтение и стирание ошибок. Просто протоколы я хакнул EVO , VEVO, TTC/E, гидроник первый, протоколы у всех совсем разные. Поэтому работы над скетчем много.
Ну и оптимизация кода. С течением времени опыт немного подрос, щас гляжу на код и вижу шляпу кое где.
и да не факт, что с моим уровнем программирования все желаемое получится уложить в атмегу 328
Ура! Отработал алгоритм усыпления и пробуждения arduino & SIM800. Сейчас у меня жрет 7-8мА. И это еще не снимал светодиоды и стабилизатор. Если интересно, то расскажу. А по поводу кода.... в 328 (как мне уже кажется) можно слона запихнуть. Если надо, то и с этим могу помочь.
Т.е. Сигнал DTR не будет работать сам по себе. Требуется вывесить 0 на DTR, дать команду: "AT+CSCLK=1" (не уверен в 100% достоверности последовательности действий, но я сделал так, и у меня все получилось). И далее модуль будет реагировать на сигнал DTR.
Еще требуется учесть, что модуль просыпается не сразу, а через 110 мсек. По этому если "будить" его во время звонка - ничего не получится. У меня сделано так:
..................
#define Ring 3 //прерывание 1 для вывода процессора из сна
#define SimSleep 15 // выход для усыпления/пробуждения SIM800 сигнал DTR
..........................
void setup()
{
.................................................
_countInterrupt = 0;
pinMode(SimSleep, OUTPUT); //выход для пробуждения/усыпления SIM800
pinMode(Ring, INPUT); // 3 пин - ISR(1) вход
digitalWrite(SimSleep,LOW);
set_sleep_mode(SLEEP_MODE_PWR_DOWN); //режим микропотребления самый экономный режим
sendATCommand("AT+CSCLK=1", true); // sendATCommand - процедура посылающая SIM800 AT команды....
..............................................
attachInterrupt(1, Interrupt_Ring, FALLING);
.............................................
}
void loop()
{
digitalWrite(SimSleep,HIGH); //усыпить SIM800
sleep_mode(); //усыпляем arduino
delay(110); //выдержка времени для вывода SIM800 из сна
if (SIM800.available()) // Ожидаем прихода данных (ответа) от модема.
{
................................. // Процедура обработки входящего звонка
}
.............................................................
}
//Прерывание по входящему звонку
void Interrupt_Ring()
{
digitalWrite(SimSleep,LOW); //разбудить SIM800
}
Хочу отметить, что без delay(110) - не работало! Проходил звонок, но модуль не поднимал трубку.
Поддержание работы котла работает, Led13 включается когда ардуино видит пламя, но после отключения котла Led13 не гаснет
На али увидел что сейчас есть модули Sim800L v2.0 они только напряжением питания отличаются как я понял?
да, там упрощенный алгоритм опроса пламени. В принципе если данные перестали от котла идти, то переменная не меняется, а остаётся последнее значение. По идее нужно сделать "noData" на всех параметрах если связи нет.
3) cон arduino & SIM800 без стабилизатора ~ 7,0 мА
4) cон arduino & SIM800 без сведодиодов по питанию и общего назначения ~ 6,2 мА
Но, у меня еще не полностью рабочий модуль. Он, для контроля, подключен к через UART к компу. Так, что туда то же может что то может утекать. А в общем, можно сказать, что я добился искомых 5 мА.
все что менее 10мА это пойдет даже для японских акб 45ач, главное чтоб состояние норм было. при моих алгоритмах усыплять дуню скорее всего не получится. да и в общем и так должно быть не более 10мА.
Почему не получится? Честно говоря, у меня нет времени и желания копать Ваш код. Так, что если скажете, чем проц занимается, то могу помочь.
А про потребление: то изначальными 17-18 мА - это устройство высаживает около 0,45 А*ч из аккумулятора в сутки, а за месяц - 13 А*ч. Если брать Ваши 10 мА - то соответственно 0,24 А*ч и 7,5 А*ч. При 5 мА - 0,12 А*ч и 3,6 А*ч. Если учесть, что в зимнее время аккумулятор плохо берет заряд, короткие поездки, да еще и немалое потребление webasto во время работы, то поверьте, 10 А*ч - лишними не будут. Так, что чем меньше - тем лучше.
И да и нет. Когда Sim800 спит, то сигнал вызова изменяет логический уровень на ножке "Ring". Если SIM800 не разбудить, то он не будет слушать AT команды и как следствие, трубку не поднимет и вызов не будет принят. Но, если по сигналу "Ring" проц. разбудит SIM800 (подаст 0 на DTR) и выждет 110мсек., то SIM800 проснется и примет вызов.
Я этот алгоритм опубликовал: - во время входящего вызова логический сигнал с ножки "Ring" SIM800 вызывает прерывание проца, который просыпается и выставляет 0 на DTR SIM800, далее задержка в 110мсек., опрос порта и далее соответствующие действия.
В реалии, при звонке на SIM800 я не заметил задержки по времени, даже 1 гудка не проходит, как модуль поднимает трубку и отвечает.
был бы ещё человек, умеющий конвертировать в формат, который китайцы берут на изготовление. Gerber чтоли. А вообще, нужно, конечно, самому разбираться.
есть теперь такой чел. Я. Разобрался. Берём эти gerber_файлы закидываем прямо в окно онлайн сервиса по просмотру gerber проектов. Крутим плату и любуемся ей в 3д. Эти же файлы можно отправить китайцу на изготовление. Исходник от layout6 - V8.2
Но сильно не спешим - нужно ещё с разъемом разобраться.
Оживилась тема) прошу прощения за молчание, уезжал, не было доступа к инету, на выходных продолжу свои попытки запуска через шину
Всё, разъем трассировал. Разъем Micro-Fit 3.0 2x10 на али не нашёл в единичной продаже, поэтому лучше в радиомагазе брать.
Плата v8.3. Gerber файлы исходник на файл_layout . В принципе специально делал одностороннюю и дорожки не сильно мелкие, чтобы ЛУТом тоже можно было развести. Только металлизацию лучше убрать при этом. Конечно перед заказом в Китай надо бы ЛУТом проверить.
Выглядит так:
На схеме не показано подключение D3 и D4 (SoftwareSerial)
на какой схеме? софт сериал на других пинах сидит
на какой схеме? софт сериал на других пинах сидит
Я про сообщение #86.
Для чего софт сериал, если сообщения выводим на USB?
там не нужен софт сериал, и без него всё работает, можете не подключать
Всем привет. Только что присоединился к проекту, достаточно интересное устройство. Большое уважение автору, считаю что проделана громандная работа с которой он поделился с остальными.
Когда то сомибирал эмулятор 1533 на атмега48, до сих пор работает.
По W-bus получилось у кого получить ответ от котла, темпретаруту, напряжение, наличие пламени? Температура на Thermo TOP C - (с другими дел не имел у уеня догреватели с Туарега, и одна плата с Ауди Q7 все что тут пишу о них) - имеет нелинейную зависимость, то что тут где то было на писано , что надо отнять 50 С - не верно, у меня не так , как вариант строить таблицу, типа ниже нуля - Cold, 0-10 С, 10-20С, 30-40С, 40-50С, выше 50 - Hot. Напряжение -там АЦП с линейной зависимостью, пламя 00 или 01- соответственно есть или нету пламени.
Тут кто то спрашивал Webasto Thermo Call - родня программа - может управлять посылая комманды по СМС - Start, Stop, Temp и режимы работы, причем температуру она хочет брать с внешнего датчика, а не с котла, видимо с ней не все так просто даже немцам. То есть что бы ее пользовать достаточно поменять в коде программы комманды Webasto-On - на Start - и должно работат через Themo Call.
У меня пока только теория, с ардуино дела не имел, ничего нет, только заказал.
По W-bus получилось у кого получить ответ от котла, темпретаруту, напряжение, наличие пламени? Температура на Thermo TOP C - (с другими дел не имел у уеня догреватели с Туарега, и одна плата с Ауди Q7 все что тут пишу о них) - имеет нелинейную зависимость, то что тут где то было на писано , что надо отнять 50 С - не верно, у меня не так , как вариант строить таблицу, типа ниже нуля - Cold, 0-10 С, 10-20С, 30-40С, 40-50С, выше 50 - Hot. Напряжение -там АЦП с линейной зависимостью, пламя 00 или 01- соответственно есть или нету пламени.
Ранее речь шла про котлы Thermo TOP C и E, предназначенные для допустановки. А у вас штатные, поэтому протокол отличается.
Нужно просто создать эмпирическую формулу для температуры. Это делается при помощи эмулятора котла. чуть выше написано как заснифить обмен данными между диагностикой и котлом при помощи K-line адаптера и инженерной версии программы Webasto TermoTest (сокращённо WTT). Когда будет сниф, я легко напишу эмулятор, подсунем его программе WTT и будете менять байт температуры и посмотрите по какой зависимости он будет меняться в диагностике.
А что снифить то нужно? У меня есть блок управления от вебасты, можно и без эмулятора (пока нет возможности его реализовать), адаптер тоже есть, WWT 2.16 (расширенная) есьь, если будет сниф просто, то там не видно будет реальной температуры, только ответ от котла, или я ошибаюсь. Я могу снять показания котла по температуре, +1С - ответ котла и так далее, осталось придумать как нагревать плавно на 1С.
Есть старые наработки
22 - B8, 23 - B7, 24 - B(пропуск) , 25- B2, 26- B0, 27- AE, 28-AC, 29- AA, 30 A8
в WTT есть функция чтобы показывать весь протокол обмена (читай выше как это сделать). Если снимете лог общения, я сделаю эмуль, и скажу какая зависимость байта температуры. Тем более лог будет полезен для коллекции
вот следующая продвинутая версия эмулятора котлов TTC/E . Верхние две строки скетча смотрим настраиваем (комментируем либо нет).
Там настраивается как подключаемся к WTT либо без к-лайн адаптера (через юсб ардуины), либо через к-лайн
Когда через к-лайн адаптер - есть возможность изменять значения байтов ответного сообщения (PIDa) "на лету" через сериал терминал.
если подключаемся к WTT через юсб ардуины значение байтов можно менять только вручную в скетче, каждый раз его перезаливая.
отправляя через терминал (9600 без переноса каретки и конца строки) символы '1' '2' или '3' выбираем какой ответный пид меням 2А 01 01, 2А 01 02 или 2А 01 05.
отправляя '+' или '-' выбираем номер изменяемого байта
отправляя ',' или '.' изменяем значение байта на -1 или +1 соответственно
отправляя 'm' - делаем значение байта поочереди либо 0 либо FF
Есть старые наработки
22 - B8, 23 - B7, 24 - B(пропуск) , 25- B2, 26- B0, 27- AE, 28-AC, 29- AA, 30 A8
попробовал эмулятором. На универсальных котлах такие же данные. Пока не могу подобрать формулу. Не ужели там просто таблица соостветсвия значений заложена в WTT. Врядли , какая то должна быть зависимость.
а напряжение вычисляется так. напряжение сидит в 7 байте ответа, отметил жирным
87 F1 51 6A 01 AF 00 B9 00 50 FC
U = byte*0.07 - byte/571
Пока не могу подобрать формулу. Не ужели там просто таблица соостветсвия значений заложена в WTT. Врядли , какая то должна быть зависимость.
нет, линейной зависимости не наблюдается. Вероятно значения в этом байте температуры это показания АЦП. А показания датчика t видимо нелинейны. Поэтому либо здоровенную таблицу соответсвия в скетч закладывать (222 значения *2 итого 450 байт) - слишком жирно. Сделал парсинг температуры по диапазонам через функцию map.
Почти во всём диапазоне точно показывает (ну кое где в диапазоне есть отличия максимум на пару градусов).
получилось так, по лучше и красивее мозгов у меня не хватило
Сегодня пробовал запустить свой догреватель по шине, но чет не работает, что именно моих знаний пока что не хватает, что то я упускаю.
Пойду дальше думать пока время есть
//все оказалось проще чем могло, кнопка не на том пине висела
то есть заработало?
Завтра узнаем) понял свою ошибку когда на улице уже темнеть начало
Не взлетело, думаю дальше. В общем поведение следующее: при подаче питания кратковременно мигает светодиод на 13ом пине, далее через секунд 10 мигает светодиод подключенный к wbus (через транзистор) 4 раза и всё на этом, на нажатие кнопки не реагирует (В скетче сменил пин кнопки на 22) Попробую сейчас из скетча все что не относится к запуску по шине закоментить
//курю велосипед, интересная штука, не там оказывается сменил номер пина но все равно пока что не работает
Всем привет. Нужна консультация от тех кто в теме. Есть вебасто ттс аналогавая которая пускается плюсом, естественно бе wbus, но присутствует пин для диагностики и если я правильно понимаю то там передача данных происхрдит по k-line. Так же прикупил для дистанционного пуска altox wbus 5 она пускает котлы как аналоговые так и wbus, так же у алтокса есть обратная связь, она читает по wbus данные с котла(температуру и прочее). Так вот вопрос если подключить wbus от алтокса к пину диагностики аналогового котла, будет ли он что то видеть, и если нет то что можно сделать чтоб читал? (поменять котел самый крайний вариант).
Так wbus по своей сути и есть kline
В 6ти контактном разъеме 2ой пин, возможно нужно допиновать разъем что бы было возможно получить доступ к wbus
А что значит допиновать? У меня же есть провод (пин диагностики)
Это значит добавить в разъем недостающий контакт.
Если есть провод для диагностики котла то это и есть wbus, что бы убедиться можно проверить что он выходит из 6ти контактного разъема под номером 2
Отлично. То есть получается он может запускаться и плюсом и через второй пин wbus-ом? Или в данной ситуации запускаться плюсом а со второго пина может читать данные?
На сколько знаю, вообще wbus ом называется шина только для котлов эво. Физически она такаяже как у ттс, т.е. к-лайн. Но настройки уарт этой шины 2400 8Е1. А у ттс 10400 8И1. И вроде у ттс все таки шина не wbus зовется , а просто линия диагностики.
Но запускать котел ттс по этой линии можно (даже не подавая 12в на пин запуска), также вытягивать все параметры и смотреть ошибки. Короче делать все то , что творит диагностика WTT.
Также будет работать и вариант запуска по +12в, и при этом читать параметры и ошибки из шины
Протокол обмена с ттс я конкретно поисследовал, скоро выложу описание протокола.
Спасибо за дельную информацию, сегодня возможно подключу все, по итогу отпишу получилось ли считать данные wbus ом с k line или же нет.
Не взлетело, думаю дальше. В общем поведение следующее: при подаче питания кратковременно мигает светодиод на 13ом пине, далее через секунд 10 мигает светодиод подключенный к wbus (через транзистор) 4 раза и всё на этом, на нажатие кнопки не реагирует (В скетче сменил пин кнопки на 22) Попробую сейчас из скетча все что не относится к запуску по шине закоментить
//курю велосипед, интересная штука, не там оказывается сменил номер пина но все равно пока что не работает
13 мигает при старте это нормально. LED w-bus мигает в начале это МК на котёл шлёт сообщение "стоп".
а почему тот пин кнопки не устроил? и 22 это что мега чтоли?
Нет, ардуино промини, пин а7, как понимаю это 22, просто удобнее на плате к нему было подпаяться.
В общем сделал как должно было быть изначально по условиям скетча, завтра попробую.
Есть вот такая мысль, а не может ли быть что промини (mega328) некорректно обрабатывает инициализацию для общения по шине (Не подтягивает к 1 и 0)? Спрашиваю так как встречалось что пины 1 и 0 вроде проблематично использовать как аналоговые, отсюда появилась мысль а может Serial и SoftwareSerial местами махнуть? Для SoftwareSerial есть библиотеки что бы он умел 8E1
не тут то было. Как цифровые пины аналоговые могут работать до А5. А6 и А7 могут быть чисто аналоговыми входами!!! Так что для кнопок выбирай другие пины . С этим внимательнее. Тем более А7 было бы 21!!! потому что А0 это 14 и т.д.
На счёт пинов 0 и 1. Установка лог "1" или "0" это нормальная работа этих портов, проблем тут нет. (и вообщето это нельзя называть "использовать как аналоговые", аналоговый выход это типа цифрового потенциометра)
Последнее предложение это вопрос или утверждение? Я не искал библу софт сериал с нестандартными настройками UART. Если найдёшь дай линк.
Хм, интересные нюансы, частично понял свою ошибку.
Путаюсь в формулировках, плюс не хватает практики)
Утверждение, один из вариантов для расширения функционала Softwareserial здесь https://github.com/ledongthuc/CustomSoftwareSerial
о пасиб, давно хотел найти
на счёт того, что пины Serial 0 и 1 у промини и нано различаются это я наврал оказывается. скетч #282 поправил обратно.
Всем привет! Давно меня тут не было. Что по поводу потребления тока этим устройством? У моего устройства (Sim800L + arduino PRO mini), потребление по 12 вольтам 15-16мА. И это я еще не усыплял девайсы и не ковырял светодиоды со стабилизатором.
Sim800 удалось усыпить?
Сейчас бьюсь с подключением rfm69. Смысл: считать код брелка webasto, а потом, по команде с arduino, воспроизводить этот код штатно запуская котел.
Кто нибудь работал с rfm69?
Ок, может из-за этого и не работает, сейчас попробовал и снова нет результата, вечером поправленный скетч залью и проверю
//попробовал просто TX RX местами поменять, и снова нет результата, но ардуино реагирует на нажатие кнопки включения котла, светодиод на 15 пине включается
Нет. Надо не менять местами, а чтобы дефайн Tx вверху скетча был 1 . Рекомендую также при попытке подключиться, смотреть что творится на шине монитором шины wbus программой WTT.
Заработало!)
Котел стартует (включается продувка, начинается розжиг) но я не стал из-за помпы дожидаться когда выйдет на полную мощность. Самое главное что оно работает)
Теперь надо GSM заказывать с али и собирать полную версию
с победой!
пытаюсь доделать скетч, но ппц голова кипит. Большой код уже слишком стал. Шарики за ролики. Главное всё понимаю, как всё работает и как нужно сделать, но когда приступаю писать программу, охота сразу посидеть кино лучше посмотреть)))
И облегчением, а то уже начинал думать может я просто рукожоп и даже готовое не могу запустить)
Вечером включу на запущенном моторе (дорога занимает 15-20 минут) посмотрим работает ли поддержание работы. Циркуляции помпы в климате вроде хватает что бы котел не ушел в перегрев.
Сделай перерыв пару дней, работа и правда большая проделана. Я к сожалению настолько хорошо не разбираюсь в кодинге, вряд ли смогу как то помочь допилить))
А что хочешь еще дополнить?
вытягивание данных из различных котлов (не только пламя) , чтение и стирание ошибок. Просто протоколы я хакнул EVO , VEVO, TTC/E, гидроник первый, протоколы у всех совсем разные. Поэтому работы над скетчем много.
Ну и оптимизация кода. С течением времени опыт немного подрос, щас гляжу на код и вижу шляпу кое где.
и да не факт, что с моим уровнем программирования все желаемое получится уложить в атмегу 328
Ура! Отработал алгоритм усыпления и пробуждения arduino & SIM800. Сейчас у меня жрет 7-8мА. И это еще не снимал светодиоды и стабилизатор. Если интересно, то расскажу. А по поводу кода.... в 328 (как мне уже кажется) можно слона запихнуть. Если надо, то и с этим могу помочь.
Можешь рассказать , как удалось усыпить SIM800?
на джсм естьпин DTR. подавая туда лог1 или 0 он либо спит либо подрствует
Поддержание работы котла работает, Led13 включается когда ардуино видит пламя, но после отключения котла Led13 не гаснет
На али увидел что сейчас есть модули Sim800L v2.0 они только напряжением питания отличаются как я понял?
Информация взята от сюда: http://www.2150692.ru/wiki/19-sim800l/125-energosberezhenie-modulya-sim800l
Т.е. Сигнал DTR не будет работать сам по себе. Требуется вывесить 0 на DTR, дать команду: "AT+CSCLK=1" (не уверен в 100% достоверности последовательности действий, но я сделал так, и у меня все получилось). И далее модуль будет реагировать на сигнал DTR.
Еще требуется учесть, что модуль просыпается не сразу, а через 110 мсек. По этому если "будить" его во время звонка - ничего не получится. У меня сделано так:
Хочу отметить, что без delay(110) - не работало! Проходил звонок, но модуль не поднимал трубку.
Поддержание работы котла работает, Led13 включается когда ардуино видит пламя, но после отключения котла Led13 не гаснет
На али увидел что сейчас есть модули Sim800L v2.0 они только напряжением питания отличаются как я понял?
да, там упрощенный алгоритм опроса пламени. В принципе если данные перестали от котла идти, то переменная не меняется, а остаётся последнее значение. По идее нужно сделать "noData" на всех параметрах если связи нет.
Все поснимал. Вот результаты:
все что менее 10мА это пойдет даже для японских акб 45ач, главное чтоб состояние норм было. при моих алгоритмах усыплять дуню скорее всего не получится. да и в общем и так должно быть не более 10мА.
Почему не получится? Честно говоря, у меня нет времени и желания копать Ваш код. Так, что если скажете, чем проц занимается, то могу помочь.
А про потребление: то изначальными 17-18 мА - это устройство высаживает около 0,45 А*ч из аккумулятора в сутки, а за месяц - 13 А*ч. Если брать Ваши 10 мА - то соответственно 0,24 А*ч и 7,5 А*ч. При 5 мА - 0,12 А*ч и 3,6 А*ч. Если учесть, что в зимнее время аккумулятор плохо берет заряд, короткие поездки, да еще и немалое потребление webasto во время работы, то поверьте, 10 А*ч - лишними не будут. Так, что чем меньше - тем лучше.
А когда он спит , он вызовы принимает ?
И да и нет. Когда Sim800 спит, то сигнал вызова изменяет логический уровень на ножке "Ring". Если SIM800 не разбудить, то он не будет слушать AT команды и как следствие, трубку не поднимет и вызов не будет принят. Но, если по сигналу "Ring" проц. разбудит SIM800 (подаст 0 на DTR) и выждет 110мсек., то SIM800 проснется и примет вызов.
Я этот алгоритм опубликовал: - во время входящего вызова логический сигнал с ножки "Ring" SIM800 вызывает прерывание проца, который просыпается и выставляет 0 на DTR SIM800, далее задержка в 110мсек., опрос порта и далее соответствующие действия.
В реалии, при звонке на SIM800 я не заметил задержки по времени, даже 1 гудка не проходит, как модуль поднимает трубку и отвечает.