PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Питание (http://pccar.ru/forumdisplay.php?f=173)
-   -   Блок питания NEXUS7-2012,2013 (или любого другого планшета) (http://pccar.ru/showthread.php?t=23236)

skanch 14.12.2016 00:01

Вложений: 1
Цитата:

Сообщение от vtyns (Сообщение 377369)
просадка при старте бывает и до 6 вольт. потери на диоде 0.3 вольт. мне необходимо знать что в моей схеме нужно доработать чтоб компенсировать просадку. скока кондеров поставить или еще что нибудь. РАСПИШИТЕ ПОЖАЛУЙСТА ПО ПУНКТАМ КАКИЕ МЕНЯ ИНТЕРЕСУЮТ.

Запитать NSD через стабилизатор напряжения или через повышающий DC-DC преобразователь (как вариант на XL6009 или MT3608).

Az0m@ 14.12.2016 00:07

я оставлю это тут на всякий
http://i11.pixs.ru/thumbs/5/0/5/Doku...4_24410505.jpg

papant 14.12.2016 00:16

щас херню спрошу, прошу прощения )
а зачем собственно надо резать плюс между планшетом и хабом? ведь в если режим ОТГ не включен, то планшет не питает никаких устройств, а хаб тоже обесточен... вроде как лишнее это ). было бы актуально, если б 4 пин отвечающий за ОТГ был намертво прикручен к массе, тогда да, планшет будет отдавать 5В в перефирию, нет?

oleg707 14.12.2016 02:07

Цитата:

Сообщение от Az0m@ (Сообщение 377374)
я оставлю это тут на всякий
http://i11.pixs.ru/thumbs/5/0/5/Doku...4_24410505.jpg

красава.
только допиши, если сдувать ДХ, то надо резистор подтяжки от сигнальной ноги к питанию датчика (3,3В) припаять.

oleg707 14.12.2016 02:10

Цитата:

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

уже 100 раз обсасывалось про 4. лень печатать. так НАДО.
И еще если не убирать 4 пин, то планшет будет думать, что он на зарядке, даже если убрать зарядку!

papant 14.12.2016 07:11

Цитата:

Сообщение от oleg707 (Сообщение 377383)
уже 100 раз обсасывалось про 4. лень печатать. так НАДО.

Про 4 пин то понятно, вопрос был про зачем резать +5 при условии размыкания 4 пина и обесточивании хаба

jonikus81 14.12.2016 07:53

Цитата:

Сообщение от oleg707 (Сообщение 377364)
у нсд минимальный порог работы - 9В. На старте в машине просадка идёт до 10-9В.
Минус 1В падение на диоде.
итого имеем 9-8 В на нсд. Работать даже в теории не должно.

Все верно. Выход только в огромном количестве микрофарадов и мощном диоде. Мой самый первый БП был на как раз на на НСДшке, правда 5 амперной. На фото маленький кондер, после испытаний пришлось ставить еще больше, но оно заработало, у меня дизель и там стартер дает просадки ниже 9 вольт. + я так и не победил стабильных 4,8 вольта, вроде бы 5 Ампер(неплохой запас), а при нагрузке напруга падает до 4.4 вольта (на фото видно) Провода вел толстые сабвуферные напрямую с акумулятора через предохранитель. Уж слишком геморойные НСДшки, а про цену вообще молчу(маты, только маты), поэтому перешел на КИВы - ляпота! http://s017.radikal.ru/i424/1612/5e/cff6011d61b6t.jpg

jonikus81 14.12.2016 08:19

Цитата:

Сообщение от papant (Сообщение 377388)
Про 4 пин то понятно, вопрос был про зачем резать +5 при условии размыкания 4 пина и обесточивании хаба

Давай подумаем теоретически на пальцах. Что такое +5 на юсб порту. Это как пин зарядки самого планшета так и пин питания всей периферии подключенной к юсб порту. Если мы сняли батарею, что нам заряжать(батарея ведь отсутствует )? Если мы подключаем хаб и нагружаем его девайсами, то он начнет "сосать" ток как раз по этому +5 пину, а на плате у нексуса дорожка с волосок, да и не уверен, что там чип может выдать больше 500мА. (к слову только один жесткий диск ест больше 500мА). По этому рвут этот контакт и питают хаб ОТДЕЛЬНО, а некоторые даже управляют этим самым питанием, да бы при уходе в сон, избежать лишних потреблений тока, а это ведет к хорошей экономии тока, что для акумы и нас очень гуд.
ПС. это как я (чайник) понимаю зачем рвут +5вольт между хабом и планшетом.
ППС. написал это так как всем лень

Az0m@ 14.12.2016 11:24

Цитата:

Сообщение от oleg707 (Сообщение 377382)
красава.
только допиши, если сдувать ДХ, то надо резистор подтяжки от сигнальной ноги к питанию датчика (3,3В) припаять.

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

oleg707 14.12.2016 14:04

Цитата:

Сообщение от Az0m@ (Сообщение 377402)
оо... я про это тока сейчас слышу... каким номиналом резистор желательно и получается его между верхней и нижней контактами припаять?

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

oleg707 14.12.2016 14:11

Цитата:

Сообщение от papant (Сообщение 377388)
Про 4 пин то понятно, вопрос был про зачем резать +5 при условии размыкания 4 пина и обесточивании хаба

чтоб хаб и планшет развязать

vtyns 14.12.2016 15:02

Цитата:

Сообщение от vtyns (Сообщение 377290)
ребят вот схема, посоветуйте
1/ до скольки понижать напряжение для планшета и чем. (при 4.5 иногда вырубается бывает и без нагрузки)
2/ какие ставить конденсаторы и где. (па прошлом блоке стоял перед nsd на 10000 25вольт после диода. не держит и секунды без питания.) хотелось бы чтоб держало секунды две
3/ чем сделать задержку при включении отг? (чем менее габаритным можно заменить реле типа NE555 с алиэкспресса)я так понимаю отг должно включаться самым последним и выключаться тоже последним.

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

Denkos 14.12.2016 15:18

Цитата:

Сообщение от vtyns (Сообщение 377413)
знающие ну дайте дельный совет хотябы по колличеству конденсаторов. не выкидывать же nsd мне. дороговатая вещь

Выкинул три года назад, не жалею.

skanch 14.12.2016 17:04

Цитата:

Сообщение от vtyns (Сообщение 377413)
знающие ну дайте дельный совет хотябы по колличеству конденсаторов. не выкидывать же nsd мне. дороговатая вещь

