Вход

Просмотр полной версии : Блок питания NEXUS7-2012,2013 (или любого другого планшета)


Страницы : 1 [2] 3 4 5 6

SiC20101
24.02.2016, 19:42
Видел где то видео как делали контакты на задней крышке, которые при установке в панель замыкались и планшет начинал работать от БП установленного в машине.

kostrum
01.03.2016, 13:36
А можно заполучить картинку схемы в бОльшем разрешении? А то на той, что в шапке мелкий текст не читабелен.

SiC20101
01.03.2016, 21:35
Если мне память не изменяет, то в архиве есть...

oleg707
02.03.2016, 00:09
А можно заполучить картинку схемы в бОльшем разрешении? А то на той, что в шапке мелкий текст не читабелен.

в шапке архив. Splan только скачать из инэта надо.

Boomer192
02.03.2016, 18:09
Где то читал уже, сейчас не могу найти такую же проблему. Планшет отключается сам в авто, дома от этого же dc-dc работает без отключений. Пробовал подавать разную напругу, вплоть до 5в. Батареи нет, питается через контроллер.

oleg707
04.03.2016, 13:59
Где то читал уже, сейчас не могу найти такую же проблему. Планшет отключается сам в авто, дома от этого же dc-dc работает без отключений. Пробовал подавать разную напругу, вплоть до 5в. Батареи нет, питается через контроллер.

кондёры и осциллограф вам в помощь

oleg707
04.03.2016, 14:25
Итак, поменял АКБ в авто. ДАВНО пора было.
Играюсь с БП 4 версии. Прикрутил к нему двухстрочный дисплей для вывода информации и отладки, на плате места не занимает, снимается и ставиться легко, пускай поддержка будет. Как обкатаю на машине, если будет у кого интерес, выложу. Правда прошивку давать жаба душит, никто не помогает с написанием, поэтому скорее всего максимум в HEX е. Как прошить HEX я уже тут в теме писал.

Какое значение напряжения выбрать для самоотключения БП при выключенном зажигании?

Сейчас остановился на 11,9 В, когда зажигание выключено, и 11,7 В, когда включаешь АСС.

Artemix
10.03.2016, 23:18
запустил наконец , проверял без нагрузки стабилитроны кипят и плату нагревают , это норм?

oleg707
11.03.2016, 00:16
запустил наконец , проверял без нагрузки стабилитроны кипят и плату нагревают , это норм?

ни в коем случае!
стабы и всё остальное холодное или чуть тёплое.
нагрузку не цеплять, стабилитроны отпаять и померять напруги. надо 3,8 по батарее планшета и 4,8-5,0 по хабу.

Artemix
11.03.2016, 11:04
ни в коем случае!
стабы и всё остальное холодное или чуть тёплое.
нагрузку не цеплять, стабилитроны отпаять и померять напруги. надо 3,8 по батарее планшета и 4,8-5,0 по хабу.

место 3.8 скачит напруга 5.1.-5.3

oleg707
11.03.2016, 12:29
место 3.8 скачит напруга 5.1.-5.3

а по 2 каналу? Проверяй кондёры на выходе kiw3312s и задающие резисторы. R2.2 выпаяны на плате KIW?

oleg707
11.03.2016, 13:04
фото рабочего прототипа 3 версии блока .
Размер по 4Мб сайт не пропускает, пришлось резать.

Artemix
11.03.2016, 19:31
а по 2 каналу? Проверяй кондёры на выходе kiw3312s и задающие резисторы. R2.2 выпаяны на плате KIW?

их выпаял с диодом , диод на киве кипел. схема странная что то идет не так

oleg707
11.03.2016, 19:46
их выпаял с диодом , диод на киве кипел. схема странная что то идет не так

кинь фото собранного блока

Artemix
11.03.2016, 21:22
кинь фото собранного блока

низ разрушил поскольку он постоянно сгорает

oleg707
11.03.2016, 22:03
низ разрушил поскольку он постоянно сгорает

давай по порядку.. У китайцев было несколько версий kiw3312s с разными номиналами резисторов. Попробуй для начала поставить резак 100Ом - 1К между правой верхней ногой и выходом питания (3,8) и померяй напругу.
По факту ты просто не можешь запустить кив в заданном режиме - я такое проходил, даже спалил парочку.

Artemix
11.03.2016, 22:19
завтра все резисторы заново куплю с стабилетронами и проверю заново

Artemix
11.03.2016, 22:23
давай по порядку.. У китайцев было несколько версий kiw3312s с разными номиналами резисторов. Попробуй для начала поставить резак 100Ом - 1К между правой верхней ногой и выходом питания (3,8) и померяй напругу.
По факту ты просто не можешь запустить кив в заданном режиме - я такое проходил, даже спалил парочку.

я 4 шт уже выкинул , то они свистят , то только норм заработал и сразу показывать начинает 1 в.

oleg707
12.03.2016, 01:37
я надеюсь, ты конденсаторы ставил на выход?!
Возьми просто готовый модуль kkiw3312s. Ничего из него не выпаивай, даже коробку не разбирай. Подключи выходные конденсаторы обязательно (минимум 100 мФ, общий минус, плюсы на выход соответственно. Припаять крайне желательно.
Подай 12 вольт с автомобильного аккумулятора ( а то хрен его знает, чем ты на столе питаешься) на вход КИВ. На выходе КИВ должно быть вроде 1,2 вольта на одном канале и 3,3В на другом. или типа того.
Когда увидишь нормальные напряжения, подцепи резистор (любой, хоть 0Ом) к крайнему выходу (ADJ) и питанию, напряжение должно меняться и реагировать на резистор.

Сделай это, а потом дальше будем смотреть.

Denkos
12.03.2016, 05:40
низ разрушил поскольку он постоянно сгорает

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

yuriy m
12.03.2016, 11:37
В таком исполнении я бы не точно в машине, дома бы включать не стал, сразу в помойку.
Делайте нормальные платы с нормальными контактами, а ни эти поделки.
+100

SiC20101
12.03.2016, 11:58
А, что сразу заклювали то человека? Как я понял из фото он это всё собрал на макетке, специально чтобы проверить работоспособность схемы, а потом уж всё красиво развести на плате, нет. Или сдесь все сразу схемы травят по сто раз? Или ещё круче, все настоко постигли дзен, что все ошибки видят на этапе задумки чего либо...

Denkos
12.03.2016, 12:41
А, что сразу заклювали то человека? Как я понял из фото он это всё собрал на макетке, специально чтобы проверить работоспособность схемы, а потом уж всё красиво развести на плате, нет. Или сдесь все сразу схемы травят по сто раз? Или ещё круче, все настоко постигли дзен, что все ошибки видят на этапе задумки чего либо...

Все что временно, то постоянно.:smile1:

oleg707
12.03.2016, 12:49
А, что сразу заклювали то человека? Как я понял из фото он это всё собрал на макетке, специально чтобы проверить работоспособность схемы, а потом уж всё красиво развести на плате, нет. Или сдесь все сразу схемы травят по сто раз? Или ещё круче, все настоко постигли дзен, что все ошибки видят на этапе задумки чего либо...

я травил )) после макетки. и схему менял. и опять травил. Поэтому версий БП у меня накопилось, потом распаивал на новые версии.

SiC20101
12.03.2016, 12:54
Вот о чем и речь, после макетки... И я бы сказал так. Нет ничего постояннее чем временное.))) хотя постоянные доработки и устранение всяких багов, это даже важнее чем реализовать продукт. Потдержку всегда и везде ценят.

oleg707
12.03.2016, 12:59
Вот о чем и речь, после макетки... И я бы сказал так. Нет ничего постояннее чем временное.)))

макетка вообще переделывалась раз 15, не глобально. Для тестов же. А первый КИВ я просто спалил, подав питание. Он пищал и грелся. Пооотом только до меня дошло, что без кондёров он работать в принципе не будет.

oleg707
14.03.2016, 21:29
я просто оставлю это тут...

программа для просмотра (http://diptrace.com/downloads/diptrace_24.exe)
Языки программы (http://diptrace.com/language-packs/)

SuperLSD
15.03.2016, 05:27
Олег, а можно эту же схемку на базе NSD сделать вместо KIWS?

oleg707
15.03.2016, 12:42
Олег, а можно эту же схемку на базе NSD сделать вместо KIWS?

можно, я разрешаю.:derisive:

а в чём смысл nsd?

SuperLSD
15.03.2016, 20:41
просто вроде на KIWSах наводки бывают, со звуком проблемы случаются, или я ошибаюсь)

oleg707
15.03.2016, 21:09
просто вроде на KIWSах наводки бывают, со звуком проблемы случаются, или я ошибаюсь)

а вы ПОСТАВЬТЕ И ПРОВЕРЬТЕ. У меня домашняя акустика стоит поболее пары косарей, есть с чем сравнить, и помех в машине я не слышу! Качество (точнее его отсутствие) слышу, а помех не слышу. У Kiw3312s и (КИСа тоже вроде) частота работы 300кГц, что вы там можете услышать?! (на 3й версии БП я даже помехи мобильника в 20 см от звуковой карты не ловил, на 5й почему-то чуть хуже. в 40.)
Может мне повезло, конечно, хз.

SuperLSD
16.03.2016, 16:55
Олег, я только начинаю работать с паяльником(ремонтировал телефоны, ардуинки начал осваивать), а тут смотрю все разжеванно, и хочу спаять первую платку сам)

oleg707
16.03.2016, 19:07
Олег, я только начинаю работать с паяльником(ремонтировал телефоны, ардуинки начал осваивать), а тут смотрю все разжеванно, и хочу спаять первую платку сам)

что мешает?:yes2:

SuperLSD
17.03.2016, 14:42
Да в принципе ничего) Бери и делай) Олег, для начала вопрос можно?
Как в программе посмотреть список комплектующих?(чет не могу разобрать)

oleg707
17.03.2016, 20:35
Да в принципе ничего) Бери и делай) Олег, для начала вопрос можно?
Как в программе посмотреть список комплектующих?(чет не могу разобрать)

какой версии?

SuperLSD
17.03.2016, 20:57
diptrance 2.4

oleg707
17.03.2016, 21:05
в PCB layout F3 нажми.

Artemix
17.03.2016, 22:29
по первой схеме KIW на OTG Кабель сколько должно выйти напряжение?

Artemix
17.03.2016, 22:44
и можно схему подключения NEXUS 7 к Kiw3312

oleg707
17.03.2016, 22:53
по первой схеме KIW на OTG Кабель сколько должно выйти напряжение?

я на всех делаю 3,8 на батарею планшета (это верх на kiw3312s) и 4.8-5.0 на хаб (низ)

на OTG Кабель это куда? Для включения OTG там как бы минус подаётся... Дай схему по которой собираешь и укажи точку.

Схему подключения к нексу - можно, как только я её в свой проект закину. Нехватка времени и лень. Так что пинайте и напоминайте.


чего напруга скакала то? Разобрался - расскажи мне и народу.

Artemix
17.03.2016, 23:44
KIW кив заменил и пошло как по маслу, меня сейчас очень сильно интересует как внедрить в планшет данную схему.http://s010.radikal.ru/i312/1603/bb/bffac8c4e24d.jpg

сколько должно приходит на OTG , и вообще он нужен?

oleg707
18.03.2016, 04:03
KIW кив заменил и пошло как по маслу, меня сейчас очень сильно интересует как внедрить в планшет данную схему.http://s010.radikal.ru/i312/1603/bb/bffac8c4e24d.jpg

сколько должно приходит на OTG , и вообще он нужен?

а, это просто.
выход с R19 подаётся на 4 контакт юсб кабеля, который на планшете. ДА, придётся спаять. Я брал готовый юсб, отрезал микро-юсб головку и припаивал по даташитам новую. 4 контакт как раз на R19 надо подключать, остальное штатно.
Смысл этой затеи в том, чтобы планшет думал, что в него воткнут y-otg кабель. Тогда на выходе юсб с планшета начинает приходить питание +5В. Лично я им звуковуху питаю ( Хаба нет.). Может эта хренотень еще что полезное этим делает - не заморачивался.

ЗЫ R19 я ставил 0 ом (тупо перемычку).

Artemix
18.03.2016, 11:50
теперь описание как подрубить планшет к КИВ хотябы для начало в теории , а то мое творение хочу запихнуть в машину раз и на всегда .

SuperLSD
18.03.2016, 23:01
Олег, скажи c1-cap100rp(самый первый компонент) что это? ну и дальше как?

oleg707
20.03.2016, 00:42
теперь описание как подрубить планшет к КИВ хотябы для начало в теории , а то мое творение хочу запихнуть в машину раз и на всегда .

описание будет тутhttp://pccar.ru/showthread.php?p=355473#post355473

oleg707
20.03.2016, 00:44
Олег, скажи c1-cap100rp(самый первый компонент) что это? ну и дальше как?

ХДЕ? ссылку или лучше картинку вставь.

SuperLSD
20.03.2016, 05:28
43101
справа внизу выделено

oleg707
20.03.2016, 14:04
43101
справа внизу выделено

кондёр, номинал потом гляну, в машине. 50-100мФ. Для того, чтобы когда вставили ключ на секунду и выняли блок питания всё равно успел загрузиться. Или для управления от открытия центральным замком.

да, и R9 я не ставил, без него работает.

oleg707
20.03.2016, 14:35
по 5й версии.

Phill
20.03.2016, 15:10
здравствуйте,
можете написать, что происходит с трансистором J245 до включения ACC и послe появления ACC.
Заранее благодарю.

Я понимаю так:
1. АСC - нет: оба транзистора выключенны.
2. включили АСC: на базу (Gate) пришло около 5 В, затвор D436 открылся. Пошел ток через R6. Внимание вопрос, что происходит с J245. Поидее тоже открывается ? и запитывает КИС.
3. АСC - выключили: но запитанный до этого контроллер продолжает удерживать питаниe na базе D436, по истечении задержки D436 закрывается и обесточивает цепь, что делает J245 тоже закрывается.

Такое ощущение что он просто дублирует D436. V этом moja проблема не пойму ни как до конца.
Потому что если он дублирует D436, то в принципе он и не нужен.

SiC20101
20.03.2016, 16:41
Как я понимаю. Первый транзистор должен быть биполярный или как то так, а второй мосфет. Первый мы с помощью АСС отктываем небольшой силой тока и этим мосфет сажаем на землю, и он открывается, а контроллер потом этот проход держит, после потери АСС, и когда нужно отключает сам себя...
Может я конечно и не прав, сам только разбираюсь во всём этом...

oleg707
20.03.2016, 22:35
здравствуйте,
можете написать, что происходит с трансистором J245 до включения ACC и послe появления ACC.
Заранее благодарю.

Я понимаю так:
1. АСC - нет: оба транзистора выключенны.
2. включили АСC: на базу (Gate) пришло около 5 В, затвор D436 открылся. Пошел ток через R6. Внимание вопрос, что происходит с J245. Поидее тоже открывается ? и запитывает КИС.
3. АСC - выключили: но запитанный до этого контроллер продолжает удерживать питаниe na базе D436 (AKBpin. D7, +5V), по истечении задержки D436 закрывается и обесточивает цепь, что делает J245 тоже закрывается.

Такое ощущение что он просто дублирует D436. V этом moja проблема не пойму ни как до конца.
Потому что если он дублирует D436, то в принципе он и не нужен.


1. АСC - нет: оба транзистора выключены.
2. включили АСC: на затвор пришло около 5 В, затвор D436 открылся. И пустил массу на затвор J245. Он тоже открывается и запитывает KIW3312s.
R5 и R6 - подтяжка.
3. АСC - выключили: но запитанный до этого контроллер продолжает удерживать питаниe na базе D436, по истечении задержки D436 закрывается и обесточивает цепь, что делает J245 тоже закрывается.

SuperLSD
22.03.2016, 23:12
Уважаемый Олег, я вас очень прошу сделать список деталей для монтажа(ну "яндекс" не понимает что я от него хочу).

oleg707
23.03.2016, 00:23
Уважаемый Олег, я вас очень прошу сделать список деталей для монтажа(ну "яндекс" не понимает что я от него хочу).
только так, экспорт не знаю как сделать, сам...

kostrum
24.03.2016, 21:41
Здравствуйте, Олег. Подскажите пожалуйста как правильно пользоваться портами ss/sd1 ss/sd2.
понятно, что для отключения выхода 1 или 2 надо соответствующий ss/sd подтянуть к земле.
вопрос вот в чем: имею в авто +12в, которые при закрытии машины отключаются. хочу, чтобы при их отключении выключался один из каналов KIW. Как правильно будет подавать этот +12 на kiw?
У Вас это сделано через ардуинку а если без нее?

oleg707
24.03.2016, 22:47
Здравствуйте, Олег. Подскажите пожалуйста как правильно пользоваться портами ss/sd1 ss/sd2.
понятно, что для отключения выхода 1 или 2 надо соответствующий ss/sd подтянуть к земле.
вопрос вот в чем: имею в авто +12в, которые при закрытии машины отключаются. хочу, чтобы при их отключении выключался один из каналов KIW. Как правильно будет подавать этот +12 на kiw?
У Вас это сделано через ардуинку а если без нее?

делитель нужно сделать. Типа как на акб или асс. по номиналам не скажу, надо экспериментировать. Померяй, что там на ss/sd при подаче питания висит, вроде 3,3. Тогда на землю подтяжку в районе 1К и на питание АСС (или что там у тебя) около 4K и подать 12в со стороны 4К, после чего проверить, чтобы опорное напряжение от своих 3,3 не сильно уходило, а при пропадании ACC падало почти в ноль.
Я в самом начале экспериментировал, номиналы не помню, они не понадобились.

kostrum
25.03.2016, 09:55
Спасибо! Как только приедут модули - начну эксперементировать)

iMag
26.03.2016, 13:49
Уважаемые знатоки!
Задумался о том, чтобы подключить USB через пого-пины. Так как их всего 4, встаёт вопрос, как их перемкнуть так, чтобы при подключении обычного кабеля в USB не включался режим хоста, т.е. активировался обычный режим. Как идея подвесить пару диодов на провода от пого-пинов. В связи с чем вопрос, сколько диодов и каких.
Спасибо заранее за отклики.

oleg707
26.03.2016, 14:33
Уважаемые знатоки!
Задумался о том, чтобы подключить USB через пого-пины. Так как их всего 4, встаёт вопрос, как их перемкнуть так, чтобы при подключении обычного кабеля в USB не включался режим хоста, т.е. активировался обычный режим. Как идея подвесить пару диодов на провода от пого-пинов. В связи с чем вопрос, сколько диодов и каких.
Спасибо заранее за отклики.

ничего не понял.
Ты распиновку пого видел (- L R +)?
в обычный режим юсб загоняется неиспользованием 4 контакта.

iMag
26.03.2016, 18:37
ничего не понял.
Ты распиновку пого видел (- L R +)?
в обычный режим юсб загоняется неиспользованием 4 контакта.

Всё верно, я просто не до конца развил идею.
Сами контакты заизолирую от материнки и припаяюсь проводами к входу USB. По ходу надо будет пустить провод с "-" на 4-й и 5-й пины на USB, чтобы получить рабочий хост. В то же время впаять диод(ы) в эту разводку, чтобы сам USB оставался в нынешнем режиме без изменений.

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

По моему скромному ИМХУ, достаточно одного катодом к 4-му выводу USB, как на картинке, но какой? Какого разряда токи там?
(картинка схематичная)

oleg707
26.03.2016, 18:54
Всё верно, я просто не до конца развил идею.
Сами контакты заизолирую от материнки и припаяюсь проводами к входу USB. По ходу надо будет пустить провод с "-" на 4-й и 5-й пины на USB, чтобы получить рабочий хост. В то же время впаять диод(ы) в эту разводку, чтобы сам USB оставался в нынешнем режиме без изменений.

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

По моему скромному ИМХУ, достаточно одного катодом к 4-му выводу USB, как на картинке, но какой? Какого разряда токи там?
(картинка схематичная)

бред сивой кабыл. какие диоды?! Минусы общие, нафиг пого еще приплетать? кина не будет. ищи другие варианты.

iMag
27.03.2016, 00:35
бред сивой кабыл. какие диоды?! Минусы общие, нафиг пого еще приплетать? кина не будет. ищи другие варианты.

Ну, нельзя же так, - сразу по гогошарам! :smile1:
В общем, не важно, что там будет - пого, не пого... Будем считать, что есть возможность задействовать ещё один разъём, но на нём только 4 контакта. Вопрос в том, как подключить эти 4 контакта к тем 5-ти на разъёме USB, чтобы на первом реализовался хост, а второй оставался в своём текущем статусе, с включением хоста только при воткнутом OTG. Полагаю, что вопрос не очень сложный, нужно ответить только на него, без привязки к контексту.

oleg707
27.03.2016, 00:50
Ну, нельзя же так, - сразу по гогошарам! :smile1:
В общем, не важно, что там будет - пого, не пого... Будем считать, что есть возможность задействовать ещё один разъём, но на нём только 4 контакта. Вопрос в том, как подключить эти 4 контакта к тем 5-ти на разъёме USB, чтобы на первом реализовался хост, а второй оставался в своём текущем статусе, с включением хоста только при воткнутом OTG. Полагаю, что вопрос не очень сложный, нужно ответить только на него, без привязки к контексту.

даже если разобрать планшет и поставить туда транзистор, который при приходе 5 вольт на юсб( или куда там) будет давать массу на 4 конт юсб, вводя его в отг режим (в котором С планшета будет идти 5 вольт на питание флешки, например), и даже если поставить ялро с поддержкой зарядки при хосте, то при убирании питания на планш(+5В) планш все равно думает, что включена зарядка и питает эту флешку, пока не отключишь 4 контакт от массы.
У меня так было... может, при правильном ядре и удастся добиться желаемого... хз, тут пробовать надо.

iMag
27.03.2016, 00:58
даже если разобрать планшет и поставить туда транзистор, который при приходе 5 вольт на юсб( или куда там) будет давать массу на 4 конт юсб, вводя его в отг режим (в котором С планшета будет идти 5 вольт на питание флешки, например), и даже если поставить ялро с поддержкой зарядки при хосте, то при убирании питания на планш(+5В) планш все равно думает, что включена зарядка и питает эту флешку, пока не отключишь 4 контакт от массы.
У меня так было... может, при правильном ядре и удастся добиться желаемого... хз, тут пробовать надо.

Во, как! В принципе, вопросы бум решать по порядку. Будем считать, что стоит Автодроид или проша от Тимура (или ещё чего там, но Автодроид уже умеет заряжаться). Мучает только вопрос с правильным соединением этих двух разъёмов. Диода как я указал не хватит?

при убирании питания на планш(+5В) планш все равно думает, что включена зарядка и питает эту флешку, пока не отключишь 4 контакт от массы.
Было сложно, но кажется я понял, что ты имеешь в виду! ;)
В таком случае надо поставить параллельно 2 диода в стороны обоих контактов: и 4-го, и 5-го. Так не пойдёт?
С другой стороны, может быть подключен только к одному разъёму: либо родному, либо 4-контактному, и только по всем контактам. Зачем транзистор?

oleg707
27.03.2016, 19:59
В таком случае надо поставить параллельно 2 диода в стороны обоих контактов: и 4-го, и 5-го. Так не пойдёт?нет
у тебя нет вариантов, только подключать физически усб и управлять массой на 4 контакте в зависимости от зажигания (чем угодно, хоть рэлюшку поставь).

iMag
27.03.2016, 23:43
нет
у тебя нет вариантов, только подключать физически усб и управлять массой на 4 контакте в зависимости от зажигания (чем угодно, хоть рэлюшку поставь).

Я твая ни панимай - пачиму? Мне не очевидно. :shok:
А так?

oleg707
28.03.2016, 00:04
Я твая ни панимай - пачиму? Мне не очевидно. :shok:
А так?

НИКАК! без 5 физических проводов работать не будет! Расписывать азы на полстраницы - прости, это не ко мне, поспрошай еще на форуме.
зы
и оставь массу в покое. из-за перекоса масс может возникнуть паразитное напряжение и чё нить спалит. Потому коммутируют то, что не общее (в данном случае плюс)

iMag
28.03.2016, 08:35
НИКАК! без 5 физических проводов работать не будет! Расписывать азы на полстраницы - прости, это не ко мне, поспрошай еще на форуме.


Ладно, спасибо за уделённое время. Пойду поспрашиваю.
Извини, что влез в тему с посторонним вопросом. :drinks_cheers:

oleg707
31.03.2016, 00:34
моё подключение планшета. (http://pccar.ru/showpost.php?p=355473&postcount=7)

apd наконец таки 5 версия по стабильности сравнялась с 3й, а по возможностям уже переплюнула.

DimaD
07.04.2016, 21:31
Можешь сказать зачем здесь полярный кондер на 10мкФ?

oleg707
07.04.2016, 21:52
Можешь сказать зачем здесь полярный кондер на 10мкФ?

чтобы при дребезге зажигания на датчик холла не шла каша - живее будет. Можно не ставить.

DimaD
07.04.2016, 23:10
чтобы при дребезге зажигания на датчик холла не шла каша - живее будет. Можно не ставить.

И плюсом конденсатора к массе?

oleg707
07.04.2016, 23:54
И плюсом конденсатора к массе?

нет, конечно. Начиная рисовать для себя, я еще не умел переворачивать детали. Потом править было лень.

oleg707
09.04.2016, 19:37
итак, заморочился.
Дано:
При выключении зажигания я хочу, чтобы экран гас быстро.
При старте машины я хочу, чтобы экран не гас.
Ньюанс - напруги Асс и АКБ проседают при старте до 10В.
Решение:
if ((U_akb_real - U_acc_real) >4 )//проверка, выключили ли мы зажигание или просто стартуем (1 - выключили заж, 0 - стартуем)
{timeAfterACC = 500;} //1 - выключили заж ЕСЛИ +15 ПРОПАДАЕТ ВО ВРЕМЯ СТАРТА, ТО ВМЕСТО 500 НАДО 5000 или вообще убрать этот блок if-else.
else {timeAfterACC = 5000;} //0 - стартуем
Это43396 для 5й версии блока.


Также подшлифовал немножко скетч 3й версии43397, добавил выделенное
if (millis() > pauseTimeHALL && flagHALL == 0 || millis() > 10000 && flagACC == 1) //проверка отсчета при холодном старте



Видеотест (https://youtu.be/74fUQ8-5OXQ) 3 версии в машине.

DimaD
09.04.2016, 20:02
И еще вопрос, в основной теме что то не нашел. Когда на датчике холла минус, то планшет просыпается? Из схемы видно что когда все выключено, то мосфет закрыт и на датчике земли нет. Так?

oleg707
09.04.2016, 20:16
И еще вопрос, в основной теме что то не нашел. Когда на датчике холла минус, то планшет просыпается? Из схемы видно что когда все выключено, то мосфет закрыт и на датчике земли нет. Так?

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

DimaD
09.04.2016, 20:18
Я вот картинку прикреплял выше. Там когда все питание выключено что на PW1 7pin?

DimaD
09.04.2016, 21:56
И еще всю голову сломал. Набросал схему для Pogo-пинов в Multisim для эмуляции. Так при любом значении на входе с ардуины на выходе 5В.

Пробовал собирать на столе с IRF9540 - тоже самое. Блин, как у тебя работает этот "мосфет-выключатель"?

oleg707
09.04.2016, 22:43
Я вот картинку прикреплял выше. Там когда все питание выключено что на PW1 7pin?

масса ))
подтяжку с +30 ты учитываешь?

oleg707
09.04.2016, 22:46
И еще всю голову сломал. Набросал схему для Pogo-пинов в Multisim для эмуляции. Так при любом значении на входе с ардуины на выходе 5В.

Пробовал собирать на столе с IRF9540 - тоже самое. Блин, как у тебя работает этот "мосфет-выключатель"?

