mc 33290 и k-line адаптер

woodhousel
Offline
Зарегистрирован: 01.10.2017

Да только один раз. Выбрана первая группа.

MaksVV
Offline
Зарегистрирован: 06.08.2015

попробуйте проснифить в момент когда другую группу выбираете, будет ли проскакивать блок из 49 байт? Если да, то там какие-то настройки. И напишите название и значение каждого из 4 параметров группы 1 в момент снифа. 

woodhousel
Offline
Зарегистрирован: 01.10.2017

Да, получается после запроса новой группы проскакивает блок из 49 байт. В снифе запрос первых трёх групп по порядку. https://cloud.mail.ru/public/LzVx/HannGt8AVГруппы измерений

MaksVV
Offline
Зарегистрирован: 06.08.2015

А почему в параметрах лажа? 52 об/мин. -40 градусов и т.д.

woodhousel
Offline
Зарегистрирован: 01.10.2017

Мозги то на столе лежат

MaksVV
Offline
Зарегистрирован: 06.08.2015
1 группа 
 
244 255  255  159   16       DEC
F4    FF    FF    9F    10       HEX
      -40    52  1.24  8.00     VAGCOM
 
 
2 группа 
 
244   255   255   00    00      DEC
F4      FF     FF    00    00      HEX
        -40    52    0,0   0,0      VAGCOM
 
 
3 группа 
 
244  255  255  255  128        DEC
F4    FF    FF     FF    80         HEX
       40    52   -40   12.00     VAGCOM
 
Мда, ничё не понятно. Как это всё связано. Неразрешимая загадка
woodhousel
Offline
Зарегистрирован: 01.10.2017

На забугорных форумах пару тройка человек поднимали аналогичную тему с такими же снифами, - проблему решить не удалось(((

woodhousel
Offline
Зарегистрирован: 01.10.2017

И всё-таки показания по группам это не два KWorda, а чистое десятичное число, которое подставляется в формулу, а лажа в параметрах из за того, что в формулу подставляются данные вне диапазона из за отсутствия показаний с датчиков.На примере 3-й группы -4 показание вывел формулу напряжения. Менял напряжение на ЛБП -снифил, дальше математика. Дело за малым- найти эти формулы для DEC показаний, ведь VAG COM как-то расчитывает эти сырые данные.3 группа 4 параметр

woodhousel
Offline
Зарегистрирован: 01.10.2017

Формулы получены. Все ответы дала группа 000 и её расшифровка в ELSA

taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017

MaksVV, есть пару вопросов по коду касающегося расчетов расхода топлива.
 

//при получении сообщения БЕЗ ошибок с данными от панели приборов, запишем в переменные остаток топлива и пробег
    if (CRC==crc) {Serial.println ("    OK!!!");
  
   Fuel2 = MessageRxGauge[16]/2.0; //мгновенное топливо в баке, для вывода на экран
   //стартовая запись литров в баке для подсчета затраченных литро. 
   if (!flagFuelIGN) {  Fuel = MessageRxGauge[16]/2.00;  kmREFUELING=((float)Fuel*100.00)/(float)L100SR_TFT;} 
   //else Fuel = MessageRxGauge[17]/2.0; 
   //для усреднения болтания топлива в баке, высчитывает среднее. без усреднения - закоментировать 6 строчек ниже и раскоментировать строчку выше
   else { FuelZamer[ZamerNumber] = MessageRxGauge[17]/2.00;
   if (ZamerNumber==9) {
   Fuel = 0 ;
   for (int i = 0; i < 10; i++) Fuel = Fuel + FuelZamer[i];
   Fuel = (float)Fuel/10.0;}
   ZamerNumber++; if (ZamerNumber>9) ZamerNumber = 0;}
 

   kmAge = (MessageRxGauge[23]+(MessageRxGauge[24]*256))/10.0; //суточный пробег с панели приборов

   //бак у меня на 59 литров, а датчик показывает максимально 53 литра. для этого эта формула
   //если у вас тоже датчик имеет лимит то подправте 53 на свой лимит. 
   //если ваш датчик показывает одинаково с полным баком то закоментировать три нижние строки. 
   if (Fuel<53){
   if (!flagkmAgeIGN) { kmAgeIGN = kmAge; flagkmAgeIGN =1;}
   if (!flagFuelIGN) { FuelIGN = Fuel; Fuel_last = Fuel; flagFuelIGN = 1; }}}
    
   else Serial.println ("    ERROR!!!");   
   dataMessageEND = 0; MessageParse = 1; //mySerial_gauge.flush();
   for (int i = 0; i < 34; i++) MessageRxGauge[i]=0; }}  // очистка байтов массива 
Включили зажигание. Если пошел обмен данными получаем ("    OK!!!").
Fuel2 =  записываем колличество топлива в баке.
 
// flagFuelIGN изначально =0; единственное место где меняется флаг на эту переменную:
//if (!flagFuelIGN) { FuelIGN = Fuel; Fuel_last = Fuel; flagFuelIGN = 1; }// но что бы поменять её на =1, надо  что бы она уже была =1; что-то совсем не понятно
//аналогично с flagkmAgeIGN
 
Если flagFuelIGN =1(true)то Fuel = записываем колличество топлива в баке; 
kmREFUELING=((float)Fuel*100.00)/(float)L100SR_TFT;  расчитываем пробег до заправки (запас хода);
 
Если flagFuelIGN =0(false)
делаем 10 замеров топлива в баке, что бы исключить колебания датчика;
 
kmAge = записываем пробег с приборки; в зафире есть гдето еще в приборке подсчет суточного ???
тут не совсем понятно  с 53 литрами.
Если топлива не полный бак(<53)...
kmAgeIGN=запоминаем пробег в момен включения зажигания. flagkmAgeIGN=1, меняем флаг до следующего включения.
FuelIGN=запоминаем остатоктоплива в момен включения зажигания. flagFuelIGN=1, меняем флаг до следующего включения.
 
Еще один вопросик в правильности поочеродного обращения к разным блокам(в моем случае движок currPage=2 и приборка currPage=1). Сразу обращаюсь к приборке (CurrPage=1). Через 4 сек  CurrPage=2 и устанавливается связь с блоком двигателя на 40 сек. Потом все по кругу.
if (currPage==1 && butt_flag==false)
  {
    last_time=millis();
    butt_flag=true;
  }
  if (millis()-last_time>4000 && butt_flag2==false)
    {
     currPage++;
     butt_flag2=true;     
    }

  if (millis()-last_time>40000)
    {
      currPage=1; 
      butt_flag=false;
      butt_flag2=false;
    }

 

 
4 секунды достаточно, что бы получить данные с приборки и переключиться на блок двигателя.. Есть где то какой-то косяк в проекте Александра. Диагностика идет, но через сек 17-20 дуня повисает(виснет дисплей, перестает мигать диод RX). Пробовал питать дуню от повербанка и от ноута и от машины - результат тотже. но бывают моменты(редко), что не повисает несколько минут.
 
taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017

Бывает повисает и сразу при включении. Попробую закоментировать библиотеку дисплея и всё что с ней связано. Есть вероятность того, как вы мне раньше и писали, что надо МЕГА, а то УНО не справляется.. и тут дело не в питании.  

MaksVV
Offline
Зарегистрирован: 06.08.2015

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

taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017

Разобрался вот.. UNO не справляется с именно этой библиотекой дисплея. НЕ хватает ресурсов по ходу, надо МЕГА. Закажу на днях.
Без этой библиотеки, зависаний нет(RX моргает постоянно). Получилось вот еще вывести данные в приложение виндовс(нашел на просторах нета и подправил, че мог).. с притормаживанием правда, но работает.. для некоторых проектов, если вдруг нет дисплея, можно использовать. Ну а если довести код до ума, то точно можно использовать..

taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017
0

MaksVV, подскажи пожалуйста еще насчет 110 сообщения.

MaksVV
Offline
Зарегистрирован: 06.08.2015

taha17 пишет:
// flagFuelIGN изначально =0; единственное место где меняется флаг на эту переменную:

//if (!flagFuelIGN) { FuelIGN = Fuel; Fuel_last = Fuel; flagFuelIGN = 1; }// но что бы поменять её на =1, надо  что бы она уже была =1; что-то совсем не понятно
//аналогично с flagkmAgeIGN
 
смотри внимательно в проверке условия стоит ! .  Это означает что если flagFuelIGN == 0. Т.е. изначально флаг в нуле. потом мы записываем количество литров и километраж и ставим флаги в . всё, больше не будет записываться этот километраж и литраж до следующего перевключения питания ардуины. Эти величины нужны, чтобы понять сколько потреблено литров и проехано километров, т.е. считаем относительно этих величин. 
taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017

эх, моя не внимательность ))) Спасибо за подсказку. Вроде как разобрался, так опять непонятки  какие то появились.