Я уже предложил решение для спасения "дороговатой вещи". Цена вопроса 120р или 70р.

Denkos 14.12.2016 17:10

Цитата:

Сообщение от skanch (Сообщение 377424)
Я уже предложил решение для спасения "дороговатой вещи". Цена вопроса 120р или 70р.

Двойное преобразование, моразм.:be:

skanch 14.12.2016 17:14

Цитата:

Сообщение от Denkos (Сообщение 377425)
Двойное преобразование, моразм.:be:

Маразм-использовать NSD при просадках напряжения.

oleg707 14.12.2016 18:06

согласен с 2 последними.

vtyns 14.12.2016 18:41

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

oleg707 14.12.2016 19:19

Цитата:

Сообщение от vtyns (Сообщение 377430)
так получается моразм читать этот форум. все было собрано не из головы а из форума. и опять тупик. те кто делает на нсд както же обошли эту ситуацию. на кройняк есть дешовый преобразователь в качестве стабилизатора для нсд

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

Когда то я начитался этого форума, в том числе по НСД,
и сделал выводы.
Что рабочего решения, которое меня устроило бы НЕТ. :shok:
И мне практически с нуля пришлось изобретать велосипед.:spiteful:
И заодно этим велосипедом еще и поделился, нахаляву!

Тот же KIW3312S я рискнул и первый купил и поставил за свои деньги, поскольку нсд меня не устроило в том числе и по цене. А KIS (который все советовали) не устроил габаритами.
Я выложил РАБОЧЕЕ решение с ОТКРЫТЫМИ исходнками, ОЧЕНЬ подробно прокомментироваными, чтобы его могли повторить.
Возможно, решение не идеально, но оно работает.

Так что твоё личное дело, читать или не читать, повторять или не повторять.:dntknw:

vtyns 14.12.2016 19:29

может и буду повторять твою тему. просто вдруг чем нибудь еще можно спасти мой блок). кондеров может 50 000мкф помогут или еще что нибудь кроме еще одного dc

oleg707 14.12.2016 19:37

Цитата:

Сообщение от vtyns (Сообщение 377435)
может и буду повторять твою тему. просто вдруг чем нибудь еще можно спасти мой блок). кондеров может 50 000мкф помогут или еще что нибудь кроме еще одного dc

батарею верни в нексус:yes2:

vtyns 14.12.2016 19:41

Цитата:

Сообщение от oleg707 (Сообщение 377437)
батарею верни в нексус:yes2:

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

oleg707 14.12.2016 20:09

Цитата:

Сообщение от vtyns (Сообщение 377438)
думал про это. ну а как бороться с морозами и жарой. и возможен ли перезаряд с последующим раздутием батареи от постоянно включенного блока питания напрямую к контактам платы?

этим должен управлять контроллер :secret:
2 года - полёт нормальный.

Az0m@ 14.12.2016 20:09

http://i12.pixs.ru/thumbs/9/7/1/Doku...7_24419971.jpg
инфу про резюк взял с этого поста: http://pccar.ru/showpost.php?p=306355&postcount=87

vtyns 14.12.2016 20:20

Цитата:

Сообщение от oleg707 (Сообщение 377442)
этим должен управлять контроллер :secret:
2 года - полёт нормальный.

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

oleg707 14.12.2016 22:39

Цитата:

Сообщение от vtyns (Сообщение 377444)
а можно схему куда именно подавать питание и какое напряжение? через юсб не получится у меня. только паять

в проекте есть

oleg707 14.12.2016 22:43

Цитата:

Сообщение от Az0m@ (Сообщение 377443)

не . неправильно
он там датчик выпаял, вместо него на 1 и 3 ногу впаял R5 = 1кОм. При подаче через R4 4.1к напряжения на 3 ногу, планшет просыпается, при пропадании - засыпает.
то есть он на массу подтянул
А нам надо на Vcc датчика

jonikus81 15.12.2016 10:05

Цитата:

Сообщение от vtyns (Сообщение 377413)
знающие ну дайте дельный совет хотябы по колличеству конденсаторов. не выкидывать же nsd мне. дороговатая вещь

Как вариант, собрать БП Олега (обкатанно, стабильно, да еще и поддержка самого автора в этой ветке), а потом на досуге экспериментировать с гальваническими развязками. Вообще считаю НСДшные БП сугубо аудиофильскими, где приоритет не функционал, а качество звука. Поверьте, НСД БП без качественной аудиосистемы это как по мухам из пушки. Скажу Вам больше, любой контакт, провод или еще чего, контактирующее с землей "корпусом авто" убивает ту самую гальваническую развязку и НСДшка начинает работать как самый дешевый кетайский преобразователь напряжения за пару баксов(а то и хуже). У самого лежат 2 НСДшки без дела.

oleg707 15.12.2016 13:12

2 дня обкатал- мороз -10 норм.
PHP код:

byte ver =99;// ( чем больше цифра, тем новее)
// дата правки 11.12.16.1358

// для 5й версии блока питания ( для 4й тоже подходит, только нужно поменять местами в программе A0 и A1 в строках 161-164)
//ТЕСТОВАЯ! пока норм.
// скетч проверен и записан на версии ардуино IDE 1,6,12 win7, 1.63 xp
//Перед прошивкой скетча убедитесь в наличии нужных библиотек,например  d:\777\Soft\arduino\arduino-1.6.11\libraries\LiquidCrystal_I2C\   https://github.com/marcoschwartz/LiquidCrystal_I2C например