IRF9540 (http://www.vishay.com/docs/91078/91078.pdf)P-канальник. 2sj517 (http://documentation.renesas.com/doc/products/transistor/rej03g0874_2sj517ds.pdf) тоже. Он только плюс и будет пропускать. :dntknw:надо N-канальная проводимость.:smile2:

DimaD
09.04.2016, 22:48
На схеме P-канальник же

oleg707
10.04.2016, 01:01
На схеме P-канальник же

аа, я думал ты всё ещё про холл говоришь.

работает так:
на D9 пришёл плюс 5в - транзюк закрыт.
на D9 пришёл - - открылся и пропустил плюс +5В на PW1-3pin.
Для проверки надо на PW1-3pin прицепить лампочку или резистор, вторым концом лампы на массу. Без нагрузки можно ловить эдс.
На транзюке , когда шляпка сверху, пластиком к тебе, левая нога - затвор (D9).
Правая нога - вход питания.
Шляпка (и средняя ножка) - выход +5V PIT POGO PW1-3pin.

DimaD
10.04.2016, 09:31
аа, я думал ты всё ещё про холл говоришь.

работает так:
на D9 пришёл плюс 5в - транзюк закрыт.
на D9 пришёл - - открылся и пропустил плюс +5В на PW1-3pin.
Для проверки надо на PW1-3pin прицепить лампочку или резистор, вторым концом лампы на массу. Без нагрузки можно ловить эдс.
На транзюке , когда шляпка сверху, пластиком к тебе, левая нога - затвор (D9).
Правая нога - вход питания.
Шляпка (и средняя ножка) - выход +5V PIT POGO PW1-3pin.

Странно. В даташите к 2sj337 левал-G (вход ардуины на схеме), средняя-D (вход питания на схеме), правая-S (выход)

И на схеме мофет нарисован как G-вход ардуины, верх-D, низ-S

В общем с IRF9540 не работает никак, 2sj337 найти не удалось

oleg707
10.04.2016, 13:59
Странно. В даташите к 2sj337 левал-G (вход ардуины на схеме), средняя-D (вход питания на схеме), правая-S (выход)

И на схеме мофет нарисован как G-вход ардуины, верх-D, низ-S

В общем с IRF9540 не работает никак, 2sj337 найти не удалось

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

Вот тебе реальное фото работающего блока
43411

DimaD
10.04.2016, 14:08
В общем оттестировал две схемки. Одна замыкает холл на массу при HIGH ардуины, другая подает +5 на хаб (например) тоже при HIGH ардуины.

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

И еще мне нужно както порвать USB соединающий ардуину (pro micro) с хабом. Нужно ее (а она как клава в андроиде) подключать к хабу последней. Рвать питание не вариант, т.к. она сама этим всем рулит... значит рвать D+ наверно

oleg707
10.04.2016, 14:26
надо сделать чтобы на датчик холла по дефолту была земля.
ну так любую схему открывай и вперёд. Там готовое решение. 3 версия попроще - подтяжка идёт от +30. 5 версия посложнее - подтяжка идёт от батареи планшета ( если снять АКБ авто, то экран светиться не будет), но сложнее в настройке.

И еще мне нужно както порвать USB соединающий ардуину (pro micro) с хабом.
Еще один j377 впихни, если 5В, то можно напрямую управлять, без н-канальника.
Изучай схемы, там это есть всё.

DimaD
10.04.2016, 14:32
ну так любую схему открывай и вперёд. Там готовое решение. 3 версия попроще - подтяжка идёт от +30. 5 версия посложнее - подтяжка идёт от батареи планшета ( если снять АКБ авто, то экран светиться не будет), но сложнее в настройке.


Еще один j377 впихни, если 5В, то можно напрямую управлять, без н-канальника.
Изучай схемы, там это есть всё.

Я вот что собираю по холлу. В упор не вижу поддяжку на плюс. :dntknw:

DimaD
10.04.2016, 15:06
Холл вот так заработал как мне надо.

oleg707
10.04.2016, 15:46
Я вот что собираю по холлу. В упор не вижу поддяжку на плюс. :dntknw:

через R6 и R29 от плюса АКБ а оригинальной схеме, а не в этом кусочке.:acute:

oleg707
10.04.2016, 15:48
Холл вот так заработал как мне надо.

так ты же инвертируешь сигнал с ардуины, какой смысл?

DimaD
10.04.2016, 16:24
так ты же инвертируешь сигнал с ардуины, какой смысл?

Смысл в том что если ардуина выключена на датчике будет минус.

oleg707
10.04.2016, 21:28
Смысл в том что если ардуина выключена на датчике будет минус.

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

DimaD
10.04.2016, 21:57
ты наступаешь на мои грабли. Не страдай фигнёй, бери готовый узел и пользуйся. Там как раз если ардуина выключена на датчике будет минус.

Так у меня тоже самое

oleg707
10.04.2016, 22:43
Так у меня тоже самое

у тебя лишний транзистор

DimaD
11.04.2016, 08:10
у тебя лишний транзистор

Говорят так правильнее

oleg707
11.04.2016, 13:07
Говорят так правильнее

так правильнее, если напряжение управления меньше управляемого. Там Р разность потенциалов возникает и давит на затвор. У нас же разности нету, там и там 5В.
Если ты ставишь 2й транзистор, то резисторы подтяжки и по затвору тоже на него ставь. Так правильнее :pleasantry:.

DimaD
11.04.2016, 16:31
Ну никак чета... беру твой узел из lay, из схемы и эмулирую в мультисим. Получается что земля появляется только при замкнутом ключе S2. Т.е. есть на ардуине HIGH. Если ардуина выключена и соответственно на ней LOW то земли нет.

oleg707
11.04.2016, 22:04
Ну никак чета... беру твой узел из lay, из схемы и эмулирую в мультисим. Получается что земля появляется только при замкнутом ключе S2. Т.е. есть на ардуине HIGH. Если ардуина выключена и соответственно на ней LOW то земли нет.

логично, ты же подтяжку на + питания не сделал. добавь резистор ~12К между 12 вольт и затвором.

DimaD
12.04.2016, 07:46
Теперь постоянно масса на выходе

oleg707
12.04.2016, 13:18
r1 220k
r3 47k
r4 220k
пробуй так

DimaD
12.04.2016, 14:46
Тоже самое. И что интересно собираю в железе и тоже не работает

oleg707
12.04.2016, 19:49
есть одно подозрение. повесь лампочку не на 12 вольт, а на 5. (у датчика холла 3,3 вообще опорное)

DimaD
12.04.2016, 20:18
есть одно подозрение. повесь лампочку не на 12 вольт, а на 5. (у датчика холла 3,3 вообще опорное)

Неа. Ладно, хрен с ним. моя схема с вторым транзистором работает и ладно

Artemix
20.04.2016, 21:44
Вчера столкнулся с неприятной ситуацией с использованием KIW3312
значит подрубал к магнитоле AUX в виде тюльпанов и задел тюльпаном об корпус магнитолы и коротнул хаб, KIW3312 с выходом на хаб здох,
теперь KIW3312 под замену стабилетроны тоже.
может в схему на выход для питания хаба и АКБ поставить диод защитный ?
и какой лучше всего поставить?

oleg707
20.04.2016, 22:14
Вчера столкнулся с неприятной ситуацией с использованием KIW3312
значит подрубал к магнитоле AUX в виде тюльпанов и задел тюльпаном об корпус магнитолы и коротнул хаб, KIW3312 с выходом на хаб здох,
теперь KIW3312 под замену стабилетроны тоже.
может в схему на выход для питания хаба и АКБ поставить диод защитный ?
и какой лучше всего поставить?

нет, на диоде будет падение напряжения. На 3312 есть 2 резистора по 0 Ом в начале платки, это предохранители. Можешь их прозвонить. стабилитроны звонятся на короткое? Не совсем понял, что с чем коротнул, минус с питанием хаба?

Artemix
20.04.2016, 22:54
нет, на диоде будет падение напряжения. На 3312 есть 2 резистора по 0 Ом в начале платки, это предохранители. Можешь их прозвонить. стабилитроны звонятся на короткое? Не совсем понял, что с чем коротнул, минус с питанием хаба?
стабилитроны на короткое прозваниваются!
получается звуковую подключил к хабу сделал переходник на 2 тюльпана , магнитола Pioneer 80PRS у нее взаде AUX в виде 2 RCA входа , когда один тюльпан вставил в магнитолу музыка играла , а второй тюльпан вставлял и задел корпус магнитолы центральной направляющей тюльпана , искрануло и звук притих , далее смотрю хаб потух акб на планшете до сих пор питается от KIW3312, проверяю мультиком питание хаба а там 0 .

oleg707
24.04.2016, 21:06
стабилитроны на короткое прозваниваются!
получается звуковую подключил к хабу сделал переходник на 2 тюльпана , магнитола Pioneer 80PRS у нее взаде AUX в виде 2 RCA входа , когда один тюльпан вставил в магнитолу музыка играла , а второй тюльпан вставлял и задел корпус магнитолы центральной направляющей тюльпана , искрануло и звук притих , далее смотрю хаб потух акб на планшете до сих пор питается от KIW3312, проверяю мультиком питание хаба а там 0 .

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

Az0m@
25.04.2016, 22:29
прошу Олега или тех кто смог собрать 5ую версию платы... сделайте пжлста списочек деталей, которые необходимы для сборки платы кроме самой платы андурино.

P.S. прошу проверить и дополнить пжлста:
C1 – 47мкФ 25В
С2 – 1000мкФ 16В
С3 – 2200мкФ 10В
С4 – 1000мкФ 10В
С5 и С6 – отсутствуют
С7 – 220мкФ 16В
С8 – СМД 47мкФ 16В (1210)
С11 – СМД 2,2мкФ 100В (1812)
D1,D2,D3,D7,D8,D9 – СМД какие номиналы? Может конкретные модели?
D4,D5,D6 –отсутствуют
Q1,Q2 - PHD78NQ
Q3 - j245
R1,R11,R17,R18 – СМД 1кОм (102)
R2,R4 – СМД 22кОм (223)
R3,R5,R7,R8 – СМД 47кОм (473)
R6 - СМД 10Ом (100)
R10,R12,R16 - СМД 10кОм (103)
R13,R14,R15 - СМД какие номиналы?
Rxверх - СМД 220кОм (224)
Rxниз - СМД 330кОм (334)
R9 – отсутствует
U2 - ITS716G

oleg707
26.04.2016, 17:42
прошу Олега или тех кто смог собрать 5ую версию платы... сделайте пжлста списочек деталей, которые необходимы для сборки платы кроме самой платы андурино.

P.S. прошу проверить и дополнить пжлста


C1 – 47мкФ 25В
С2 – 1000мкФ 16В
С3 – 2200мкФ 10В
С4 – 1000мкФ 10В
С5 и С6 – 0,1 керамика
С7 – 220 - 470мкФ 16В
С8 – СМД 47мкФ 16В (1210)
С11 – СМД 157мкФ 16В танталовый
D1,D2,D3 - D7,D8,D9 – от балды, выпаял с како- то материнки
D4,D5,D6 –стабилитроны 5,6 В
Q1,Q2 - PHD78NQ
Q3 - j245
R1,R11,R17,R18 – СМД 1кОм (102)
R2,R4 – СМД 22кОм (223)
R3,R5,R7,R8 – СМД 47кОм (473)
R6 - СМД 100Ом (101) у себя не проверял, я эту цепь не использую. Резак для защиты. Это для запуску БП от центрального замка (сигналки ). ANRU делал такое вроде.
R10,R12,R16 - СМД 10кОм (103)

R13 ,R14,R15 - СМД какие номиналы? а вот это надо померять в машине взять, не помню.

Rxверх - СМД 220кОм (224) (их 2 в параллель!)
Rxниз - СМД 330кОм (334) (их 2 в параллель!)
R9 – отсутствует (да, по феншую нужны, но без него прекрасно работает)
U2 - ITS716G (можно 724, но они чуть мощнее по току)

Я сейчас фото работающего блока скинул, может на них номиналы рассмотришь, тогда пиши. ФОТО тыц (http://файлообменник.рф/li8ys9k4l2kx/Фото 5 вес ориг.rar.html)
печатка 43586

Az0m@
26.04.2016, 21:23
U2 - ITS716G (можно 724, но они чуть мощнее по току)

а где нашли эту хрень? ибо в наших краях не смогли даже аналог подобрать.. в каких нить материнских платах такие есть?

С5 и С6 – 0,1 керамика

судя по фотографиям они отсутствуют на плате, не?

D4,D5,D6 –стабилитроны 5,6 В

5целых6 или 5или6В?

Q1,Q2 - PHD78NQ

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

oleg707
26.04.2016, 22:05
а где нашли эту хрень? ибо в наших краях не смогли даже аналог подобрать.. в каких нить материнских платах такие есть?

судя по фотографиям они отсутствуют на плате, не?

5целых6 или 5или6В?

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

PHD78NQ - можно ставить любой n-channel, на любой материнке они есть. Я ставил из того, что было.

5,6 - 5v1 5v6 - стандартный ряд стабилитронов. Причём я думал, что ставлю 5,1В а оказалось 5,6В. Нужны больше для спокойствия. На kiw3312s на плате есть стабилитрон по выходу, 5,1В, на каждый канал.

Керамика припаяна с другой стороны, можно не ставить, стабильнее питание с ними - мееелкие пульсации гасить.

ITS (http://ru.aliexpress.com/wholesale?catId=0&initiative_id=AS_20160426100409&SearchText=its716g)

Вообще подобные ITS-ки стоЯт в бмв X5-X6 в блоке света, только управление по I2C там используют.

Az0m@
27.04.2016, 22:11
Вообще подобные ITS-ки стоЯт в бмв X5-X6 в блоке света, только управление по I2C там используют.
у вас стоит BTS724G
я у себя смог найти только такую - BTS724 без приставки G... подойдет ли?

oleg707
27.04.2016, 22:14
еще фотки, спишите номиналы и выложите здесь списком, плиз.
фото 5 ориг (http://файлообменник.рф/6391f49m8gtq.html)

oleg707
27.04.2016, 22:20
у вас стоит BTS724G
я у себя смог найти только такую - BTS724 без приставки G... подойдет ли?

а де вы нашли без Г ? я не нашёл (http://www.infineon.com/cms/en/search.html#!term=its724&view=all) и тут тоже не нашел (http://www.infineon.com/dgdl/Infineon-PROFET_Smart_high-side_switches_ProductOverview-BC-v01_00-EN.pdf?fileId=db3a304343a131180143b50598a525ab)
Пробуйте, должно пойти это ж почти обычный выключатель.

Az0m@
28.04.2016, 00:17
а де вы нашли без Г ? я не нашёл (http://www.infineon.com/cms/en/search.html#!term=its724&view=all) и тут тоже не нашел (http://www.infineon.com/dgdl/Infineon-PROFET_Smart_high-side_switches_ProductOverview-BC-v01_00-EN.pdf?fileId=db3a304343a131180143b50598a525ab)
Пробуйте, должно пойти это ж почти обычный выключатель.
да мне предложили такую под заказ привезти.. мол они выходили до модели с приставкой G

С5 и С6 – 0,1 керамика

0,1 мкФ - прально понимаю?
еще фотки, спишите номиналы и выложите здесь списком, плиз.

на днях постараюсь разгрести и выложить списочек

oleg707
28.04.2016, 12:08
0,1 мкФ - прально понимаю?
да прально, там можно от балды половину ставить в принципе.

Furai2014
29.04.2016, 23:02
Здравствуйте! А подойдет вместо PHD78NQ такой http://www.a-power.com.tw/files/AP_ProductData/PD_File/AP9T15GH.pdf ?

oleg707
30.04.2016, 00:03
Здравствуйте! А подойдет вместо PHD78NQ такой http://www.a-power.com.tw/files/AP_ProductData/PD_File/AP9T15GH.pdf ?

да, я вообще любой N-канал ставил, работают.

Az0m@
01.05.2016, 22:53
P.S. прошу проверить и дополнить пжлста:
C1 – 47мкФ 25В
С2 – 1000мкФ 16В
С3 – 2200мкФ 10В
С4 – 1000мкФ 10В
С5 и С6 – СМД 0,1 мкФ
С7 – 220мкФ 16В
С8 – СМД 47мкФ 16В (1210)
С11 – СМД 157мкФ 16В (1812)
D1,D2,D3,D7,D8,D9 – СМД диоды
D4,D5,D6 – стабилитроны 5,6 В
Q1,Q2 - PHD78NQ либо другой N-канальный аналог
Q3 - j245 либо другой P-канальный аналог
R1,R11,R13,R17,R18 – СМД 1кОм (102)
R2,R4 – СМД 22кОм (223)
R3,R5,R7,R8 – СМД 47кОм (473)
R6 - СМД 100Ом (101) - Это для запуска БП от центрального замка (сигналки )
R10,R12,R16 - СМД 2кОм (202)
R14 - СМД 470кОм (474)
R15 - СМД 10кОм (103)
Rxверх - СМД 220кОм (224) 2шт.
Rxниз - СМД 330кОм (334) 2шт.
R9 – отсутствует
U2 - ITS716G или BTS724G либо аналоги
Ну и естественно сам доработанный стабилизатор kiw3312s и андурино нано

пока сам в процессе сборки -))

oleg707
02.05.2016, 00:14
Ну и естественно сам стабилизатор kiw3312s необходимо ПЕРЕДЕЛАТЬ, как в 3й версии (выкинуть резак).

R6 101 же! Я фотки выкладывал блока готового для чего?

oleg707
02.05.2016, 00:18
пока сам в процессе сборки -))

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

Az0m@
02.05.2016, 13:20
необходимо ПЕРЕДЕЛАТЬ, как в 3й версии (выкинуть резак).

R6 101 же! Я фотки выкладывал блока готового для чего?
мона ссылку на пост где описывается сие переделка?
по R6 чутка ошибся, но не страшно же -)) мало кто это реализовывал -))))
а про переделку кис3312 я чет совсем упустил

oleg707
02.05.2016, 16:24
мона ссылку на пост где описывается сие переделка?
по R6 чутка ошибся, но не страшно же -)) мало кто это реализовывал -))))
а про переделку кис3312 я чет совсем упустил

R6 нужен для защиты, если пробьёт один из диодов либо по acc, либо по сигнализации, реально его можно не ставить. По переделке кив поищи в начале этой темы, мне сейчас с мобильного интернета неудобно. Вроде бы в проекте про 3 версию в самом файлике описано. Только там прогу для просмотра ставить надо, splan вроде.

Az0m@
03.05.2016, 00:10
P.S. прошу проверить и дополнить пжлста:
C1 – 47мкФ 25В
С2 – 1000мкФ 16В
С3 – 2200мкФ 10В
С4 – 1000мкФ 10В
С5 и С6 – СМД 0,1 мкФ
С7 – 220мкФ 16В
С8 – СМД 47мкФ 16В (1210)
С11 – СМД 157мкФ 16В (1812)
D1,D2,D3,D7,D8,D9 – СМД диоды
D4,D5,D6 – стабилитроны 5,6 В
Q1,Q2 - PHD78NQ либо другой N-канальный аналог
Q3 - j245 либо другой P-канальный аналог
R1,R11,R13,R17,R18 – СМД 1кОм (102)
R2,R4 – СМД 22кОм (223)
R3,R5,R7,R8 – СМД 47кОм (473)
R6 - СМД 100Ом (101) - Это для запуска БП от центрального замка (сигналки )
R16 - СМД 2кОм (202)
R14 - СМД 470кОм (474)
R10,R12,R15 - СМД 10кОм (103)
Rxверх - СМД 220кОм (224) 2шт.
Rxниз - СМД 330кОм (334) 2шт.
R9 – отсутствует
U2 - ITS716G или BTS724G либо аналоги
Ну и естественно сам доработанный стабилизатор kiw3312s и андурино нано
вроде всё
неправильная технология, имхо. я сначала травил одну сторону у тебя это 1 фото, ( другая заклеена скотчем) сверлил дырки и по ним синхронизировал другую сторону. иначе очень большое смещение при ЛУТ может получится.
И дырки переходных отверстий от бумаги надо освобождать.
первый раз в жизни собираю плату полностью сам... вроде нормально получилось. стравливал сразу обе стороны. вторую сторону при ЛУТ совмещал по двум крайним отверстиям по диагонали. новичкам наверно везет -)))

Az0m@
03.05.2016, 14:08
Oleg, по фоткам я не узрел третьего стабилитрона... он не обязателет?

в процессе сборки... без косяков не обошлось. KIW в 5ой версии сильно греются?

oleg707
03.05.2016, 20:18
Oleg, по фоткам я не узрел третьего стабилитрона... он не обязателет?

в процессе сборки... без косяков не обошлось. KIW в 5ой версии сильно греются?

ХА! я, оказывается, без стабилитронов езжу! Только встроенные на киве 5V1.

Ты НАХРЕНА KIW3312s наоборот вывернул?!:shok: это ж фишка 3й версии, и то необязательная. На 5й такое не прокатит - нужно паять на родные ноги! Фото пересмотри, что ли. Греется несильно, теплые дросселя, градусов 40.

Еще канифоли не жалей, потом растворителем или бензином отмоешь, вместе с краской на диодах ;) . А если канифоль чистая(без химии), то и с ней ездить можно ( как я, годами )))


Кажись дошло! ты плату зеркально сделал :big:

oleg707
03.05.2016, 20:42
написал здоровенный пост, а он не сохранился на сайте. Посему так тому и быть. Выдрал из истории буфера обменя отрывки, тоже будут полезны.



Iic / I2C 1602

chrome

ru.aliexpress.com/item/IIC-I2C-1602-Blue-Backlight-LCD-Display-Module-For-Arduino-1PC-1-5-Inch-TFT-LCD/32444221559.html

chrome

http://ru.aliexpress.com/item/IIC-I2C-1602-Blue-Backlight-LCD-Display-Module-For-Arduino-1PC-1-5-Inch-TFT-LCD/32444221559.html

chrome

, на которую можно выводить всё, что угодно из программы блока.


chrome

24-контактный ATX разъем 24 - pin 90

chrome

http://ru.aliexpress.com/item/1PCS-24-pin-ATX-connector-24-pin-90-degree-bend-pin-socket/32595328271.html

chrome

ATX-20-Pin-to-24-Pin-Power-Supply-Female-to-Male-Adapter

chrome

http://g02.a.alicdn.com/kf/HTB1SQpRLpXXXXbAXVXXq6xXFXXXv/1-%D1%88%D1%82-24-%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D0%BD%D 1%8B%D0%B9-ATX-%D1%80%D0%B0%D0%B7%D1%8A%D0%B5%D0%BC-24-pin-90-%D1%81%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C-%D0%B8%D0%B7%D0%B3%D0%B8%D0%B1%D0%B0-%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D0%BD%D 1%8B%D0%B9-%D1%80%D0%B0%D0%B7%D1%8A%D0%B5%D0%BC.jpg_640x640.j pg

chrome

atx 20 pin power supply to 24 pin

chrome

http://g02.a.alicdn.com/kf/HTB18VXDLFXXXXbrXFXXq6xXFXXXc/%D0%9D%D0%BE%D0%B2%D1%8B%D0%B9-ATX-20-%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82-%D0%B4%D0%BE-24-%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82-%D0%B1%D0%BB%D0%BE%D0%BA-%D0%BF%D0%B8%D1%82%D0%B0%D0%BD%D0%B8%D1%8F-%D0%B6%D0%B5%D0%BD%D1%89%D0%B8%D0%BD%D1%8B-%D0%BA-%D0%BC%D1%83%D0%B6%D1%87%D0%B8%D0%BD%D0%B5-%D0%BA%D0%B0%D0%B1%D0%B5%D0%BB%D1%8C-%D0%B0%D0%B4%D0%B0%D0%BF%D1%82%D0%B5%D1%80-%D0%B4%D0%BB%D1%8F-%D0%BF%D0%BA.jpg_640x640.jpg

chrome

ru.aliexpress.com/item/newMini-Android-TV-Box-Bluetooth-Media-Player-Smart-TV-Receiver-Stick-free-shipping/32503990095.html?spm=2114.03010208.3.2.hH456b&ws_ab_test=searchweb201556_0,searchweb201602_1_100 37_10017_10034_10021_507_10022_10032_10009_10020_1 0008_10018_10019,searchweb201603_1&btsid=908046b0-2d3e-4716-90b3-ce33cf129d5c

chrome

http://ru.aliexpress.com/item/newMini-Android-TV-Box-Bluetooth-Media-Player-Smart-TV-Receiver-Stick-free-shipping/32503990095.html?spm=2114.03010208.3.2.hH456b&ws_ab_test=searchweb201556_0,searchweb201602_1_100 37_10017_10034_10021_507_10022_10032_10009_10020_1 0008_10018_10019,searchweb201603_1&btsid=908046b0-2d3e-4716-90b3-ce33cf129d5c

chrome

штекер, чтобы не резать блок питания компа

Az0m@
03.05.2016, 21:31
ХА! я, оказывается, без стабилитронов езжу! Только встроенные на киве 5V1.
:big:
ну два из них вроде на месте не? со стороны KIW припаяны...

Кажись дошло! ты плату зеркально сделал :big:
именно... мозг сломал когда сперва не мог догнать почему детальки не совсем как у тебя по фотке ложатся -)))

oleg707
03.05.2016, 21:40
ну два из них вроде на месте не? со стороны KIW припаяны...


это керамические кондёры мелкие, параллельно им стабилитроны и надо ставить.

Az0m@
03.05.2016, 23:47
это керамические кондёры мелкие, параллельно им стабилитроны и надо ставить.
такс.... а кондеры эти вроде на схемах нету... откуда они?

oleg707
04.05.2016, 12:32
такс.... а кондеры эти вроде на схемах нету... откуда они?

с5 с6

Az0m@
11.05.2016, 10:58
Oleg, вместо С11 можно ли использовать кондер большей или меньшей емкости? я просто смог найти у себя только 100 и 220мкФ..

oleg707
11.05.2016, 14:06
Oleg, вместо С11 можно ли использовать кондер большей или меньшей емкости? я просто смог найти у себя только 100 и 220мкФ..

можно, он для сглаживания импульсных помех. Можно его вообще не ставить - будет работать.

YAM1966
11.05.2016, 15:25
oleg707, схемку то подправьте, в плане нарисованных диодов в полевиках :spiteful:
4371443712
А некоторые так и поставят как на схеме.

oleg707
11.05.2016, 23:58
oleg707, схемку то подправьте, в плане нарисованных диодов в полевиках :spiteful:
4371443712
А некоторые так и поставят как на схеме.

гы, знаю ))) лень :blush:))) Верить печатке и фоткам )))
Вот кто подправит, тогда и выложу.

Az0m@
12.05.2016, 16:38
потихоньку продвигаемся. жду доставки андурино и микруху.

oleg707
12.05.2016, 22:43
потихоньку продвигаемся. жду доставки андурино и микруху.

kiw3312s доработай и можешь его проверять - подай +-12В прямо на него, в первый раз через лампочку можешь 5W. Припоя много, канифоли мало.
Круглые отверстия для штырьков не надо было обпаивать, но поздно.
А так норм вроде.

Alekssandr
17.05.2016, 17:31
Какое расстояние между ножками kiw-3312s, не могу найти на него datasheet?

Единственное что нашёл это вот такую картинку, суда по картинке 3мм?

oleg707
17.05.2016, 17:55
Какое расстояние между ножками kiw-3312s, не могу найти на него datasheet?

Единственное что нашёл это вот такую картинку, суда по картинке 3мм?

а чего в проекте не посмотрел? печатка ж есть, тем более диптрейс.
лови
43806 43807

вот еще почитай (http://we.easyelectronics.ru/part/sdvoennyy-preobrazovatel-napryazheniya-kiw-3312s-ir3802a.html)

Az0m@
19.05.2016, 14:26
Oleg, зацени...что мне подогнали...без приставки G. Подойдет ли?

oleg707
19.05.2016, 15:28
Oleg, зацени...что мне подогнали...без приставки G. Подойдет ли?

хз. пробовать надо. Должно. На али с G валом предложений, вообще не вижу проблемы.

demtro
19.05.2016, 22:51
Выложу и я свой БП на транзисторах, если не против у тебя в теме)
БП управляет питанием EasyCap, хаба, подает 5в на просыпание планшета, 12в на включение усилков, управляет 2-мя камерами (переключает видео сигнал) на плате разведен USB разъем для EasyCap и USB разъем для внешних устройств. Стоит цифровой потенциометр MCP41100 для передачи кнопок руля на обычную магнитолу, кнопка play/pause передается в планшет. Разведены 3 пары тюльпанов с 3.5мм jack для подключения к выходу звуковухи
логика БП:
АСС появилось вкл хаб, через пару секунд планшет, еще пару сек вкл усилки. Выключается в обратном порядке. Временные задержки выставляются в начале скетча.
Плата идет под Arduino micro pro.
Библиотека для MCP41100 в архиве.
Все необходимые файлы в архиве, печатка и схема в DipTrace 3.0.1

Rage2
20.05.2016, 11:55
Возможно кому-то будет полезно...
http://easyelectronics.ru/razvedenie-pitaniya.html
http://easyelectronics.ru/izolirovannyj-dc-dc-preobrazovatel-meanwell-nsd15-12s5.html
http://easyelectronics.ru/modulnyj-dc-dc-preobrazovatel-yec-sd200.html
http://we.easyelectronics.ru/part/preobrazovatel-napryazheniya-kis-3r33s-mp2307.html

T_r_D
22.05.2016, 16:52
спрошу тут дабы темы не плодить.
При каком напряжении АКБ машины отключать всё что можно?
Просто делаю БП для своего проекта и ни чего с ходу найти не смог.
Нашёл в инете только это:
Есть старая и простая методика, чтобы по напряжению узнать уровень заряда аккумулятора. Так, напряжение 12,9 – говорит, что АКБ заряжен на 90%, напряжение 12,5 - на 50%, а 12,1 - на 10 процентов. Это приблизительная методика измерения уровня заряда, но действенная, что подтверждено на собственном опыте.

так при каком напряжении акума всё обесточивать?