Вот, что позаимствовал с вашего кода, для расчета расхода топлитва(менял некоторые переменные и незначительно подправлял):

В setup() докинул вот эти строчки:

  //подсчет среднеарифметического усредненного расхода
  for (int i = 0; i < 11; i++) L100_Eeprom [i]= EEPROM.read(i);
  for (int i = 0; i < 11; i++) L100SR_TFT = L100SR_TFT +  L100_Eeprom [i];
  L100SR_TFT = (float)L100SR_TFT/110.0;
  if (L100SR_TFT<0) L100SR_TFT = 0;
  if (L100SR_TFT>99) L100SR_TFT = 99;

Функция receive ():

void receive () 
    {
   if (!flagFuelIGN) { kmREFUELING=((float)fuelLevel*100.00)/(float)L100SR_TFT;} 
   //else fuelLevel = fuelLevel; 
   //для усреднения болтания топлива в баке, высчитывает среднее. без усреднения - закоментировать 6 строчек ниже и раскоментировать строчку выше
   else { FuelZamer[ZamerNumber] = fuelLevel;
   if (ZamerNumber==9) {
   fuelLevel = 0 ;
   for (int i = 0; i < 10; i++) fuelLevel = fuelLevel + FuelZamer[i];
   fuelLevel = (float)fuelLevel/10.0;}
   ZamerNumber++; if (ZamerNumber>9) ZamerNumber = 0;}

   if (fuelLevel<70){
   if (!flagkmAgeIGN) { kmAgeIGN = odometer; flagkmAgeIGN =true;}
   if (!flagFuelIGN) { FuelIGN = fuelLevel; Fuel_last = fuelLevel; flagFuelIGN = true; }}  
    }

Функция Trip():

void Trip() 
   {
  
  if (flagkmAgeIGN){                                                                                 

   FuelTrip = FuelIGN - fuelLevel;                          
   if (odometer>kmAgeIGN) kmTrip = odometer - kmAgeIGN;
   if (odometer<kmAgeIGN) kmTrip = 2000 - (kmAgeIGN - odometer);  // 2000 это через сколько км у тебя суточный пробег сбрасывается на ноль, поменяй если другое число
   if (odometer==kmAgeIGN) kmTrip = 0;
  
  //подсчет расхода на 100км за поездку
  L100M = ((float)FuelTrip*100.00)/(float)kmTrip;
   if (L100M<0) L100M = 0;
   if (L100M>99) L100M = 99;
 
  // ниже цикл считает среднеарифметический расход из еепром раз в пробег, указанный в переменной kmeeprom
   if (kmTrip-kmTFT>kmeeprom) {kmTFT = kmTrip; 

  // тут считаем среднеарифметический усредненного расход из ячеек еепром 
   for (int i = 0; i < 11; i++) L100_Eeprom [i]= EEPROM.read(i);
   for (int i = 0; i < 11; i++) L100SR_TFT = L100SR_TFT +  L100_Eeprom [i];
   L100SR_TFT = (float)L100SR_TFT/110.00;
   if (L100SR_TFT<0) L100SR_TFT = 0;
   if (L100SR_TFT>99) L100SR_TFT = 99;}
  
  // ниже цикл считает расход топлива за пробег, указанный в переменной kmL, здесь же запись в ячейки еепром 
   if (kmTrip-km>kmL) {km=kmTrip; 

  L100SR = ((float)(Fuel_last-fuelLevel)*100.00)/(float)kmL; // расход/100км  - обновляется раз в 10км, меняется км в int kmL = 10;
  Fuel_last = fuelLevel;      // сохранение параметров с последнего измерениея 
   if (L100SR<0) L100SR = 0;
   if (L100SR>99) L100SR = 99;
 
  //расчет остатка километров в баке, постоянно подстраеваемый под ваш стиль вождения
  if (L100SR>0) kmREFUELING=((float)fuelLevel*100.0)/(float)L100SR; //если средний расход больше нуля, то расчитывать км в баке из него
  else kmREFUELING=((float)fuelLevel*100.00)/(float)L100SR_TFT;    //если ноль или меньше то расчитывать км в баке с устредненного расхода
    //еще вариант расчета киломеров в баке от устредненного расхода L100SR_TFT, если он у вас уже вышел на стабильную цифру
  //kmREFUELING=((float)Fuel*100.0)/(float)L100SR_TFT;
    //еще вариант если вы знаете примерный средний расход за весь бак.  
  //kmREFUELING=((float)Fuel*100.0)/(float)6.7; //где 6.7 вош средний расход за бак
  
  // тут записываем  L100SR последовательно в одну из 11 ячеек еепром
  //EEPROM.write (12,n_eeprom);      // ЗДЕСЬ ВНИМАТЕЛЬНО. ЗАГРУЗИТЬ ПРОШИВКУ С ЭТОЙ СТРОКОЙ ОДИН РАЗ, ПОТОМ ЗАКОМЕНТИРОВАТЬ И ЕЩЁ РАЗ ЗАГРУЗИТЬ
  n_eeprom = EEPROM.read (12);    // в ячейке 12 хранится № текущей ячейки для записи расхода, чтобы где остановился при выкл питания, от туда и продолжил
  EEPROM.write(n_eeprom, L100SR*10); 
  n_eeprom++; if (n_eeprom>10) n_eeprom=0;
  EEPROM.write (12,n_eeprom); }}}