/* _
хотелки
strcpy(strokaIIold,strokaII); // strokaIIold = strokaII; так нельзя!!! надо так:  strcpy(strokaIIold,strokaII); // копируем новую строку в старую
v94 опробовать режим стартую и выключения изажигания
вывести статусы отг и 2 канала
______Сделано__________________________________________________
.
Контроль напряжения АКБ машины.
вывод информации на внешний дисплей по I2C, c версии 63 включительно поменяна библиотека вывода на экран. НОВАЯ  ВЗЯТА https://github.com/enjoyneering/LiquidCrystal_I2C  и http://elchupanibrei.livejournal.com/27443.html
если в скетче в названии 0x27, значит библиотека старая.
активный вотчдог,
программная защита its716G(statepin)-тестово,
умное мигание встроенным светодиодом, в зависимости от напряжения АКБ и состояния АСС.
усреднение замеров по напряжению ACC и AKB, по 100 замерам.
информация на дисплее обновляется не постоянно, а каждые 350мс ( 0,35 с), чтобы не мельчешить.
Управление REM: если напруга батареи больше 11.8 В, то включаем еще и усилитель звука (выход REM) /но включаем его только на 30-60мин, если не заведены. После заводки счетчик обнуляется.
v92 сделанъ пллавный пуск - определяем нужное состояние пинов без их предварительного дергания в начальное нулевое.
v94 сделанъ вывод на экран через переменную, а не напрямую. ЭТО позволило выводить информацию ЕЩЕ И В КОМ ПОРТ!!! <<<<<<<========================================
v94 Сделана задержка включения REM после холодного запуска,  15с. Через 10 с после начала загрузки идёт инициализация звуковой, в этот момент слышен ПУК
________________________________________________________________
 потребление блока по 12 вольтам, без планшета - при 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 msms1 0
uint8_t  blink_loop 0;
uint8_t  blink_mode 0;

//***************************************************************************************************************************************************
 
#include <Wire.h> // для экрана - I2C шина
#include <LiquidCrystal_I2C.h> // библиотека для экрана 
#include <avr/wdt.h> //Чтобы использовать функции Watchdog нужно подключить к проекту стандартную библиотеку ( https://geektimes.ru/post/255800/ )
char     strokaI[32] = "                ";// Массив для вывода 1 строки на дисплей , объявляем длиннее(32символа), чтобы не было глюков с отображением на экране
char    strokaII[32] = "                ";// Массив для вывода 2 строки на дисплей



LiquidCrystal_I2C lcd(0x27162); // set the LCD address to 0x27 for a 16 chars and 2 line display для 0x27 - настройка экрана для библиотеки LiquidCrystal_I2C2004V1
//Перед прошивкой скетча убедитесь в наличии нужных библиотек,например  d:\777\Soft\arduino\arduino-1.6.11\libraries\LiquidCrystal_I2C\   https://github.com/marcoschwartz/LiquidCrystal_I2C например

//LiquidCrystal_I2C lcd(PCF8574_ADDR_A21_A11_A01, 4, 5, 6, 16, 11, 12, 13, 14, POSITIVE);  // для newE  описание библиотеки http://elchupanibrei.livejournal.com/27443.html#t23347

float UakbONorOFF 12.1;// в 258 строке ==  if ((15.5 > U_acc_real >= UaccONorOFF) && flagACC == 1)  {UakbONorOFF = 11.5;}  else {UakbONorOFF = 11.9;} 
float UaccONorOFF 11.4;//11.1 // напряжение порога сработки асс

/*ноги ардуины*/
    
uint8_t  PORTBregistr 0// Если у нас есть 8-битная переменная PORTBregistr, то мы можем присвоить её значение регистру PORTx, и тем самым установить ножки микроконтроллера в состояние, соответствующее значению переменной PORTBregistr
boolean SAMOZAPITKA 0;       // byte SAMOZAPITKApin = 9; /*управление самозапиткой блока питания IN4*///1 = есть самозапитка; 0 = нет самозапитки
boolean LED 0;               // Светодиод 1 = светит; 0 = не светит
boolean SLEEP=0;               //byte SLEEPpin = 10; /*управление транзюком сна VT4 (на датчик холла))*/ //1 = потух экран(есть масса на пине сна); 0 = штатная работа планшета (нет массы на пине сна)
boolean HUB 0;               //byte HUBpin = 11; /* PB3 управление транзюком питания хаба*/ // 0-хаб вЫключен, 1 - хаб включен
boolean OTG 0;               //byte OTGpin = 12; /* 16pin = PB4 = pin D12 MISO управление транзюком OTG Q1*/ //1 = есть масса на OTG; 0 = нет массы на OTG

    
uint8_t  PORTDregistr 0//  8-битная переменная PORTDregistr
boolean PlanshBAT 0;         //byte PlanshBATpin = 6; /* 10pin = PD6 = pin D6 PWM    включить 1 канал KIW            ..... управление питания БАТАРЕИ планшета через управляющую ногу IN2-5pin*/ //0 = нет питания; 1 = есть питание ( БАТАРЕИ планшета)
boolean REGISTRATOR 0;       //byte REGISTRATORpin = 4; /* 2 pin = PD4 = pin D4 выход 12В для работы видеорегистратора (D4 -IN1)*/ 
boolean II_KIW_pin_POGO 0;   //byte II_KIW_pin_POGOpin = 2; /*  32pin = PD2 = pin D2         включить 2 канал KIW    управление SS2 выходом питания  +5V (2 канал kiw3312s) на пого пин(или USB), чтоб планшет думал, что идет зарядка*/ //0 = нет 5V на POGO; 1 = есть 5V на POGO
boolean REM 0;               //byte REMpin = 7;          /* 11pin = PD7 = pin D7 выход сигнала REM (+12v) (IN3)*/ //0 = нет 12В на выходе REM; 1 = есть 12В на выходе REM

//пины состояния ITS
boolean STATEpinI 1;        /*логический вход для отслеживания аварийной ситуации ITS716G(724G)(питание KIW3312s-out2 и регистратор-out1) 0 = авария*/
boolean STATEpinII 1;       /*логический вход для отслеживания аварийной ситуации ITS716G(724G)(выход REM-out3 и самозапитка БП-out4 )1 = авар. сит.*/

/*логические переменные, используемые в коде*/
boolean flagACC 0;          /*признак включенного зажигания*/
boolean flagAKB 0;          /* признак заряженной батареи*/
byte flagREM 0;             /* признак включенного выхода на усилитель звука (REM) 0 1 2*/
boolean flagHALL 0;         /*флаг отработки морга экрана при холодном старте( flagHALL = 1 экран можно включать и выключать, датчик холла на планшете инициализировался)*/
/*счётчики времени*/
unsigned long eventTime 0;
unsigned long pauseTimeACC millis();      // сброс времени для отсчета отключения самозапитки
unsigned long pauseTimeAKB millis();
unsigned long pauseDisplay 0;             /* таймер для обновления информации на дисплее, чтобы не мерцал*/
unsigned long pauseTimeHALL 140000;       /* время паузы перед морганием-тушением экрана (для датчика холла)(равен времени загрузки планшета плюс секунд 10-20)= 2мин*/
int timeAfterACC 5000;                    /* время после выключения зажигания, после истечения которого вырубается экран, хаб, y-otg*/
unsigned long TimerREM 0;                 /* отсчет до выключения выхода REM при заглушенном авто и включенном зажигании.3600000 = час */
unsigned long timeBeforeRemOff 1800000;   /*1800000=30мин. Время, оставшееся до отключения выхода REM после включения зажигания и незаводки машины. 209 строчка.*/
//unsigned long timeBeforeRemOff = 180000;   /*1800000=30мин. Время, оставшееся до отключения выхода REM после включения зажигания и незаводки машины. 209 строчка.*/
unsigned long TIMER millis(); 
//===========================================================================================================================================================================================================================================================================
//===========================================================================================================================================================================================================================================================================
//===========================================================================================================================================================================================================================================================================