oleg707
22.05.2016, 17:19
спрошу тут дабы темы не плодить.
При каком напряжении АКБ машины отключать всё что можно?
Просто делаю БП для своего проекта и ни чего с ходу найти не смог.
Нашёл в инете только это:
Есть старая и простая методика, чтобы по напряжению узнать уровень заряда аккумулятора. Так, напряжение 12,9 – говорит, что АКБ заряжен на 90%, напряжение 12,5 - на 50%, а 12,1 - на 10 процентов. Это приблизительная методика измерения уровня заряда, но действенная, что подтверждено на собственном опыте.

так при каком напряжении акума всё обесточивать?

вопрос не такой простой, как кажется.
Я сейчас взял 11,9, но у меня таймер на 12 часов и батарея AGM.
Ниже 12,1 напруги утром не видел, но сейчас лето.

yuriy m
22.05.2016, 17:58
спрошу тут дабы темы не плодить.
При каком напряжении АКБ машины отключать всё что можно?
Просто делаю БП для своего проекта и ни чего с ходу найти не смог.
Нашёл в инете только это:
Есть старая и простая методика, чтобы по напряжению узнать уровень заряда аккумулятора. Так, напряжение 12,9 – говорит, что АКБ заряжен на 90%, напряжение 12,5 - на 50%, а 12,1 - на 10 процентов. Это приблизительная методика измерения уровня заряда, но действенная, что подтверждено на собственном опыте.

так при каком напряжении акума всё обесточивать?

Как Олег сказал 11,9 . Минимум 11,5 ниже не стоит . И то это при учете ,что машина заводится как надо ... При правильном подходе хватит на несколько недель...

oleg707
22.05.2016, 18:11
ниже 11,4 начинается необратимый химический процесс сульфатации свинцовых пластин.

посмотрел напругу после суток стояния при температуре ~ 20С. 12,3-12,4В это на 1 позиции замка. мерял бп-5. точность 0,1В

T_r_D
22.05.2016, 23:20
Спасибо. Попробую 11,9.

oleg707
24.05.2016, 15:33
переделка ISP 10 пин на isp 6pin
4385343854
43855

xDriver
24.05.2016, 17:04
На АЛИ есть готовые
http://ru.aliexpress.com/item/AVR-ISP-6-Pin-to-10-Pin-Adapter/32530986080.html?spm=2114.30010708.3.96.MG5jfk&ws_ab_test=searchweb201556_7,searchweb201602_3_100 39_10037_507_10032_10020_10017_10021_10022_10009_1 0008_10018_101_10019,searchweb201603_2&btsid=40c6a5ed-0572-40ab-914b-74715e15bca1

Rage2
24.05.2016, 18:26
Спасибо. Попробую 11,9.

а что, ели будет кратковременная просадка до 11в.?

у мну в БП вроде так...

1. выше 12.4 -BAT Оk!
2. если просело ниже 11.5, ждем N секунд, если статично или убывает...отрубаем линию питания хаба, ждем N секунд, если продолжает падать, отрубаем все нафиг.
3. если 9.8в то вырубаем все сразу.

oleg707
24.05.2016, 18:48
На АЛИ есть готовые
http://ru.aliexpress.com/item/AVR-ISP-6-Pin-to-10-Pin-Adapter/32530986080.html?spm=2114.30010708.3.96.MG5jfk&ws_ab_test=searchweb201556_7,searchweb201602_3_100 39_10037_507_10032_10020_10017_10021_10022_10009_1 0008_10018_101_10019,searchweb201603_2&btsid=40c6a5ed-0572-40ab-914b-74715e15bca1

дада, видел. По стоимости программатора.
я отрезал хвост, идущий в комплекте прогера и напрямую к плате припаял.

oleg707
24.05.2016, 18:53
а что, ели будет кратковременная просадка до 11в.?

у мну в БП вроде так...

1. выше 12.4 -BAT Оk!
2. если просело ниже 11.5, ждем N секунд, если статично или убывает...отрубаем линию питания хаба, ждем N секунд, если продолжает падать, отрубаем все нафиг.
3. если 9.8в то вырубаем все сразу.

на старте зимой легко до 9 просядет. Уже предусмотрено. 2 степени обработки.
если зажигание включено, проседание до 11.5 допустимо, если выключено - 11,9.
if ((15.5 > U_acc_real >= UaccONorOFF) && flagACC == 1) {UakbONorOFF = 11.5;} else {UakbONorOFF = 11.9;}

заодно и перезаряд отслеживаю.
Отработка очень стабильная, на старте блок в аут не уходит. ( по моему он до 8 вольт в аут не уходит, по железу)

T_r_D
24.05.2016, 18:55
Я пошёл дальше. Я каждую секунду в течении минуты собираю показания, а потом усредняю и если меньше заданного порога, то делаю отключениен
Монитор питание только на выключенном зажигании

Домой приеду- скетч дам свой и станет всё понятно

oleg707
24.05.2016, 23:01
на будущее
еще думаю прикрутить

Arduino watchdog или автоматический RESET в случае зависания (https://geektimes.ru/post/255800/)
пусть лежит.

oleg707
24.05.2016, 23:07
Я пошёл дальше. Я каждую секунду в течении минуты собираю показания, а потом усредняю и если меньше заданного порога, то делаю отключениен
Монитор питание только на выключенном зажигании

Домой приеду- скетч дам свой и станет всё понятно

выкладывай, почитаем.

Я не могу мерять напругу минутами, реакция на выключение зажигания должна быть быстрой. вынул ключ - 4 сек и вся система в дежурном режиме с потушенным экраном.
Также и при холодном включении ( с нуля). на 0,5 сек импульс включения ( с сигналки, например) - должна пойти загрузка планшета.
Поэтому все измерения мгновенные, тайминги уже в программе рулятся. Для стабилизации замеров по аналоговым входам стоЯт мелкие кондёры.

oleg707
24.05.2016, 23:43
Поскольку я пихаю watchdog или автоматический RESET в случае зависания в блок питания 5 версии, то ардуину можно будет программировать только через ISP порт. Заливка скетча через юсб может привести к цикличной перезагрузке и невозможности залить новый скетч через юсб. Через isp - можно и нужно.


Почему watchdog не работает на большинстве современных плат Arduino

Дело в том, что после перезагрузки, которая была вызвана watchdog, контроллеры последних выпусков оставляют включенным watchdog на минимальный период, т.е. 15ms. Это нужно для того, чтобы программа как-то узнавала, что предыдущая перезагрузка была по watchdog. Поэтому первоочередная задача загрузчика (или вашей программы, если она запускается первой) — сохранить информацию о том, что перезагрузка была «неожиданной» и сразу же выключить watchdog. Если этого не сделать, то система уйдет в bootloop, т.е. будет вечно перегружаться.
Как известно, в Arduino есть специальный загрузчик, который выполняется в первую очередь после перезагрузки системы. И, к огромному сожалению, стандартный загрузчик не сбрасывает watchdog! Таким образом, система заходит в жестокий bootloop (состояние «crazy led», при котором светодиод на 13-м пине мигает как сумасшедший). вот так (https://youtu.be/7DNntdat2j8)

Если всё таки сильно надо писать скетч через ЮСБ - тут (https://geektimes.ru/post/255800/) описание и модифиц. загрузчик.


Поэтому последняя версия скетча, которую можно загружать через ЮСб - для 4 и 5 версии блоков.43859

yuriy m
25.05.2016, 13:08
Поскольку я пихаю watchdog или автоматический RESET в случае зависания в блок питания 5 версии, то ардуину можно будет программировать только через ISP порт. Заливка скетча через юсб может привести к цикличной перезагрузке и невозможности залить новый скетч через юсб. Через isp - можно и нужно.


Почему watchdog не работает на большинстве современных плат Arduino

Дело в том, что после перезагрузки, которая была вызвана watchdog, контроллеры последних выпусков оставляют включенным watchdog на минимальный период, т.е. 15ms. Это нужно для того, чтобы программа как-то узнавала, что предыдущая перезагрузка была по watchdog. Поэтому первоочередная задача загрузчика (или вашей программы, если она запускается первой) — сохранить информацию о том, что перезагрузка была «неожиданной» и сразу же выключить watchdog. Если этого не сделать, то система уйдет в bootloop, т.е. будет вечно перегружаться.
Как известно, в Arduino есть специальный загрузчик, который выполняется в первую очередь после перезагрузки системы. И, к огромному сожалению, стандартный загрузчик не сбрасывает watchdog! Таким образом, система заходит в жестокий bootloop (состояние «crazy led», при котором светодиод на 13-м пине мигает как сумасшедший). вот так (https://youtu.be/7DNntdat2j8)

Если всё таки сильно надо писать скетч через ЮСБ - тут (https://geektimes.ru/post/255800/) описание и модифиц. загрузчик.


Поэтому последняя версия скетча, которую можно загружать через ЮСб - для 4 и 5 версии блоков.43859

Из само долго играющего у меня ,сделано освещение в ванной и туалете + ночной режим в туалете(это когда свет процентов 10-20 от своей мощности светит) естественно часы реального времени + защита от протечек ( стоят датчики в ванной ,туалете и на кухне ) в случае протечки закрываются вводные шаровые краны. + вентилятор который запускается - либо высокая влажность в ванной либо сидим с серьезными:big: намерениями в туалете. Все это работает в автоматическом режиме и естественно выключателей нет. Если человек находится внутри помещения ,то свет будет гореть все время ,хоть даже притворится ,что ты "камень".. Но если не кого нет ,через несколько секунд свет плавно выключается. Вся эта борода,работает 4+ года. И не было ни одного зависания контроллера. Все это собрано на атмеги 8 или 16 не помню.

oleg707
25.05.2016, 13:36
Из само долго играющего у меня ,сделано освещение в ванной и туалете + ночной режим в туалете(это когда свет процентов 10-20 от своей мощности светит) естественно часы реального времени + защита от протечек ( стоят датчики в ванной ,туалете и на кухне ) в случае протечки закрываются вводные шаровые краны. + вентилятор который запускается - либо высокая влажность в ванной либо сидим с серьезными:big: намерениями в туалете. Все это работает в автоматическом режиме и естественно выключателей нет. Если человек находится внутри помещения ,то свет будет гореть все время ,хоть даже притворится ,что ты "камень".. Но если не кого нет ,через несколько секунд свет плавно выключается. Вся эта борода,работает 4+ года. И не было ни одного зависания контроллера. Все это собрано на атмеги 8 или 16 не помню.

просто ты пальцем кварц не мацаешь )))

oleg707
25.05.2016, 14:57
хм, не получается. прописал вотчдог, блок работает как и работал.
Корочу слюнявым пальцем кварц - виснет. Жду - ничего, висит.
Нажимаю РЕСЕТ - висит дальше!
передёргиваю питание - тогда работает.

вотчдог прописан так:
#include <avr/wdt.h>
wdt_disable();
wdt_enable(WDTO_8S);
wdt_reset();

скетч, который тестирую - 43864, заливаю через ISP напрямую, загрузчика нет давно.
ЕСЛИ корочу кварц иголкой - по просто ресет происходит, даже на старом скетче ( без ватчдога).
Почему не работает? неужели аппаратный мутить?

yuriy m
25.05.2016, 15:10
просто ты пальцем кварц не мацаешь )))

А зачем :shok: ???

oleg707
25.05.2016, 15:24
А зачем :shok: ???

иногда, очень редко, раз два в месяц, блок подвисает, на выходах остается то, что было ( открытые входы, включенный планшет).
Причину выловить не могу, так как очень редко (возможно связано с дребезгом замка зажигания, но статистики нет). Правда ресет прекрасно ресетит.
Вот и страдаю фигнёй :secret:

yuriy m
25.05.2016, 18:25
иногда, очень редко, раз два в месяц, блок подвисает, на выходах остается то, что было ( открытые входы, включенный планшет).
Причину выловить не могу, так как очень редко (возможно связано с дребезгом замка зажигания, но статистики нет). Правда ресет прекрасно ресетит.
Вот и страдаю фигнёй :secret:

И всетаки ИХМО нужно проверять разводку платы + сама схемотехника... и софт ... не где типа while или for ... не используешь ? Может из за какой нибудь помехи не может из цикла вывалиться....?

oleg707
25.05.2016, 22:39
И всетаки ИХМО нужно проверять разводку платы + сама схемотехника... и софт ... не где типа while или for ... не используешь ? Может из за какой нибудь помехи не может из цикла вывалиться....?

for только в защите. она закомментирована.
схемотехника простая до одури - пришел плюс -включил через делитель its814G- тот подал питалово - включился проц. В цепи кондёр на 47мф после диода (по АСС)
Сам проблему не могу не то что выявить - даже воспроизвести. Настолько редко. Ну раза 3-4 за 7 месяцев была.

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

T_r_D
26.05.2016, 01:19
Итак- вот скетч.
Делеи менять на задержку реального временни желания нет, так как эта ардуина рулит только питанием и ни чем более. Чтоб вы себе долго не ломали голову почему мерию на двух пинах напругу- я контролирую сон и пробуждение планшета по напряжению подсветки экрана.

А на вопрос про засыпание и пробуждение планшета ответит сам скетч, но оно ни как не зависит от замера напряжения.
Так что вставил ключь или включил магнитолу- всё запустилось, вытащил, кондёр разрядился- всё потухло.
На зажигании 220,0 стоит, на магнитоле 22,0. 220 это примерно 4 секунды задержки.


unsigned long time0 = 0;
boolean OnceLoPow = false;
unsigned int accpower = 0;
int accpowercount = 0;
int accpoweravg = 1023;

void setup() {
//Arduino Pro-Micro
//21 = A3
//20 = A2
//19 = A1
//18 = A0
pinMode(18, OUTPUT); //Tablet button
pinMode(19, OUTPUT); //HUB power
pinMode(20, INPUT); //Tablet Screen action. Analog! If input >232 then screen on
pinMode(21, OUTPUT); //Tablet power
pinMode(10, OUTPUT); //Tablet power supply low if car bat level low

pinMode(A7, INPUT); //Car bat level (In bord PIN 6!!!) 541=11,91 **analogRead(A7) * (1.1 / 1023.0*20.50);
pinMode(8, INPUT); //Radio input
pinMode(9, INPUT); //ACC input

digitalWrite(21, LOW);
digitalWrite(19, LOW);
digitalWrite(18, LOW);
digitalWrite(10, LOW);
}

void loop() {
WorkLoop();
if ((millis() - time0) > 100){
if (accpowercount == 60){
accpoweravg = accpower / 60;
accpowercount = 0;
accpower = 0;
}
else ACCLevel();
time0 = millis();
}
}

void WorkLoop(){
//_____________________________ON___________________ ____________
if (digitalRead(8) == HIGH || digitalRead(9) == HIGH){
OnceLoPow = false;
digitalWrite(19, LOW);
digitalWrite(21, LOW);
if(analogRead(20) < 400) {
BtnClick(300);
if (analogRead(20) < 400) BtnClick(3000);
}
}
//____________________STAND-BY or LO POWER_______________________
else{
if (accpoweravg > 541){
OnceLoPow = false;
if(analogRead(20) > 400) {
BtnClick(300);
delay(4000);
}
digitalWrite(19, HIGH);
}
else{
if (!OnceLoPow){
digitalWrite(10, HIGH);
delay(10000);
digitalWrite(10, LOW);
OnceLoPow = true;
}
digitalWrite(19, HIGH);
digitalWrite(21, HIGH);
}
}
}

void BtnClick(int Interval) {
digitalWrite(18, HIGH);
delay(Interval);
digitalWrite(18, LOW);
delay(1000);
}

void ACCLevel() {
accpower = accpower + analogRead(A7);
accpowercount = accpowercount + 1;
}

oleg707
26.05.2016, 16:55
Итак- вот скетч.
Делеи менять на задержку реального временни желания нет, так как эта ардуина рулит только питанием и ни чем более. Чтоб вы себе долго не ломали голову почему мерию на двух пинах напругу- я контролирую сон и пробуждение планшета по напряжению подсветки экрана.

А на вопрос про засыпание и пробуждение планшета ответит сам скетч, но оно ни как не зависит от замера напряжения.
Так что вставил ключь или включил магнитолу- всё запустилось, вытащил, кондёр разрядился- всё потухло.
На зажигании 220,0 стоит, на магнитоле 22,0. 220 это примерно 4 секунды задержки.


unsigned long time0 = 0;
boolean OnceLoPow = false;
unsigned int accpower = 0;
int accpowercount = 0;
int accpoweravg = 1023;

void setup() {
//Arduino Pro-Micro
//21 = A3
//20 = A2
//19 = A1
//18 = A0
pinMode(18, OUTPUT); //Tablet button
pinMode(19, OUTPUT); //HUB power
pinMode(20, INPUT); //Tablet Screen action. Analog! If input >232 then screen on
pinMode(21, OUTPUT); //Tablet power
pinMode(10, OUTPUT); //Tablet power supply low if car bat level low

pinMode(A7, INPUT); //Car bat level (In bord PIN 6!!!) 541=11,91 **analogRead(A7) * (1.1 / 1023.0*20.50);
pinMode(8, INPUT); //Radio input
pinMode(9, INPUT); //ACC input

digitalWrite(21, LOW);
digitalWrite(19, LOW);
digitalWrite(18, LOW);
digitalWrite(10, LOW);
}

void loop() {
WorkLoop();
if ((millis() - time0) > 100){
if (accpowercount == 60){
accpoweravg = accpower / 60;
accpowercount = 0;
accpower = 0;
}
else ACCLevel();
time0 = millis();
}
}

void WorkLoop(){
//_____________________________ON___________________ ____________
if (digitalRead(8) == HIGH || digitalRead(9) == HIGH){
OnceLoPow = false;
digitalWrite(19, LOW);
digitalWrite(21, LOW);
if(analogRead(20) < 400) {
BtnClick(300);
if (analogRead(20) < 400) BtnClick(3000);
}
}
//____________________STAND-BY or LO POWER_______________________
else{
if (accpoweravg > 541){
OnceLoPow = false;
if(analogRead(20) > 400) {
BtnClick(300);
delay(4000);
}
digitalWrite(19, HIGH);
}
else{
if (!OnceLoPow){
digitalWrite(10, HIGH);
delay(10000);
digitalWrite(10, LOW);
OnceLoPow = true;
}
digitalWrite(19, HIGH);
digitalWrite(21, HIGH);
}
}
}

void BtnClick(int Interval) {
digitalWrite(18, HIGH);
delay(Interval);
digitalWrite(18, LOW);
delay(1000);
}

void ACCLevel() {
accpower = accpower + analogRead(A7);
accpowercount = accpowercount + 1;
}



а зачем void ACCLevel() {
accpower = accpower + analogRead(A7);
accpowercount = accpowercount + 1;
вынесен в отдельную функцию?

WorkLoop();
if ((millis() - time0) > 100){
if (accpowercount == 60){
accpoweravg = accpower / 60;
accpowercount = 0;
accpower = 0;
}
else { (accpower = accpower + analogRead(A7)); (accpowercount = accpowercount + 1); };
time0 = millis();
}
}
А так можно?

Az0m@
27.05.2016, 01:25
Oleg, наконецто собрал полностью плату и вроде как все правильно работает.
подскажите пжлста, выход на датчик холла как подключали: к 3 ноже по фотке?
http://pccar.ru/picture.php?albumid=244&pictureid=1729
сам датчик надо выпаивать?

T_r_D
27.05.2016, 01:45
oleg707
Можно и так, просто пока приходил к осознанию того что нужно распихал по функциям отдельные куски.

По сути можно ввести ещё флаг и сделать без делеев, но мне это не принципиально.
У этой части нет ни индикаторов, ни экранов, ни кнопок.
Короче кроме функций связанных с питанием она ни чего больше не делает.
И во время имитации нажатия кнопки больше ни чего происходить и не должно кроме самого нажатия.

oleg707
27.05.2016, 14:05
Oleg, наконецто собрал полностью плату и вроде как все правильно работает.
подскажите пжлста, выход на датчик холла как подключали: к 3 ноже по фотке?
http://pccar.ru/picture.php?albumid=244&pictureid=1729
сам датчик надо выпаивать?

датчик не выпаивал. Если выпаивать - тогда от +3,3 к сигнальной ноге резистор надо еще паять.
Ногу не помню. И не фоткал. но вроде эта.
припаяй провод, возьми тестер и подключи в режиме вольты. одна нога на минус батареи, вторая - на сигнальный холла ( твой провод).
Должно быть 3,3В. Поднеси магнит к холлу. Должно упасть до 0.
Тогда правильно.

oleg707
27.05.2016, 14:52
//ver27.05.16.1557
// для 5й версии блока питания
//ТЕСТОВАЯ!!!
// активный вотчдог, защита its716G(statepin), умный блинк
//************************************************** ************************************************** ***********************************************
// Массив режимов работы светодиода
byte modes[] = {
0B00000000, //Светодиод выключен
0B11111111, //Горит постоянно
0B00001111, //Мигание по 0.5 сек
0B00000001, //Короткая вспышка раз в секунду
0B00000101, //Две короткие вспышки раз в секунду
0B00010101, //Три короткие вспышки раз в секунду
0B01010101 //Частые короткие вспышки (4 раза в секунду)
};

uint32_t ms, ms1 = 0;
uint8_t blink_loop = 0;
uint8_t blink_mode = 0;

//************************************************** ************************************************** ***********************************************

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <avr/wdt.h> //Чтобы использовать функции Watchdog нужно подключить к проекту стандартную библиотеку ( https://geektimes.ru/post/255800/ )

LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
float UakbONorOFF = 12.01;// в 155 строке == if ((15.5 > U_acc_real >= UaccONorOFF) && flagACC == 1) {UakbONorOFF = 11.5;} else {UakbONorOFF = 11.9;}
float UaccONorOFF = 10;//11.1 // напряжение порога сработки асс

/*ноги ардуины*/
int SAMOZAPITKApin = 9; //управление самозапиткой блока питания IN4
//1 = есть самозапитка; 0 = нет самозапитки
int PlanshBATpin = 6; // включить 1 канал KIW ..... управление питания БАТАРЕИ планшета через управляющую ногу IN2-5pin
//0 = нет питания; 1 = есть питание ( БАТАРЕИ планшета)
int II_KIW_pin_POGOpin = 2; // включить 2 канал KIW управление SS2 выходом питания +5V (2 канал kiw3312s) на пого пин(или USB), чтоб планшет думал, что идет зарядка
//0 = нет 5V на POGO; 1 = есть 5V на POGO
int OTGpin = 12; //управление транзюком OTG Q1
//1 = есть масса на OTG; 0 = нет массы на OTG
int SLEEPpin = 10; //управление транзюком сна VT4 (на датчик холла))
//1 = потух экран(есть масса на пине сна); 0 = штатная работа планшета (нет массы на пине сна)
int HUBpin = 11; //управление транзюком питания хаба
// 0-есть питание, 1 - нет питания
int REMpin = 7; // выход сигнала REM (+12v) (IN3), на плате распаяно.
//0 = нет 12В на выходе REM; 1 = есть 12В на выходе REM
int REGISTRATORpin = 4; //выход 12В для работы видеорегистратора (D4 -IN1)
//пины состояния ITS
int STATEpinI = 5; //логический вход для отслеживания аварийной ситуации ITS716G(724G)(питание KIW3312s-out2 и регистратор-out1) 0 = норма
int STATEpinII = 8; //логический вход для отслеживания аварийной ситуации ITS716G(724G)(выход REM-out3 и самозапитка БП-out4 )1 = авар. сит.

/*логические переменные, используемые в коде*/
int flagACC = 0; //признак включенного зажигания
int flagAKB = 0; // признак заряженной батареи
int flagHALL = 0; //флаг отработки морга экрана при холодном старте( flagHALL = 1 экран можно включать и выключать, датчик холла на планшете инициализировался)
/*счётчики времени*/
unsigned long eventTime = 0;
unsigned long pauseTimeACC = 0;
unsigned long pauseTimeAKB = 0;
unsigned long pauseTimeHALL = 120000; // время паузы перед морганием экрана (для датчика холла)(равен времени загрузки планшета плюс секунд 10-20)= 2мин
int timeAfterACC = 5000; // время после выключения зажигания, после истечения которого вырубается экран, хаб, y-otg


void setup() //настройки
{
//*************************test*************
wdt_disable(); //Отключение таймера watchdog

lcd.init(); // initialize the lcd занимает почти секунд
pinMode(STATEpinI, INPUT);
pinMode(STATEpinII, INPUT);
pinMode(PlanshBATpin, OUTPUT);
pinMode(SAMOZAPITKApin, OUTPUT);
pinMode(OTGpin, OUTPUT);
pinMode(SLEEPpin, OUTPUT);
pinMode(II_KIW_pin_POGOpin, OUTPUT);
pinMode(HUBpin, OUTPUT);
pinMode(13, OUTPUT); //светодиодик на плате ардуины
pinMode(REMpin, OUTPUT);
pinMode(REGISTRATORpin, OUTPUT);

digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
pauseTimeACC = millis(); // сброс времени для отсчета отключения самозапитки
pauseTimeAKB = millis();

wdt_enable (WDTO_8S); // Запуск таймера watchdog: Для тестов не рекомендуется устанавливать значение менее 8 сек. Таймер будет считать ровно столько, сколько указано в константе. По истечении этого времени произойдет перезагрузка.
/* Возможные значения для константы
WDTO_15MS
WDTO_30MS
WDTO_60MS
WDTO_120MS
WDTO_250MS
WDTO_500MS
WDTO_1S
WDTO_2S
WDTO_4S
WDTO_8S
*/
}


void loop()
{



int Uacc = analogRead (A0); //Читаем напругу с делителя ACC R4-R5
int Uakb = analogRead (A1); //Читаем напругу с делителя R2-R3
float U_acc_real = 0.0 + Uacc * 0.01537;//(5 / 1023.0 * 3.136); //Вычисляем реальное напряжение +ACC на входе делителя (A0) 3.1189=поправка делителя.(коэф деления) 0.2-падение на диоде
float U_akb_real = Uakb * 0.015330;//(5 / 1023.0 * 3.145); //Вычисляем реальное напряжение +30 на входе делителя (A1)


// кусок кода ниже нужен для того, чтобы при включении и сразу выключении ACC при полностью выключенном планшете(холодный старт) экран мог тухнуть по сигналу датчика холла.
if (millis() > pauseTimeHALL && flagHALL == 0 || millis() > 10000 && flagACC == 1) {
flagHALL = 1; //проверка отсчета при холодном старте при включении и сразу выключении ACC
}

if ((U_akb_real - U_acc_real) >4 )//проверка, выключили ли мы зажигание или просто стартуем (1 - выключили заж, 0 - стартуем)
{timeAfterACC = 500;} //1 - выключили заж ЕСЛИ +15 ПРОПАДАЕТ ВО ВРЕМЯ СТАРТА, ТО ВМЕСТО 500 НАДО 5000 или вообще убрать этот блок if-else.
else {timeAfterACC = 5000;} //0 - стартуем



// ------------========================== блок ACC ========================-----------------------------------------------------------------------------


// -----------------=========ВКЛЮЧИЛИ ЗАЖИГАНИЕ=============----------------
if (15.5 > U_acc_real && U_acc_real >= UaccONorOFF && flagACC == 0 && flagAKB == 1 ) //проверка напруги АСС и АКБ при флаге ACC = 0
{
flagACC = 1;
pauseTimeACC = millis();
pauseTimeAKB = millis();
lcd.clear(); //очистка экрана
}




if (millis() - pauseTimeACC >= 500 && flagACC == 1) // пауза 0,5c после включения ACC и потом делать следующ(пока включено ACC):
{
digitalWrite(PlanshBATpin, 1); //включаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 1); //включаем минус на Y-OTG (включается звуковая карта)
}

if (millis() - pauseTimeACC >= 800 && flagACC == 1) // пауза 0.8c после включения ACC и потом делать следующ(пока включено ACC): //через 0,8с после включения ACC включаем экран, включаем питание на видеорегистратор.
{
digitalWrite(II_KIW_pin_POGOpin, 1); //включаем +5V (POGO(USB) нужно для распознавания планшетом признака зарядки. ( можно подавать на +5В USB кабеля (для тимуровской прошивки или если не используется датчик холла)
digitalWrite(REGISTRATORpin, 1); // включаем питание на видеорегистратор
}

if (millis() - pauseTimeACC >= 2000 && flagACC == 1)//через 1с после включения ACC включаем экран (вЫключаем минус на упр SLEEP), выход REM(если больше 12в), Включаем хаб (подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб)
{
digitalWrite(SLEEPpin, 0); //включаем экран = вЫключаем минус на упр SLEEP
digitalWrite(HUBpin, 0); //Включаем хаб = подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб
if (U_akb_real >= 12 && flagACC == 1)//если напруга батареи больше 12В, то включаем еще и усилитель (выход REM)
{
digitalWrite(REMpin, 1); // включаем выход REM
}
}



//-----------------=========ВЫКЛЮЧИЛИ ЗАЖИГАНИЕ=============----------------

if (U_acc_real < UaccONorOFF && flagACC == 1)
{
flagACC = 0; //Выключили зажигание
digitalWrite(REMpin, 0); // выключаем выход REM
pauseTimeACC = millis();
pauseTimeAKB = millis();
lcd.clear(); //очистка экрана
}

if (millis() - pauseTimeACC >= timeAfterACC && flagACC == 0) //пауза 5c или 0.5c после вЫключения ACC и потом делать следующ://через 5с после выключения зажигания вЫключаем минус на Y-OTG, ВЫключаем хаб, вЫключаем +5V (POGO(USB)), тушим экран (если прошло 2мин со старта БП)
{
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // ВЫключаем хаб = подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб
lcd.noBacklight(); // тушим подсветку экрана
if (flagHALL == 1)
{
digitalWrite(SLEEPpin, 1); //включаем минус на SLEEP (7 pin PW1)при этом тухнет экран (если прошло 2 минуты с момента включения ардуины)
}
else
{
digitalWrite(SLEEPpin, 0);
}
}

// -------------------------========================= блок АКБ ==========================-------------------------------------------------------------------------------

if (U_acc_real >= UaccONorOFF) {UakbONorOFF = 11.5;} else {UakbONorOFF = 11.9;} //при включении зажигания напряжение самовырубания станет 11,5 вместо 11,9


if ((U_akb_real < UakbONorOFF && flagAKB == 1)||(U_akb_real >15.5))// ситуация, когда сел при работе ардуины аккумулятор, либо сел в процессе работы или простоя автомобиля, либо перезарядка > 15.5В
{
flagAKB = 0;//спустили флаг батареи
flagACC = 0;
pauseTimeACC = millis();
pauseTimeAKB = millis();
lcd.clear(); //очистка экрана
}

if ((15.5 > U_akb_real) && ((U_akb_real >= UakbONorOFF) && flagAKB == 0)) //проверка +30 на перезаряд >15.5В, и больше заданного в 155 строке, и флага акб
{
if (millis() - pauseTimeACC >= 2000 && flagAKB == 0){
digitalWrite(SAMOZAPITKApin, 1); // включаем самозапитку через 2с
flagAKB = 1;} //подняли флаг батареи
}

if (millis() - pauseTimeAKB >= 20000 && flagAKB == 0) // если севший аккумулятор //через 20с вЫключаем питание на батарею планшета и вырубаем сам БП.
{
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
delay (5000); // задержка для аппаратного выключения
}

if (flagAKB == 1 && flagACC == 0) //ситуация, когда норм акб и выключено зажигание (ACC)
{
if ((millis() - pauseTimeAKB )>= 36000000 && flagAKB == 1) // если прошло 10 часов, как выключили ACC // пауза (3600000 - 60мин) (60000 - 1 мин)(10800000=3ч) (1800000=5ч)
{
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)//(батарея планшета))
}

if ((millis() - pauseTimeAKB) >= 37000000 && flagAKB == 1) // если давно выключили ACC ) (2суток = 172800000)) //(самозапитка для регистратора)
{ digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом система ПОЛНОСТЬЮ обесточивается
delay (5000); // задержка для аппаратного выключения
}
}