Строчку с eeprom не трогал (по тексту написано, что её надо раскомментировать, наверное что бы зачистить,потом сново закомментировать). 

Я так понимаю, когда появился обмен дынными между дуней и ЭБУ, сразу же запоминается текущий пробег(одометер) и колличество топлива в баке.. Но почему то переменные получаются нулевыми. 

Может перед тем как вызвать эти функции, сделать какую проверку?? ну например проверить переменную пробега(odometer)// если например пробег >5, то тогда наверняка связь присутствует на 100%. или на какой другой переменной. Без срабатывания функции receive (), функция Trip() не заработает. Вероятнее всего, что я сильно урезал receive ()... а именно-нет проверки связи с блоком ЭБУ. Флаги сразу становятся =1, ну и естественно заполняются нулями, так как связь не установлена.

MaksVV
Offline
Зарегистрирован: 06.08.2015

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

примерно так  

if (!flagFuelIGN && fuelLevel >0) { FuelIGN = fuelLevel; Fuel_last = fuelLevel; flagFuelIGN = true; }}

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

конечно это коряво будет если fuelLevel действительно равен нулю (даже когда связь уже установили), но тогда и ехать не сможем, топлива то нет))

а пробег нулевым тоже только у новой машины бывает)

taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017

Сделал проверку на пробег и уровень топлива

if (!flagkmAgeIGN && odometer>0) { kmAgeIGN = odometer; flagkmAgeIGN =true;}
   if (!flagFuelIGN && fuelLevel>0) { FuelIGN = fuelLevel; Fuel_last = fuelLevel; flagFuelIGN = true; }} 

Но ноли не пропали. Когда комментровал код, то вошел в кураж и закоментировал в loop, строчки для вызова функций receive() и  Trip(). В этом был косяк.. но после обноружения ошибки, эти две строчки решил оставить с проверкой на нули, мало ли))))) что бы пройти стадию тестирования, к дисплею подключил старую библиотеку(что бы не тягать ноут)... обороты правда с задержкой, но меняются и дуня главное не повисает... и основная цель это расчет расхода на 100км и запаса хода. Да и  надо ведь как то проверить Ваш труд изложеный в функции Trip ))))). Но думаю всё будет ГУД ))) 

Есть еще пару вопросав:

1. Реально ли собрать данные за поездку??, не поездку между включениями зажигания, а настоящую поездку. Например по включению флага, мы начинаем записывать сколько проехали и сколько потратили топлива, (ну можно еще и время в пути, средний расход считать...но это не важно, более важнее пробег и  трата топлива). С пробегом понятно, флаг поднял (записал текущий пробег)и считай себе разницу. А вот как быть с потраченым топливом, если во время следования будут дозаправки??

2.Реально ли своими силами перенести проект (подкорректировать библиотеки) на NODMCU. Там 4мб памяти, wi-fi на борту. Стоимость меньше чем дуни с wi-fi. Есть просто товарищ который поможет написать приложение на android. 

3. Про MC33290, вроде и сопротивление на ножках разное(признак рабочей, а не пустышки) и когда запросы делаешь на ноге K-line просадка идет(диод сигналит).. но все равно где то все теряется. Может заказать L9637, и повыбрасывать эти MC33290, что бы не смущали?? 

4. Может в ближайшем будущем, ели конечто у тебя будет время и желание поколдуем над протоколом для Ebera(догревателя)?? Буду готов оказать любую помощь. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

1. Реально. Главное после заправки перевключить зажигание, чтоб расход литров правильно считался. 

2. Не имел дело с nodemcu  и вообще с проектами на ESP. ESP использую только как WI-FI адаптер, взаимодействуя с ним по UART АТ командами. В принципе так и можно сделать, чтобы вайфай к проекту добавить. 

3. Если мс33290 не рабатают, нужно взять копеечный LM393 с обвзякой из резюков (я уже неоднократно это описывал) или L9637D. 

4. можно поколдовать. Начать нужно со сниффера ( либо программного , либо аппаратного) протокола обмена.  

taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017

Протестировал БК )) Средний расход пощитался гдето через неделю эксплуатации, это скорее всего свяязано с тем, что у меня в течении этой недели были маленькие заезды. На работу 8 км и обратно. Изначально после чистки памяти показывал 25.50, я сразу подумал гдето есть косяк, но продолжил тестить  и как видно не зря. Потом начались заезды побольше, и средний расход начал меняться чаще. Сказывается только недостаточность ресурсов UNO, но как показала практика очень много ресурсов забирает библиотека с вводом данных на экран. Средний расход от включения зажигания(за одну поездку) сразу показывает 99, потом 30 или 20 но потом опять 90 или ноль. Это тоже пожет сказваться от недостаточности ресурсов, но сдесь еще может повлиять мой датчик уровня топлива... бывает барахлит при малом колличестве топлива в баку.. надо сделать ревизию, так сказать освежить контакты)))

Нуждаюсь еще в вашей некоторй помощи:

1. По поводу 1-го вопроса с 219 сообщения. Суть я уже понял, но не знаю как реализовать.. а если быть точным как записать все в еепром. 
 