void UPRAVLENIE_PINAMI() // функция перевода логических параметров в реальные состояния пинов   // http://arduino.ru/Tutorial/Upravlenie_portami_cherez_registry  // https://geektimes.ru/post/255744/ Ускоряем свою Arduino   /* http://robotosha.ru/arduino/digitalwrite-optimizing-arduino.html */
{// UPRAVLENIE_PINAMI ~~~//тут мы сначала пишем  в переменную регистры, а потом сделаем PORTB = PORTBregistr; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
// PORTBregistr - обрабатывем регистры порта B атмеги

        
if (LED == ){ PORTBregistr |= 1<<5;     } //PORTB |= 1<<5; //установит "1" (сигнал высокого уровня) на выводе PB5. //digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
             
else { PORTBregistr &= ~(1<<5);  } //PORTB &= ~(1<<5); //установит "0" (сигнал низкого уровня) на выводе PB5. //digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
     
if (SAMOZAPITKA == 1){ PORTBregistr |= (<< 1); } else {PORTBregistr &= ~((<< 1));}         //PB1 управление самозапиткой блока питания IN4///1 = есть самозапитка; 0 = нет самозапитки //http://microsin.net/programming/avr/accessing-avr-ports-with-winavr-gcc.html
           
if (SLEEP == 1){ PORTBregistr |= (<< 2); } else {PORTBregistr &= ~((<< 2));}         //byte SLEEPpin = 10; /* PB2  управление транзюком сна VT4 (на датчик холла))*/ //1 = потух экран(есть масса на пине сна); 0 = штатная работа планшета (нет массы на пине сна)
           
if (HUB == 0)  { PORTBregistr |= (<< 3); } else {PORTBregistr &= ~((<< 3));}         //HUB =0;//byte HUBpin = 11; /* PB3 управление транзюком питания хаба*/ // 1-есть питание, 0 - нет питания
           
if (OTG == 1)  { PORTBregistr |= (<< 4); } else {PORTBregistr &= ~((<< 4));}         //bool OTG = 0; //byte OTGpin = 12; /* 16pin = PB4 = pin D12 MISO управление транзюком OTG Q1*/ //1 = есть масса на OTG; 0 = нет массы на OTG

// PORTDregistr - обрабатывем регистры порта D атмеги

       
if (PlanshBAT == 1){ PORTDregistr |= (<< 6); } else {PORTDregistr &= ~((<< 6));}         //bool PlanshBAT = 0; //byte PlanshBATpin = 6; /* 10pin = PD6 = pin D6 PWM    включить 1 канал KIW            ..... управление питания БАТАРЕИ планшета через управляющую ногу IN2-5pin*/ //0 = нет питания; 1 = есть питание ( БАТАРЕИ планшета)
     
if (REGISTRATOR == 1){ PORTDregistr |= (<< 4); } else {PORTDregistr &= ~((<< 4));}         //bool REGISTRATOR = 0;   //byte REGISTRATORpin = 4; /* 2 pin = PD4 = pin D4 выход 12В для работы видеорегистратора (D4 -IN1)*/ 
 
if (II_KIW_pin_POGO == 1){ PORTDregistr |= (<< 2); } else {PORTDregistr &= ~((<< 2));}         //bool II_KIW_pin_POGO = 0;   //byte II_KIW_pin_POGOpin = 2; /*  32pin = PD2 = pin D2         включить 2 канал KIW    управление SS2 выходом питания  +5V (2 канал kiw3312s) на пого пин(или USB), чтоб планшет думал, что идет зарядка*/ //0 = нет 5V на POGO; 1 = есть 5V на POGO
             
if (REM == 1){ PORTDregistr |= (<< 7); } else {PORTDregistr &= ~((<< 7));}         //bool REM = 0; //byte REMpin = 7;          /* 11pin = PD7 = pin D7 выход сигнала REM (+12v) (IN3)*/ //0 = нет 12В на выходе REM; 1 = есть 12В на выходе REM
 
            //Serial.print ("PORTBregistr, BIN = "  ); Serial.println (PORTBregistr, BIN); // вывели порт B атмеги на монитор порта
            //Serial.print ("PORTDregistr, BIN = "  ); Serial.println (PORTDregistr, BIN); // вывели порт D атмеги на монитор порта
PORTD PORTDregistr//прописали порту D атмеги в регистры команду на запись нулей и единиц.
PORTB PORTBregistr//прописали порту B атмеги в регистры команду на запись нулей и единиц.
}//конец UPRAVLENIE_PINAMI ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 