//*********************************************СООБЩ ЕНИЕ НА ДИСПЛЕЙ******************************************* *****************



int H = (millis()/3600000);
int M = ((millis()-(H*3600000))/60000);
//int S = (((millis()/1000)-(H*3600))- (M*60));
if ((((millis())-(H*3600000))- (M*60000)) < 200 ){lcd.clear(); }//очистка экрана


if (flagACC == 1){lcd.backlight();}//}else {lcd.noBacklight();}
//lcd.backlight();

//вывод времени работы
lcd.setCursor(0, 0);
lcd.print((millis() )/60000);
lcd.setCursor(4, 0);
//lcd.print((U_akb_real - U_acc_real));
//lcd.print(timeAfterACC);
//lcd.setCursor(5, 0);
//lcd.print(":");
//lcd.setCursor(6, 0);
//lcd.print(S);
// вывод напряжений
//lcd.setCursor(8, 0);
//lcd.print("A");
lcd.setCursor(9, 0);
lcd.print(flagACC);
lcd.setCursor(11, 0);
lcd.print(U_acc_real);

//lcd.setCursor(5,1);
//-------------------2 строка---------------------------------
lcd.setCursor(0, 1);
unsigned long TIMER = ( pauseTimeAKB + 37000000 - millis() )/60000;
lcd.print(TIMER);
lcd.setCursor(5, 1);

// вывод напряжений
//lcd.setCursor(8, 1);
//lcd.print("B");
lcd.setCursor(9, 1);
lcd.print(flagAKB);
lcd.setCursor(11, 1);
lcd.print(U_akb_real);
//************************************************** ************************************************** *****

//*
//******************************************отслежив ания аварийной ситуации ITS716G******************************************* ************************************************** ************************************************** *********************************


//отслеживания аварийной ситуации ITS716G канал 1 (питание KIW3312s-out2 и регистратор-out1) 0 = норма 1 = авар. сит. //тогда моргаем 13 ногой код "1"
//отслеживания аварийной ситуации ITS716G канал 2 (выход REM-out3 и самозапитка БП-out4 )0 = норма 1 = авар. сит. //тогда моргаем 13 ногой код "2"
if(SAMOZAPITKApin==1 || PlanshBATpin==1 ||REMpin==1 || REGISTRATORpin ==1) // если проц включал любой канал ITS
{
if(STATEpinI == 0) { // и если пин защиты показал аварию
for (int i=0; i <= 300; i++) { //тогда моргаем 13 ногой код "1" 10 минут, если они прошли и асс ВКЛ, тогда еще раз и еще по кругу, пока неисправность не уйдёт
digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(1493);
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
wdt_reset(); //Сброс таймера watchdog
}
} ;
if(STATEpinII == 0) { // и если пин защиты показал аварию
for (int i=0; i <= 150; i++) { //тогда моргаем 13 ногой ногой код "2" 10 минут, если они прошли и асс ВКЛ, тогда еще раз и еще по кругу, пока неисправность не уйдёт
digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(493); digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(1493);
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
wdt_reset(); //Сброс таймера watchdog
}
} ;
}




//*/
//************************************************** ************************************************** ************************************************** ************************************************** ******************

//******************************************индикаци я светодиодом*************************************** ************************************************** ************************************************** *************************************


ms = millis();
// Событие срабатывающее каждые 125 мс
if ( ( ms - ms1 ) > 125 || ms < ms1 ) {
ms1 = ms;
// Режим светодиода ищем по битовой маске
if ( blink_mode & 1 << (blink_loop & 0x07) ) digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
blink_loop++;
}

// blink_mode = modes[3];

if (blink_mode != modes[5] || blink_mode != modes[5])
{
if (flagAKB == 0 ){blink_mode = modes[0];} // индикация напруги батареи на ардуинине.- низкое напряжение АКБ авто
if (flagAKB == 1 && flagACC == 1) {blink_mode = modes[2];} //- нормальное напряжение, включено ACC, рабочий режим.
if (flagAKB == 1 && flagACC == 0) {blink_mode = modes[6];} //- нормальное напряжение АКБ авто, ACC выключено.



}
//************************************************** ************************************************** ******
/* 0B00000000, //Светодиод выключен blink_mode = modes[0]; - низкое напряжение АКБ авто
0B11111111, //Горит постоянно blink_mode = modes[1];
0B00001111, //Мигание по 0.5 сек blink_mode = modes[2]; - нормальное напряжение, включено ACC, рабочий режим.
0B00000001, //Короткая вспышка раз в секунду
0B00000101, //Две короткие вспышки раз в секунду
0B00010101, //Три короткие вспышки раз в секунду
0B00000001 // blink_mode = modes[6]; - нормальное напряжение АКБ авто, ACC выключено.

// 0B01010101 //Частые короткие вспышки (4 раза в секунду)
*/
//************************************************** ************************************************** ******


wdt_reset(); //Сброс таймера watchdog


} //конец цикла void loop()

//

Az0m@
27.05.2016, 15:55
эта уже полностью рабочая с ватчдог?

oleg707
27.05.2016, 17:02
эта уже полностью рабочая с ватчдог?

эту я сейчас залил в машину, злая псина в теории должна работать, на практике её не видно и не слышно. Не мешает, и ладно.
Заливать можно и через ЮСБ, если проц не поймает нежданчика, будет работать, как обычно.

Az0m@
28.05.2016, 17:48
эту я сейчас залил в машину, злая псина в теории должна работать, на практике её не видно и не слышно. Не мешает, и ладно.
Заливать можно и через ЮСБ, если проц не поймает нежданчика, будет работать, как обычно.

то бишь модифировать загрузчик не надо?

P.S. словил такой глюк: если подключить питание планшета совместно с АКБ то перестает работать звук (свой штатный)... если же АКБ убрать то все нормуль.... в чем может быть косяк?

oleg707
28.05.2016, 21:55
то бишь модифировать загрузчик не надо?

P.S. словил такой глюк: если подключить питание планшета совместно с АКБ то перестает работать звук (свой штатный)... если же АКБ убрать то все нормуль.... в чем может быть косяк?

модифировать загрузчик не надо.
Я вообще по SPI лью прогером за 2 бакса. Чисто для ардуин и атмелов.
косяк... хз, схему рисуй. на пого если питание, он может на док пытаться звук выводить.

oleg707
28.05.2016, 23:06
добавил усреднение по замерам U. на столе работает, посмотрим, как в машине будет.
//ver28.05.16.2204 ( чем больше цифра, тем новее)
// для 5й версии блока питания ( для 4й тоже подходит, только нужно поменять местами в программе A0 и A1)
//ТЕСТОВАЯ!!!
/*
_______Сделано_____________________________
вывод информации на внешний дисплей по I2C,
активный вотчдог,
защита its716G(statepin)-тестово,
умное мигание встроенным светодиодом,
усреднение завмеров по напряжению ACC и AKB.
____________________________________________
*/
//************************************************** ************************************************** ***********************************************
// Массив режимов работы светодиода
byte modes[] = {
0B00000000, //Светодиод выключен
0B11111111, //Горит постоянно
0B00001111, //Мигание по 0.5 сек
0B00000001, //Короткая вспышка раз в секунду
0B00000101, //Две короткие вспышки раз в секунду
0B00010101, //Три короткие вспышки раз в секунду
0B01010101 //Частые короткие вспышки (4 раза в секунду)
};

uint32_t ms, ms1 = 0;
uint8_t blink_loop = 0;
uint8_t blink_mode = 0;

//************************************************** ************************************************** ***********************************************

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <avr/wdt.h> //Чтобы использовать функции Watchdog нужно подключить к проекту стандартную библиотеку ( https://geektimes.ru/post/255800/ )

LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
float UakbONorOFF = 12.01;// в 155 строке == if ((15.5 > U_acc_real >= UaccONorOFF) && flagACC == 1) {UakbONorOFF = 11.5;} else {UakbONorOFF = 11.9;}
float UaccONorOFF = 10;//11.1 // напряжение порога сработки асс

/*ноги ардуины*/
int SAMOZAPITKApin = 9; //управление самозапиткой блока питания IN4
//1 = есть самозапитка; 0 = нет самозапитки
int PlanshBATpin = 6; // включить 1 канал KIW ..... управление питания БАТАРЕИ планшета через управляющую ногу IN2-5pin
//0 = нет питания; 1 = есть питание ( БАТАРЕИ планшета)
int II_KIW_pin_POGOpin = 2; // включить 2 канал KIW управление SS2 выходом питания +5V (2 канал kiw3312s) на пого пин(или USB), чтоб планшет думал, что идет зарядка
//0 = нет 5V на POGO; 1 = есть 5V на POGO
int OTGpin = 12; //управление транзюком OTG Q1
//1 = есть масса на OTG; 0 = нет массы на OTG
int SLEEPpin = 10; //управление транзюком сна VT4 (на датчик холла))
//1 = потух экран(есть масса на пине сна); 0 = штатная работа планшета (нет массы на пине сна)
int HUBpin = 11; //управление транзюком питания хаба
// 0-есть питание, 1 - нет питания
int REMpin = 7; // выход сигнала REM (+12v) (IN3), на плате распаяно.
//0 = нет 12В на выходе REM; 1 = есть 12В на выходе REM
int REGISTRATORpin = 4; //выход 12В для работы видеорегистратора (D4 -IN1)
//пины состояния ITS
int STATEpinI = 5; //логический вход для отслеживания аварийной ситуации ITS716G(724G)(питание KIW3312s-out2 и регистратор-out1) 0 = норма
int STATEpinII = 8; //логический вход для отслеживания аварийной ситуации ITS716G(724G)(выход REM-out3 и самозапитка БП-out4 )1 = авар. сит.

/*логические переменные, используемые в коде*/
int flagACC = 0; //признак включенного зажигания
int flagAKB = 0; // признак заряженной батареи
int flagHALL = 0; //флаг отработки морга экрана при холодном старте( flagHALL = 1 экран можно включать и выключать, датчик холла на планшете инициализировался)
/*счётчики времени*/
unsigned long eventTime = 0;
unsigned long pauseTimeACC = 0;
unsigned long pauseTimeAKB = 0;
unsigned long pauseTimeHALL = 120000; // время паузы перед морганием экрана (для датчика холла)(равен времени загрузки планшета плюс секунд 10-20)= 2мин
int timeAfterACC = 5000; // время после выключения зажигания, после истечения которого вырубается экран, хаб, y-otg


void setup() //настройки
{
// Serial.begin(115200);
//*************************test*************
wdt_disable(); //Отключение таймера watchdog

lcd.init(); // initialize the lcd занимает почти секунд
pinMode(STATEpinI, INPUT);
pinMode(STATEpinII, INPUT);
pinMode(PlanshBATpin, OUTPUT);
pinMode(SAMOZAPITKApin, OUTPUT);
pinMode(OTGpin, OUTPUT);
pinMode(SLEEPpin, OUTPUT);
pinMode(II_KIW_pin_POGOpin, OUTPUT);
pinMode(HUBpin, OUTPUT);
pinMode(13, OUTPUT); //светодиодик на плате ардуины
pinMode(REMpin, OUTPUT);
pinMode(REGISTRATORpin, OUTPUT);

digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
pauseTimeACC = millis(); // сброс времени для отсчета отключения самозапитки
pauseTimeAKB = millis();

wdt_enable (WDTO_8S); // Запуск таймера watchdog: Для тестов не рекомендуется устанавливать значение менее 8 сек. Таймер будет считать ровно столько, сколько указано в константе. По истечении этого времени произойдет перезагрузка.
/* Возможные значения для константы
WDTO_15MS
WDTO_30MS
WDTO_60MS
WDTO_120MS
WDTO_250MS
WDTO_500MS
WDTO_1S
WDTO_2S
WDTO_4S
WDTO_8S
*/
}


void loop()
{



//int Uacc = analogRead (A0); //Читаем напругу с делителя ACC R4-R5
//int Uakb = analogRead (A1); //Читаем напругу с делителя R2-R3
long Uacc = 0; //Читаем напругу с делителя ACC R4-R5 и вычисляем среднее арифметическое
long Uakb = 0; ////Читаем напругу с делителя R2-R3 и вычисляем среднее арифметическое
for (int i=0; i<100; ++i) { // делаем 100 замеров
Uacc = Uacc + analogRead(A0);
Uakb = Uakb + analogRead(A1);
}
Uacc = Uacc/100;
Uakb = Uakb/100;
//Serial.println(Uacc*0.01537);






float U_acc_real = 0.0 + Uacc * 0.01537;//(5 / 1023.0 * 3.136); //Вычисляем реальное напряжение +ACC на входе делителя (A0) 3.1189=поправка делителя.(коэф деления) 0.2-падение на диоде
float U_akb_real = Uakb * 0.015330;//(5 / 1023.0 * 3.145); //Вычисляем реальное напряжение +30 на входе делителя (A1)
//Serial.println(U_akb_real); // вывод напруги АКБ в ком порт для калибровки.

// кусок кода ниже нужен для того, чтобы при включении и сразу выключении ACC при полностью выключенном планшете(холодный старт) экран мог тухнуть по сигналу датчика холла.
if (millis() > pauseTimeHALL && flagHALL == 0 || millis() > 10000 && flagACC == 1) {
flagHALL = 1; //проверка отсчета при холодном старте при включении и сразу выключении ACC
}

if ((U_akb_real - U_acc_real) >4 )//проверка, выключили ли мы зажигание или просто стартуем (1 - выключили заж, 0 - стартуем)
{timeAfterACC = 500;} // 1 - выключили зажигание. ЕСЛИ +15 ПРОПАДАЕТ ВО ВРЕМЯ СТАРТА, ТО ВМЕСТО 500 НАДО 5000 или вообще убрать этот блок if-else.
else {timeAfterACC = 5000;} // 0 - заводим машину (стартуем).



// ------------========================== блок ACC ========================-----------------------------------------------------------------------------


// -----------------=========ВКЛЮЧИЛИ ЗАЖИГАНИЕ=============----------------
if (15.5 > U_acc_real && U_acc_real >= UaccONorOFF && flagACC == 0 && flagAKB == 1 ) //проверка напруги АСС и АКБ при флаге ACC = 0
{
flagACC = 1;
pauseTimeACC = millis();
pauseTimeAKB = millis();
lcd.clear(); //очистка экрана
}




if (millis() - pauseTimeACC >= 500 && flagACC == 1) // пауза 0,5c после включения ACC и потом делать следующ(пока включено ACC):
{
digitalWrite(PlanshBATpin, 1); //включаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 1); //включаем минус на Y-OTG (включается звуковая карта)
}

if (millis() - pauseTimeACC >= 800 && flagACC == 1) // пауза 0.8c после включения ACC и потом делать следующ(пока включено ACC): //через 0,8с после включения ACC включаем экран, включаем питание на видеорегистратор.
{
digitalWrite(II_KIW_pin_POGOpin, 1); //включаем +5V (POGO(USB) нужно для распознавания планшетом признака зарядки. ( можно подавать на +5В USB кабеля (для тимуровской прошивки или если не используется датчик холла)
digitalWrite(REGISTRATORpin, 1); // включаем питание на видеорегистратор
}

if (millis() - pauseTimeACC >= 2000 && flagACC == 1)//через 1с после включения ACC включаем экран (вЫключаем минус на упр SLEEP), выход REM(если больше 12в), Включаем хаб (подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб)
{
digitalWrite(SLEEPpin, 0); //включаем экран = вЫключаем минус на упр SLEEP
digitalWrite(HUBpin, 0); //Включаем хаб = подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб
if (U_akb_real >= 12 && flagACC == 1)//если напруга батареи больше 12В, то включаем еще и усилитель звука (выход REM)
{
digitalWrite(REMpin, 1); // включаем выход REM
}
}



//-----------------=========ВЫКЛЮЧИЛИ ЗАЖИГАНИЕ=============----------------

if (U_acc_real < UaccONorOFF && flagACC == 1)
{
flagACC = 0; //Выключили зажигание
digitalWrite(REMpin, 0); // выключаем выход REM
pauseTimeACC = millis();
pauseTimeAKB = millis();
lcd.clear(); //очистка экрана
}

if (millis() - pauseTimeACC >= timeAfterACC && flagACC == 0) //пауза 5c или 0.5c после вЫключения ACC и потом делать следующ://через 5с после выключения зажигания вЫключаем минус на Y-OTG, ВЫключаем хаб, вЫключаем +5V (POGO(USB)), тушим экран (если прошло 2мин со старта БП)
{
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // ВЫключаем хаб = подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб
lcd.noBacklight(); // тушим подсветку экрана
if (flagHALL == 1)
{
digitalWrite(SLEEPpin, 1); //включаем минус на SLEEP (7 pin PW1)при этом тухнет экран (если прошло 2 минуты с момента включения ардуины)
}
else
{
digitalWrite(SLEEPpin, 0);
}
}

// -------------------------========================= блок АКБ ==========================-------------------------------------------------------------------------------

if (U_acc_real >= UaccONorOFF) {UakbONorOFF = 11.5;} else {UakbONorOFF = 11.9;} //при включении зажигания напряжение самовырубания станет 11,5 вместо 11,9


if ((U_akb_real < UakbONorOFF && flagAKB == 1)||(U_akb_real >15.5))// ситуация, когда сел при работе ардуины аккумулятор, либо сел в процессе работы или простоя автомобиля, либо перезарядка > 15.5В
{
flagAKB = 0;//спустили флаг батареи
flagACC = 0;
pauseTimeACC = millis();
pauseTimeAKB = millis();
lcd.clear(); //очистка экрана
}

if ((15.5 > U_akb_real) && ((U_akb_real >= UakbONorOFF) && flagAKB == 0)) //проверка +30 на перезаряд >15.5В, и больше заданного в 155 строке, и флага акб
{
if (millis() - pauseTimeACC >= 2000 && flagAKB == 0){
digitalWrite(SAMOZAPITKApin, 1); // включаем самозапитку через 2с
flagAKB = 1;} //подняли флаг батареи
}

if (millis() - pauseTimeAKB >= 20000 && flagAKB == 0) // если севший аккумулятор //через 20с вЫключаем питание на батарею планшета и вырубаем сам БП.
{
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
delay (5000); // задержка для аппаратного выключения
}

if (flagAKB == 1 && flagACC == 0) //ситуация, когда норм акб и выключено зажигание (ACC)
{
if ((millis() - pauseTimeAKB )>= 36000000 && flagAKB == 1) // если прошло 10 часов, как выключили ACC // пауза (3600000 - 60мин) (60000 - 1 мин)(10800000=3ч) (1800000=5ч)
{
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)//(батарея планшета))
}

if ((millis() - pauseTimeAKB) >= 37000000 && flagAKB == 1) // если давно выключили ACC ) (2суток = 172800000)) //(самозапитка для регистратора)
{ digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом система ПОЛНОСТЬЮ обесточивается
delay (5000); // задержка для аппаратного выключения
}
}







//*********************************************СООБЩ ЕНИЕ НА ДИСПЛЕЙ******************************************* *****************



int H = (millis()/3600000);
int M = ((millis()-(H*3600000))/60000);
//int S = (((millis()/1000)-(H*3600))- (M*60));
if ((((millis())-(H*3600000))- (M*60000)) < 200 ){lcd.clear(); }//очистка экрана


if (flagACC == 1){lcd.backlight();}//}else {lcd.noBacklight();}
//lcd.backlight();

//вывод времени работы
lcd.setCursor(0, 0);
lcd.print((millis() )/60000);
lcd.setCursor(4, 0);
//lcd.print((U_akb_real - U_acc_real));
//lcd.print(timeAfterACC);
//lcd.setCursor(5, 0);
//lcd.print(":");
//lcd.setCursor(6, 0);
//lcd.print(S);
// вывод напряжений
//lcd.setCursor(8, 0);
//lcd.print("A");
lcd.setCursor(9, 0);
lcd.print(flagACC);
lcd.setCursor(11, 0);
lcd.print(U_acc_real);

//lcd.setCursor(5,1);
//-------------------2 строка---------------------------------
lcd.setCursor(0, 1);
unsigned long TIMER = ( pauseTimeAKB + 37000000 - millis() )/60000;
lcd.print(TIMER);
lcd.setCursor(5, 1);

// вывод напряжений
//lcd.setCursor(8, 1);
//lcd.print("B");
lcd.setCursor(9, 1);
lcd.print(flagAKB);
lcd.setCursor(11, 1);
lcd.print(U_akb_real);
//************************************************** ************************************************** *****

//*
//******************************************отслежив ания аварийной ситуации ITS716G******************************************* ************************************************** ************************************************** *********************************


//отслеживания аварийной ситуации ITS716G канал 1 (питание KIW3312s-out2 и регистратор-out1) 0 = норма 1 = авар. сит. //тогда моргаем 13 ногой код "1"
//отслеживания аварийной ситуации ITS716G канал 2 (выход REM-out3 и самозапитка БП-out4 )0 = норма 1 = авар. сит. //тогда моргаем 13 ногой код "2"
if(SAMOZAPITKApin==1 || PlanshBATpin==1 ||REMpin==1 || REGISTRATORpin ==1) // если проц включал любой канал ITS
{
if(STATEpinI == 0) { // и если пин защиты показал аварию
for (int i=0; i <= 300; i++) { //тогда моргаем 13 ногой код "1" 10 минут, если они прошли и асс ВКЛ, тогда еще раз и еще по кругу, пока неисправность не уйдёт
digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(1493);
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
wdt_reset(); //Сброс таймера watchdog
}
} ;
if(STATEpinII == 0) { // и если пин защиты показал аварию
for (int i=0; i <= 150; i++) { //тогда моргаем 13 ногой ногой код "2" 10 минут, если они прошли и асс ВКЛ, тогда еще раз и еще по кругу, пока неисправность не уйдёт
digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(493); digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(1493);
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
wdt_reset(); //Сброс таймера watchdog
}
} ;
}




//*/
//************************************************** ************************************************** ************************************************** ************************************************** ******************

//******************************************индикаци я светодиодом*************************************** ************************************************** ************************************************** *************************************


ms = millis();
// Событие срабатывающее каждые 125 мс
if ( ( ms - ms1 ) > 125 || ms < ms1 ) {
ms1 = ms;
// Режим светодиода ищем по битовой маске
if ( blink_mode & 1 << (blink_loop & 0x07) ) digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
blink_loop++;
}

// blink_mode = modes[3];

if (blink_mode != modes[5] || blink_mode != modes[5])
{
if (flagAKB == 0 ){blink_mode = modes[0];} // индикация напруги батареи на ардуинине.- низкое напряжение АКБ авто
if (flagAKB == 1 && flagACC == 1) {blink_mode = modes[2];} //- нормальное напряжение, включено ACC, рабочий режим.
if (flagAKB == 1 && flagACC == 0) {blink_mode = modes[6];} //- нормальное напряжение АКБ авто, ACC выключено.



}
//************************************************** ************************************************** ******
/* 0B00000000, //Светодиод выключен blink_mode = modes[0]; - низкое напряжение АКБ авто
0B11111111, //Горит постоянно blink_mode = modes[1];
0B00001111, //Мигание по 0.5 сек blink_mode = modes[2]; - нормальное напряжение, включено ACC, рабочий режим.
0B00000001, //Короткая вспышка раз в секунду
0B00000101, //Две короткие вспышки раз в секунду
0B00010101, //Три короткие вспышки раз в секунду
0B00000001 // blink_mode = modes[6]; - нормальное напряжение АКБ авто, ACC выключено.

// 0B01010101 //Частые короткие вспышки (4 раза в секунду)
*/
//************************************************** ************************************************** ******


wdt_reset(); //Сброс таймера watchdog


} //конец цикла void loop()

//

Az0m@
29.05.2016, 00:20
схему рисуй. на пого если питание, он может на док пытаться звук выводить.
подключал так:
1 пин - +АКБ
2 пин - pogo pin 5V (как тут http://pccar.ru/attachment.php?attachmentid=43263&thumb=1&d=1459368854)
5 пин - -АКБ
16 пин - датчик холла

пока тестирую работу только самого планшета... то есть к нему ничего не подключено

T_r_D
29.05.2016, 02:56
А как ты заставил вачдог работать без модификации загрузчика?
Он же просто за 15мс не успевает грузится чтоб вачдог вырубить.

oleg707
29.05.2016, 12:40
А как ты заставил вачдог работать без модификации загрузчика?
Он же просто за 15мс не успевает грузится чтоб вачдог вырубить.

Я загрузчик не использую, шью напрямую. Так проще и быстрее.

Ватчдог включается в скетче, который запускается после загрузчика. Соответственно, если проц завис, тогда со стандартным загрузчиком вотчдог будет запускаться в цикле и завесит проц, но нам это не страшно, проц то уже завис.
Если снять питание с него, а потом подать снова, тогда сначала запустится загрузчик, а потом скетч с вотчдогом. Вотчдог не срабатывает, если задержка в программе не превышает 8 секунд - в моём случае. Если программа выполняется штатно и delay ( 10000) там никто не дописывал, то наличие дога не заметно.

Игрался на столе с блоком и один раз получилось его повесить. Просто взялся за дисплей рукой. Шнур 4 провода, экранирование к массе не подключено, I2С, около 40см.
Блок завис, картинка на дисплее тоже. Так вот, вотчдог НЕ сработал. И я даже больше скажу, ресет тоже не сработал! То есть жму ресет, а реакции ни какой!
Передёргивание питания творит чудеса:wink2:
Тут 2 вопроса возникают, почему нет реакции на аппаратный ресет?!
И почему вотчдог не сделал этот самый ресет. Думаю, ответ будет один.
Пытался повторить зависание, так не смог - работает, зараза.

oleg707
29.05.2016, 12:49
подключал так:
1 пин - +АКБ
2 пин - pogo pin 5V (как тут http://pccar.ru/attachment.php?attachmentid=43263&thumb=1&d=1459368854)
5 пин - -АКБ
16 пин - датчик холла

пока тестирую работу только самого планшета... то есть к нему ничего не подключено

Прошивка какая? У меня цианоген мод стоял, там выбирается куда звук выводить, когда на док станции стоит. И выход звука я как раз изначально брал с этого же пого - средние пины, напрямую на усилитель. Заодно про максимальную громкость в наушниках не ругалось.
Посмотри в настройках, можно ли звук в режиме дока вывести на динамики?
Или подавай 5вольт не на пого, а на юсб.

T_r_D
29.05.2016, 15:53
Короче вывод- нужно делать аппаратный вочдог с ресетом по питанию.
Какая нить ne555 и полевик на питание ардуины.

oleg707
29.05.2016, 17:13
Ну да, 555 в режиме срабатывания через время, отдельная ножка проца на сброс таймера и полевик на питание проца. Только место это займёт, и много, даже на смд компонентах.
Так что овчина выделки не стоит. Скорее всего просто забью.

Az0m@
29.05.2016, 20:57
Прошивка какая? У меня цианоген мод стоял, там выбирается куда звук выводить, когда на док станции стоит. И выход звука я как раз изначально брал с этого же пого - средние пины, напрямую на усилитель. Заодно про максимальную громкость в наушниках не ругалось.
Посмотри в настройках, можно ли звук в режиме дока вывести на динамики?
Или подавай 5вольт не на пого, а на юсб.
на сегодняшний день у вас этот момент на планшете как подключен?

P.S. перепрошился на аутодроид с ядром даниэля... проблема исчезла. теперь дело осталось за малым.... настроить и автоматизировать основные процессы в системе... -) Надеюсь Oleg и тут подскажет основные моменты за имением уже наработанного опыта в эксплуатации системы

T_r_D
30.05.2016, 00:07
oleg707 Фиговый вариант забивать.
На СМД много места не сожрёт, да и не так это критично как разбирать пол салона :)
В моём случае чтоб долезть до платы придётся среднею часть торпеды разобрать, часть тоннеля КПП и вынуть магнитолу.