Для реализации моего запроса нам надо две переменные, 
для хранения потраченного топлива, и для пройденного пути.
Их надо занести в еепром, а при необходимости затирать.(по какому то  условию)

int LongTrip = 0;        //Пройдено км за всю поездку
int LongFuel=0;	  //Потрачено литров за всю поездку


Если я все правильно понимаю, то в две верхние переменные, можно записывать данные
с двух уже существующих переменных(которые уже есть в БК) 
///******
float FuelTrip = 0;     	// количество литров топлива, израсходованное за один цикл включения зажигания
float kmTrip = 0;            //пробег за один цикл включения зажигания
///******

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

наверное правильнее будет сделать так: 

- завести определённую ячейку в еепром (точнее две, т.к. одна это всего 255 км, а две уже 65535км). Это будет, как называют в БК, суточный пробег. 

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

- по какому то событию сбрасывать эти два параметра на ноль (например, по нажатию специально сделанной для этой цели кнопки)

- поставить большой конденсатор по питанию ардуино. И контролировать наличие зажигания, чтобы когда оно выключается, МК успевал до разряда конденсатора приплюсовать пробег между включениями зажигания и литры в наши ячейки. 

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

L100Mсут = (((float)FuelTrip + (float)LongFuel) *100.00)/((float)kmTrip + (float)LongTrip);
taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017

Суть я уловил. Но никогда не работал с еепром. Событие для сброса в 0 не прописывал.  Тут  что-то сошкрябал,  надо бы проверить))


int flagIGN = 8;

void setup() 
{
	
pinMode(flagIGN,INPUT);	
int L100MSUT;             //Расход средний суточный


//Чтобы заново «собрать» большое число, разобранное на байты, есть функция 
//word(): int val = word(hi, low), где "hi" и "low" – это значения старшего и младшего байтов числа "val".

int LongTrip = word(EEPROM.read(0),EEPROM.read(1));        //Пройдено км за сутки

int LongFuel=EEPROM.read(2);        					 //Потрачено литров за сутки

}

	
void Trip() 
   {
 
  if (flagkmAgeIGN){}
  
  if(digitalRead(flagIGN)==true)  //если включено зажигание 
      {
       L100MSUT = (((float)FuelTrip + (float)LongFuel) *100.00)/((float)kmTrip + (float)LongTrip);
      }   
					else 
					{
					LongTrip+=kmTrip;
											//чтобы записать, нужно разбить на 2
					EEPROM.write(0, highByte(LongTrip));  // записываем в ячейку 0 старший байт
					EEPROM.write(1, lowByte(LongTrip)); // записываем в ячейку 1 младший байт
		 
					LongFuel+=FuelTrip;    
					EEPROM.write(2, LongFuel); // запись числа в ячейку
					}
      
      
   }
MaksVV
Offline
Зарегистрирован: 06.08.2015

в принципе правильно. Вот ещё пример как разбить двухбайтовое число на два отдельных байта , а потом обратно собрать в одно число из двух байт: 


uint16_t Probeg = 1623;  // например был такой пробег в HEX это 0х657

byte ProbegA = 0;        // первый байт числа
byte ProbegB = 0;        // второй байт числа


void setup() {
Serial.begin (9600);

//разбиваем на два байта
ProbegA = Probeg & 0xFF; 
ProbegB = Probeg >> 8;

// распечатаем
Serial.println (ProbegA, HEX); 
Serial.println (ProbegB, HEX); 

//собираем число из двух байт
uint16_t Probeg2 = ( ( uint16_t ) ProbegB << 8 ) | ProbegA;

//распечатаем
Serial.print (Probeg2);

}

void loop() {}

Нужно только ввести флаг, что в еепром уже записали, чтобы не испрортить ячейки еепрома и писать туда только один раз.  Ну ещё запись литров в ячейку поменял , так более правильно. 

bool flagwrite = false;

else if (!flagwrite)

                    {

                    LongTrip+=kmTrip;

                                            //чтобы записать, нужно разбить на 2

                    EEPROM.write(0, highByte(LongTrip));  // записываем в ячейку 0 старший байт

                    EEPROM.write(1, lowByte(LongTrip));   // записываем в ячейку 1 младший байт

                    EEPROM.write(2, (EEPROM.read(2) + FuelTrip)); // запись литров в ячейку
                    flagwrite = true;
                    }

 

taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017

Еще пару уточнений...

1. Если в пути, т.е на включеном зажигании я захочу посмотреть суточный расход,пробег, потраченое топливо..

расход в L100MSUT лежит, это понятно...

пробег((float)kmTrip + (float)LongTrip) и потраченое топливо((float)FuelTrip + (float)LongFuel) выводить(на дисплей) сразу как сумму, либо дозоводить переменные только для вывода?? 

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

без разницы, можешь сразу как сумму

taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017

Про конденсаторы, ты так имелл ввиду(когда пропадет питание, у на с еще есть пару сек для записии в еепром) ??? В одной из тем, на прошлой неделе, ты выложил плату для обвязки lm393, надеюсь она правильная ???)))

MaksVV
Offline
Зарегистрирован: 06.08.2015

я тоже надеюсь) только контроль зажигания надо так. 

taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017

Подскажи, где еще косяки есть. тут потребности чуть поменялись))) Хочу по событию включать свет(тип проводи меня домой будет))) на минуту где-то. Кнопок на плате нет сейчас, но будет приемник.. на пульте 4-ре кнопки. все работает, я раньше испытывал.. у каждой кнопки свой код... можно колдавать)) ну так вот.... Vbat питание, которое подается при снятии с охраны машины, и присутствует  после постановки на её обратно, еще пару минут. Правильно ли я сигналю на DRL+ ??)) Брал один в один с другой схемы

MaksVV
Offline
Зарегистрирован: 06.08.2015

т.е. ты на постоянку ардуино запитать хочешь? Тогда кондёры ёмкие становятся не актуальны. (схема с кондёрами предлагалась для питания ардуино от зажигания). И уж тем более диод там не нужен. При постояннном питании ардуино просто контролировать зажигание да и всё. и  когда оно выключается записывать в еепром. Но имей ввиду, вся эта схема будет мА 30-40 потреблять. А это совсем не гуд для автомобиля. Про полевики по схеме не подскажу, сам не очень в этом разбираюсь. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