void setup() //настройки
{
 
  
 
wdt_disable(); //Отключение таймера watchdog
 
Serial.begin(250000); 
 
//lcd.begin(16, 2); для newE
lcd.init();                      /* initialize the lcd занимает почти секунду  для 0x27*/

// настройки портов  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~   
 
DDRD 0b11010100//работает!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
/*  
  pinMode(2, OUTPUT);         //bool II_KIW_pin_POGO = 0;   //byte II_KIW_pin_POGOpin = 2;   32pin = PD2 = pin D2         включить 2 канал KIW    управление SS2 выходом питания  +5V (2 канал kiw3312s) на пого пин(или USB), чтоб планшет думал, что идет зарядка //0 = нет 5V на POGO; 1 = есть 5V на POGO
  pinMode(4, OUTPUT);         //bool REGISTRATOR = 0;   //byte REGISTRATORpin = 4;  2 pin = PD4 = pin D4 выход 12В для работы видеорегистратора (D4 -IN1)
  pinMode(5, INPUT);          //pinMode(STATEpinI, INPUT);
  pinMode(6, OUTPUT);         //pinMode(PlanshBATpin, OUTPUT);   16pin = PB4 = pin D12 MISO
  pinMode(7, OUTPUT);         //bool REM = 0; //byte REMpin = 7;           11pin = PD7 = pin D7 выход сигнала REM (+12v) (IN3) //0 = нет 12В на выходе REM; 1 = есть 12В на выходе REM
  */
   //ПРИМЕР DDRB = 0b00100010;// pinMode(13, OUTPUT); pin9 =OUT       //DDRx - регистр направления передачи данных светодиодик на плате ардуины
 
 
DDRB   0b00111110//работает!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  /*
  pinMode(8, INPUT);          //pinMode(STATEpinII, INPUT);
  pinMode(9, OUTPUT);         //pinMode(SAMOZAPITKApin, OUTPUT); 13pin = PB1 = pin D9
  pinMode(10, OUTPUT);        // pinMode(SLEEPpin, OUTPUT);
  pinMode(11, OUTPUT);        //byte HUBpin = 11; /* PB3 
  pinMode(12, OUTPUT);        //bool OTG = 0; //byte OTGpin = 12;  16pin = PB4 = pin D12 MISO управление транзюком OTG Q1 //1 = есть масса на OTG; 0 = нет массы на OTG
  pinMode(13, OUTPUT);        //светодиодик на плате ардуины
 */
  //digitalWrite(5, 1);       // включить подтягивающий резистор http://arduino.ru/Tutorial/DigitalPinsdigitalWrite(ENC_PIN1, 1);       // включить подтягивающий резистор http://arduino.ru/Tutorial/DigitalPins
  //digitalWrite(8, 1);  

  
  
  
// конец настроек портов  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 

//настройки состояний при подаче питания на БП ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 
  
PlanshBAT 0;          //digitalWrite(PlanshBATpin, 0);  //вЫключаем питание на батарею планшета
  
SAMOZAPITKA 0;        // digitalWrite(SAMOZAPITKApin, 0);  //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
  
OTG 0;                //digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
  
II_KIW_pin_POGO 0;    //digitalWrite(II_KIW_pin_POGOpin, 0); //вЫключаем +5V (POGO(USB))
  
HUB 0;                //digitalWrite(HUBpin, 1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
  
REM 0;                //digitalWrite(REMpin, 0); // // выключаем выход REM
  
REGISTRATOR 0;        //digitalWrite(REGISTRATORpin, 0); // выключаем питание  на видеорегистратор
  
wdt_enable (WDTO_2S);   // Запуск таймера watchdog:   Для тестов не рекомендуется устанавливать значение менее 8 сек. Таймер будет считать ровно столько, сколько указано в константе. По истечении этого времени произойдет перезагрузка. /* Возможные значения для константы WDTO_15MS WDTO_30MS WDTO_60MS WDTO_120MS WDTO_250MS WDTO_500MS WDTO_1S WDTO_2S WDTO_4S WDTO_8S 2 s   (WDTO_2S  ATMega 8, 168, 328, 1280, 2560) (   wdt_enable (WDTO_8S);) https://geektimes.ru/post/255800/ https://tushev.org/articles/arduino/5/arduino-and-watchdog-timer     
 //UPRAVLENIE_PINAMI();     //сделать пллавный пуск - определить нужное состояние пинов без их предварительного дергания --- настроили логику и отдали её в функцию UPRAVLENIE_PINAMI. 
 //конец настроек состояний при подаче питания на БП~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 
}
//===========================================================================================================================================================================================================================================================================
//===========================================================================================================================================================================================================================================================================
//===========================================================================================================================================================================================================================================================================

void IntToCharI(int numchar *text)//функция, возвращающая число в текстовый вид 0 1
{
  
//text[0] = (num/100) + '0'; // первое значение _00 - эта строчка нужна для 3хзначного числа.
  //text[1] = ((num/10)%10) + '0';// второе значение __0
  
text[2] = (num%10) + '0'// третее значение ___
 
}

void IntToCharII(int numchar *text)//функция, возвращающая число в текстовый вид 00 11
{
  
//text[0] = (num/100) + '0'; // первое значение _00 - эта строчка нужна для 3хзначного числа.
  
text[0] = ((num/10)%10) + '0';// второе значение __0
  
text[1] = (num%10) + '0'// третее значение ___
 
}

void IntToCharIIII(int numchar *text)//функция, возвращающая число в текстовый вид 0000 1111
{
 
text[0] = (num/1000) + '0';//0 знач
 
text[1] = (num/100)%10 '0'// первое значение _00 - эта строчка нужна для 3хзначного числа.
 
text[2] = ((num/10)%10) + '0';// второе значение __0
 
text[3] = (num%10) + '0'// третее значение ___
}
void FloatToCharIIIII(float numchar *text)//функция, возвращающая число в текстовый вид 00.00 11.11
{

  
int Int num*100;
 
text[0] = (Int/1000) + '0';//0 знач   7896
 
text[1] = (Int/100)%10 '0'// первое значение _00 - эта строчка нужна для 3хзначного числа.
 
text[2] =  '.';
 
text[3] = ((Int/10)%10) + '0';// второе значение __0
 
text[4] = (Int%10) + '0'// третее значение ___
}




//===========================================================================================================================================================================================================================================================================
//===========================================================================================================================================================================================================================================================================
//===========================================================================================================================================================================================================================================================================