yuriy m
30.05.2016, 01:14
oleg707 Фиговый вариант забивать.
На СМД много места не сожрёт, да и не так это критично как разбирать пол салона :)
В моём случае чтоб долезть до платы придётся среднею часть торпеды разобрать, часть тоннеля КПП и вынуть магнитолу.

Отключи плюс на несколько секунд

T_r_D
30.05.2016, 12:05
Проще псину на 555 собрать

oleg707
30.05.2016, 13:38
Проще псину на 555 собрать

надо понаблюдать. у меня зависание обычно приходят, когда руками лезу.
Если ездить - просто работает.
То, что я делаю умное мигание светодиодом, вотчдоги и прочее - это от нефиг делать шлифовка и оптимизация. Заодно навыки программирования качаю.

Az0m@
30.05.2016, 22:18
добавил усреднение по замерам U. на столе работает, посмотрим, как в машине будет.

залил данный скетч себе... заливка прошла успешно. но светодиоды никак не регируют на статус работы.

P.S.
я правильно понимаю что выход 4 пина (минус для Y-OTG) нужен когда к планшету подключено только одно устройство... а в случае подключения USB хаба, вместо него сам хаб запитываем через 14 пин (+5В)... а к планшету его подключаем напрямую через обычный OTG

oleg707
30.05.2016, 22:57
залил данный скетч себе... заливка прошла успешно. но светодиоды никак не регируют на статус работы.

P.S.
я правильно понимаю что выход 4 пина (минус для Y-OTG) нужен когда к планшету подключено только одно устройство... а в случае подключения USB хаба, вместо него сам хаб запитываем через 14 пин (+5В)... а к планшету его подключаем напрямую через обычный OTG

при подаче +30(акб) и асс светик на 13 пине мигает равномерно раз в 0,5 сек
при +30 выше 12 В и асс =0 быстрые вспышки.
при +30 10в светик не горит.

if (flagAKB == 0 ){blink_mode = modes[0];} // индикация напруги батареи на ардуинине.- низкое напряжение АКБ авто
if (flagAKB == 1 && flagACC == 1) {blink_mode = modes[2];} //- нормальное напряжение, включено ACC, рабочий режим.
if (flagAKB == 1 && flagACC == 0) {blink_mode = modes[6];} //- нормальное напряжение АКБ авто, ACC выключено.
для контроля можно подключить дисплей по i2c или активировать в скетче монитор ком порта.
померяй вольтметром напряжение на ардуине на А0 и А1 при подаче 12В на схему. около 3В должно приходить.( это с делителя).

4 пин юсб нужно передёргивать для стабильной работы. питание хаба +5в брать с блока, для питания звуковой мне хватает планшета напрямую.

Az0m@
30.05.2016, 23:23
для контроля можно подключить дисплей по i2c или активировать в скетче монитор ком порта.
померяй вольтметром напряжение на ардуине на А0 и А1 при подаче 12В на схему. около 3В должно приходить.( это с делителя).

увы дисплея пока под рукой нету.. вольтметром на обоих выводах 4.11В

питание хаба +5в брать с блока, для питания звуковой мне хватает планшета напрямую.
а питание хаба все таки брать с 14пина (+5В) или надо со 2ого пина?

oleg707
30.05.2016, 23:56
немного подправил БП-5. Чтобы можно было юсб подключать без помех.В 5_43 версии мешает, нужно для отладки. Мне в принципе не надо, но вдруг кому пригодится.
43904

T_r_D
31.05.2016, 00:03
oleg707
Да понятно что большую часть реализованную тобой можно выкинуть. Это часть украшательство просто. Но зная по себе остановится сложно. Мой скетч я выложил.
При настройке использовал выдачу информации в сериал, после настройки потёр этот кусок. Смысла в этом не вижу поскольку светодиоды с промикры я в итоге отпаяю, да и их видно не будет, а долезть до USB равносильно разбору центра торпеды. Но ты продолжай визуализировать- для большинства тут присутствующих это актуально и тебе только спасибо скажут.

А по существу, сегодня в голову долбанула идея. Я не углублялся в твой код, но походу она так же не реализована.

Ситуация- завис планшет. Что делать?
Разбирать?
Надо реализовать жёсткий ребут его без разбора.
Мне в голову только одна идея пришла. Заглушили машину, далее начал работать код который жмакает кнопку и если через, ну скажем 10 секунд на дисплее всё ещё питание есть, то уводим питание планшета в минимум тем самым обесточивая его и заставляя перезагрузиться. Ну и потом питание востанавливаем и дальше код работает дальше как ни в чём не бывало.

Не написал, но на практике показало что если снизить питание до 2,8В то произойдёт выключение планшета, но время при этом не сбросится.

В своём коде реализую, если будет интерес, то выложу сюда.

oleg707
31.05.2016, 00:04
увы дисплея пока под рукой нету.. вольтметром на обоих выводах 4.11В

а питание хаба все таки брать с 14пина (+5В) или надо со 2ого пина?

Питание хаба брать со 2ого пина. Им там хоть управлять можно через полевик.

заливай этот скетч, цепляй юсб к компу, выбирай скорость порта 115200 и номер свой. Должно кидать реальное напряжение по замеру АКБ.

//ver30.05.16.2300 ( чем больше цифра, тем новее)
// для 5й версии блока питания ( для 4й тоже подходит, только нужно поменять местами в программе A0 и A1)
//ТЕСТОВАЯ!!!
// вывод напряжения батареи по юсб ( виртуальный ком порт)
/*
_______Сделано_____________________________
вывод информации на внешний дисплей по I2C,
активный вотчдог,
программная защита its716G(statepin)-тестово,
умное мигание встроенным светодиодом,
усреднение завмеров по напряжению ACC и AKB.
____________________________________________
*/
//************************************************** ************************************************** ***********************************************
// Массив режимов работы светодиода
byte modes[] = {
0B00000000, //Светодиод выключен
0B11111111, //Горит постоянно
0B00001111, //Мигание по 0.5 сек
0B00000001, //Короткая вспышка раз в секунду
0B00000101, //Две короткие вспышки раз в секунду
0B00010101, //Три короткие вспышки раз в секунду
0B01010101 //Частые короткие вспышки (4 раза в секунду)
};

uint32_t ms, ms1 = 0;
uint8_t blink_loop = 0;
uint8_t blink_mode = 0;

//************************************************** ************************************************** ***********************************************

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <avr/wdt.h> //Чтобы использовать функции Watchdog нужно подключить к проекту стандартную библиотеку ( https://geektimes.ru/post/255800/ )

LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
float UakbONorOFF = 12.01;// в 155 строке == if ((15.5 > U_acc_real >= UaccONorOFF) && flagACC == 1) {UakbONorOFF = 11.5;} else {UakbONorOFF = 11.9;}
float UaccONorOFF = 10;//11.1 // напряжение порога сработки асс

/*ноги ардуины*/
int SAMOZAPITKApin = 9; //управление самозапиткой блока питания IN4
//1 = есть самозапитка; 0 = нет самозапитки
int PlanshBATpin = 6; // включить 1 канал KIW ..... управление питания БАТАРЕИ планшета через управляющую ногу IN2-5pin
//0 = нет питания; 1 = есть питание ( БАТАРЕИ планшета)
int II_KIW_pin_POGOpin = 2; // включить 2 канал KIW управление SS2 выходом питания +5V (2 канал kiw3312s) на пого пин(или USB), чтоб планшет думал, что идет зарядка
//0 = нет 5V на POGO; 1 = есть 5V на POGO
int OTGpin = 12; //управление транзюком OTG Q1
//1 = есть масса на OTG; 0 = нет массы на OTG
int SLEEPpin = 10; //управление транзюком сна VT4 (на датчик холла))
//1 = потух экран(есть масса на пине сна); 0 = штатная работа планшета (нет массы на пине сна)
int HUBpin = 11; //управление транзюком питания хаба
// 0-есть питание, 1 - нет питания
int REMpin = 7; // выход сигнала REM (+12v) (IN3), на плате распаяно.
//0 = нет 12В на выходе REM; 1 = есть 12В на выходе REM
int REGISTRATORpin = 4; //выход 12В для работы видеорегистратора (D4 -IN1)
//пины состояния ITS
int STATEpinI = 5; //логический вход для отслеживания аварийной ситуации ITS716G(724G)(питание KIW3312s-out2 и регистратор-out1) 0 = норма
int STATEpinII = 8; //логический вход для отслеживания аварийной ситуации ITS716G(724G)(выход REM-out3 и самозапитка БП-out4 )1 = авар. сит.

/*логические переменные, используемые в коде*/
int flagACC = 0; //признак включенного зажигания
int flagAKB = 0; // признак заряженной батареи
int flagHALL = 0; //флаг отработки морга экрана при холодном старте( flagHALL = 1 экран можно включать и выключать, датчик холла на планшете инициализировался)
/*счётчики времени*/
unsigned long eventTime = 0;
unsigned long pauseTimeACC = 0;
unsigned long pauseTimeAKB = 0;
unsigned long pauseTimeHALL = 120000; // время паузы перед морганием экрана (для датчика холла)(равен времени загрузки планшета плюс секунд 10-20)= 2мин
int timeAfterACC = 5000; // время после выключения зажигания, после истечения которого вырубается экран, хаб, y-otg


void setup() //настройки
{
Serial.begin(115200);
//*************************test*************
wdt_disable(); //Отключение таймера watchdog

lcd.init(); // initialize the lcd занимает почти секунд
pinMode(STATEpinI, INPUT);
pinMode(STATEpinII, INPUT);
pinMode(PlanshBATpin, OUTPUT);
pinMode(SAMOZAPITKApin, OUTPUT);
pinMode(OTGpin, OUTPUT);
pinMode(SLEEPpin, OUTPUT);
pinMode(II_KIW_pin_POGOpin, OUTPUT);
pinMode(HUBpin, OUTPUT);
pinMode(13, OUTPUT); //светодиодик на плате ардуины
pinMode(REMpin, OUTPUT);
pinMode(REGISTRATORpin, OUTPUT);

digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
pauseTimeACC = millis(); // сброс времени для отсчета отключения самозапитки
pauseTimeAKB = millis();

wdt_enable (WDTO_8S); // Запуск таймера watchdog: Для тестов не рекомендуется устанавливать значение менее 8 сек. Таймер будет считать ровно столько, сколько указано в константе. По истечении этого времени произойдет перезагрузка.
/* Возможные значения для константы
WDTO_15MS
WDTO_30MS
WDTO_60MS
WDTO_120MS
WDTO_250MS
WDTO_500MS
WDTO_1S
WDTO_2S
WDTO_4S
WDTO_8S
*/
}


void loop()
{



//int Uacc = analogRead (A0); //Читаем напругу с делителя ACC R4-R5
//int Uakb = analogRead (A1); //Читаем напругу с делителя R2-R3
long Uacc = 0; //Читаем напругу с делителя ACC R4-R5 и вычисляем среднее арифметическое
long Uakb = 0; ////Читаем напругу с делителя R2-R3 и вычисляем среднее арифметическое
for (int i=0; i<100; ++i) { // делаем 100 замеров
Uacc = Uacc + analogRead(A0);
Uakb = Uakb + analogRead(A1);
}
Uacc = Uacc/100;
Uakb = Uakb/100;
//Serial.println(Uacc*0.01537);






float U_acc_real = 0.0 + Uacc * 0.01537;//(5 / 1023.0 * 3.136); //Вычисляем реальное напряжение +ACC на входе делителя (A0) 3.1189=поправка делителя.(коэф деления) 0.2-падение на диоде
float U_akb_real = Uakb * 0.015330;//(5 / 1023.0 * 3.145); //Вычисляем реальное напряжение +30 на входе делителя (A1)
Serial.println(U_akb_real); // вывод напруги АКБ в ком порт для калибровки.

// кусок кода ниже нужен для того, чтобы при включении и сразу выключении ACC при полностью выключенном планшете(холодный старт) экран мог тухнуть по сигналу датчика холла.
if (millis() > pauseTimeHALL && flagHALL == 0 || millis() > 10000 && flagACC == 1) {
flagHALL = 1; //проверка отсчета при холодном старте при включении и сразу выключении ACC
}

if ((U_akb_real - U_acc_real) >4 )//проверка, выключили ли мы зажигание или просто стартуем (1 - выключили заж, 0 - стартуем)
{timeAfterACC = 500;} // 1 - выключили зажигание. ЕСЛИ +15 ПРОПАДАЕТ ВО ВРЕМЯ СТАРТА, ТО ВМЕСТО 500 НАДО 5000 или вообще убрать этот блок if-else.
else {timeAfterACC = 5000;} // 0 - заводим машину (стартуем).



// ------------========================== блок ACC ========================-----------------------------------------------------------------------------


// -----------------=========ВКЛЮЧИЛИ ЗАЖИГАНИЕ=============----------------
if (15.5 > U_acc_real && U_acc_real >= UaccONorOFF && flagACC == 0 && flagAKB == 1 ) //проверка напруги АСС и АКБ при флаге ACC = 0
{
flagACC = 1;
pauseTimeACC = millis();
pauseTimeAKB = millis();
lcd.clear(); //очистка экрана
}




if (millis() - pauseTimeACC >= 500 && flagACC == 1) // пауза 0,5c после включения ACC и потом делать следующ(пока включено ACC):
{
digitalWrite(PlanshBATpin, 1); //включаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 1); //включаем минус на Y-OTG (включается звуковая карта)
}

if (millis() - pauseTimeACC >= 800 && flagACC == 1) // пауза 0.8c после включения ACC и потом делать следующ(пока включено ACC): //через 0,8с после включения ACC включаем экран, включаем питание на видеорегистратор.
{
digitalWrite(II_KIW_pin_POGOpin, 1); //включаем +5V (POGO(USB) нужно для распознавания планшетом признака зарядки. ( можно подавать на +5В USB кабеля (для тимуровской прошивки или если не используется датчик холла)
digitalWrite(REGISTRATORpin, 1); // включаем питание на видеорегистратор
}

if (millis() - pauseTimeACC >= 2000 && flagACC == 1)//через 1с после включения ACC включаем экран (вЫключаем минус на упр SLEEP), выход REM(если больше 12в), Включаем хаб (подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб)
{
digitalWrite(SLEEPpin, 0); //включаем экран = вЫключаем минус на упр SLEEP
digitalWrite(HUBpin, 0); //Включаем хаб = подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб
if (U_akb_real >= 12 && flagACC == 1)//если напруга батареи больше 12В, то включаем еще и усилитель звука (выход REM)
{
digitalWrite(REMpin, 1); // включаем выход REM
}
}



//-----------------=========ВЫКЛЮЧИЛИ ЗАЖИГАНИЕ=============----------------

if (U_acc_real < UaccONorOFF && flagACC == 1)
{
flagACC = 0; //Выключили зажигание
digitalWrite(REMpin, 0); // выключаем выход REM
pauseTimeACC = millis();
pauseTimeAKB = millis();
lcd.clear(); //очистка экрана
}

if (millis() - pauseTimeACC >= timeAfterACC && flagACC == 0) //пауза 5c или 0.5c после вЫключения ACC и потом делать следующ://через 5с после выключения зажигания вЫключаем минус на Y-OTG, ВЫключаем хаб, вЫключаем +5V (POGO(USB)), тушим экран (если прошло 2мин со старта БП)
{
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // ВЫключаем хаб = подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб
lcd.noBacklight(); // тушим подсветку экрана
if (flagHALL == 1)
{
digitalWrite(SLEEPpin, 1); //включаем минус на SLEEP (7 pin PW1)при этом тухнет экран (если прошло 2 минуты с момента включения ардуины)
}
else
{
digitalWrite(SLEEPpin, 0);
}
}

// -------------------------========================= блок АКБ ==========================-------------------------------------------------------------------------------

if (U_acc_real >= UaccONorOFF) {UakbONorOFF = 11.5;} else {UakbONorOFF = 11.9;} //при включении зажигания напряжение самовырубания станет 11,5 вместо 11,9


if ((U_akb_real < UakbONorOFF && flagAKB == 1)||(U_akb_real >15.5))// ситуация, когда сел при работе ардуины аккумулятор, либо сел в процессе работы или простоя автомобиля, либо перезарядка > 15.5В
{
flagAKB = 0;//спустили флаг батареи
flagACC = 0;
pauseTimeACC = millis();
pauseTimeAKB = millis();
lcd.clear(); //очистка экрана
}

if ((15.5 > U_akb_real) && ((U_akb_real >= UakbONorOFF) && flagAKB == 0)) //проверка +30 на перезаряд >15.5В, и больше заданного в 155 строке, и флага акб
{
if (millis() - pauseTimeACC >= 2000 && flagAKB == 0){
digitalWrite(SAMOZAPITKApin, 1); // включаем самозапитку через 2с
flagAKB = 1;} //подняли флаг батареи
}

if (millis() - pauseTimeAKB >= 20000 && flagAKB == 0) // если севший аккумулятор //через 20с вЫключаем питание на батарею планшета и вырубаем сам БП.
{
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
delay (5000); // задержка для аппаратного выключения
}

if (flagAKB == 1 && flagACC == 0) //ситуация, когда норм акб и выключено зажигание (ACC)
{
if ((millis() - pauseTimeAKB )>= 36000000 && flagAKB == 1) // если прошло 10 часов, как выключили ACC // пауза (3600000 - 60мин) (60000 - 1 мин)(10800000=3ч) (1800000=5ч)
{
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)//(батарея планшета))
}

if ((millis() - pauseTimeAKB) >= 37000000 && flagAKB == 1) // если давно выключили ACC ) (2суток = 172800000)) //(самозапитка для регистратора)
{ digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом система ПОЛНОСТЬЮ обесточивается
delay (5000); // задержка для аппаратного выключения
}
}







//*********************************************СООБЩ ЕНИЕ НА ДИСПЛЕЙ******************************************* *****************



int H = (millis()/3600000);
int M = ((millis()-(H*3600000))/60000);
//int S = (((millis()/1000)-(H*3600))- (M*60));
if ((((millis())-(H*3600000))- (M*60000)) < 200 ){lcd.clear(); }//очистка экрана


if (flagACC == 1){lcd.backlight();}//}else {lcd.noBacklight();}
//lcd.backlight();

//вывод времени работы
lcd.setCursor(0, 0);
lcd.print((millis() )/60000);
lcd.setCursor(4, 0);
//lcd.print((U_akb_real - U_acc_real));
//lcd.print(timeAfterACC);
//lcd.setCursor(5, 0);
//lcd.print(":");
//lcd.setCursor(6, 0);
//lcd.print(S);
// вывод напряжений
//lcd.setCursor(8, 0);
//lcd.print("A");
lcd.setCursor(9, 0);
lcd.print(flagACC);
lcd.setCursor(11, 0);
lcd.print(U_acc_real);

//lcd.setCursor(5,1);
//-------------------2 строка---------------------------------
lcd.setCursor(0, 1);
unsigned long TIMER = ( pauseTimeAKB + 37000000 - millis() )/60000;
lcd.print(TIMER);
lcd.setCursor(5, 1);

// вывод напряжений
//lcd.setCursor(8, 1);
//lcd.print("B");
lcd.setCursor(9, 1);
lcd.print(flagAKB);
lcd.setCursor(11, 1);
lcd.print(U_akb_real);
//************************************************** ************************************************** *****

//*
//******************************************отслежив ания аварийной ситуации ITS716G******************************************* ************************************************** ************************************************** *********************************


//отслеживания аварийной ситуации ITS716G канал 1 (питание KIW3312s-out2 и регистратор-out1) 0 = норма 1 = авар. сит. //тогда моргаем 13 ногой код "1"
//отслеживания аварийной ситуации ITS716G канал 2 (выход REM-out3 и самозапитка БП-out4 )0 = норма 1 = авар. сит. //тогда моргаем 13 ногой код "2"
if(SAMOZAPITKApin==1 || PlanshBATpin==1 ||REMpin==1 || REGISTRATORpin ==1) // если проц включал любой канал ITS
{
if(STATEpinI == 0) { // и если пин защиты показал аварию
for (int i=0; i <= 300; i++) { //тогда моргаем 13 ногой код "1" 10 минут, если они прошли и асс ВКЛ, тогда еще раз и еще по кругу, пока неисправность не уйдёт
digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(1493);
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
wdt_reset(); //Сброс таймера watchdog
}
} ;
if(STATEpinII == 0) { // и если пин защиты показал аварию
for (int i=0; i <= 150; i++) { //тогда моргаем 13 ногой ногой код "2" 10 минут, если они прошли и асс ВКЛ, тогда еще раз и еще по кругу, пока неисправность не уйдёт
digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(493); digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(1493);
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
wdt_reset(); //Сброс таймера watchdog
}
} ;
}




//*/
//************************************************** ************************************************** ************************************************** ************************************************** ******************

//******************************************индикаци я светодиодом*************************************** ************************************************** ************************************************** *************************************


ms = millis();
// Событие срабатывающее каждые 125 мс
if ( ( ms - ms1 ) > 125 || ms < ms1 ) {
ms1 = ms;
// Режим светодиода ищем по битовой маске
if ( blink_mode & 1 << (blink_loop & 0x07) ) digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
blink_loop++;
}

// blink_mode = modes[3];

if (blink_mode != modes[5] || blink_mode != modes[5])
{
if (flagAKB == 0 ){blink_mode = modes[0];} // индикация напруги батареи на ардуинине.- низкое напряжение АКБ авто
if (flagAKB == 1 && flagACC == 1) {blink_mode = modes[2];} //- нормальное напряжение, включено ACC, рабочий режим.
if (flagAKB == 1 && flagACC == 0) {blink_mode = modes[6];} //- нормальное напряжение АКБ авто, ACC выключено.



}
//************************************************** ************************************************** ******
/* 0B00000000, //Светодиод выключен blink_mode = modes[0]; - низкое напряжение АКБ авто
0B11111111, //Горит постоянно blink_mode = modes[1];
0B00001111, //Мигание по 0.5 сек blink_mode = modes[2]; - нормальное напряжение, включено ACC, рабочий режим.
0B00000001, //Короткая вспышка раз в секунду
0B00000101, //Две короткие вспышки раз в секунду
0B00010101, //Три короткие вспышки раз в секунду
0B00000001 // blink_mode = modes[6]; - нормальное напряжение АКБ авто, ACC выключено.

// 0B01010101 //Частые короткие вспышки (4 раза в секунду)
*/
//************************************************** ************************************************** ******


wdt_reset(); //Сброс таймера watchdog


} //конец цикла void loop()

//

Az0m@
31.05.2016, 00:08
Oleg, чет словил очередной глюк...при подключенном 2ом контакте на пого пин не появляется напряжения на данном выводе. если же отключить 2ой контакт и включить АСС на этом контакте появляется напряжение... и при последующем подключении к пого появляется зарядка... и так до следующего отключения экрана



заливай этот скетч, цепляй юсб к компу, выбирай скорость порта 115200 и номер свой. Должно кидать реальное напряжение по замеру АКБ.

залил... теперь светодиод постоянно быстро моргает.. и без АСС тоже

oleg707
31.05.2016, 00:17
oleg707
Да понятно что большую часть реализованную тобой можно выкинуть. Это часть украшательство просто. Но зная по себе остановится сложно. Мой скетч я выложил.
При настройке использовал выдачу информации в сериал, после настройки потёр этот кусок. Смысла в этом не вижу поскольку светодиоды с промикры я в итоге отпаяю, да и их видно не будет, а долезть до USB равносильно разбору центра торпеды. Но ты продолжай визуализировать- для большинства тут присутствующих это актуально и тебе только спасибо скажут.

А по существу, сегодня в голову долбанула идея. Я не углублялся в твой код, но походу она так же не реализована.

Ситуация- завис планшет. Что делать?
Разбирать?
Надо реализовать жёсткий ребут его без разбора.
Мне в голову только одна идея пришла. Заглушили машину, далее начал работать код который жмакает кнопку и если через, ну скажем 10 секунд на дисплее всё ещё питание есть, то уводим питание планшета в минимум тем самым обесточивая его и заставляя перезагрузиться. Ну и потом питание востанавливаем и дальше код работает дальше как ни в чём не бывало.

Не написал, но на практике показало что если снизить питание до 2,8В то произойдёт выключение планшета, но время при этом не сбросится.

В своём коде реализую, если будет интерес, то выложу сюда.

планшет зависал 3 раза за год. У меня аккум планша не отключен. Потому снизить питание до 2,8В не получится физически. Кнопка питания выведена.
...ну скажем 10 секунд на дисплее всё ещё питание есть... а как ты питание процу покажешь? паяться к драйверу подсветки экрана? НАФИГ.
Тут смысл в другом. Я заглушил, вынял ключ. Через 4 сек планшет потух. ВСЁ!
Если зависон - то я его увижу.
Если глюк в спящем режиме, да даже если ребут циклический - ну пусть мультики показывает, пока батарея планшета не сядет. БП питалово только 6 часов держит. В любом случае идёт контроль напряжения АКБ авто.

скетч ложи, если запилишь.

oleg707
31.05.2016, 00:23
Oleg, чет словил очередной глюк...при подключенном 2ом контакте на пого пин не появляется напряжения на данном выводе. если же отключить 2ой контакт и включить АСС на этом контакте появляется напряжение... и при последующем подключении к пого появляется зарядка... и так до следующего отключения отключения экрана


залил... теперь светодиод постоянно быстро моргает.. и без АСС тоже

СТОП
по порядку
Отключи планшет нафиг, пока ты его не спалил
Сначала блок протестируй, мигать его заставь диодиком
Сними инфу про напряжение АКБ с ком порта. В качестве нагрузки повесь лампочки на 12 вольт (5-20 Вт)

Ты чем блок питания запитываешь?

Oleg,
залил... теперь светодиод постоянно быстро моргает.. и без АСС тоже

значит АСС не видит. Если моргает диод на 13 пине ардуины. А не Rx Tx.

T_r_D
31.05.2016, 00:24
oleg707
Да выложу конечно скетч.
Только надо его реализовать. Неделя выходного началась, так вот за неё попытаюсь реализовать и псину на 555 и ребут планшета.

У меня цель просто кристальна понятна- планшет должен работать как штатный БК автомобиля.
Ни каких дополнительных кнопок, ни каких внешних видимых изменений.
Поэтому требования ко всяким косякам завышены.
Именно поэтому проект лежит на столе собранный, а не в машине стоит. Пока не допилю нюансы- ставить не буду.
О проекте потом распишу, но тут тема про ситроен, кан и планшет есть моя.

PS. Про питание дисплея- именно так как ты пердположил. Хвост припаян к драйверу.
Самый надёжный вариант. Не понимаю твоего "НАФИГ. ". Кнопку запаять это норм, а к драйверу не катит.

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

А чтоб отпали дальшейшие вопросы- я использую не нексус, а линову. Нексус у меня в рамку не встаёт как надо.
И требования у меня жёсткие- только стандартные прошивки.
Поэтому реализация питания полностью аппаратная.

Программная часть взаимодействия с автомобилем, "нетухнущий" дисплей и прочии фиговины- чисто моим софтом, без рута планшета.
Но это уже не для этой темы.

oleg707
31.05.2016, 00:32
oleg707
Да выложу конечно скетч.
Только надо его реализовать. Неделя выходного началась, так вот за неё попытаюсь реализовать и псину на 555 и ребут планшета.

У меня цель просто кристальна понятна- планшет должен работать как штатный БК автомобиля.
Ни каких дополнительных кнопок, ни каких внешних видимых изменений.
Поэтому требования ко всяким косякам завышены.
Именно поэтому проект лежит на столе собранный, а не в машине стоит. Пока не допилю нюансы- ставить не буду.
О проекте потом распишу, но тут тема про ситроен, кан и планшет есть моя.

PS. Про питание дисплея- именно так как ты пердположил. Хвост припаян к драйверу.
Самый надёжный вариант. Не понимаю твоего "НАФИГ. ". Кнопку запаять это норм, а к драйверу не катит.
чем тебе кнопка питания мешает? я ей экран иногда гашу. Из практики - однозначно ставить. причем даже не скрытно, а рядом.
По поводу допиливания - нюансы вылазят как раз в машине. Так можно и пару лет готовиться при теле на столе.
Я изначально вставил в наушники линейный разъём на усилитель звука, подпаял плюс и минус 5В на пого, подал туда питание с ''зарядки в прикуриватель'' и ездил так полгода. И оно Работало.

T_r_D
31.05.2016, 00:41
oleg707
Да не мешает мне кнопка питания.
При помощи неё я и сам рулю состоянием планшета и штатную не убрал даже, чтоб можно было тестировать.
Я писал про то, что если уж полезли во внутренности, то какая разница уже что паять? Кнопку или припаять хвост к драйверу подсветки на который ты сказал НАФИГ.

Симуляцию надо проводить на столе. В машине очень долго ловить глюки.
На столе можно и кратковременные проподания питалова организовать и подмешивание в питалова белого шума и всё что угодно.

Кнопка рядом не нужна. При отсутствии аккума можно это реализовать как я написал выше. С акумом планшета это тоже можно реализовать- ведь ресет делается двумя зажатыми кнопками.
Я просто описал ситуацию, а нужен ли простой ресет или нет и как его реализовать это уже решает каждый сам для себя.

Az0m@
31.05.2016, 00:53
СТОП
по порядку
Отключи планшет нафиг, пока ты его не спалил
Сначала блок протестируй, мигать его заставь диодиком
Сними инфу про напряжение АКБ с ком порта. В качестве нагрузки повесь лампочки на 12 вольт (5-20 Вт)

Ты чем блок питания запитываешь?


через БП 12В 1,5А
на столе без планшета БП все норм пашед... кроме светиков.
горит POW постоянно и тускло горит TX
и их свечение не изменяется от положения АСС.
по мониторингу порта видится напряжение 12.29

после подключения планшета этот глюк через раз появляется.. провода и точки подключения все перепроверил.. все норм. провод зарядки и на датчик холла вместе проходят... наводкой же не отдают наверно друг другу?..

T_r_D
31.05.2016, 01:04
TX мигает на самом деле похоже- идёт отправка значений напряжения в порт

БП походу просидает по напруге.

oleg707
31.05.2016, 01:17
через БП 12В 1,5А
на столе без планшета БП все норм пашед... кроме светиков.
горит POW постоянно и тускло горит TX
и их свечение не изменяется от положения АСС.
по мониторингу порта видится напряжение 12.29

после подключения планшета этот глюк через раз появляется.. провода и точки подключения все перепроверил.. все норм. провод зарядки и на датчик холла вместе проходят... наводкой же не отдают наверно друг другу?..

не, блок не видит асс. Правь скетч и мониторь напругу АСС. Заставь мигать светодиод!. Загрузи из стандартных блинк для его проверки.
Проверяй БЕЗ планшета. ПРосто тыкай тестером по напряжениям.
залей с отключенным догом или вообще старую прошивку, там где светодиод(13) просто горит при наличии нормального напряжения.
//ver30.05.16.2300 ( чем больше цифра, тем новее)
// для 5й версии блока питания ( для 4й тоже подходит, только нужно поменять местами в программе A0 и A1)
//ТЕСТОВАЯ!!!
// вывод напряжения батареи по юсб ( виртуальный ком порт)
/*
_______Сделано_____________________________
вывод информации на внешний дисплей по I2C,
активный вотчдог,
программная защита its716G(statepin)-тестово,
умное мигание встроенным светодиодом,
усреднение завмеров по напряжению ACC и AKB.
____________________________________________
*/
//************************************************** ************************************************** ***********************************************
// Массив режимов работы светодиода
byte modes[] = {
0B00000000, //Светодиод выключен
0B11111111, //Горит постоянно
0B00001111, //Мигание по 0.5 сек
0B00000001, //Короткая вспышка раз в секунду
0B00000101, //Две короткие вспышки раз в секунду
0B00010101, //Три короткие вспышки раз в секунду
0B01010101 //Частые короткие вспышки (4 раза в секунду)
};

uint32_t ms, ms1 = 0;
uint8_t blink_loop = 0;
uint8_t blink_mode = 0;

//************************************************** ************************************************** ***********************************************

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//#include <avr/wdt.h> //Чтобы использовать функции Watchdog нужно подключить к проекту стандартную библиотеку ( https://geektimes.ru/post/255800/ )

LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
float UakbONorOFF = 12.01;// в 155 строке == if ((15.5 > U_acc_real >= UaccONorOFF) && flagACC == 1) {UakbONorOFF = 11.5;} else {UakbONorOFF = 11.9;}
float UaccONorOFF = 10;//11.1 // напряжение порога сработки асс

/*ноги ардуины*/
int SAMOZAPITKApin = 9; //управление самозапиткой блока питания IN4
//1 = есть самозапитка; 0 = нет самозапитки
int PlanshBATpin = 6; // включить 1 канал KIW ..... управление питания БАТАРЕИ планшета через управляющую ногу IN2-5pin
//0 = нет питания; 1 = есть питание ( БАТАРЕИ планшета)
int II_KIW_pin_POGOpin = 2; // включить 2 канал KIW управление SS2 выходом питания +5V (2 канал kiw3312s) на пого пин(или USB), чтоб планшет думал, что идет зарядка
//0 = нет 5V на POGO; 1 = есть 5V на POGO
int OTGpin = 12; //управление транзюком OTG Q1
//1 = есть масса на OTG; 0 = нет массы на OTG
int SLEEPpin = 10; //управление транзюком сна VT4 (на датчик холла))
//1 = потух экран(есть масса на пине сна); 0 = штатная работа планшета (нет массы на пине сна)
int HUBpin = 11; //управление транзюком питания хаба
// 0-есть питание, 1 - нет питания
int REMpin = 7; // выход сигнала REM (+12v) (IN3), на плате распаяно.
//0 = нет 12В на выходе REM; 1 = есть 12В на выходе REM
int REGISTRATORpin = 4; //выход 12В для работы видеорегистратора (D4 -IN1)
//пины состояния ITS
int STATEpinI = 5; //логический вход для отслеживания аварийной ситуации ITS716G(724G)(питание KIW3312s-out2 и регистратор-out1) 0 = норма
int STATEpinII = 8; //логический вход для отслеживания аварийной ситуации ITS716G(724G)(выход REM-out3 и самозапитка БП-out4 )1 = авар. сит.

/*логические переменные, используемые в коде*/
int flagACC = 0; //признак включенного зажигания
int flagAKB = 0; // признак заряженной батареи
int flagHALL = 0; //флаг отработки морга экрана при холодном старте( flagHALL = 1 экран можно включать и выключать, датчик холла на планшете инициализировался)
/*счётчики времени*/
unsigned long eventTime = 0;
unsigned long pauseTimeACC = 0;
unsigned long pauseTimeAKB = 0;
unsigned long pauseTimeHALL = 120000; // время паузы перед морганием экрана (для датчика холла)(равен времени загрузки планшета плюс секунд 10-20)= 2мин
int timeAfterACC = 5000; // время после выключения зажигания, после истечения которого вырубается экран, хаб, y-otg


void setup() //настройки
{
Serial.begin(115200);
//*************************test*************
wdt_disable(); //Отключение таймера watchdog

lcd.init(); // initialize the lcd занимает почти секунд
pinMode(STATEpinI, INPUT);
pinMode(STATEpinII, INPUT);
pinMode(PlanshBATpin, OUTPUT);
pinMode(SAMOZAPITKApin, OUTPUT);
pinMode(OTGpin, OUTPUT);
pinMode(SLEEPpin, OUTPUT);
pinMode(II_KIW_pin_POGOpin, OUTPUT);
pinMode(HUBpin, OUTPUT);
pinMode(13, OUTPUT); //светодиодик на плате ардуины
pinMode(REMpin, OUTPUT);
pinMode(REGISTRATORpin, OUTPUT);

digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
pauseTimeACC = millis(); // сброс времени для отсчета отключения самозапитки
pauseTimeAKB = millis();

//wdt_enable (WDTO_8S); // Запуск таймера watchdog: Для тестов не рекомендуется устанавливать значение менее 8 сек. Таймер будет считать ровно столько, сколько указано в константе. По истечении этого времени произойдет перезагрузка.
/* Возможные значения для константы
WDTO_15MS
WDTO_30MS
WDTO_60MS
WDTO_120MS
WDTO_250MS
WDTO_500MS
WDTO_1S
WDTO_2S
WDTO_4S
WDTO_8S
*/
}


void loop()
{



//int Uacc = analogRead (A0); //Читаем напругу с делителя ACC R4-R5
//int Uakb = analogRead (A1); //Читаем напругу с делителя R2-R3
long Uacc = 0; //Читаем напругу с делителя ACC R4-R5 и вычисляем среднее арифметическое
long Uakb = 0; ////Читаем напругу с делителя R2-R3 и вычисляем среднее арифметическое
for (int i=0; i<100; ++i) { // делаем 100 замеров
Uacc = Uacc + analogRead(A0);
Uakb = Uakb + analogRead(A1);
}
Uacc = Uacc/100;
Uakb = Uakb/100;
//Serial.println(Uacc*0.01537);






float U_acc_real = 0.0 + Uacc * 0.01537;//(5 / 1023.0 * 3.136); //Вычисляем реальное напряжение +ACC на входе делителя (A0) 3.1189=поправка делителя.(коэф деления) 0.2-падение на диоде
float U_akb_real = Uakb * 0.015330;//(5 / 1023.0 * 3.145); //Вычисляем реальное напряжение +30 на входе делителя (A1)
Serial.println(U_akb_real); // вывод напруги АКБ в ком порт для калибровки.

// кусок кода ниже нужен для того, чтобы при включении и сразу выключении ACC при полностью выключенном планшете(холодный старт) экран мог тухнуть по сигналу датчика холла.
if (millis() > pauseTimeHALL && flagHALL == 0 || millis() > 10000 && flagACC == 1) {
flagHALL = 1; //проверка отсчета при холодном старте при включении и сразу выключении ACC
}

if ((U_akb_real - U_acc_real) >4 )//проверка, выключили ли мы зажигание или просто стартуем (1 - выключили заж, 0 - стартуем)
{timeAfterACC = 500;} // 1 - выключили зажигание. ЕСЛИ +15 ПРОПАДАЕТ ВО ВРЕМЯ СТАРТА, ТО ВМЕСТО 500 НАДО 5000 или вообще убрать этот блок if-else.
else {timeAfterACC = 5000;} // 0 - заводим машину (стартуем).



// ------------========================== блок ACC ========================-----------------------------------------------------------------------------


// -----------------=========ВКЛЮЧИЛИ ЗАЖИГАНИЕ=============----------------
if (15.5 > U_acc_real && U_acc_real >= UaccONorOFF && flagACC == 0 && flagAKB == 1 ) //проверка напруги АСС и АКБ при флаге ACC = 0
{
flagACC = 1;
pauseTimeACC = millis();
pauseTimeAKB = millis();
lcd.clear(); //очистка экрана
}




if (millis() - pauseTimeACC >= 500 && flagACC == 1) // пауза 0,5c после включения ACC и потом делать следующ(пока включено ACC):
{
digitalWrite(PlanshBATpin, 1); //включаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 1); //включаем минус на Y-OTG (включается звуковая карта)
}

if (millis() - pauseTimeACC >= 800 && flagACC == 1) // пауза 0.8c после включения ACC и потом делать следующ(пока включено ACC): //через 0,8с после включения ACC включаем экран, включаем питание на видеорегистратор.
{
digitalWrite(II_KIW_pin_POGOpin, 1); //включаем +5V (POGO(USB) нужно для распознавания планшетом признака зарядки. ( можно подавать на +5В USB кабеля (для тимуровской прошивки или если не используется датчик холла)
digitalWrite(REGISTRATORpin, 1); // включаем питание на видеорегистратор
}

if (millis() - pauseTimeACC >= 2000 && flagACC == 1)//через 1с после включения ACC включаем экран (вЫключаем минус на упр SLEEP), выход REM(если больше 12в), Включаем хаб (подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб)
{
digitalWrite(SLEEPpin, 0); //включаем экран = вЫключаем минус на упр SLEEP
digitalWrite(HUBpin, 0); //Включаем хаб = подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб
if (U_akb_real >= 12 && flagACC == 1)//если напруга батареи больше 12В, то включаем еще и усилитель звука (выход REM)
{
digitalWrite(REMpin, 1); // включаем выход REM
}
}



//-----------------=========ВЫКЛЮЧИЛИ ЗАЖИГАНИЕ=============----------------

if (U_acc_real < UaccONorOFF && flagACC == 1)
{
flagACC = 0; //Выключили зажигание
digitalWrite(REMpin, 0); // выключаем выход REM
pauseTimeACC = millis();
pauseTimeAKB = millis();
lcd.clear(); //очистка экрана
}

if (millis() - pauseTimeACC >= timeAfterACC && flagACC == 0) //пауза 5c или 0.5c после вЫключения ACC и потом делать следующ://через 5с после выключения зажигания вЫключаем минус на Y-OTG, ВЫключаем хаб, вЫключаем +5V (POGO(USB)), тушим экран (если прошло 2мин со старта БП)
{
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // ВЫключаем хаб = подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб
lcd.noBacklight(); // тушим подсветку экрана
if (flagHALL == 1)
{
digitalWrite(SLEEPpin, 1); //включаем минус на SLEEP (7 pin PW1)при этом тухнет экран (если прошло 2 минуты с момента включения ардуины)
}
else
{
digitalWrite(SLEEPpin, 0);
}
}

// -------------------------========================= блок АКБ ==========================-------------------------------------------------------------------------------

if (U_acc_real >= UaccONorOFF) {UakbONorOFF = 11.5;} else {UakbONorOFF = 11.9;} //при включении зажигания напряжение самовырубания станет 11,5 вместо 11,9


if ((U_akb_real < UakbONorOFF && flagAKB == 1)||(U_akb_real >15.5))// ситуация, когда сел при работе ардуины аккумулятор, либо сел в процессе работы или простоя автомобиля, либо перезарядка > 15.5В
{
flagAKB = 0;//спустили флаг батареи
flagACC = 0;
pauseTimeACC = millis();
pauseTimeAKB = millis();
lcd.clear(); //очистка экрана
}

if ((15.5 > U_akb_real) && ((U_akb_real >= UakbONorOFF) && flagAKB == 0)) //проверка +30 на перезаряд >15.5В, и больше заданного в 155 строке, и флага акб
{
if (millis() - pauseTimeACC >= 2000 && flagAKB == 0){
digitalWrite(SAMOZAPITKApin, 1); // включаем самозапитку через 2с
flagAKB = 1;} //подняли флаг батареи
}

if (millis() - pauseTimeAKB >= 20000 && flagAKB == 0) // если севший аккумулятор //через 20с вЫключаем питание на батарею планшета и вырубаем сам БП.
{
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
delay (5000); // задержка для аппаратного выключения
}

if (flagAKB == 1 && flagACC == 0) //ситуация, когда норм акб и выключено зажигание (ACC)
{
if ((millis() - pauseTimeAKB )>= 36000000 && flagAKB == 1) // если прошло 10 часов, как выключили ACC // пауза (3600000 - 60мин) (60000 - 1 мин)(10800000=3ч) (1800000=5ч)
{
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)//(батарея планшета))
}

if ((millis() - pauseTimeAKB) >= 37000000 && flagAKB == 1) // если давно выключили ACC ) (2суток = 172800000)) //(самозапитка для регистратора)
{ digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом система ПОЛНОСТЬЮ обесточивается
delay (5000); // задержка для аппаратного выключения
}
}







//*********************************************СООБЩ ЕНИЕ НА ДИСПЛЕЙ******************************************* *****************



int H = (millis()/3600000);
int M = ((millis()-(H*3600000))/60000);
//int S = (((millis()/1000)-(H*3600))- (M*60));
if ((((millis())-(H*3600000))- (M*60000)) < 200 ){lcd.clear(); }//очистка экрана


if (flagACC == 1){lcd.backlight();}//}else {lcd.noBacklight();}
//lcd.backlight();

//вывод времени работы
lcd.setCursor(0, 0);
lcd.print((millis() )/60000);
lcd.setCursor(4, 0);
//lcd.print((U_akb_real - U_acc_real));
//lcd.print(timeAfterACC);
//lcd.setCursor(5, 0);
//lcd.print(":");
//lcd.setCursor(6, 0);
//lcd.print(S);
// вывод напряжений
//lcd.setCursor(8, 0);
//lcd.print("A");
lcd.setCursor(9, 0);
lcd.print(flagACC);
lcd.setCursor(11, 0);
lcd.print(U_acc_real);

//lcd.setCursor(5,1);
//-------------------2 строка---------------------------------
lcd.setCursor(0, 1);
unsigned long TIMER = ( pauseTimeAKB + 37000000 - millis() )/60000;
lcd.print(TIMER);
lcd.setCursor(5, 1);

// вывод напряжений
//lcd.setCursor(8, 1);
//lcd.print("B");
lcd.setCursor(9, 1);
lcd.print(flagAKB);
lcd.setCursor(11, 1);
lcd.print(U_akb_real);
//************************************************** ************************************************** *****

//*
//******************************************отслежив ания аварийной ситуации ITS716G******************************************* ************************************************** ************************************************** *********************************


//отслеживания аварийной ситуации ITS716G канал 1 (питание KIW3312s-out2 и регистратор-out1) 0 = норма 1 = авар. сит. //тогда моргаем 13 ногой код "1"
//отслеживания аварийной ситуации ITS716G канал 2 (выход REM-out3 и самозапитка БП-out4 )0 = норма 1 = авар. сит. //тогда моргаем 13 ногой код "2"
if(SAMOZAPITKApin==1 || PlanshBATpin==1 ||REMpin==1 || REGISTRATORpin ==1) // если проц включал любой канал ITS
{
if(STATEpinI == 0) { // и если пин защиты показал аварию
for (int i=0; i <= 300; i++) { //тогда моргаем 13 ногой код "1" 10 минут, если они прошли и асс ВКЛ, тогда еще раз и еще по кругу, пока неисправность не уйдёт
digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(1493);
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
//wdt_reset(); //Сброс таймера watchdog
}
} ;
if(STATEpinII == 0) { // и если пин защиты показал аварию
for (int i=0; i <= 150; i++) { //тогда моргаем 13 ногой ногой код "2" 10 минут, если они прошли и асс ВКЛ, тогда еще раз и еще по кругу, пока неисправность не уйдёт
digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(493); digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(1493);
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
// wdt_reset(); //Сброс таймера watchdog
}
} ;
}




//*/
//************************************************** ************************************************** ************************************************** ************************************************** ******************

//******************************************индикаци я светодиодом*************************************** ************************************************** ************************************************** *************************************


ms = millis();
// Событие срабатывающее каждые 125 мс
if ( ( ms - ms1 ) > 125 || ms < ms1 ) {
ms1 = ms;
// Режим светодиода ищем по битовой маске
if ( blink_mode & 1 << (blink_loop & 0x07) ) digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
blink_loop++;
}

// blink_mode = modes[3];

if (blink_mode != modes[5] || blink_mode != modes[5])
{
if (flagAKB == 0 ){blink_mode = modes[0];} // индикация напруги батареи на ардуинине.- низкое напряжение АКБ авто
if (flagAKB == 1 && flagACC == 1) {blink_mode = modes[2];} //- нормальное напряжение, включено ACC, рабочий режим.
if (flagAKB == 1 && flagACC == 0) {blink_mode = modes[6];} //- нормальное напряжение АКБ авто, ACC выключено.



}
//************************************************** ************************************************** ******
/* 0B00000000, //Светодиод выключен blink_mode = modes[0]; - низкое напряжение АКБ авто
0B11111111, //Горит постоянно blink_mode = modes[1];
0B00001111, //Мигание по 0.5 сек blink_mode = modes[2]; - нормальное напряжение, включено ACC, рабочий режим.
0B00000001, //Короткая вспышка раз в секунду
0B00000101, //Две короткие вспышки раз в секунду
0B00010101, //Три короткие вспышки раз в секунду
0B00000001 // blink_mode = modes[6]; - нормальное напряжение АКБ авто, ACC выключено.

// 0B01010101 //Частые короткие вспышки (4 раза в секунду)
*/
//************************************************** ************************************************** ******


//wdt_reset(); //Сброс таймера watchdog


} //конец цикла void loop()

//

вот включил на столе блок 4й версии с прошивкой 5го. Просто от внешнего блока питания, без нагрузки. Акб и Асс 12В. Думает 4 секунды при включении 12В Акб и Асс и моргать начинает 13 пином.

Дело в том, что порт светика для проца равнозначен порту управления пого или порту самозапитки. Проц ДОЛЖЕН работать везде одинаково и предсказуемо! И пока это не понятно, дальше смысла копать нет.

И выложи ФОТО готового блока, мож где накосячил.

Az0m@
31.05.2016, 01:35
не, блок не видит асс. Правь скетч и мониторь напругу АСС. Заставь мигать светодиод!. Загрузи из стандартных блинк для его проверки.
Проверяй БЕЗ планшета. ПРосто тыкай тестером по напряжениям.
залей с отключенным догом или вообще старую прошивку, там где светодиод(13) просто горит при наличии нормального напряжения.


вот включил на столе блок 4й версии с прошивкой 5го. Просто от внешнего блока питания, без нагрузки. Акб и Асс 12В. Думает 4 секунды при включении 12В Акб и Асс и моргать начинает 13 пином.

Дело в том, что порт светика для проца равнозначен порту управления пого или порту самозапитки. Проц ДОЛЖЕН работать везде одинаково и предсказуемо! И пока это не понятно, дальше смысла копать нет.

И выложи ФОТО готового блока, мож где накосячил.

без ватчдога такая же индикация...
блок то видит АСС.. ибо выводы питания хаба, y-otg и выход из сна исправно работают от статуса АСС.

oleg707
31.05.2016, 13:19
без ватчдога такая же индикация...
блок то видит АСС.. ибо выводы питания хаба, y-otg и выход из сна исправно работают от статуса АСС.

тогда L моргать должен. Залей ка блинк и светик проверь. Ну и мониторь состояния через ком порт.
Да, и выпаяй кондер, который мешает юсб втыкать, это защита от помех

Az0m@
31.05.2016, 22:00
тогда L моргать должен. Залей ка блинк и светик проверь. Ну и мониторь состояния через ком порт.
Да, и выпаяй кондер, который мешает юсб втыкать, это защита от помех
вопщем все отключил от БП. попробывал записать разные коды из инета которые должны активировать светик L, в том числе и блинк из примеров... но ни одном он так и не заработал. после заливки он только разок моргает и все.... эт что получается плата глючная?

oleg707
31.05.2016, 22:22
вопщем все отключил от БП. попробывал записать разные коды из инета которые должны активировать светик L, в том числе и блинк из примеров... но ни одном он так и не заработал. после заливки он только разок моргает и все.... эт что получается плата глючная?

питание проверь +5В и массу. если есть - тогда пробуй другую плату.
Тут момент такой, что по сериал оно то отсылает, значит что-то по любому живое. Может просто светодиод глючит.
Мне было бы проще процессор перекинуть, чем ардуину, но это с паяльной станцией.

Az0m@
31.05.2016, 23:01
питание проверь +5В и массу. если есть - тогда пробуй другую плату.
Тут момент такой, что по сериал оно то отсылает, значит что-то по любому живое. Может просто светодиод глючит.
Мне было бы проще процессор перекинуть, чем ардуину, но это с паяльной станцией.
вобщем походу сдохла ардурино.. как только померил ножку +5В и GND (кстати показало 5.19В) плата перестала откликаться от внешнего БП. то есть и светик POW не горит... но при подключении ЮСБ загорается... и даже скетчи загружаются...но не более того.. походу новую плату придется искать -(

T_r_D
01.06.2016, 16:43
Az0m@
Без паники :)
Если от ЮСБ работает, то мерий со стороны платы ардуино питалово.
Походу дорожка порвана.
Ещё сам косячил при пайке с недостаточным нагревом олова- олово проходило насквозь и под панелькой делало каку которая коротила с соседними ногами.
Эту каку видно естественно не было.

Az0m@
01.06.2016, 23:34
Oleg... подскажи куда еще копать....
урвал сегодня у соседа ардуринку... перепаял на плату. блинк работает. заливаю твой скетч... даю питалово на БП.. и тишина. ардурина сама не запускается, вообще никакой индикации... если подключить к ЮСБ... то при подключенной внешней питалове постоянно горит светик L, если же отключить питалово то L гаснет. а на подключение АСС никак не реагирует.

oleg707
02.06.2016, 00:08
Oleg... подскажи куда еще копать....
урвал сегодня у соседа ардуринку... перепаял на плату. блинк работает. заливаю твой скетч... даю питалово на БП.. и тишина. ардурина сама не запускается, вообще никакой индикации... если подключить к ЮСБ... то при подключенной внешней питалове постоянно горит светик L, если же отключить питалово то L гаснет. а на подключение АСС никак не реагирует.

1 - подай питание на БП. ( асс и акб)
2 - померяй питание на входе Vin ( от 8 до 13 - норма)
3 - померяй питание на +5V ардуины. оно же должно быть на кондере, который тебе мешает юсб втыкать
4 - прозвони массу.

Если эти вещи есть, блинк будет работать при питании на БП.( асс и акб). Естественно, будет гореть светик PWR.

Az0m@
02.06.2016, 01:02
1 - подай питание на БП. ( асс и акб)
2 - померяй питание на входе Vin ( от 8 до 13 - норма)
3 - померяй питание на +5V ардуины. оно же должно быть на кондере, который тебе мешает юсб втыкать
4 - прозвони массу.

Если эти вещи есть, блинк будет работать при питании на БП.( асс и акб). Естественно, будет гореть светик PWR.
Нашел почему не запускался ардурино от внешнего питалово - были пробиты все три диода на пути к Vin. Заменил и ардурино ожило.
Теперь следующий момент... светодиод L не видит отключенный АСС. Независимо от АСС он постоянно горит. Хотя при отключении АСС экран на планшете тухнет и наоборот.
Еще нюанс....если к планшету подсоединить 2пин, то на этом выводе не появляется 5в в зависимости от АСС. Если же этот пин отсоединить от планшета то там исправно появляется 5в от АСС.
При этом на входе А0 исправно в зависимости от АСС появляется 4.25В. на А1 постоянно стоит 4.24В
На выводе 5V показывает 5.42в

Az0m@
02.06.2016, 10:58
одну проблему вроде как решил, изменил код:
if (blink_mode != modes[5] || blink_mode != modes[5])
{
if (flagAKB == 0 ){blink_mode = modes[0];} // индикация напруги батареи на ардуинине.- низкое напряжение АКБ авто
if (flagAKB == 1 && flagACC == 1) {blink_mode = modes[2];} //- нормальное напряжение, включено ACC, рабочий режим.
if (flagAKB == 1 && flagACC == 0) {blink_mode = modes[6];} //- нормальное напряжение АКБ авто, ACC выключено.

на
if (blink_mode != modes[5] || blink_mode != modes[5])
{
if (flagAKB == 0 ){blink_mode = modes[0];} // индикация напруги батареи на ардуинине.- низкое напряжение АКБ авто
if (flagAKB == 1 && flagACC == 1) {blink_mode = modes[1];} //- нормальное напряжение, включено ACC, рабочий режим.
if (flagAKB == 1 && flagACC == 0) {blink_mode = modes[2];} //- нормальное напряжение АКБ авто, ACC выключено.

теперь если не подключать БП (когда арудирина при этом включен по ЮСБ), то светодиод L не горит, при подаче питания - моргает, при подаче АСС - горит постоянно.

остался вопрос момент только под 2ому пину на пого пин. почему при подключенном планшете там не появляется +5В. при чем мультиком проверил что напруга не приходит с самого KIW. причем если пробудить планшет и после этого только подключить 2ой пин к пого то зарядка работает. но стоит переподключить АСС и снова на 2ом пину нет +5В

oleg707
02.06.2016, 13:45
одну проблему вроде как решил, изменил код:
if (blink_mode != modes[5] || blink_mode != modes[5])
{
if (flagAKB == 0 ){blink_mode = modes[0];} // индикация напруги батареи на ардуинине.- низкое напряжение АКБ авто
if (flagAKB == 1 && flagACC == 1) {blink_mode = modes[2];} //- нормальное напряжение, включено ACC, рабочий режим.
if (flagAKB == 1 && flagACC == 0) {blink_mode = modes[6];} //- нормальное напряжение АКБ авто, ACC выключено.

на
if (blink_mode != modes[5] || blink_mode != modes[5])
{
if (flagAKB == 0 ){blink_mode = modes[0];} // индикация напруги батареи на ардуинине.- низкое напряжение АКБ авто
if (flagAKB == 1 && flagACC == 1) {blink_mode = modes[1];} //- нормальное напряжение, включено ACC, рабочий режим.
if (flagAKB == 1 && flagACC == 0) {blink_mode = modes[2];} //- нормальное напряжение АКБ авто, ACC выключено.

теперь если не подключать БП (когда арудирина при этом включен по ЮСБ), то светодиод L не горит, при подаче питания - моргает, при подаче АСС - горит постоянно.

остался вопрос момент только под 2ому пину на пого пин. почему при подключенном планшете там не появляется +5В. при чем мультиком проверил что напруга не приходит с самого KIW. причем если пробудить планшет и после этого только подключить 2ой пин к пого то зарядка работает. но стоит переподключить АСС и снова на 2ом пину нет +5В

во первых я предлагаю разобраться для начала с режимами индикации. Проц один и тот же, прога та же самая, а поведение РАЗНОЕ. Так не бывает.
во вторых, Планшет ВООБЩЕ никаким боком не должен влиять на поведение блока питания. Совсем!

Может тебе вибер дать или скайп, так проще и быстрее, чем тонны текста писакать.

Az0m@
02.06.2016, 14:23
во первых я предлагаю разобраться для начала с режимами индикации. Проц один и тот же, прога та же самая, а поведение РАЗНОЕ. Так не бывает.
во вторых, Планшет ВООБЩЕ никаким боком не должен влиять на поведение блока питания. Совсем!

Может тебе вибер дать или скайп, так проще и быстрее, чем тонны текста писакать.
И то и другое есть, чиркани пжлста контакты в личку

T_r_D
03.06.2016, 17:04
Вот что получилось с "антизависанием".
Делей в 10 секунд, такой большой, потому что после восстановления питания планшет почему-то просыпается на несколько секунд показывая зарядку.
Осталось организовать вочдог на 555.
Решил использовать SE555 подключённую через диод и с кондёром на питание автомобиля (у SE максимальное 18 вольт)
и дёргать ей ногу EN БП на kis3r33 который питает ардуину следящую за питанием.

unsigned long time0 = 0;
unsigned long time1 = 0;
boolean OnceLoPow = false;
boolean TabErr = true;
unsigned int accpower = 0;
int accpowercount = 0;
int accpoweravg = 1023;

void setup() {
//Arduino Pro-Micro
//21 = A3
//20 = A2
//19 = A1
//18 = A0
pinMode(18, OUTPUT); //Tablet button
pinMode(19, OUTPUT); //HUB power
pinMode(20, INPUT); //Tablet Screen action. Analog! If input >232 then screen on
pinMode(21, OUTPUT); //Tablet power
pinMode(10, OUTPUT); //Tablet power supply low if car bat level low

pinMode(A7, INPUT); //Car bat level (In bord PIN 6!!!) 541=11,91 **analogRead(A7) * (1.1 / 1023.0*20.50);
pinMode(8, INPUT); //Radio input
pinMode(9, INPUT); //ACC input

digitalWrite(21, LOW);
digitalWrite(19, LOW);
digitalWrite(18, LOW);
digitalWrite(10, LOW);
}

void loop() {
WorkLoop();
//Измеряем среднее значение напряжения автомобиля.
if ((millis() - time0) > 100){
if (accpowercount == 60){
accpoweravg = accpower / 60;
accpowercount = 0;
accpower = 0;
}
else{
accpower = accpower + analogRead(A7);
accpowercount = accpowercount + 1;
}
time0 = millis();
}

//Планшет завис, питание выключено, напряжение в норме.
if ((millis() - time1) == 5000 && analogRead(20) > 400 && !TabErr){
digitalWrite(10, HIGH);
delay(2000);
digitalWrite(10, LOW);
delay(10000);
TabErr = true;
}
}

void WorkLoop(){
//_____________________________ON___________________ ____________
if (digitalRead(8) == HIGH || digitalRead(9) == HIGH){
OnceLoPow = false;
digitalWrite(19, LOW);
digitalWrite(21, LOW);
if(analogRead(20) < 400) {
BtnClick(300);
if (analogRead(20) < 400) BtnClick(3000);
}
}
//____________________STAND-BY or LO POWER_______________________
else{
if (accpoweravg > 541){
OnceLoPow = false;
if(analogRead(20) > 400) {
BtnClick(300);
delay(4000);
if (analogRead(20) > 400 && TabErr){
time1 = millis();
TabErr = false;
}
}
digitalWrite(19, HIGH);
}
else{
if (!OnceLoPow){
digitalWrite(10, HIGH);
delay(2000);
digitalWrite(10, LOW);
OnceLoPow = true;
}
digitalWrite(19, HIGH);
digitalWrite(21, HIGH);
}
}
}

void BtnClick(int Interval) {
digitalWrite(18, HIGH);
delay(Interval);
digitalWrite(18, LOW);
delay(1000);
}

ruzzzteg
03.06.2016, 19:06
Дядьки читал читал... так и не понял...
подскажите сильно не ругаясь...
какой в итоге блок питания лучше собрать...
если можно сылкой

oleg707
04.06.2016, 01:38
Дядьки читал читал... так и не понял...
подскажите сильно не ругаясь...
какой в итоге блок питания лучше собрать...
если можно сылкой

5й, в шапке же есть

можно и 3й, но я её забросил, так что все последние плюшки в 5й
http://pccar.ru/showpost.php?p=354913&postcount=278

oleg707
04.06.2016, 01:41
Вот что получилось с "антизависанием".
Делей в 10 секунд, такой большой, потому что после восстановления питания планшет почему-то просыпается на несколько секунд показывая зарядку.
Осталось организовать вочдог на 555.
Решил использовать SE555 подключённую через диод и с кондёром на питание автомобиля (у SE максимальное 18 вольт)
и дёргать ей ногу EN БП на kis3r33 который питает ардуину следящую за питанием.

unsigned long time0 = 0;
unsigned long time1 = 0;
boolean OnceLoPow = false;
boolean TabErr = true;
unsigned int accpower = 0;
int accpowercount = 0;
int accpoweravg = 1023;

void setup() {
//Arduino Pro-Micro
//21 = A3
//20 = A2
//19 = A1
//18 = A0
pinMode(18, OUTPUT); //Tablet button
pinMode(19, OUTPUT); //HUB power
pinMode(20, INPUT); //Tablet Screen action. Analog! If input >232 then screen on
pinMode(21, OUTPUT); //Tablet power
pinMode(10, OUTPUT); //Tablet power supply low if car bat level low

pinMode(A7, INPUT); //Car bat level (In bord PIN 6!!!) 541=11,91 **analogRead(A7) * (1.1 / 1023.0*20.50);
pinMode(8, INPUT); //Radio input
pinMode(9, INPUT); //ACC input

digitalWrite(21, LOW);
digitalWrite(19, LOW);
digitalWrite(18, LOW);
digitalWrite(10, LOW);
}

void loop() {
WorkLoop();
//Измеряем среднее значение напряжения автомобиля.
if ((millis() - time0) > 100){
if (accpowercount == 60){
accpoweravg = accpower / 60;
accpowercount = 0;
accpower = 0;
}
else{
accpower = accpower + analogRead(A7);
accpowercount = accpowercount + 1;
}
time0 = millis();
}

//Планшет завис, питание выключено, напряжение в норме.
if ((millis() - time1) == 5000 && analogRead(20) > 400 && !TabErr){
digitalWrite(10, HIGH);
delay(2000);
digitalWrite(10, LOW);
delay(10000);
TabErr = true;
}
}

void WorkLoop(){
//_____________________________ON___________________ ____________
if (digitalRead(8) == HIGH || digitalRead(9) == HIGH){
OnceLoPow = false;
digitalWrite(19, LOW);
digitalWrite(21, LOW);
if(analogRead(20) < 400) {
BtnClick(300);
if (analogRead(20) < 400) BtnClick(3000);
}
}
//____________________STAND-BY or LO POWER_______________________
else{
if (accpoweravg > 541){
OnceLoPow = false;
if(analogRead(20) > 400) {
BtnClick(300);
delay(4000);
if (analogRead(20) > 400 && TabErr){
time1 = millis();
TabErr = false;
}
}
digitalWrite(19, HIGH);
}
else{
if (!OnceLoPow){
digitalWrite(10, HIGH);
delay(2000);
digitalWrite(10, LOW);
OnceLoPow = true;
}
digitalWrite(19, HIGH);
digitalWrite(21, HIGH);
}
}
}

void BtnClick(int Interval) {
digitalWrite(18, HIGH);
delay(Interval);
digitalWrite(18, LOW);
delay(1000);
}



kis3r33 слишком ЖИРНО для дежурного источника питания. Или режима ожидания у тебя нет?
Сколько потребление самого блока при выключенном зажигании и при активном состоянии (без планшета) ?

T_r_D
04.06.2016, 04:08
Пока ни чего не мерил.
Я потом схему выкину- рисовать её в лом.
Суть такая- промикра запитана от киса и управляет двумя блоками питания на LM2596.
Один БП на хаб, флешку и ардуину которая связывает CAN с планшетом.
Второй (на самом деле спараллеленые два БП с одним резистором подстройки, так как один от планшета сильно греется)на планшет выдающий 4,35 вольта и при необходимости "жёстко" вырубить планшет падающий до 2,8.

С отключённым зажиганием работают два БП на планшет и БП на кисе на ардуину. Если питание провалится ниже заданного предела, то останется работать только БП на кисе и ардуина.


Сегодня ради развлекухи решил сделать часы- на столе валяется промикра ещё одна, часы на DS3231 и напоролся на косяк. Я конечно попробую на второй промикре, но походу это у всех!
Заливаем в промикру тупой блинк
if (millis() - timer0 > 1000){
digitalWrite(19, !digitalRead(19))
timer0 = millis();
}
И получаем что первую минуту интервал выдерживается, а потом светодиод тупо горит! Нет- промикра не виснет и светодиод на самом деле мигает, но очень быстро.
Если в луп накидать кода, то станет видно это.

Заметил вообще случайно! В часах сделал палку крутящиюся которая на дисплее отображалась, так вот первую минуту она крутилась с заданной скоростью, а потом ускорялась в несколько раз. Ей не давал в сплошной засвет привратиться только код самих часов поскольку lcd.print работает долго.

У кого есть промикра- проверьте плиз.

oleg707
04.06.2016, 13:32
Пока ни чего не мерил.
Я потом схему выкину- рисовать её в лом.
Суть такая- промикра запитана от киса и управляет двумя блоками питания на LM2596.
Один БП на хаб, флешку и ардуину которая связывает CAN с планшетом.
Второй (на самом деле спараллеленые два БП с одним резистором подстройки, так как один от планшета сильно греется)на планшет выдающий 4,35 вольта и при необходимости "жёстко" вырубить планшет падающий до 2,8.

С отключённым зажиганием работают два БП на планшет и БП на кисе на ардуину. Если питание провалится ниже заданного предела, то останется работать только БП на кисе и ардуина.


Сегодня ради развлекухи решил сделать часы- на столе валяется промикра ещё одна, часы на DS3231 и напоролся на косяк. Я конечно попробую на второй промикре, но походу это у всех!
Заливаем в промикру тупой блинк
if (millis() - timer0 > 1000){
digitalWrite(19, !digitalRead(19))
timer0 = millis();
}
И получаем что первую минуту интервал выдерживается, а потом светодиод тупо горит! Нет- промикра не виснет и светодиод на самом деле мигает, но очень быстро.
Если в луп накидать кода, то станет видно это.

Заметил вообще случайно! В часах сделал палку крутящиюся которая на дисплее отображалась, так вот первую минуту она крутилась с заданной скоростью, а потом ускорялась в несколько раз. Ей не давал в сплошной засвет привратиться только код самих часов поскольку lcd.print работает долго.

У кого есть промикра- проверьте плиз.
кис много жрёт для дежурного источника. Крен5 используй.

А распиши ка подробнее, как работает эта строчка, в качестве ликбеза.digitalWrite(19, !digitalRead(19)
timer0 ансигнед лонг?
На другой ардуине такое же поведение ( на базе 328P или меги) ?

T_r_D
04.06.2016, 17:10
oleg707 про ансигнед лонг угадал! Я в ночи написал ансигнед инт случайно- отсюда и глюк.

А строчка- ну чего тут не понятного?
Задаётся состояние пина обратное его нынешнему состоянию.
Я надеюсь что все знают что типы типа булена можно в условии указывать как
boolean A = true;
if (A) {} Это условие выполнится когда A == true
if (!A) {} Это условие выполнится когда A == false

Соответственно в верхней строчке берётся просто обратное состояние от нынешнего.
Тоесть если оно HIGH, тоесть true, то получаем !HIGH (!true), тоесть false и наоборот.

а если ещё точнее, то
if (A == LOW)
A = HIGH;
else
A = LOW;
тоесть сокращённо
A != A;

Хреново я объясняю короче :)

oleg707
04.06.2016, 18:05
oleg707 про ансигнед лонг угадал! Я в ночи написал ансигнед инт случайно- отсюда и глюк.

А строчка- ну чего тут не понятного?
Задаётся состояние пина обратное его нынешнему состоянию.
Я надеюсь что все знают что типы типа булена можно в условии указывать как
boolean A = true;
if (A) {} Это условие выполнится когда A == true
if (!A) {} Это условие выполнится когда A == false

Соответственно в верхней строчке берётся просто обратное состояние от нынешнего.
Тоесть если оно HIGH, тоесть true, то получаем !HIGH (!true), тоесть false и наоборот.

а если ещё точнее, то
if (A == LOW)
A = HIGH;
else
A = LOW;
тоесть сокращённо
A != A;

Хреново я объясняю короче :)

нормально объясняешь, по крайней мере, когда я начинал знакомить ся с дуиной, кроме блинка никакой инфы не было толком, шаг вправо-шаг влево - или заумности, или блинк.
А ассемблер кончился, толком не начавшись лет 5 назад.
Так что будешь консультантом по С++

oleg707
05.06.2016, 13:05
а как задать условие НЕ РАВЕН ?
!= так?

if (blink_mode != modes[5] || blink_mode != modes[6])
если blink_mode НЕ РАВЕН modes 5 или если blink_mode НЕ РАВЕН modes 6

это правильно?

oleg707
05.06.2016, 15:44
//ver5.06.16.1436 ( чем больше цифра, тем новее)
// для 5й версии блока питания ( для 4й тоже подходит, только нужно поменять местами в программе A0 и A1)
//ТЕСТОВАЯ!!!
/*
_______Сделано____________________________________ ______________
вывод информации на внешний дисплей по I2C,
активный вотчдог,
программная защита its716G(statepin)-тестово,
умное мигание встроенным светодиодом,
усреднение завмеров по напряжению ACC и AKB.
информация на дисплее обновляется не постоянно, а каждые 350мс ( 0,35 с).
__________________________________________________ ______________
потребление блока по входу без планшета - при 10В +30 и +15 включены - 0,02 А
- при 12В +30 и +15 включены - 0,092-0,1 А
__________________________________________________ ______________

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

*/
//************************************************** ************************************************** ***********************************************
// Массив режимов работы светодиода
byte modes[] = {
0B00000000, //Светодиод выключен
0B11111111, //Горит постоянно
0B00111111, //Мигание по 0.8 сек
0B00000001, //Короткая вспышка раз в секунду
0B00000101, //Две короткие вспышки раз в секунду
0B00010101, //Три короткие вспышки раз в секунду
0B01010101 //Частые короткие вспышки (4 раза в секунду)
};

uint32_t ms, ms1 = 0;
uint8_t blink_loop = 0;
uint8_t blink_mode = 0;

//************************************************** ************************************************** ***********************************************

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <avr/wdt.h> //Чтобы использовать функции Watchdog нужно подключить к проекту стандартную библиотеку ( https://geektimes.ru/post/255800/ )

LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
float UakbONorOFF = 12.01;// в 155 строке == if ((15.5 > U_acc_real >= UaccONorOFF) && flagACC == 1) {UakbONorOFF = 11.5;} else {UakbONorOFF = 11.9;}
float UaccONorOFF = 10;//11.1 // напряжение порога сработки асс

/*ноги ардуины*/
int SAMOZAPITKApin = 9; //управление самозапиткой блока питания IN4
//1 = есть самозапитка; 0 = нет самозапитки
int PlanshBATpin = 6; // включить 1 канал KIW ..... управление питания БАТАРЕИ планшета через управляющую ногу IN2-5pin
//0 = нет питания; 1 = есть питание ( БАТАРЕИ планшета)
int II_KIW_pin_POGOpin = 2; // включить 2 канал KIW управление SS2 выходом питания +5V (2 канал kiw3312s) на пого пин(или USB), чтоб планшет думал, что идет зарядка
//0 = нет 5V на POGO; 1 = есть 5V на POGO
int OTGpin = 12; //управление транзюком OTG Q1
//1 = есть масса на OTG; 0 = нет массы на OTG
int SLEEPpin = 10; //управление транзюком сна VT4 (на датчик холла))
//1 = потух экран(есть масса на пине сна); 0 = штатная работа планшета (нет массы на пине сна)
int HUBpin = 11; //управление транзюком питания хаба
// 0-есть питание, 1 - нет питания
int REMpin = 7; // выход сигнала REM (+12v) (IN3), на плате распаяно.
//0 = нет 12В на выходе REM; 1 = есть 12В на выходе REM
int REGISTRATORpin = 4; //выход 12В для работы видеорегистратора (D4 -IN1)
//пины состояния ITS
int STATEpinI = 5; //логический вход для отслеживания аварийной ситуации ITS716G(724G)(питание KIW3312s-out2 и регистратор-out1) 0 = норма
int STATEpinII = 8; //логический вход для отслеживания аварийной ситуации ITS716G(724G)(выход REM-out3 и самозапитка БП-out4 )1 = авар. сит.

/*логические переменные, используемые в коде*/
int flagACC = 0; //признак включенного зажигания
int flagAKB = 0; // признак заряженной батареи
int flagHALL = 0; //флаг отработки морга экрана при холодном старте( flagHALL = 1 экран можно включать и выключать, датчик холла на планшете инициализировался)
/*счётчики времени*/
unsigned long eventTime = 0;
unsigned long pauseTimeACC = 0;
unsigned long pauseTimeAKB = 0;
unsigned long pauseDisplay = 0; // таймер для обновления информации на дисплее, чтобы не мерцал
unsigned long pauseTimeHALL = 120000; // время паузы перед морганием экрана (для датчика холла)(равен времени загрузки планшета плюс секунд 10-20)= 2мин
int timeAfterACC = 5000; // время после выключения зажигания, после истечения которого вырубается экран, хаб, y-otg


void setup() //настройки
{
// Serial.begin(115200);
//*************************test*************
wdt_disable(); //Отключение таймера watchdog

lcd.init(); // initialize the lcd занимает почти секунду
pinMode(STATEpinI, INPUT);
pinMode(STATEpinII, INPUT);
pinMode(PlanshBATpin, OUTPUT);
pinMode(SAMOZAPITKApin, OUTPUT);
pinMode(OTGpin, OUTPUT);
pinMode(SLEEPpin, OUTPUT);
pinMode(II_KIW_pin_POGOpin, OUTPUT);
pinMode(HUBpin, OUTPUT);
pinMode(13, OUTPUT); //светодиодик на плате ардуины
pinMode(REMpin, OUTPUT);
pinMode(REGISTRATORpin, OUTPUT);

digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
pauseTimeACC = millis(); // сброс времени для отсчета отключения самозапитки
pauseTimeAKB = millis();

wdt_enable (WDTO_8S); // Запуск таймера watchdog: Для тестов не рекомендуется устанавливать значение менее 8 сек. Таймер будет считать ровно столько, сколько указано в константе. По истечении этого времени произойдет перезагрузка.
/* Возможные значения для константы
WDTO_15MS
WDTO_30MS
WDTO_60MS
WDTO_120MS
WDTO_250MS
WDTO_500MS
WDTO_1S
WDTO_2S
WDTO_4S
WDTO_8S
*/
}


void loop()
{



//int Uacc = analogRead (A0); //Читаем напругу с делителя ACC R4-R5
//int Uakb = analogRead (A1); //Читаем напругу с делителя R2-R3
long Uacc = 0; //Читаем напругу с делителя ACC R4-R5 и вычисляем среднее арифметическое
long Uakb = 0; ////Читаем напругу с делителя R2-R3 и вычисляем среднее арифметическое
for (int i=0; i<100; ++i) { // делаем 100 замеров
Uacc = Uacc + analogRead(A0);
Uakb = Uakb + analogRead(A1);
}
Uacc = Uacc/100;
Uakb = Uakb/100;
//Serial.println(Uacc*0.01537);






float U_acc_real = 0.0 + Uacc * 0.01537;//(5 / 1023.0 * 3.136); //Вычисляем реальное напряжение +ACC на входе делителя (A0) 3.1189=поправка делителя.(коэф деления) 0.2-падение на диоде
float U_akb_real = Uakb * 0.015330;//(5 / 1023.0 * 3.145); //Вычисляем реальное напряжение +30 на входе делителя (A1)
//Serial.println(U_akb_real); // вывод напруги АКБ в ком порт для калибровки.

// кусок кода ниже нужен для того, чтобы при включении и сразу выключении ACC при полностью выключенном планшете(холодный старт) экран мог тухнуть по сигналу датчика холла.
if (millis() > pauseTimeHALL && flagHALL == 0 || millis() > 10000 && flagACC == 1) {
flagHALL = 1; //проверка отсчета при холодном старте при включении и сразу выключении ACC
}

if ((U_akb_real - U_acc_real) >4 )//проверка, выключили ли мы зажигание или просто стартуем (1 - выключили заж, 0 - стартуем)
{timeAfterACC = 500;} // 1 - выключили зажигание. ЕСЛИ +15 ПРОПАДАЕТ ВО ВРЕМЯ СТАРТА, ТО ВМЕСТО 500 НАДО 5000 или вообще убрать этот блок if-else.
else {timeAfterACC = 5000;} // 0 - заводим машину (стартуем).



// ------------========================== блок ACC ========================-----------------------------------------------------------------------------


// -----------------=========ВКЛЮЧИЛИ ЗАЖИГАНИЕ=============----------------
if (15.5 > U_acc_real && U_acc_real >= UaccONorOFF && flagACC == 0 && flagAKB == 1 ) //проверка напруги АСС и АКБ при флаге ACC = 0
{
flagACC = 1;
pauseTimeACC = millis();
pauseTimeAKB = millis();
lcd.clear(); //очистка экрана
}




if (millis() - pauseTimeACC >= 500 && flagACC == 1) // пауза 0,5c после включения ACC и потом делать следующ(пока включено ACC):
{
digitalWrite(PlanshBATpin, 1); //включаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 1); //включаем минус на Y-OTG (включается звуковая карта)
}

if (millis() - pauseTimeACC >= 800 && flagACC == 1) // пауза 0.8c после включения ACC и потом делать следующ(пока включено ACC): //через 0,8с после включения ACC включаем экран, включаем питание на видеорегистратор.
{
digitalWrite(II_KIW_pin_POGOpin, 1); //включаем +5V (POGO(USB) нужно для распознавания планшетом признака зарядки. ( можно подавать на +5В USB кабеля (для тимуровской прошивки или если не используется датчик холла)
digitalWrite(REGISTRATORpin, 1); // включаем питание на видеорегистратор
}

if (millis() - pauseTimeACC >= 2000 && flagACC == 1)//через 1с после включения ACC включаем экран (вЫключаем минус на упр SLEEP), выход REM(если больше 12в), Включаем хаб (подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб)
{
digitalWrite(SLEEPpin, 0); //включаем экран = вЫключаем минус на упр SLEEP
digitalWrite(HUBpin, 0); //Включаем хаб = подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб
if (U_akb_real >= 12 && flagACC == 1)//если напруга батареи больше 12В, то включаем еще и усилитель звука (выход REM)
{
digitalWrite(REMpin, 1); // включаем выход REM
}
}



//-----------------=========ВЫКЛЮЧИЛИ ЗАЖИГАНИЕ=============----------------

if (U_acc_real < UaccONorOFF && flagACC == 1)
{
flagACC = 0; //Выключили зажигание
digitalWrite(REMpin, 0); // выключаем выход REM
pauseTimeACC = millis();
pauseTimeAKB = millis();
lcd.clear(); //очистка экрана
}

if (millis() - pauseTimeACC >= timeAfterACC && flagACC == 0) //пауза 5c или 0.5c после вЫключения ACC и потом делать следующ://через 5с после выключения зажигания вЫключаем минус на Y-OTG, ВЫключаем хаб, вЫключаем +5V (POGO(USB)), тушим экран (если прошло 2мин со старта БП)
{
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // ВЫключаем хаб = подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб
lcd.noBacklight(); // тушим подсветку экрана
if (flagHALL == 1)
{
digitalWrite(SLEEPpin, 1); //включаем минус на SLEEP (7 pin PW1)при этом тухнет экран (если прошло 2 минуты с момента включения ардуины)
}
else
{
digitalWrite(SLEEPpin, 0);
}
}

// -------------------------========================= блок АКБ ==========================-------------------------------------------------------------------------------

if (U_acc_real >= UaccONorOFF) {UakbONorOFF = 11.5;} else {UakbONorOFF = 11.9;} //при включении зажигания напряжение самовырубания станет 11,5 вместо 11,9


if ((U_akb_real < UakbONorOFF && flagAKB == 1)||(U_akb_real >15.5))// ситуация, когда сел при работе ардуины аккумулятор, либо сел в процессе работы или простоя автомобиля, либо перезарядка > 15.5В
{
flagAKB = 0;//спустили флаг батареи
flagACC = 0;
pauseTimeACC = millis();
pauseTimeAKB = millis();
lcd.clear(); //очистка экрана
}

if ((15.5 > U_akb_real) && ((U_akb_real >= UakbONorOFF) && flagAKB == 0)) //проверка +30 на перезаряд >15.5В, и больше заданного в 155 строке, и флага акб
{
if (millis() - pauseTimeACC >= 2000 && flagAKB == 0){
digitalWrite(SAMOZAPITKApin, 1); // включаем самозапитку через 2с
flagAKB = 1;} //подняли флаг батареи
}

if (millis() - pauseTimeAKB >= 20000 && flagAKB == 0) // если севший аккумулятор //через 20с вЫключаем питание на батарею планшета и вырубаем сам БП.
{
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
delay (5000); // задержка для аппаратного выключения
}

if (flagAKB == 1 && flagACC == 0) //ситуация, когда норм акб и выключено зажигание (ACC)
{
if ((millis() - pauseTimeAKB )>= 36000000 && flagAKB == 1) // если прошло 10 часов, как выключили ACC // пауза (3600000 - 60мин) (60000 - 1 мин)(10800000=3ч) (1800000=5ч)
{
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)//(батарея планшета))
}

if ((millis() - pauseTimeAKB) >= 37000000 && flagAKB == 1) // если давно выключили ACC ) (2суток = 172800000)) //(самозапитка для регистратора)
{ digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом система ПОЛНОСТЬЮ обесточивается
delay (5000); // задержка для аппаратного выключения
}
}









//*
//******************************************отслежив ания аварийной ситуации ITS716G******************************************* ************************************************** ************************************************** *********************************


//отслеживания аварийной ситуации ITS716G канал 1 (питание KIW3312s-out2 и регистратор-out1) 0 = норма 1 = авар. сит. //тогда моргаем 13 ногой код "1"
//отслеживания аварийной ситуации ITS716G канал 2 (выход REM-out3 и самозапитка БП-out4 )0 = норма 1 = авар. сит. //тогда моргаем 13 ногой код "2"
if(SAMOZAPITKApin==1 || PlanshBATpin==1 ||REMpin==1 || REGISTRATORpin ==1) // если проц включал любой канал ITS
{
if(STATEpinI == 0) { // и если пин защиты показал аварию
for (int i=0; i <= 300; i++) { //тогда моргаем 13 ногой код "1" 10 минут, если они прошли и асс ВКЛ, тогда еще раз и еще по кругу, пока неисправность не уйдёт
digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(1493);
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
wdt_reset(); //Сброс таймера watchdog
}
} ;
if(STATEpinII == 0) { // и если пин защиты показал аварию
for (int i=0; i <= 150; i++) { //тогда моргаем 13 ногой ногой код "2" 10 минут, если они прошли и асс ВКЛ, тогда еще раз и еще по кругу, пока неисправность не уйдёт
digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(493); digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(1493);
digitalWrite(PlanshBATpin, 0); //вЫключаем питание на батарею планшета (in2)
digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
digitalWrite(REMpin, 0); // // выключаем выход REM
digitalWrite(REGISTRATORpin, 0); // выключаем питание на видеорегистратор
digitalWrite(SAMOZAPITKApin, 0); //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
wdt_reset(); //Сброс таймера watchdog
}
} ;
}




//*/
//************************************************** ************************************************** ************************************************** ************************************************** ******************


//******************************************индикаци я светодиодом и задержка вывода на дисплей******************************************* ************************************************** ************************************************** *********************************

ms = millis();
// Событие срабатывающее каждые 125 мс
if ( ( ms - ms1 ) > 125 || ms < ms1 ) {
ms1 = ms;
// Режим светодиода ищем по битовой маске
if ( blink_mode & 1 << (blink_loop & 0x07) ) digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
blink_loop++;
}




// Событие срабатывающее каждые 250 мс
if ( ( ms - pauseDisplay ) > 350 || ms < pauseDisplay )
{
pauseDisplay = ms;
//_____________________________________________СООБЩ ЕНИЕ НА ДИСПЛЕЙ___________________________________________ _________________



int H = (millis()/3600000);
int M = ((millis()-(H*3600000))/60000);
//int S = (((millis()/1000)-(H*3600))- (M*60));
if ((((millis())-(H*3600000))- (M*60000)) < 200 ){lcd.clear(); }//очистка экрана


if (flagACC == 1){lcd.backlight();}//}else {lcd.noBacklight();}
//lcd.backlight();

//вывод времени работы
lcd.setCursor(0, 0);
lcd.print((millis() )/60000); // вывод кол-ва минут работы блока ( 1 строка 1 символ)
lcd.setCursor(9, 0);
lcd.print(flagACC); // вывод флага АСС
lcd.setCursor(11, 0);
lcd.print(U_acc_real); // вывод напряжения АСС

//lcd.setCursor(5,1);
//-------------------2 строка---------------------------------
lcd.setCursor(0, 1);
unsigned long TIMER = ( pauseTimeAKB + 37000000 - millis() )/60000; // вывод кол-ва минут, оставшиеся до выключения блока (когда выключено АСС)
lcd.print(TIMER);
lcd.setCursor(9, 1);
lcd.print(flagAKB); // вывод флага АКБ
lcd.setCursor(11, 1);
lcd.print(U_akb_real); // вывод напряжения АКБ

/* так выглядит индикация на дисплее

================
|1 0 0.00 | 1 строка * вывод кол-ва минут работы блока * флаг АСС * вывод напряжения АСС
|616 1 14.50|
================ 2 строка * кол-во минут, оставшиеся до выключения блока * флаг АКБ * вывод напряжения АКБ

*///__________________________________________________ __________________________________________________ ______________________
}





// blink_mode = modes[3];

if (blink_mode != modes[5] || blink_mode != modes[5])
{
if (flagAKB == 0 ){blink_mode = modes[3];} // индикация напруги батареи на ардуинине.- низкое напряжение АКБ авто - коротко моргает
if (flagAKB == 1 && flagACC == 0) {blink_mode = modes[6];} //- нормальное напряжение АКБ авто, ACC выключено. - быстро моргает
if (flagAKB == 1 && flagACC == 1) {blink_mode = modes[2];} //- нормальное напряжение, включено ACC, рабочий режим. - медленно моргает

}
/* ************************************************** ************************************************** ******
0B00000000, //Светодиод выключен blink_mode = modes[0];
0B11111111, //Горит постоянно blink_mode = modes[1];
0B00111111, //Мигание по 0.8 сек blink_mode = modes[2]; - нормальное напряжение, включено ACC, рабочий режим.
0B00000001, //Короткая вспышка раз в секунду = modes[3]; - низкое напряжение АКБ авто
0B00000101, //Две короткие вспышки раз в секунду
0B00010101, //Три короткие вспышки раз в секунду
0B01010101 //Частые короткие вспышки (4 раза в секунду)= blink_mode = modes[6]; - нормальное напряжение АКБ авто, ACC выключено.
*/
//************************************************** ************************************************** ******


wdt_reset(); //Сброс таймера watchdog


} //конец цикла void loop()

//


PS
могу отсутствовать на форуме около месяца.

T_r_D
08.06.2016, 14:44
oleg707
Ну да- неравенства != в сях.

Вот схема моя как и обещал. В заумных редакторах не рисую к сожалению.

Вторая LM2596 это две спаренных платы.
Из одной выпаян резистор подстройки, а пустые хвосты припаяны к резистору второй платы.
Короче сделано бутербродом.
Вывод ADJ взят от среднего конца подстроечника.

Закупился SE555, так что буду злую псину изобретать :)
У SE по сравнению с NE приделы питания побольше (SE 18В потолок), но пару диодиков поставить надо всё равно.

PS. Сам отсутствую по неделе :)

T_r_D
08.06.2016, 18:05
перерыл пол инета и не могу найти схему включения 555 в режиме перезапускаемого одновибратора! Помню что давно делал, но не помню как!

PS Отменяется- порылся в записях и нашёл как это сделать.

Ан нет! Всё красиво, но по схеме которая у меня была надо формировать импульс входной.
Тоесть нельзя подать минус и ждать что одновибратор сработает. Он естественно даже не чихнёт.
Тоже самое касается тупого ввода конденсатора на вход. И даже конденсатора с диодом.
Короче надо ещё попробовать транзистор по входу поставить чтоб им формировать импульс.

Схема прицеплена из неё будет понятнее почему нельзя просто прицепить последовательно входу конденсатор или диод+конденсатор.

Ещё идеи у кого есть по поводу вачдога?

У меня в голову пришла только идея из двух 555.
Первая работает в режиме одновибратора выдавая на выход импульсы заданной длинны, а вторая та что тут на схеме.
Тоесть импульс на вход первой пришёл, через некоторое время сформировался импульс на выходе который сбросил второй таймер на 555.
Но это писец как убого и громоздко!
Второй вариант смешной и из области абсурда :)
Взять какой нить восьминогий микроконтроллер типо атини и залить туда прогу сброса.
И сделать чтоб основной микроконтроллер давал импульсы сброса на тиньку, а тинька на основной.
Ну чтоб следили друг за другом и если что, то ресетили.
Повесить на неё антизвонных кондёров и отправить это в плаванье :)
Причём чтоб при ресете она тоже ресетилась по питанию.
Но это как-то смешно. Микроконтроллер следит за зависанием микроконтроллера.

А вообще есть предположение что виснет или из за помех или из за таймера!
А точнее то, как переменным присваивается значение таймера.
Или то, на что не расчитываешь- ну типо переменной было присвоено значение таймера 4294967295, но следующее значение у таймера не 4294967296, а 0 и из за этого происходит глюк.

Короче, я свою версию БП потестирую, у меня там функций мало, так что код вряд ли глючить будет и посмотрим.
На всякий случай выведу кнопку хард ресета (тоесть обесточивания контроллера).

Вячеслав23
18.06.2016, 13:14
Как можно сделать задержку включения самым бюджетным способом, просто 1 кис который питает хаб и перефирию включается от АСС, и сейчас одновременно 2 кис включается с АСС для планшета!

yuriy m
18.06.2016, 13:24
Как можно сделать задержку включения самым бюджетным способом, просто 1 кис который питает хаб и перефирию включается от АСС, и сейчас одновременно 2 кис включается с АСС для планшета!
резистор + конденсатор на вывод ON/OFF киса ..:bye:

Вячеслав23
18.06.2016, 13:51
Просто получается Планшет не успевает определить хаб и устройства в нем, есть пару реле и кондеры разные! Не пойму как это реализовать!

T_r_D
18.06.2016, 23:26
Народ, для начала спрошу продолжать ли мне отписывать свои наработки для своего БП тут или создать отдельную тему? Может вы не хотите тут лишнего флуда видеть.
Ну а про свои наработки- подумал я и переписал код "чутка". Короче захотел убрать делеи и сделать более правильный алгоритм работы.
Вот код как ща есть- без перерывов цикла сделана только функция включения. Остальное потом допишу, а это для сравнения сколько нужно строк чтоб заменить 4 строки с делеем, но тем не менее так правильнее.

unsigned long time0 = 0;
unsigned long stage_timer = 0;
int in_progress = 0;
int stage = 0;
unsigned int accpower = 0;
int accpowercount = 0;
int accpoweravg = 1023;

void setup() {
//Arduino Pro-Micro
//21 = A3
//20 = A2
//19 = A1
//18 = A0
pinMode(18, OUTPUT); //Tablet button
pinMode(19, OUTPUT); //HUB power
pinMode(20, INPUT); //Tablet Screen action. Analog! If input >232 then screen on
pinMode(21, OUTPUT); //Tablet power
pinMode(10, OUTPUT); //Tablet power supply low if car bat level low

pinMode(A7, INPUT); //Car bat level (In bord PIN 6!!!) 541=11,91 **analogRead(A7) * (1.1 / 1023.0*20.50);
pinMode(8, INPUT); //Radio input
pinMode(9, INPUT); //ACC input

digitalWrite(21, LOW);
digitalWrite(19, LOW);
digitalWrite(18, LOW);
digitalWrite(10, LOW);
}

void loop() {
//Измеряем среднее значение напряжения автомобиля.
if ((millis() - time0) > 1000){
if (accpowercount == 60){
accpoweravg = accpower / 60;
accpowercount = 0;
accpower = 0;
}
else{
accpower = accpower + analogRead(A7);
accpowercount = accpowercount + 1;
}
time0 = millis();
}

if (in_progress == 0){
if ((digitalRead(8) == HIGH || digitalRead(9) == HIGH) && analogRead(20) < 400) mag_car_on(); //Если магнитола или зажигание включено, а питания на подсветке нету.
if (digitalRead(8) == LOW && digitalRead(9) == LOW && analogRead(20) > 400) power_off(); //Если магнитола выключена и зажигание выключено, но подсветка работает.
if (digitalRead(8) == LOW && digitalRead(9) == LOW && accpoweravg < 541) halt(); //Если магнитола и зажигание выключены и сел акумулятор, а отключение не выполнялось.
}
else {
if (in_progress == 1) mag_car_on();
if (in_progress == 2) power_off();
if (in_progress == 3) halt();
}

}

void mag_car_on(){
in_progress = 1;
digitalWrite(19, LOW);
digitalWrite(21, LOW);
//Клик кнопкой 300мс, после этого ждём 2с на стадии 3 проверяем включился ли планшет
//и если нет, то зажимаем кнопку на 3с, потом ждём 2с.
if (stage == 0) {
digitalWrite(18, HIGH);
stage = 1;
stage_timer = millis();
}
if (stage == 1 && (millis() - stage_timer) > 300) {
digitalWrite(18, LOW);
stage = 2;
stage_timer = millis();
}
if (stage == 2 && (millis() - stage_timer) > 2000) {
stage = 3;
}
if (stage == 3){
if (analogRead(20) > 400) {
stage = 0;
in_progress = 0;
}
else {
digitalWrite(18, HIGH);
stage = 4;
stage_timer = millis();
}
}
if (stage == 4 && (millis() - stage_timer) > 3000) {
digitalWrite(18, LOW);
stage = 5;
stage_timer = millis();
}
if (stage == 5 && (millis() - stage_timer) > 2000) {
stage = 0;
in_progress = 0;
}
}

void power_off(){
in_progress = 2;
BtnClick(300);
delay(4000);
digitalWrite(19, HIGH);
//проверить выключился или нет и если нет, то сбросить.
if (analogRead(20) > 400){
digitalWrite(10, HIGH);
delay(2000);
digitalWrite(10, LOW);
delay(10000);
}
in_progress = 0;
}

void halt(){
in_progress = 3;
digitalWrite(19, HIGH);
digitalWrite(21, HIGH);
in_progress = 0;
}

void BtnClick(int Interval) {
digitalWrite(18, HIGH);
delay(Interval);
digitalWrite(18, LOW);
delay(1000);
}


PS Нашёл неприятность, не знаю как в нексусе, а у леновы это есть.
Суть в том, что после "жёсткой" перезагрузки питанием через примерно 10 секунд экран планшета включается и показывает текущий заряд батареи!
И это держится ещё примерно 10 секунд.
Тоесть из за этого код выключения отработал и тут на тебе- экран загарелся и естественно код начал отрабатываться ещё раз с тем же "жёстким" ресетом.
Ну короче дальше всё по кругу! Вовремя нашёл это, а то в машине было бы весело после первого же зависания.
Поправил в своём коде на 30с, а в котором тут не правил.
В общем-то я код оттестировал и если интерестно, то могу окончательный вариант запостить.

PPS Не в тему, но может кто знает. Lenovo tab2 A7 при подключении флехи выдаёт сообщение
"OTG-диск готов к использованию
Изменить настройки памяти по умолчанию?"
Ну и отмена и ок. Как убрать эту табличку нафиг? А то в машине при подключении флехи/выхода из слипа/загрузки она вылетать будет! Задолбает же в ноль!

plus88
20.06.2016, 15:57
Конечно интересно кидай!

T_r_D
20.06.2016, 22:49
Ну в общем-то вот окончательный вариант:

unsigned long time0 = 0;
unsigned long stage_timer = 0;
int in_progress = 0;
int stage = 0;
unsigned int accpower = 0;
int accpowercount = 0;
int accpoweravg = 1023;

void setup() {
//Arduino Pro-Micro
//21 = A3
//20 = A2
//19 = A1
//18 = A0
pinMode(18, OUTPUT); //Tablet button
pinMode(19, OUTPUT); //HUB power
pinMode(20, INPUT); //Tablet Screen action. Analog! If input >232 then screen on
pinMode(21, OUTPUT); //Tablet power
pinMode(10, OUTPUT); //Tablet power supply low if car bat level low

pinMode(A7, INPUT); //Car bat level (In bord PIN 6!!!) 541=11,91 **analogRead(A7) * (1.1 / 1023.0*20.50);
pinMode(8, INPUT); //Radio input
pinMode(9, INPUT); //ACC input

digitalWrite(21, LOW);
digitalWrite(19, LOW);
digitalWrite(18, LOW);
digitalWrite(10, LOW);
}

void loop() {
//Измеряем среднее значение напряжения автомобиля.
if ((millis() - time0) > 1000){
if (accpowercount == 60){
accpoweravg = accpower / 60;
accpowercount = 0;
accpower = 0;
}
else{
accpower = accpower + analogRead(A7);
accpowercount = accpowercount + 1;
}
time0 = millis();
}

if (in_progress == 0){
if ((digitalRead(8) == HIGH || digitalRead(9) == HIGH) && analogRead(20) < 400) mag_car_on(); //Если магнитола или зажигание включено, а питания на подсветке нету.
if (digitalRead(8) == LOW && digitalRead(9) == LOW && analogRead(20) > 400) power_off(); //Если магнитола выключена и зажигание выключено, но подсветка работает.
if (digitalRead(8) == LOW && digitalRead(9) == LOW && accpoweravg < 541) halt(); //Если магнитола и зажигание выключены и сел акумулятор, а отключение не выполнялось.
}
else {
if (in_progress == 1) mag_car_on();
if (in_progress == 2) power_off();
if (in_progress == 3) halt();
}

}

void mag_car_on(){
in_progress = 1;
digitalWrite(19, LOW);
digitalWrite(21, LOW);
//Клик кнопкой 300мс, после этого ждём 2с и на стадии 2 проверяем включился ли планшет,
//и если нет, то зажимаем кнопку на 3с, потом ждём 2с.
if (stage == 0) {
digitalWrite(18, HIGH);
stage = 1;
stage_timer = millis();
}
if (stage == 1 && (millis() - stage_timer) > 300) {
digitalWrite(18, LOW);
stage = 2;
stage_timer = millis();
}
if (stage == 2 && (millis() - stage_timer) > 2000) {
if (analogRead(20) > 400) {
stage = 0;
in_progress = 0;
}
else {
digitalWrite(18, HIGH);
stage = 3;
stage_timer = millis();
}
}
if (stage == 3 && (millis() - stage_timer) > 3000) {
digitalWrite(18, LOW);
stage = 4;
stage_timer = millis();
}
if (stage == 4 && (millis() - stage_timer) > 2000) {
stage = 0;
in_progress = 0;
}
}

void power_off(){
in_progress = 2;
if (stage == 0) {
digitalWrite(18, HIGH);
stage = 1;
stage_timer = millis();
}
if (stage == 1 && (millis() - stage_timer) > 300) {
digitalWrite(18, LOW);
stage = 2;
stage_timer = millis();
}
if (stage == 2 && (millis() - stage_timer) > 5000) {
digitalWrite(19, HIGH);
if (analogRead(20) < 400){
stage = 0;
in_progress = 0;
}
else {
digitalWrite(10, HIGH);
stage = 3;
stage_timer = millis();
}
}
if (stage == 3 && (millis() - stage_timer) > 2000) {
digitalWrite(10, LOW);
stage = 4;
stage_timer = millis();
}
if (stage == 4 && (millis() - stage_timer) > 30000) {
stage = 0;
in_progress = 0;
}
}

void halt(){
in_progress = 3;
digitalWrite(19, HIGH);
digitalWrite(21, HIGH);
in_progress = 0;
}

plus88
21.06.2016, 08:52
А схему последнюю можешь представить :) тоже надо собирать блок питания )

T_r_D
21.06.2016, 16:55
А схема не менялась.
Резисторы- входной делитель 20к и 10к на землю, после диода 100к на землю.
Конденсаторы- на подсветку 0,22uF, а остальные по 100uF.
Диоды любые.
Резистор подстройки напряжения на БП для планшета это выпаянный резистор со второй платы БП.

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

SPI и I2C хвосты свободны, так что можете подключать хоть индикаторы, хоть датчики какие либо ещё.
Мне просто всё это украшательство вообще не нужно- всё это будет за планшетом в панеле и видно этого не будет, только лишнюю напругу жрать будет.

А как идея- подключить датчик температуры, какой нить DHT11 скажем, и при превышениях температуры врубать вентилятор охлаждения планшета...
Я свой ещё в боевых условиях не тестил, так что не знаю будет что с ним не так или нет.

jonikus81
22.06.2016, 16:33
Вопрос, сколько кушает ITS716G? я так понимаю он всегда включен? хотелось бы спрыгнуть с реле и перейти на малютку ITS716G.

Az0m@
22.06.2016, 23:31
народ, кто подолгу уже юзает планшет в машине... используете с задней крышкой или без неё? это к слову о перегреве

Алексей L&M
23.06.2016, 04:29
Без крышки он пылью забъётся.

jonikus81
23.06.2016, 09:06
да и в крышках обычно стоят антены на сколько я помню

T_r_D
24.06.2016, 11:03
Вот полная схема под скетч мой, а то на предидущей половину не нарисовал и выход один перепутал.
Ещё после всех тестов на промикре был отпаян светодиод индицирующий питание за ненадобностью.
На схеме Stereo это выход магнитолы Remote.

PS. В машине два раза подряд сгорел KIS.
Поменял на LM7805 и всё работает!
Странно как-то даже!

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

Есть пару косяков, но они уже чисто программные. Почему-то не работают кнопки на магнитоле в режиме аукса, точнее работают, но только почему-то только ОК который заменён play\pause.
Тоесть с магнитолы плеером планшета не рулится.
И нужно сделать так, чтоб при уходе в слип плеер останавливал воспроизведение.
Это пока на первое время. Потом в свою софтину для дройда допишу плеер.

oleg707
28.06.2016, 12:35
Вот полная схема под скетч мой, а то на предидущей половину не нарисовал и выход один перепутал.
Ещё после всех тестов на промикре был отпаян светодиод индицирующий питание за ненадобностью.
На схеме Stereo это выход магнитолы Remote.

PS. В машине два раза подряд сгорел KIS.
Поменял на LM7805 и всё работает!
Странно как-то даже!

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

Есть пару косяков, но они уже чисто программные. Почему-то не работают кнопки на магнитоле в режиме аукса, точнее работают, но только почему-то только ОК который заменён play\pause.
Тоесть с магнитолы плеером планшета не рулится.
И нужно сделать так, чтоб при уходе в слип плеер останавливал воспроизведение.
Это пока на первое время. Потом в свою софтину для дройда допишу плеер.
Пиши подробный проект, интересно почитать

T_r_D
28.06.2016, 13:15
Да я даже не знаю что там и писать.
Попробую конечно, но попозже.
Вот видео на мою мыльницу.
https://www.dropbox.com/s/kblf9ba908w0xon/VID_20160628_093347.3gp?dl=0

PS. Сегодня очень жарко, а терморезистор с платы аккумулятора планшета я не заменил на 10Ком постоянных.
Окно с предложением вынуть перегревшеюся батарею меня сначала радовало, а потом запарило.
Так что при удалении аккума перепаивайте и резистор на постоянный.

Artemix
01.07.2016, 22:16
вопрос по KIW3312 он мне выдает на акум 3.7 , но иногда запускаю планшет а он мне батарея разряжена фиг тебе, покатаюсь немного и он запуститься, потом отрубиться типа села батарея , как можно избежать данный нюанс, надо ли повышать напряжение и до скольки?

Az0m@
01.07.2016, 23:31
Я наконецто осилил свою плату... долго же я Олега замучал -)))
Из своего уже опыта выскажу следующие моменты:
1. для теста на столе обязательно нужен качественный источник питания
2. на выходе на обоих каналах надо ставить кондеры по 2200мкФ...
3. если прикрутите I2C дисплей то сэкономите кучу времени...
4. иметь большое терпение....

сегодня почти целый день катался с платой...и вроде все как надо работает.

Теперь осталось прикрутит кнопки на руле и настроить программную составляющую... если не трудно ткните на соответствующие темы с описанием...

Алексей L&M
02.07.2016, 08:15
вопрос по KIW3312 он мне выдает на акум 3.7 , но иногда запускаю планшет а он мне батарея разряжена фиг тебе, покатаюсь немного и он запуститься, потом отрубиться типа села батарея , как можно избежать данный нюанс, надо ли повышать напряжение и до скольки?Подними напряжение до 4,3-4,7в

Я наконецто осилил свою плату... долго же я Олега замучал -)))А что было то?

T_r_D
02.07.2016, 11:48
Вообще для подобных БП всегда желателен нормальный регулируемый по напряжению настольный блок питания.
В любом случае программно подстраивать какие либо значения всё равно придётся.
Хотя можно просто резистор подстроечный и мультиметр использовать, но только не на готовой плате, а на макетке.
Дисплей на I2C нафиг не нужен, можно настроить через обычное USB подключение на столе выдавая в сериал данные, а потом уже нести в машину.
Он нужен только для того чтоб самому на него смотреть и переться от гордости за себя :)
Ну и хвастатся перед окружающими какую ты сделал мега штуку.
Хочется крутости- выведи все эти данные на планшет.

Az0m@
На выходы импульсных БП нет смысла ставить большие конденсаторы- только разве для своего успокоения.
Объясню почему:
Частота колебаний стандартных импульсных БП равна нескольким десяткам, а иногда и сотням килогерц. Соответственно не имеет смысл ставить большой конденсатор чтоб сглаживать отсутствие напряжения между импульсами.
У импульсного БП падения напряжения на выходе может быть в пределах нескольких десятых вольта, а дальше происходит фактически срыв генерации и соответственно отсутствие вообще какого либо напряжения.
И вот если такое произошло или происходит, то это означает что мощности БП не хватает. ТОесть есть какие-то импульсные нагрузки превышающие максмальный ток БП. И соответственно надо увеличивать мощность БП.

На входе БП есть смысл поставить банку на 10000uf через диод чтоб в сеть авто не разряжалась.
При максимальной нагрузке это даст запас до обесточивания выходов БП примерно в 1-2 десятые секунды (тоесть напряжение на входе БП упадёт до приблизительно 6,3 вольт при выходном 5).
Спасёт короче от кратковременных пропаданий напряжения. Ну скажем в момент запуска двигателя стартера.

T_r_D
02.07.2016, 13:46
По моей теме- упростим чуть схему поскольку следить раздельно за тем подано ли питание при повороте ключа или при включении магнитолы нет смысла, то выкинем один из входов контроллера.
Это чуть сократит и код и потребление потому что не надо ногу дополнительную опрашивать.
Соответственно кусок кода упростится


if (in_progress == 0){
if (digitalRead(9) == HIGH && analogRead(20) < 400) mag_car_on(); //Если магнитола или зажигание включено, а питания на подсветке нету.
if (digitalRead(9) == LOW && analogRead(20) > 400) power_off(); //Если магнитола выключена и зажигание выключено, но подсветка работает.
if (digitalRead(9) == LOW && accpoweravg < 541) halt(); //Если магнитола и зажигание выключены и сел акумулятор, а отключение не выполнялось.
}

И из скетча надо убрать строку
pinMode(8, INPUT); //Radio input

НО- 7 ног задействовано- это много! Ещё одну надо убрать и можно свести плату до контроллера на attiny13. Вот тогда потребление ещё упадёт и размер уменьшится.

PS Чуть не забыл!
Кому нужна задержка включения хаба
в функции void mag_car_on()
нужно перенести строку
digitalWrite(19, LOW);
вот сюда:
if (stage == 2 && (millis() - stage_timer) > 2000) {
if (analogRead(20) > 400) {
digitalWrite(19, LOW);
stage = 0;
in_progress = 0;
и сюда
if (stage == 4 && (millis() - stage_timer) > 2000) {
digitalWrite(19, LOW);
stage = 0;
in_progress = 0;
}

PPS. Пришла идея! Можно ещё одну ногу убрать!
У нас фактически D10 и A0 одновременно не используются и требуют разной полярности!
Тоесть если нужно нажать кнопку планшета- подаём минус:
pinMode(A0, OUTPUT);
digitalWrite(A0, LOW);
если нужно сделать ресет планшета уменьшив питание подаём плюс:
pinMode(A0, OUTPUT);
digitalWrite(A0, HIGH);
А вот если ничего, то переведём ногу в третье состояние Z. Это когда на ней ни чего нету:
pinMode(A0, INPUT);

Сам тестить не буду поскольку всё спаял и всё работает, а тем кто хочет повторить стоит задуматься. Скетч поменяется совсем мало от этого.
А вот ссылка ни ибей и плату http://www.ebay.com/itm/272096684238?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
И на настройки Arduino IDE http://digistump.com/wiki/digispark/tutorials/connecting

Az0m@
02.07.2016, 23:51
Подними напряжение до 4,3-4,7в

А что было то?

ну вот как и описал выше установкой кондера на 2200мкФ на тот канал, который шел на погопин
В
Az0m@
На выходы импульсных БП нет смысла ставить большие конденсаторы- только разве для своего успокоения.

возможно... я не силен в электронике... но после этих манипуляций у меня плата заработала как надо

А вот ссылка ни ибей и плату http://www.ebay.com/itm/272096684238?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

тогда сразу такую брать:
http://www.ebay.com/itm/Digispark-Kickstarter-ATTINY85-Arduino-General-Micro-USB-Development-Board/221889695650?_trksid=p2047675.c100009.m1982&_trkparms=aid%3D777000%26algo%3DABA.MBE%26ao%3D1%2 6asc%3D20131227121020%26meid%3D36cc8b41da9e479d97a 0f1e69402f1fe%26pid%3D100009%26rk%3D1%26rkt%3D1%26 sd%3D272096684238

T_r_D
03.07.2016, 02:35
тогда сразу такую брать:
http://www.ebay.com/itm/Digispark-Ki...3D272096684238
Такую не удобно. Когда её на плату запаяешь в юсб не воткнёшь
На ту что я дал ссылку это тоже самое, но с микро юсб на плате

Az0m@
03.07.2016, 11:55
Такую не удобно. Когда её на плату запаяешь в юсб не воткнёшь
На ту что я дал ссылку это тоже самое, но с микро юсб на плате
так можно на плате его сместить на один край... и можно всю плату как брелок воткнуть в усб... но это уже так... мелочи.

ребят... мне надо уже на следующий этап переходить...как автостоп и автовоспроизведение организовать?

T_r_D
04.07.2016, 06:48
так можно на плате его сместить на один край... и можно всю плату как брелок воткнуть в усб... но это уже так... мелочи.

ребят... мне надо уже на следующий этап переходить...как автостоп и автовоспроизведение организовать?

Это уже не в этой теме наверное.
Не знаю какую ардуины вы использовали, но если про микро, то она умеет прикидываться клавиатурой. На этом форуме это есть.

oleg707
04.07.2016, 14:07
вопрос по KIW3312 он мне выдает на акум 3.7 , но иногда запускаю планшет а он мне батарея разряжена фиг тебе, покатаюсь немного и он запуститься, потом отрубиться типа села батарея , как можно избежать данный нюанс, надо ли повышать напряжение и до скольки?

Если контроллер батареи не отключён, он и дурит. При наличии стабильных 3,7.