я вот такой dc-dc ставил. Он вообще ничего не ест почти. Ну и правильно, что промини взял, она гораздо меньше ест чем нано. Ещё можно штатный led  и стабилизатор у неё откусить - ещё меньше есть будет. 

taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017

ну как на постояну... только когда машина снята с охраны. При постановке на охрану этот плюс пропадает, блок бортовой сети засыпает..примерно через 1-2 минуты. или может по определенному событию(именно когда включено зажигание) подавать этот дополнительный плюс(тоже через полевик какой)...тогда получится что ардуинка будет сама себя отрубать когда надо(т.е до следующего включения зажигания).

Примерно так:

int IGN = 8;  //вход зажигания
int DRLIN=5;  //кнопки включения DRL
int DRLOUT=6; //выход для включения DRL
int Vbat=7;   // выход для подключения дополнительно источника питания
int DRLSTART; // для запоминания когда пропало зажигание 
int DRLTIME=60000;  // 1 минута для подсветки

bool flagDRL=false;
bool flagIGNSTOP=false;


void setup() 
{
	
pinMode(IGN,INPUT);	
pinMode(DRLIN,INPUT);
pinMode(DRLOUT,OUTPUT);
pinMode(Vbat,OUTPUT);
 
 }

	
void Loop() 
   {
 
  if(digitalRead(DRLIN)==true && digitalRead(IGN)==true )  // Если нажали на кнопку и было включено зажигание
      {
       flagDRL=!flagDRL; //Меняем флаг DRL... будет уже ВКЛ
	   digitalWrite(Vbat, true); //Подключаем дополнительный источник питания для ардуины
	   flagIGNSTOP==false;
	  };
  
  if(digitalRead(IGN)==false && flagDRL==true && flagIGNSTOP==false)  //Выключилось зажигание, подготавливаемся для включения света
	{
	flagIGNSTOP==true;	
	DRLSTART=millis(); //Фиксируем момент, когда пропало зажигание 
	};
	
  if(DRLSTART+DRLTIME<millis() && digitalRead(IGN)==false)
	{	
  digitalWrite(DRLOUT,true); //включаем свет на 1 мин
	} 
  else {digitalWrite(DRLOUT,false);  digitalWrite(Vbat,false);}
      
   }
   

Схема чуть не правильная, поливики надо к Vbat подрубать.

Lemur
Offline
Зарегистрирован: 11.01.2016

ух ты какая грандиозная работа проделана

может по моему вопросу подскажете, как после L9637D полученные данные ретранслировать в Serial ардуино нано, то бы подключив к пк через уарт работал вагком? так в принципе можно или из-за разницы постоянно меняющихся скоростей обмена вагком ничего не увидит от обд?

MaksVV
Offline
Зарегистрирован: 06.08.2015

ардуино тут не нужно. Вам нужен usb-uart переходник типа ftdi, pl2103, ch340g и т.д.

Lemur
Offline
Зарегистрирован: 11.01.2016

идея такая, что бы как снифер, даже не снифер, а когда надо - использовать данны с k-line во внутренней программе ардуино и напрямую использовать пк для диагностики через вагком, тоесть получается как бы ардуина как прокладка, тоесть напрммер нажав кнопку, ардуина просто ретранслятор данных, нажал еще раз, уже идет штатаная работа.

через usb-uart все работает, все чипы ( ftdi, pl2103 и другие pl, ch340g) у меня пного разных вариаций и все попробовал

собственно это так, хотелка, основное реализованно, упраения вебастой через смс, автозапуск(пока тестировал частями, состоит из самого пуска и получение данных по оборотам с обд, как раз один из видов штатной работы ардуинки), контроль напряжения аккумуляторов, у меня их 2, температуры разные, умные поворотники, умные стопы и т.д.

MaksVV
Offline
Зарегистрирован: 06.08.2015

да проблема как раз в том что при ините скорость меньше. Хотя и это можно запрограммировать, если захотеть. 

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

подключаем L9637D  к  10 и 11 пинам ардуино (софт сериал). 

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

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); //R,T
#define TX 11

bool Init = 0;

void setup() {
Serial.begin (5, SERIAL_7O1); // на такой скорости ждём от вагкома адреса блока 
pinMode (TX, OUTPUT);
digitalWrite (TX, HIGH); // BUS IDLE
delay (500);
}

void loop()        {
  if (Serial.available()>0 && !Init){
    byte inbyte = Serial.read();
    if (inbyte == 0x01) {Init = 1; Serial.begin (9600);
        send5baud(0x01);           mySerial.begin (9600);  } 
        
                                    }

if (Init){
if (mySerial.available())  Serial.write(mySerial.read());
if (Serial.available())    mySerial.write(Serial.read());
         }  
  
                   }




void send5baud(uint8_t data){              
  // // 1 start bit, 7 data bits, 1 parity, 1 stop bit
  #define bitcount 10
  byte bits[bitcount];
  byte even=1;
  byte bit;
  for (int i=0; i < bitcount; i++){
    bit=0;
    if (i == 0)  bit = 0;
      else if (i == 8) bit = even; // computes parity bit
      else if (i == 9) bit = 1;
      else {
        bit = (byte) ((data & (1 << (i-1))) != 0);
        even = even ^ bit;
      }
    Serial.print(F("bit"));      
    Serial.print(i);          
    Serial.print(F("="));              
    Serial.print(bit);
    if (i == 0) Serial.print(F(" startbit"));
      else if (i == 8) Serial.print(F(" parity"));    
      else if (i == 9) Serial.print(F(" stopbit"));              
    Serial.println();      
    bits[i]=bit;
  }
  // now send bit stream    
  for (int i=0; i < bitcount+1; i++){
    if (i != 0){
      // wait 200 ms (=5 baud), adjusted by latency correction
      delay(200);
      if (i == bitcount) break;
    }
    if (bits[i] == 1){ 
      // high
      digitalWrite(TX, HIGH);
    } else {
      // low
      digitalWrite(TX, LOW);
    }
  }
  mySerial.flush();
}

 

Lemur
Offline
Зарегистрирован: 11.01.2016

ух, даже подумать не успел, а уже реализовал, завтра попробую, как раз выходной

спасибо

taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017

Lemur пишет:

идея такая, что бы как снифер, даже не снифер, а когда надо - использовать данны с k-line во внутренней программе ардуино и напрямую использовать пк для диагностики через вагком, тоесть получается как бы ардуина как прокладка, тоесть напрммер нажав кнопку, ардуина просто ретранслятор данных, нажал еще раз, уже идет штатаная работа.

через usb-uart все работает, все чипы ( ftdi, pl2103 и другие pl, ch340g) у меня пного разных вариаций и все попробовал

собственно это так, хотелка, основное реализованно, упраения вебастой через смс, автозапуск(пока тестировал частями, состоит из самого пуска и получение данных по оборотам с обд, как раз один из видов штатной работы ардуинки), контроль напряжения аккумуляторов, у меня их 2, температуры разные, умные поворотники, умные стопы и т.д.

Ты проект пилишь под webasto или Eberspacher ?? В дальнейшем,  я так понимаю к какомуто готовому приложению для телефона его будешь подгонять для удобства 

Lemur
Offline
Зарегистрирован: 11.01.2016

taha17 пишет:

Ты проект пилишь под webasto или Eberspacher ?? В дальнейшем,  я так понимаю к какомуто готовому приложению для телефона его будешь подгонять для удобства 

делаю под вебасто, аналоговое, управляется подачей плюса на пин

так же есть еще вебаста с управлением по k-line, то же работает

 

а так вот такую штуку слепил, сейчас переделываю, на плате преобразователь напряжения на основе кренки, вольтметры(из резисторов), две развязки k-line, что бы одной читать вебасту, другой эбу мотора, так же смонтированы eeprom и оптоуправление реле(накосячил немного с оптопарой, пришлось как то соплей вешать) в общем вот как то так, сейчас из всего я бы оставил все кроме оптопар, блочков с реле вагон и не дорого

 

 

 

Lemur
Offline
Зарегистрирован: 11.01.2016

еще сейчас тоит gps и sd, далее gps будет убран и оставлен только модуль на SIM808 (gps, gsm, bt)

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

 

taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017

MaksVV тоже такой проект делал, гдето есть тут на форуме. что-то там GSM устройство..... От себя добавлю, что вещь будет полезной, полностью можно будет отказаться от дорогих пультов.

Тебе надо найти тот проект и перечитать там всё))) может придется отказаться от половины плюшек, а то аккум посадишь будь здоров)) 

Lemur
Offline
Зарегистрирован: 11.01.2016

его проект и видел на начальном этапе, был очень кстати, с него и начал рыть инфу по запуску вебасты с к-линии, так как изначально только такая и была:):):)

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

а по поводу акума, так поэтому и делаю автозапуск, что бы прогреть вебастой мотор, запустить его, поднять потенциометром обороты до 2500, чуть погонять заряд батарей... это если при простое, а так для работы всего этого будет использован только один аккум, при высадке его, будет переключено на другой если надо ехать, с другого подогреть, запуститьтся и далее все подзарядить

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

taha17 пишет:
4. Может в ближайшем будущем, если конечто у тебя будет время и желание поколдуем над протоколом для Ebera(догревателя)?? Буду готов оказать любую помощь.

есть колдовство 

tankata1
Offline
Зарегистрирован: 05.04.2019

Hello,

I am writing from Bulgaria / Привет из Болгарии.

I am using MC33290 and Arduino UNO.

I tried several sketches but everytime the same story happens.  You can see the behaviour in the serial console output below...

I get the proper response from ECU. The car is Golf 4 1.6 AKL ->> KW1281.

I tried to put 5ms delay in the obdwrite() but it is still the same as before.

Can someone please help me to resolve this issue?


------connect addr=1 baud=9600
---KWP 5 baud init
bit0=0 startbit
bit1=1
bit2=0
bit3=0
bit4=0
bit5=0
bit6=0
bit7=0
bit8=0 parity
bit9=1 stopbit
---KWPReceive sz=3 blockCounter=0
IN: sz=3 data=55 1 8A 
------readconnectblocks
---KWPReceive sz=0 blockCounter=1
IN: sz=16 data=F 1 F6 30 36 41 39 30 36 30 31 39 42 51 20 3 
---KWPSendAckBlock blockCounter=2
---KWPSend sz=4 blockCounter=2
OUT:3 2 9 3 
---KWPReceive sz=0 blockCounter=3
IN: sz=16 data=F 3 F6 31 2E 36 6C 20 32 56 2F 52 34 20 53 3 
---KWPSendAckBlock blockCounter=4
---KWPSend sz=4 blockCounter=4
OUT:3 4 9 3 
---KWPReceive sz=0 blockCounter=5
IN: sz=15 data=E 5 F6 49 4D 4F 53 20 48 53 33 31 32 30 3 
---KWPSendAckBlock blockCounter=6
---KWPSend sz=4 blockCounter=6
OUT:3 6 9 3 
---KWPReceive sz=0 blockCounter=7
IN: sz=9 data=8 7 F6 0 0 3E 7A B6 3 
---KWPSendAckBlock blockCounter=8
---KWPSend sz=4 blockCounter=8
OUT:3 8 9 3 
---KWPReceive sz=0 blockCounter=9
IN: sz=4 data=3 9 9 3 
label=06A906019BQ1.6l 2V/R4 IMOS HS312
Con. OK
------readBlock 1
---KWPSend sz=5 blockCounter=10
OUT:4 A 29 1 3 
---KWPReceive sz=0 blockCounter=11
IN: sz=33 data=20 B 2 80 20 0 8C 30 11 0 C 18 24 30 3C 48 54 60 6C 78 84 90 9C A8 B4 C0 85 5 0 88 FF 0 3 
ERROR: invalid answer
------connect addr=1 baud=9600
---KWP 5 baud init
bit0=0 startbit
bit1=1
bit2=0
bit3=0
bit4=0
bit5=0
bit6=0
bit7=0
bit8=0 parity
bit9=1 stopbit
---KWPReceive sz=3 blockCounter=0
ERROR: timeout
------connect addr=1 baud=9600
---KWP 5 baud init
bit0=0 startbit
bit1=1
bit2=0
bit3=0
bit4=0
bit5=0
bit6=0
bit7=0
bit8=0 parity
bit9=1 stopbit
---KWPReceive sz=3 blockCounter=0
IN: sz=3 data=55 1 8A 
------readconnectblocks
---KWPReceive sz=0 blockCounter=1
IN: sz=16 data=F 1 F6 30 36 41 39 30 36 30 31 39 42 51 20 3 
---KWPSendAckBlock blockCounter=2
---KWPSend sz=4 blockCounter=2
OUT:3 2 9 3 
---KWPReceive sz=0 blockCounter=3
IN: sz=16 data=F 3 F6 31 2E 36 6C 20 32 56 2F 52 34 20 53 3 
---KWPSendAckBlock blockCounter=4
---KWPSend sz=4 blockCounter=4
OUT:3 4 9 3 
---KWPReceive sz=0 blockCounter=5
IN: sz=15 data=E 5 F6 49 4D 4F 53 20 48 53 33 31 32 30 3 
---KWPSendAckBlock blockCounter=6
---KWPSend sz=4 blockCounter=6
OUT:3 6 9 3 
---KWPReceive sz=0 blockCounter=7
IN: sz=9 data=8 7 F6 0 0 3E 7A B6 3 
---KWPSendAckBlock blockCounter=8
---KWPSend sz=4 blockCounter=8
OUT:3 8 9 3 
---KWPReceive sz=0 blockCounter=9
IN: sz=4 data=3 9 9 3 
label=06A906019BQ1.6l 2V/R4 IMOS HS312
Con. OK
------readBlock 2
---KWPSend sz=5 blockCounter=10
OUT:4 A 29 2 3 
---KWPReceive sz=0 blockCounter=11
IN: sz=16 data=F B 2 80 20 0 98 D9 0 86 1 0 88 F 0 3 
ERROR: invalid answer
------connect addr=1 baud=9600
---KWP 5 baud init
bit0=0 startbit
bit1=1
bit2=0
bit3=0
bit4=0
bit5=0
bit6=0
bit7=0
bit8=0 parity
bit9=1 stopbit
---KWPReceive sz=3 blockCounter=0
ERROR: timeout
------connect addr=1 baud=9600
---KWP 5 baud init
bit0=0 startbit
bit1=1
bit2=0
bit3=0
bit4=0
bit5=0
bit6=0
bit7=0
bit8=0 parity
bit9=1 stopbit
---KWPReceive sz=3 blockCounter=0
IN: sz=3 data=55 1 8A 
------readconnectblocks
---KWPReceive sz=0 blockCounter=1
IN: sz=16 data=F 1 F6 30 36 41 39 30 36 30 31 39 42 51 20 3 
---KWPSendAckBlock blockCounter=2
---KWPSend sz=4 blockCounter=2
OUT:3 2 9 3 
---KWPReceive sz=0 blockCounter=3
IN: sz=16 data=F 3 F6 31 2E 36 6C 20 32 56 2F 52 34 20 53 3 
---KWPSendAckBlock blockCounter=4
---KWPSend sz=4 blockCounter=4
OUT:3 4 9 3 
---KWPReceive sz=0 blockCounter=5
IN: sz=15 data=E 5 F6 49 4D 4F 53 20 48 53 33 31 32 30 3 
---KWPSendAckBlock blockCounter=6
---KWPSend sz=4 blockCounter=6
OUT:3 6 9 3 
---KWPReceive sz=0 blockCounter=7
IN: sz=9 data=8 7 F6 0 0 3E 7A B6 3 
---KWPSendAckBlock blockCounter=8
---KWPSend sz=4 blockCounter=8
OUT:3 8 9 3 
---KWPReceive sz=0 blockCounter=9
IN: sz=4 data=3 9 9 3 
label=06A906019BQ1.6l 2V/R4 IMOS HS312
Con. OK
------readBlock 0
---KWPSend sz=5 blockCounter=10
OUT:4 A 29 0 3 
---KWPReceive sz=0 blockCounter=11
IN: sz=5 data=4 B A B 3 
ERROR: invalid answer
------connect addr=1 baud=9600
---KWP 5 baud init
bit0=0 startbit
bit1=1
bit2=0
bit3=0
bit4=0
bit5=0
bit6=0
bit7=0
bit8=0 parity
bit9=1 stopbit
---KWPReceive sz=3 blockCounter=0
ERROR: timeout
------connect addr=1 baud=9600
---KWP 5 baud init
bit0=0 startbit
bit1=1
bit2=0
bit3=0
bit4=0
bit5=0
bit6=0
bit7=0
bit8=0 parity
bit9=1 stopbit
---KWPReceive sz=3 blockCounter=0
IN: sz=3 data=55 1 8A 
------readconnectblocks
---KWPReceive sz=0 blockCounter=1
IN: sz=16 data=F 1 F6 30 36 41 39 30 36 30 31 39 42 51 20 3 
---KWPSendAckBlock blockCounter=2
---KWPSend sz=4 blockCounter=2
OUT:3 2 9 3 
---KWPReceive sz=0 blockCounter=3
IN: sz=16 data=F 3 F6 31 2E 36 6C 20 32 56 2F 52 34 20 53 3 
---KWPSendAckBlock blockCounter=4
---KWPSend sz=4 blockCounter=4
OUT:3 4 9 3 
---KWPReceive sz=0 blockCounter=5
IN: sz=15 data=E 5 F6 49 4D 4F 53 20 48 53 33 31 32 30 3 
---KWPSendAckBlock blockCounter=6
---KWPSend sz=4 blockCounter=6
OUT:3 6 9 3 
---KWPReceive sz=0 blockCounter=7
IN: sz=9 data=8 7 F6 0 0 3E 7A B6 3 
---KWPSendAckBlock blockCounter=8
---KWPSend sz=4 blockCounter=8
OUT:3 8 9 3 
---KWPReceive sz=0 blockCounter=9
IN: sz=4 data=3 9 9 3 
label=06A906019BQ1.6l 2V/R4 IMOS HS312
Con. OK
------readBlock 0
---KWPSend sz=5 blockCounter=10
OUT:4 A 29 0 3 
---KWPReceive sz=0 blockCounter=11
IN: sz=5 data=4 B A B 3 
ERROR: invalid answer
------connect addr=1 baud=9600
---KWP 5 baud init
bit0=0 startbit
bit1=1
bit2=0
bit3=0
bit4=0
bit5=0
bit6=0
bit7=0
bit8=0 parity
bit9=1 stopbit
---KWPReceive sz=3 blockCounter=0
ERROR: timeout
------connect addr=1 baud=9600
---KWP 5 baud init
bit0=0 startbit
bit1=1
bit2=0
bit3=0
bit4=0
bit5=0
bit6=0
bit7=0
bit8=0 parity
bit9=1 stopbit
---KWPReceive sz=3 blockCounter=0
IN: sz=3 data=55 1 8A 
------readconnectblocks
---KWPReceive sz=0 blockCounter=1
IN: sz=16 data=F 1 F6 30 36 41 39 30 36 30 31 39 42 51 20 3 
---KWPSendAckBlock blockCounter=2
---KWPSend sz=4 blockCounter=2
OUT:3 2 9 3 
---KWPReceive sz=0 blockCounter=3
IN: sz=16 data=F 3 F6 31 2E 36 6C 20 32 56 2F 52 34 20 53 3 
---KWPSendAckBlock blockCounter=4
---KWPSend sz=4 blockCounter=4
OUT:3 4 9 3 
---KWPReceive sz=0 blockCounter=5
IN: sz=15 data=E 5 F6 49 4D 4F 53 20 48 53 33 31 32 30 3 
---KWPSendAckBlock blockCounter=6
---KWPSend sz=4 blockCounter=6
OUT:3 6 9 3 
---KWPReceive sz=0 blockCounter=7
IN: sz=9 data=8 7 F6 0 0 3E 7A B6 3 
---KWPSendAckBlock blockCounter=8
---KWPSend sz=4 blockCounter=8
OUT:3 8 9 3 
---KWPReceive sz=0 blockCounter=9
IN: sz=4 data=3 9 9 3 
label=06A906019BQ1.6l 2V/R4 IMOS HS312
Con. OK
------readBlock 0
---KWPSend sz=5 blockCounter=10
OUT:4 A 29 0 3 
---KWPReceive sz=0 blockCounter=11
IN: sz=5 data=4 B A B 3 
ERROR: invalid answer
------connect addr=1 baud=9600
---KWP 5 baud init
bit0=0 startbit
bit1=1
bit2=0
bit3=0
bit4=0
bit5=0
bit6=0
bit7=0
bit8=0 parity
bit9=1 stopbit
---KWPReceive sz=3 blockCounter=0
ERROR: timeout
------connect addr=1 baud=9600
---KWP 5 baud init
bit0=0 startbit
bit1=1
bit2=0
bit3=0
bit4=0
bit5=0
bit6=0
bit7=0
bit8=0 parity
bit9=1 stopbit
---KWPReceive sz=3 blockCounter=0
IN: sz=3 data=55 1 8A 
------readconnectblocks
---KWPReceive sz=0 blockCounter=1
IN: sz=16 data=F 1 F6 30 36 41 39 30 36 30 31 39 42 51 20 3 
---KWPSendAckBlock blockCounter=2
---KWPSend sz=4 blockCounter=2
OUT:3 2 9 3 
---KWPReceive sz=0 blockCounter=3
IN: sz=16 data=F 3 F6 31 2E 36 6C 20 32 56 2F 52 34 20 53 3 
---KWPSendAckBlock blockCounter=4
---KWPSend sz=4 blockCounter=4
OUT:3 4 9 3 
---KWPReceive sz=0 blockCounter=5
IN: sz=15 data=E 5 F6 49 4D 4F 53 20 48 53 33 31 32 30 3 
---KWPSendAckBlock blockCounter=6
---KWPSend sz=4 blockCounter=6
OUT:3 6 9 3 
---KWPReceive sz=0 blockCounter=7
IN: sz=9 data=8 7 F6 0 0 3E 7A B6 3 
---KWPSendAckBlock blockCounter=8
---KWPSend sz=4 blockCounter=8
OUT:3 8 9 3 
---KWPReceive sz=0 blockCounter=9
IN: sz=4 data=3 9 9 3 
label=06A906019BQ1.6l 2V/R4 IMOS HS312
Con. OK
------readBlock 1
---KWPSend sz=5 blockCounter=10
OUT:4 A 29 1 3 
---KWPReceive sz=0 blockCounter=11
IN: sz=33 data=20 B 2 80 20 0 8C 30 11 0 C 18 24 30 3C 48 54 60 6C 78 84 90 9C A8 B4 C0 85 5 0 88 FF 0 3 
ERROR: invalid answer
------connect addr=1 baud=9600
---KWP 5 baud init
bit0=0 startbit
bit1=1
bit2=0
bit3=0
bit4=0
bit5=0
bit6=0
bit7=0
bit8=0 parity
bit9=1 stopbit

 

taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017

Вот ответ на вопроса заголовка темы :) Так же подправлю 3 сообщение, темы и закреплю туда ответ, для того чтобы люди могли сразу найти ответ не перечитывая сообщения. На руках у меня 4-ре рабочих микросхемы mc33290 и 4-ре рабочих схемы L9637D. Проверил их через модуль FTDI заказанный из Китая. Вместо постоянного сопротивления стояли подстроечные резаки номиналом 10К. Сопротивление выставлял на угад, потом замерял :) на L9637D было 900R, на mc33290 было 2,2K. А вот с ардуинкой и софтсериалом еще не подружил.  На картинке сопротивление между ногами !!рабочих микросхем, между остальными глухо.

   

MaksVV
Offline
Зарегистрирован: 06.08.2015

И все же, чем копеечный lm393 не устроил?

taha17
taha17 аватар
Offline
Зарегистрирован: 08.10.2017

MaksVV пишет:
И все же, чем копеечный lm393 не устроил?

Я просто решил дожать эту тему до конца :) А так-то на LM393 это 100% рабочий вариант, единственный недостаток-это рапссыпуха обвязочная вокруг его. Наблюдаю за твоим проектом для управления догревателями, вижу до идеала довели)) Я уже даже купил все компоненты, вот только плату надо вытравить будет. НО у меня ведь Eber, если помнишь...закину на днях снифф...  поможешь чуть что, если время у тебя конечно будет  

 

goodgood
Offline
Зарегистрирован: 07.09.2021

Ребята привет!
Подскажите пожалуйста
Хочу сделать чтобы arduino эмулировал данные ECU авто, например выдавал рандомные обороты двигателя.
К этой ардуино хочу подконектится через обычный VAG KKL 409.1 usb кабель.
То есть Схема такая:

Эмулятор работы авто (Arduino) -> OBD2 разьем мама -> VAG KKL -> Ноутбук с софтом VAG COM

То есть по сути мне нужно пины аrduino RX TX подключить на 7 ногу разьема где работает K line.
Через что подключать RX TX к K line?
Через L9637D ?

Можно еще плиз пример простого скетча который бы имитировал обороты двигателя.
Проект делаю чисто в рамках своего обучения и интереса к диагностике авто :) 

Заранее Спасибо.
Хорошего Вам дня :)
 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Покуда теорию не подтянешь, по книгам, а не мультикам с ютуба, ничего у тебя не выйдет.