void loop()
{
                                                                                                               
  
long Uacc 0//Читаем напругу с делителя ACC R4-R5 и вычисляем среднее арифметическое
  
long Uakb 0////Читаем напругу с делителя R2-R3 и вычисляем среднее арифметическое 
    
for (int i=0i<100; ++i
  {   
// делаем 20 замеров. 1000 замеров = примерно секунда.
        
Uacc Uacc analogRead(A0); // замер для 5й версии
        
Uakb Uakb analogRead(A1); // замер для 5й версии
      //Uacc = Uacc + analogRead(A1); // замер для 4й версии
      //Uakb = Uakb + analogRead(A0); // замер для 4й версии
    
}
    
Uacc Uacc/100;
    
Uakb Uakb/100;
   
    
  
  
  
  
  
  
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)*/
//float Utest = 18.79; 
 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ кусок кода ниже нужен для того, чтобы при включении  и сразу выключении ACC при полностью выключенном планшете(холодный старт) экран мог тухнуть по сигналу датчика холла.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  
if ( (millis() > pauseTimeHALL && flagHALL == )|| ((millis() > 15000) && flagACC == 1)) 
  {
flagHALL 1;} /*проверка отсчета при холодном старте при включении  и сразу выключении ACC*/
  /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        
 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~проверка, выключили ли мы зажигание или просто стартуем ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 
if ((U_akb_real U_acc_real) >=)/*проверка, выключили ли мы зажигание или просто стартуем (1 - выключили заж, 0 - стартуем), нужно для того, чтобы не моргать экраном при стартере и быстро тушить экран при выключении зажигания.*/
          
{timeAfterACC 2000;} /*  1000       1 - выключили зажигание.  ЕСЛИ +15 ПРОПАДАЕТ ВО ВРЕМЯ СТАРТА, ТО ВМЕСТО 500 НАДО 5000 или вообще убрать этот блок if-else.*/
          
else {timeAfterACC 6000;} /* 5000  0 - заводим машину (стартуем).*/
// ввести новую переменную int starting_mode = 1;//стартуем 0 = не_стартуем.      
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


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


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


if (
flagACC ==)
{
// если flagACC == 1

  
if (millis() - pauseTimeACC >= 1100 /* пауза 1c после включения ACC и потом делать следующ(пока включено ACC):*/
        
{
          
OTG 1;              //digitalWrite(OTGpin, 1); /*включаем минус на Y-OTG  (включается  звуковая карта) // тестово, для более устойчивого определения перифирии.*/
          
II_KIW_pin_POGO 1;  //digitalWrite(II_KIW_pin_POGOpin, 1); /*включаем +5V (POGO(USB) нужно для распознавания планшетом признака зарядки. ( можно подавать на +5В USB кабеля (для тимуровской прошивки или если не используется датчик холла)*/
          
HUB =1;               //digitalWrite(HUBpin, 0); /*Включаем хаб = подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб*/
          
PlanshBAT 1;        //digitalWrite(PlanshBATpin, 1);  /*включаем питание на батарею планшета (in2) = этим подаём 12В на KIW3312s. На 1м канале КИВ сразу появляется напряжение (3,8-4,2 - как настроено)*/ 

        
}
  

  if (
millis() - pauseTimeACC >= 1500 )/*через 2,2с после включения ACC включаем экран (вЫключаем минус на упр SLEEP), выход REM(если больше 12в), Включаем хаб (подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб)*/
        
{
          
REGISTRATOR 1;// digitalWrite(REGISTRATORpin, 1); /* включаем питание  на видеорегистратор*/
          
if (millis() < 15000)  {flagREM =0;} // в первые 15 секунд при холодном пуске держим REM выключенным
      
if( flagREM == 1  && flagAKB == ){REM 1;} /* включаем выход REM*/
        
}

  if (
millis() - pauseTimeACC >= 2000 /* пауза 1,6c после включения ACC и потом делать следующ(пока включено ACC): //через 01,6с после включения ACC , включаем питание  на видеорегистратор.*/
        
{
          
SLEEP 0//digitalWrite(SLEEPpin, 0); /*включаем экран = вЫключаем минус на упр SLEEP*/
          
        
}
        
}
// если flagACC == 1


/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~обработка статуса выхода REM~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*если напруга батареи больше 12В, то включаем еще и усилитель звука (выход REM) /но включаем его только на 1 час, если не заведены.*/

    
if (U_akb_real >= 11.8 && flagACC == && flagREM == 0) {flagREM 1TimerREM millis();} /*если подзаряжен акб и включили зажигание  - ВКЛЮЧАЕМ REM*/
    
if (U_akb_real >= 11.8 && flagACC == && ( millis() - TimerREM >= timeBeforeRemOff )) {flagREM ;}  /*  если кончилось время обратного отсчета - статус рем - 2.*/
    //ПРОТЕСТИРОВАТЬ REM!!!!!!!!!!!!             if (U_akb_real > 13.7){ (flagREM = 1);TimerREM = millis();} /* если завели машину, - ВКЛЮЧАЕМ REM, и постоянно обнуляем обратный отсчет вырубания РЕМ.*/
  
if (U_akb_real 13.7 && flagACC == 1){ (flagREM 1);TimerREM millis();} /* если завели машину, - ВКЛЮЧАЕМ REM, и постоянно обнуляем обратный отсчет вырубания РЕМ.*/
    
if (U_akb_real >= 11.8 && flagREM == && flagACC == 0){ flagREM 0;} /* если восстановилось напряжение при выключенном зажигании - обнуляем статус РЕМ.*/
    
if (U_akb_real 11.8 && flagACC == 1){ flagREM 2;} /*если подсел акб при включенном зажигании - статус рем - 2.*/
    
if( flagREM == ||  flagREM == 2){REM 0;}  /* выключаем выход REM*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~конец отработки выхода REM~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    


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

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

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

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


  
if ((15.5 U_akb_real) && ((U_akb_real >= UakbONorOFF) && flagAKB == 0)) /*проверка +30 на перезаряд >15.5В, и больше заданного в 266 строке, и флага акб */
    
{
      if ((
millis() - pauseTimeACC >= 100) && flagAKB == 0)
        {
        
SAMOZAPITKA =1;//digitalWrite(SAMOZAPITKApin, 1);  /* включаем самозапитку через 2с            -----V91для теста включаем бысртрее 0.1C*/
        
flagAKB 1/*подняли флаг батареи*/
        
}
    }
  
 if (((
U_akb_real UakbONorOFF) && flagAKB == 1)||(U_akb_real >15.5))/* ситуация, когда сел при работе ардуины аккумулятор, либо сел в процессе работы или простоя автомобиля, либо перезарядка > 15.5В*/
    
{
      
flagAKB 0;//спустили флаг батареи
      
flagACC 0;
      
pauseTimeACC millis();
      
pauseTimeAKB millis();
      
UakbONorOFF 11.9;
      
lcd.clear(); //очистка экрана
    
}
  
  if ((
millis() - pauseTimeAKB >= 20000) && flagAKB == 0/* если севший аккумулятор //через 20с вЫключаем питание на батарею планшета и вырубаем сам БП.*/
    
{
      
PlanshBAT 0;          //digitalWrite(PlanshBATpin, 0);       /*вЫключаем питание на батарею планшета (in2)*/
      
OTG 0;                //digitalWrite(OTGpin, 0);             /*вЫключаем минус на Y-OTG (8 pin PW1)*/
      
II_KIW_pin_POGO 0;    //digitalWrite(II_KIW_pin_POGOpin, 0); /*вЫключаем +5V (POGO(USB))*/
      
HUB 0;                //digitalWrite(HUBpin, 1);             /* подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб*/
      
REM 0;                //digitalWrite(REMpin, 0);             /* выключаем выход REM*/
      
REGISTRATOR 0;        //digitalWrite(REGISTRATORpin, 0);     /* выключаем питание  на видеорегистратор*/
      
SAMOZAPITKA =0;         //digitalWrite(SAMOZAPITKApin, 0);     /*выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается*/
      //delay (5000);         /* задержка для аппаратного выключения*/
    
}

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

        
PlanshBAT 0;                                            // digitalWrite(PlanshBATpin, 0);  /*вЫключаем питание на батарею планшета (in2)//(батарея планшета))*/
      
}

    if ((
millis() - pauseTimeAKB) >= 172800000 && flagAKB == 1)   /* если давно выключили ACC     ) (2суток = 172800000))     (самозапитка для регистратора)*/
      
REGISTRATOR 0//digitalWrite(REGISTRATORpin, 0);       /* выключаем питание  на видеорегистратор*/
        
SAMOZAPITKA 0;  //digitalWrite(SAMOZAPITKApin, 0);      /*выключаем SAMOZAPITKApin, при этом система ПОЛНОСТЬЮ обесточивается*/
        
UPRAVLENIE_PINAMI(); 
        
delay (3000);              /* задержка для аппаратного выключения*/
      
}
  }
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~конец блока обработки напряжений  АКБ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

 

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

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

/******************************************индикация светодиодом и задержка вывода на дисплей********************************************************************************************************************************************************************************/
   
ms millis();
  
// Событие срабатывающее каждые 125 мс
  
if ( ( ms ms1 ) > 125 || ms ms1 ) {
    
ms1 ms;
    
// Режим светодиода ищем по битовой маске
    
if (  blink_mode << (blink_loop 0x07) ) {LED 1;}
    else { 
LED 0;}
    
blink_loop++;
  }
  
  
  
  
   
// Событие срабатывающее каждые 250 мс
  
if ( ( ms pauseDisplay ) > 350 || ms pauseDisplay )
  { 
    
pauseDisplay ms;
          
//_____________________________________________СООБЩЕНИЕ НА LCD ДИСПЛЕЙ____________________________________________________________

//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(); }//очистка экрана
//int M = (millis()/60000); //минуты

 
if (flagACC == 1){lcd.backlight();}// для newE и для 0x27  
 // в 256 строке выключение подсветки LCD дисплея

 
 
 //sprintf( strokaII,"SETUP volume on ");

//обработка 1й строки______________________________________________________________________________________________________________________________________________________________________________
 
sprintf(strokaI,"                ") ; 
                  
IntToCharIIII((millis()/60000), &strokaI[0]); // вывод минут 0000 4 цифры СЕКУНД // tckb ghtdscbn 9999, то будут кроказябры!!! вида  ;0129
                       
strokaI[5]= flagAKB '0';// вывод флага AKB 5 символ
                        
strokaI[6]= flagACC'0';// вывод флага AСС 6 символ
                         
strokaI[7]= flagREM'0';// вывод флага rem 7 символ 
                           
FloatToCharIIIII (U_acc_real,  &strokaI[11]);  // вывод напряжения АСС 
//конец обработки 1й строки ______________________________________________________________________________________________________________________________________________________________________________

//обработка 2й строки______________________________________________________________________________________________________________________________________________________________________________
 
TIMER = (  pauseTimeAKB  172800000 millis()  )/60000// вывод кол-ва минут, оставшиеся до вЫключения блока (когда выключено АСС)

 // _______________________________Первые 30с выводим версию блока.____________________________________________________________________________________________________________________________________________________
//  if (    ( millis()  < 30000 )   ){  sprintf(strokaII,"v__             ") ; IntToCharII(ver, &strokaII[1]);} else {  sprintf(strokaII,"____            ");   IntToCharIIII(TIMER, &strokaII[0]); } // Первые 30с выводим версию блока.
// ________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
 
 //pauseTimeACC
  // _______________________________Первые 30с после вкл -выкл ACC выводим версию блока.____________________________________________________________________________________________________________________________________________________
  
if (    ( millis()-pauseTimeACC  30000 )&& flagACC == 1   ){  sprintf(strokaII,"v__             ") ; IntToCharII(ver, &strokaII[1]);} else {  sprintf(strokaII,"____            ");   IntToCharIIII(TIMER, &strokaII[0]); } //Первые 30с после вкл -выкл ACC выводим версию блока
// _____________________________________________________________________________________________________________________________________________________________________________________________________________________________________
 
 //if (( millis() - TimerREM )<=timeBeforeRemOff)  {  IntToCharII(  (timeBeforeRemOff -  (( millis() - TimerREM ))/60000    ), &strokaII[7]); }// вывод минут работы REM без сброса 
//для проверки if (( millis() - TimerREM )<=3000)  {  IntToCharII(  (3000 -  (( millis() - TimerREM ))/60000    ), &strokaII[7]); }// вывод минут работы REM без сброса 

/* // _______________________________вывод состояния REM____________________________________________________________________________________________________________________________________________________
if ( REM == 0)  { 
                strokaII [6] = 'o'; 
                strokaII [7] = 'f'; 
                strokaII [8] = 'f'; 
                }         
              else  
                {
                strokaII [6] = 'r'; 
                strokaII [7] = 'e'; 
                strokaII [8] = 'm';
                //strokaII [9] = '.';  
                }
// ________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
*/

//вывод OTG HUB POGO__________________________________
                       
strokaII[5]= OTG '0';// вывод флага OTG 5 символ
                        
strokaII[6]= HUB'0';// вывод флага HUB 6 символ
                         
strokaII[7]= II_KIW_pin_POGO'0';// вывод флага II_KIW_pin_POGO (ПРИЗНАК ЗАРЯДКИ) 7 символ 
                         


// __________________________________________________________________           
 
FloatToCharIIIII (U_akb_real,  &strokaII[11]); // вывод напряжения АКБ
//конец обработки 2й строки ______________________________________________________________________________________________________________________________________________________________________________



//Вывод строк.______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    
Serial.print("strokaI  = "); Serial.println(strokaI);
    
lcd.setCursor(00);
    
lcd.print(strokaI);
  
    
Serial.print("strokaII = "); Serial.println(strokaII);
    
lcd.setCursor(01); //2строка 0символ 
    
lcd.print(strokaII);
    
//Вывод строк окончен.______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________




 //СТАРЫЙ ВЫВОД ИНФЫ НА ДИСПЛЕЙ - удалить после тестирования
//if (    ( (millis() / 60000 ) <9 )   ){lcd.setCursor(2, 0); lcd.print("v");lcd.setCursor(3, 0); lcd.print(ver);} // Вывод версии блока на дисплей. 
//вывод времени работы
/*   lcd.setCursor(0, 0);
  lcd.print((millis() )/60000); // вывод кол-ва минут работы блока ( 1 строка 1 символ) OK

  lcd.setCursor(7, 0);
  lcd.print(flagAKB); // вывод флага AKB
  
  lcd.setCursor(8, 0);
  lcd.print(flagACC); // вывод флага АСС
  
  lcd.setCursor(9, 0);
  lcd.print(flagREM); // вывод флага rem
  lcd.setCursor(11, 0);
  lcd.print(U_acc_real); // вывод напряжения АСС
  
  //lcd.setCursor(5,1);
  //-------------------2 строка---------------------------------
  lcd.setCursor(0, 1);
  unsigned long TIMER = (  pauseTimeAKB  + 172800000 - millis()  )/60000; // вывод кол-ва минут, оставшиеся до выключения блока (когда выключено АСС)
  lcd.print(TIMER);
  lcd.setCursor(5, 1);
  lcd.print(( millis() - TimerREM )/60000); //
  lcd.setCursor(11, 1);
  lcd.print(U_akb_real); // вывод напряжения АКБ
   */
  /* так выглядит индикация на дисплее
  
   
   ================
  |1  v86 111 0.000|          1 строка   *   вывод кол-ва минут работы блока     VER86          *флаг АКБ*флаг АСС*флаг REM*              вывод напряжения АСС
  |616  10    14.50|    
   ================           2 строка   *   кол-во минут, оставшиеся до выключения блока    *     millis() - TimerREM, минут        *    вывод напряжения АКБ    
                                                                                                   сколько осталось работать сабу 

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

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

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


Az0m@ 16.12.2016 01:03

Цитата:

Сообщение от oleg707 (Сообщение 377456)
не . неправильно
он там датчик выпаял, вместо него на 1 и 3 ногу впаял R5 = 1кОм. При подаче через R4 4.1к напряжения на 3 ногу, планшет просыпается, при пропадании - засыпает.
то есть он на массу подтянул
А нам надо на Vcc датчика

http://i12.pixs.ru/thumbs/0/9/7/Doku...1_24436097.jpg

oleg707 16.12.2016 01:58

Цитата:

Сообщение от Az0m@ (Сообщение 377545)

теперь вроде то :yes4:
добавил в шапку

Furai2014 18.12.2016 00:37

Вложений: 1
А что если расширить блок и добавить Si4703 FM
Вложение 45989
Подключить ардуино через юсб к планшету, тогда программно управлять
Si4703 FM с планшета, и можно данные о состоянии блока также выводить на виджет. Или нано не потянет?

oleg707 18.12.2016 01:09

Цитата:

Сообщение от Furai2014 (Сообщение 377673)
А что если расширить блок и добавить Si4703 FM
Вложение 45989
Подключить ардуино через юсб к планшету, тогда программно управлять
Si4703 FM с планшета, и можно данные о состоянии блока также выводить на виджет. Или нано не потянет?

добавлять только если сюда http://pccar.ru/showthread.php?t=24440
Как у неё приём?

ИМХО БП должен быть БП БЕЗ связи по юсб.
А если пробьёт атмегу (кив здохнет, например). Что, единственного юсб лишаться?!

А вообще я радио не слушаю. ( еще и телевизор не смотрю, уже больше 10 лет.)

Az0m@ 19.12.2016 09:23

Цитата:

Сообщение от Furai2014 (Сообщение 377673)
А что если расширить блок и добавить Si4703 FM
Вложение 45989
Подключить ардуино через юсб к планшету, тогда программно управлять
Si4703 FM с планшета, и можно данные о состоянии блока также выводить на виджет. Или нано не потянет?

https://www.youtube.com/watch?v=gt2V-EzE5Gk

papant 19.12.2016 22:44

Цитата:

Сообщение от Az0m@ (Сообщение 377762)

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

Furai2014 19.12.2016 23:02

Цитата:

Сообщение от papant (Сообщение 377831)
Херь мне кажется это.Вот если бы с нее звук гнать на звуковуху, то ладно еще, а тут надо с планшета звук гнать по юсб на звуковуху и потом в усилок, с этой приблуды видимо только во второй вход усилка если он есть. И потом между ними как то переключаться. Имхо баловство все это, пользую интернет радио и вам советую )

Снее можно напрямую на звуковую, с планшета только управление по юсб или через блютуз

oleg707 19.12.2016 23:05

Цитата:

Сообщение от papant (Сообщение 377831)
Херь мне кажется это.Вот если бы с нее звук гнать на звуковуху, то ладно еще, а тут надо с планшета звук гнать по юсб на звуковуху и потом в усилок, с этой приблуды видимо только во второй вход усилка если он есть. И потом между ними как то переключаться. Имхо баловство все это, пользую интернет радио и вам советую )

не, там есть линейный аудиовыход. Управление по I2C.
Но не на блок питания радио вешать. :spiteful:

vtyns 23.12.2016 22:22

ребят собрал блок на нсд. вроде все получилось, но. напряжение при выключенном планшете 4.7в. при включенном - напряжение 3.4в. с 5.2в до 4.7в. понижал двумя диодами. просадку напряжения 1.3в. дают именно эти два диода(до диодов просадок нет,мерил). как избавиться от этой просадки? может есть специальные диоды для понижения без просадки(сейчас стоят 5А написано HER)? или еще чем понизить без програмирования? (планшет n7 без батареи запитан к клемам материнки)

oleg707 24.12.2016 00:37

Цитата:

Сообщение от vtyns (Сообщение 378215)
ребят собрал блок на нсд. вроде все получилось, но. напряжение при выключенном планшете 4.7в. при включенном - напряжение 3.4в. с 5.2в до 4.7в. понижал двумя диодами. просадку напряжения 1.3в. дают именно эти два диода(до диодов просадок нет,мерил). как избавиться от этой просадки? может есть специальные диоды для понижения без просадки(сейчас стоят 5А написано HER)? или еще чем понизить без програмирования? (планшет n7 без батареи запитан к клемам материнки)

вам явно не в эту тему. Для вашего случая надо DC-DC степ даун преобразователь (еще один)

vtyns 24.12.2016 22:57

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


Часовой пояс GMT +4, время: 02:07.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot