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)

T_r_D 31.05.2016 00:03

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

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

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

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

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

oleg707 31.05.2016 00:04

Цитата:

Сообщение от Az0m@ (Сообщение 361771)
увы дисплея пока под рукой нету.. вольтметром на обоих выводах 4.11В

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

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

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

PHP код:

//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 msms1 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(0x27162); // 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(STATEpinIINPUT);
  
pinMode(STATEpinIIINPUT);
  
pinMode(PlanshBATpinOUTPUT);
  
pinMode(SAMOZAPITKApinOUTPUT);
  
pinMode(OTGpinOUTPUT);
  
pinMode(SLEEPpinOUTPUT);
  
pinMode(II_KIW_pin_POGOpinOUTPUT);
  
pinMode(HUBpinOUTPUT);
  
pinMode(13OUTPUT); //светодиодик на плате ардуины
  
pinMode(REMpinOUTPUT);
  
pinMode(REGISTRATORpinOUTPUT);

  
digitalWrite(PlanshBATpin0);  //вЫключаем питание на батарею планшета
  
digitalWrite(SAMOZAPITKApin0);  //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
  
digitalWrite(OTGpin0); //вЫключаем минус на Y-OTG (8 pin PW1)
  
digitalWrite(II_KIW_pin_POGOpin0); //вЫключаем +5V (POGO(USB))
  
digitalWrite(HUBpin1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
  
digitalWrite(REMpin0); // // выключаем выход REM
  
digitalWrite(REGISTRATORpin0); // выключаем питание  на видеорегистратор
  
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=0i<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 == || millis() > 10000 && flagACC == 1) {
    
flagHALL 1//проверка отсчета при холодном старте при включении  и сразу выключении ACC
  
}
 
if ((
U_akb_real U_acc_real) >)//проверка, выключили ли мы зажигание или просто стартуем (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 == && flagAKB == //проверка напруги АСС и АКБ при флаге ACC = 0
  
{
    
flagACC 1;
    
pauseTimeACC millis();
    
pauseTimeAKB millis();
    
lcd.clear(); //очистка экрана
  
}




  if (
millis() - pauseTimeACC >= 500 && flagACC == 1// пауза 0,5c после включения ACC и потом делать следующ(пока включено ACC):
  
{
    
digitalWrite(PlanshBATpin1);  //включаем питание на батарею планшета (in2)
    
digitalWrite(OTGpin1); //включаем минус на Y-OTG  (включается  звуковая карта)
  
}
  
  if (
millis() - pauseTimeACC >= 800 && flagACC == 1// пауза 0.8c после включения ACC и потом делать следующ(пока включено ACC): //через 0,8с после включения ACC включаем экран, включаем питание  на видеорегистратор.
  
{
    
digitalWrite(II_KIW_pin_POGOpin1); //включаем +5V (POGO(USB) нужно для распознавания планшетом признака зарядки. ( можно подавать на +5В USB кабеля (для тимуровской прошивки или если не используется датчик холла)
    
digitalWrite(REGISTRATORpin1); // включаем питание  на видеорегистратор
  
}
    
  if (
millis() - pauseTimeACC >= 2000 && flagACC == 1)//через 1с после включения ACC включаем экран (вЫключаем минус на упр SLEEP), выход REM(если больше 12в), Включаем хаб (подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб)
  
{
    
digitalWrite(SLEEPpin0); //включаем экран = вЫключаем минус на упр SLEEP
    
digitalWrite(HUBpin0); //Включаем хаб = подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб
    
if (U_akb_real >= 12 && flagACC == 1)//если напруга батареи больше 12В, то включаем еще и усилитель звука (выход REM)
    
{
      
digitalWrite(REMpin1); // включаем выход REM
    
}
  }



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

  
if (U_acc_real UaccONorOFF && flagACC == 1)
  {
    
flagACC 0;  //Выключили зажигание
    
digitalWrite(REMpin0); // выключаем выход 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(OTGpin0); //вЫключаем минус на Y-OTG (8 pin PW1)
    
digitalWrite(II_KIW_pin_POGOpin0); //вЫключаем +5V (POGO(USB))
    
digitalWrite(HUBpin1); // ВЫключаем хаб = подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб
    
lcd.noBacklight(); // тушим подсветку экрана
    
if (flagHALL == 1)
    {
      
digitalWrite(SLEEPpin1); //включаем минус на SLEEP (7 pin PW1)при этом тухнет экран (если прошло 2 минуты с момента включения ардуины)
    
}
    else
    {
      
digitalWrite(SLEEPpin0);
    }
  }

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

  
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(SAMOZAPITKApin1);  // включаем самозапитку через 2с
    
flagAKB 1;} //подняли флаг батареи
  
}

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

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

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

    if ((
millis() - pauseTimeAKB) >= 37000000 && flagAKB == 1// если давно выключили ACC     ) (2суток = 172800000))     //(самозапитка для регистратора)
    
digitalWrite(REGISTRATORpin0); // выключаем питание  на видеорегистратор
      
digitalWrite(SAMOZAPITKApin0);  //выключаем 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(00);
  
lcd.print((millis() )/60000);
  
lcd.setCursor(40);
 
//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(90);
  
lcd.print(flagACC);
  
lcd.setCursor(110);
  
lcd.print(U_acc_real);
  
  
//lcd.setCursor(5,1);
  //-------------------2 строка---------------------------------
  
lcd.setCursor(01);
  
unsigned long TIMER = (  pauseTimeAKB  37000000 millis()  )/60000;
  
lcd.print(TIMER);
  
lcd.setCursor(51);
  
  
// вывод напряжений   
 //lcd.setCursor(8, 1);
  //lcd.print("B");
  
lcd.setCursor(91);
  
lcd.print(flagAKB);
  
lcd.setCursor(111);
  
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==|| PlanshBATpin==||REMpin==|| REGISTRATORpin ==1// если проц включал любой канал ITS
              
{
                if(
STATEpinI == 0)             {   // и если пин защиты показал аварию
                                                                                                             
for (int i=0<= 300i++)   { //тогда моргаем 13 ногой код "1"  10 минут, если они прошли и асс ВКЛ, тогда еще раз и еще по кругу, пока неисправность не уйдёт
                                                                                                                                           
digitalWrite(131); delay(500); digitalWrite(130); delay(1493);
                                     
digitalWrite(PlanshBATpin0);  //вЫключаем питание на батарею планшета (in2)
                                     
digitalWrite(OTGpin0); //вЫключаем минус на Y-OTG (8 pin PW1)
                                     
digitalWrite(II_KIW_pin_POGOpin0); //вЫключаем +5V (POGO(USB))
                                     
digitalWrite(HUBpin1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
                                     
digitalWrite(REMpin0); // // выключаем выход REM
                                     
digitalWrite(REGISTRATORpin0); // выключаем питание  на видеорегистратор
                                     
digitalWrite(SAMOZAPITKApin0);  //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
                                     
wdt_reset(); //Сброс таймера watchdog
                                                                                                                                           
}
                                   } ;
    if(
STATEpinII == 0)             {   // и если пин защиты показал аварию
                                                                                                             
for (int i=0<= 150i++)   { //тогда моргаем 13 ногой ногой код "2" 10 минут, если они прошли и асс ВКЛ, тогда еще раз и еще по кругу, пока неисправность не уйдёт
                                                                                                                                           
digitalWrite(131); delay(500); digitalWrite(130); delay(493); digitalWrite(131); delay(500); digitalWrite(130); delay(1493);
                                     
digitalWrite(PlanshBATpin0);  //вЫключаем питание на батарею планшета (in2)
                                     
digitalWrite(OTGpin0); //вЫключаем минус на Y-OTG (8 pin PW1)
                                     
digitalWrite(II_KIW_pin_POGOpin0); //вЫключаем +5V (POGO(USB))
                                     
digitalWrite(HUBpin1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
                                     
digitalWrite(REMpin0); // // выключаем выход REM
                                     
digitalWrite(REGISTRATORpin0); // выключаем питание  на видеорегистратор
                                     
digitalWrite(SAMOZAPITKApin0);  //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
                                     
wdt_reset(); //Сброс таймера watchdog
                                                                                                                                           
}
                                   } ;
                               }




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

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

ms millis();
  
// Событие срабатывающее каждые 125 мс
  
if ( ( ms ms1 ) > 125 || ms ms1 ) {
    
ms1 ms;
    
// Режим светодиода ищем по битовой маске
    
if (  blink_mode << (blink_loop 0x07) ) digitalWrite(13HIGH);
    else  
digitalWrite(13LOW);
    
blink_loop++;
  }
  
  
// blink_mode = modes[3];
  
  
if (blink_mode != modes[5] || blink_mode != modes[5]) 
  {
  if (
flagAKB == ){blink_mode modes[0];}                 // индикация напруги батареи на ардуинине.- низкое напряжение АКБ авто
  
if (flagAKB == && flagACC == 1) {blink_mode modes[2];} //- нормальное напряжение, включено ACC, рабочий режим.
  
if (flagAKB == && 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ой контакт и включить АСС на этом контакте появляется напряжение... и при последующем подключении к пого появляется зарядка... и так до следующего отключения экрана

Цитата:

Сообщение от oleg707 (Сообщение 361778)

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

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

oleg707 31.05.2016 00:17

Цитата:

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

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

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

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

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

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

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

oleg707 31.05.2016 00:23

Цитата:

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


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

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

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

Цитата:

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

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

T_r_D 31.05.2016 00:24

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

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

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

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

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

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

oleg707 31.05.2016 00:32

Цитата:

Сообщение от T_r_D (Сообщение 361782)
oleg707
Да выложу конечно скетч.
Только надо его реализовать. Неделя выходного началась, так вот за неё попытаюсь реализовать и псину на 555 и ребут планшета.

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

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

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

T_r_D 31.05.2016 00:41

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

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

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

Az0m@ 31.05.2016 00:53

Цитата:

Сообщение от oleg707 (Сообщение 361781)
СТОП
по порядку
Отключи планшет нафиг, пока ты его не спалил
Сначала блок протестируй, мигать его заставь диодиком
Сними инфу про напряжение АКБ с ком порта. В качестве нагрузки повесь лампочки на 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

Цитата:

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

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

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

//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 msms1 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(0x27162); // 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(STATEpinIINPUT); 
  
pinMode(STATEpinIIINPUT); 
  
pinMode(PlanshBATpinOUTPUT); 
  
pinMode(SAMOZAPITKApinOUTPUT); 
  
pinMode(OTGpinOUTPUT); 
  
pinMode(SLEEPpinOUTPUT); 
  
pinMode(II_KIW_pin_POGOpinOUTPUT); 
  
pinMode(HUBpinOUTPUT); 
  
pinMode(13OUTPUT); //светодиодик на плате ардуины 
  
pinMode(REMpinOUTPUT); 
  
pinMode(REGISTRATORpinOUTPUT); 

  
digitalWrite(PlanshBATpin0);  //вЫключаем питание на батарею планшета 
  
digitalWrite(SAMOZAPITKApin0);  //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается 
  
digitalWrite(OTGpin0); //вЫключаем минус на Y-OTG (8 pin PW1) 
  
digitalWrite(II_KIW_pin_POGOpin0); //вЫключаем +5V (POGO(USB)) 
  
digitalWrite(HUBpin1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб 
  
digitalWrite(REMpin0); // // выключаем выход REM 
  
digitalWrite(REGISTRATORpin0); // выключаем питание  на видеорегистратор 
  
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=0i<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 == || millis() > 10000 && flagACC == 1) { 
    
flagHALL 1//проверка отсчета при холодном старте при включении  и сразу выключении ACC 
  

  
if ((
U_akb_real U_acc_real) >)//проверка, выключили ли мы зажигание или просто стартуем (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 == && flagAKB == //проверка напруги АСС и АКБ при флаге ACC = 0 
  

    
flagACC 1
    
pauseTimeACC millis(); 
    
pauseTimeAKB millis(); 
    
lcd.clear(); //очистка экрана 
  





  if (
millis() - pauseTimeACC >= 500 && flagACC == 1// пауза 0,5c после включения ACC и потом делать следующ(пока включено ACC): 
  

    
digitalWrite(PlanshBATpin1);  //включаем питание на батарею планшета (in2) 
    
digitalWrite(OTGpin1); //включаем минус на Y-OTG  (включается  звуковая карта) 
  

   
  if (
millis() - pauseTimeACC >= 800 && flagACC == 1// пауза 0.8c после включения ACC и потом делать следующ(пока включено ACC): //через 0,8с после включения ACC включаем экран, включаем питание  на видеорегистратор. 
  

    
digitalWrite(II_KIW_pin_POGOpin1); //включаем +5V (POGO(USB) нужно для распознавания планшетом признака зарядки. ( можно подавать на +5В USB кабеля (для тимуровской прошивки или если не используется датчик холла) 
    
digitalWrite(REGISTRATORpin1); // включаем питание  на видеорегистратор 
  

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

    
digitalWrite(SLEEPpin0); //включаем экран = вЫключаем минус на упр SLEEP 
    
digitalWrite(HUBpin0); //Включаем хаб = подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб 
    
if (U_akb_real >= 12 && flagACC == 1)//если напруга батареи больше 12В, то включаем еще и усилитель звука (выход REM) 
    

      
digitalWrite(REMpin1); // включаем выход REM 
    

  } 



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

  
if (U_acc_real UaccONorOFF && flagACC == 1
  { 
    
flagACC 0;  //Выключили зажигание 
    
digitalWrite(REMpin0); // выключаем выход 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(OTGpin0); //вЫключаем минус на Y-OTG (8 pin PW1) 
    
digitalWrite(II_KIW_pin_POGOpin0); //вЫключаем +5V (POGO(USB)) 
    
digitalWrite(HUBpin1); // ВЫключаем хаб = подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб 
    
lcd.noBacklight(); // тушим подсветку экрана 
    
if (flagHALL == 1
    { 
      
digitalWrite(SLEEPpin1); //включаем минус на SLEEP (7 pin PW1)при этом тухнет экран (если прошло 2 минуты с момента включения ардуины) 
    

    else 
    { 
      
digitalWrite(SLEEPpin0); 
    } 
  } 

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

  
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(SAMOZAPITKApin1);  // включаем самозапитку через 2с 
    
flagAKB 1;} //подняли флаг батареи 
  


  if (
millis() - pauseTimeAKB >= 20000 && flagAKB == 0// если севший аккумулятор //через 20с вЫключаем питание на батарею планшета и вырубаем сам БП. 
  

    
digitalWrite(PlanshBATpin0);  //вЫключаем питание на батарею планшета (in2) 
    
digitalWrite(OTGpin0); //вЫключаем минус на Y-OTG (8 pin PW1) 
    
digitalWrite(II_KIW_pin_POGOpin0); //вЫключаем +5V (POGO(USB)) 
    
digitalWrite(HUBpin1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб 
    
digitalWrite(REMpin0); // // выключаем выход REM 
    
digitalWrite(REGISTRATORpin0); // выключаем питание  на видеорегистратор 
    
digitalWrite(SAMOZAPITKApin0);  //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается 
    
delay (5000);              // задержка для аппаратного выключения 
  


  if (
flagAKB == && flagACC == 0)  //ситуация, когда норм акб и выключено зажигание (ACC) 
  

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


    if ((
millis() - pauseTimeAKB) >= 37000000 && flagAKB == 1// если давно выключили ACC     ) (2суток = 172800000))     //(самозапитка для регистратора) 
    
digitalWrite(REGISTRATORpin0); // выключаем питание  на видеорегистратор 
      
digitalWrite(SAMOZAPITKApin0);  //выключаем 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(00); 
  
lcd.print((millis() )/60000); 
  
lcd.setCursor(40); 
 
//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(90); 
  
lcd.print(flagACC); 
  
lcd.setCursor(110); 
  
lcd.print(U_acc_real); 
   
  
//lcd.setCursor(5,1); 
  //-------------------2 строка--------------------------------- 
  
lcd.setCursor(01); 
  
unsigned long TIMER = (  pauseTimeAKB  37000000 millis()  )/60000
  
lcd.print(TIMER); 
  
lcd.setCursor(51); 
   
  
// вывод напряжений    
 //lcd.setCursor(8, 1); 
  //lcd.print("B"); 
  
lcd.setCursor(91); 
  
lcd.print(flagAKB); 
  
lcd.setCursor(111); 
  
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==|| PlanshBATpin==||REMpin==|| REGISTRATORpin ==1// если проц включал любой канал ITS 
              

                if(
STATEpinI == 0)             {   // и если пин защиты показал аварию 
                                                                                                             
for (int i=0<= 300i++)   { //тогда моргаем 13 ногой код "1"  10 минут, если они прошли и асс ВКЛ, тогда еще раз и еще по кругу, пока неисправность не уйдёт 
                                                                                                                                           
digitalWrite(131); delay(500); digitalWrite(130); delay(1493); 
                                     
digitalWrite(PlanshBATpin0);  //вЫключаем питание на батарею планшета (in2) 
                                     
digitalWrite(OTGpin0); //вЫключаем минус на Y-OTG (8 pin PW1) 
                                     
digitalWrite(II_KIW_pin_POGOpin0); //вЫключаем +5V (POGO(USB)) 
                                     
digitalWrite(HUBpin1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб 
                                     
digitalWrite(REMpin0); // // выключаем выход REM 
                                     
digitalWrite(REGISTRATORpin0); // выключаем питание  на видеорегистратор 
                                     
digitalWrite(SAMOZAPITKApin0);  //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается 
                                     //wdt_reset(); //Сброс таймера watchdog 
                                                                                                                                           

                                   } ; 
    if(
STATEpinII == 0)             {   // и если пин защиты показал аварию 
                                                                                                             
for (int i=0<= 150i++)   { //тогда моргаем 13 ногой ногой код "2" 10 минут, если они прошли и асс ВКЛ, тогда еще раз и еще по кругу, пока неисправность не уйдёт 
                                                                                                                                           
digitalWrite(131); delay(500); digitalWrite(130); delay(493); digitalWrite(131); delay(500); digitalWrite(130); delay(1493); 
                                     
digitalWrite(PlanshBATpin0);  //вЫключаем питание на батарею планшета (in2) 
                                     
digitalWrite(OTGpin0); //вЫключаем минус на Y-OTG (8 pin PW1) 
                                     
digitalWrite(II_KIW_pin_POGOpin0); //вЫключаем +5V (POGO(USB)) 
                                     
digitalWrite(HUBpin1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб 
                                     
digitalWrite(REMpin0); // // выключаем выход REM 
                                     
digitalWrite(REGISTRATORpin0); // выключаем питание  на видеорегистратор 
                                     
digitalWrite(SAMOZAPITKApin0);  //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается 
                                    // wdt_reset(); //Сброс таймера watchdog 
                                                                                                                                           

                                   } ; 
                               } 




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

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

ms millis(); 
  
// Событие срабатывающее каждые 125 мс 
  
if ( ( ms ms1 ) > 125 || ms ms1 ) { 
    
ms1 ms
    
// Режим светодиода ищем по битовой маске 
    
if (  blink_mode << (blink_loop 0x07) ) digitalWrite(13HIGH); 
    else  
digitalWrite(13LOW); 
    
blink_loop++; 
  } 
   
  
// blink_mode = modes[3]; 
   
  
if (blink_mode != modes[5] || blink_mode != modes[5])  
  { 
  if (
flagAKB == ){blink_mode modes[0];}                 // индикация напруги батареи на ардуинине.- низкое напряжение АКБ авто 
  
if (flagAKB == && flagACC == 1) {blink_mode modes[2];} //- нормальное напряжение, включено ACC, рабочий режим. 
  
if (flagAKB == && 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

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

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


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

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

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

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

oleg707 31.05.2016 13:19

Цитата:

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

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

Az0m@ 31.05.2016 22:00

Цитата:

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

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

oleg707 31.05.2016 22:22

Цитата:

Сообщение от Az0m@ (Сообщение 361868)
вопщем все отключил от БП. попробывал записать разные коды из инета которые должны активировать светик L, в том числе и блинк из примеров... но ни одном он так и не заработал. после заливки он только разок моргает и все.... эт что получается плата глючная?

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

Az0m@ 31.05.2016 23:01

Цитата:

Сообщение от oleg707 (Сообщение 361869)
питание проверь +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

Цитата:

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

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

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

Az0m@ 02.06.2016 01:02

Цитата:

Сообщение от oleg707 (Сообщение 361975)
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

Цитата:

Сообщение от Az0m@ (Сообщение 361999)
одну проблему вроде как решил, изменил код:
Код:

  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

Цитата:

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

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

И то и другое есть, чиркани пжлста контакты в личку

T_r_D 03.06.2016 17:04

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

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(18OUTPUT); //Tablet button
pinMode(19OUTPUT); //HUB power
pinMode(20INPUT);  //Tablet Screen action. Analog! If input >232 then screen on 
pinMode(21OUTPUT); //Tablet power
pinMode(10OUTPUT); //Tablet power supply low if car bat level low

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

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

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(10HIGH);
       
delay(2000);
       
digitalWrite(10LOW);
       
delay(10000);
       
TabErr true;
  }
}

void WorkLoop(){
//_____________________________ON_______________________________
  
if (digitalRead(8) == HIGH || digitalRead(9) == HIGH){
    
OnceLoPow false;
    
digitalWrite(19LOW);
    
digitalWrite(21LOW);
    if(
analogRead(20) < 400) {
     
BtnClick(300);
      if (
analogRead(20) < 400BtnClick(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(19HIGH);
    }
    else{
      if (!
OnceLoPow){
       
digitalWrite(10HIGH);
       
delay(2000);
       
digitalWrite(10LOW);
       
OnceLoPow true;
      }
    
digitalWrite(19HIGH);
    
digitalWrite(21HIGH);  
    }
   }
}

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


ruzzzteg 03.06.2016 19:06

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

oleg707 04.06.2016 01:38

Цитата:

Сообщение от ruzzzteg (Сообщение 362175)
Дядьки читал читал... так и не понял...
подскажите сильно не ругаясь...
какой в итоге блок питания лучше собрать...
если можно сылкой

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

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

oleg707 04.06.2016 01:41

Цитата:

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

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(18OUTPUT); //Tablet button
pinMode(19OUTPUT); //HUB power
pinMode(20INPUT);  //Tablet Screen action. Analog! If input >232 then screen on 
pinMode(21OUTPUT); //Tablet power
pinMode(10OUTPUT); //Tablet power supply low if car bat level low

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

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

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(10HIGH);
       
delay(2000);
       
digitalWrite(10LOW);
       
delay(10000);
       
TabErr true;
  }
}

void WorkLoop(){
//_____________________________ON_______________________________
  
if (digitalRead(8) == HIGH || digitalRead(9) == HIGH){
    
OnceLoPow false;
    
digitalWrite(19LOW);
    
digitalWrite(21LOW);
    if(
analogRead(20) < 400) {
     
BtnClick(300);
      if (
analogRead(20) < 400BtnClick(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(19HIGH);
    }
    else{
      if (!
OnceLoPow){
       
digitalWrite(10HIGH);
       
delay(2000);
       
digitalWrite(10LOW);
       
OnceLoPow true;
      }
    
digitalWrite(19HIGH);
    
digitalWrite(21HIGH);  
    }
   }
}

void BtnClick(int Interval) {
    
digitalWrite(18HIGH);
    
delay(Interval);
    
digitalWrite(18LOW);
    
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

Цитата:

Сообщение от T_r_D (Сообщение 362191)
Пока ни чего не мерил.
Я потом схему выкину- рисовать её в лом.
Суть такая- промикра запитана от киса и управляет двумя блоками питания на 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

Цитата:

Сообщение от T_r_D (Сообщение 362213)
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

версия 54
 
PHP код:

//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 msms1 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(0x27162); // 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(STATEpinIINPUT);
  
pinMode(STATEpinIIINPUT);
  
pinMode(PlanshBATpinOUTPUT);
  
pinMode(SAMOZAPITKApinOUTPUT);
  
pinMode(OTGpinOUTPUT);
  
pinMode(SLEEPpinOUTPUT);
  
pinMode(II_KIW_pin_POGOpinOUTPUT);
  
pinMode(HUBpinOUTPUT);
  
pinMode(13OUTPUT); //светодиодик на плате ардуины
  
pinMode(REMpinOUTPUT);
  
pinMode(REGISTRATORpinOUTPUT);

  
digitalWrite(PlanshBATpin0);  //вЫключаем питание на батарею планшета
  
digitalWrite(SAMOZAPITKApin0);  //выключаем SAMOZAPITKApin, при этом пропадает управление на IN4, система ПОЛНОСТЬЮ обесточивается
  
digitalWrite(OTGpin0); //вЫключаем минус на Y-OTG (8 pin PW1)
  
digitalWrite(II_KIW_pin_POGOpin0); //вЫключаем +5V (POGO(USB))
  
digitalWrite(HUBpin1); // подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб = ВЫключаем хаб
  
digitalWrite(REMpin0); // // выключаем выход REM
  
digitalWrite(REGISTRATORpin0); // выключаем питание  на видеорегистратор
  
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=0i<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 == || millis() > 10000 && flagACC == 1) {
    
flagHALL 1//проверка отсчета при холодном старте при включении  и сразу выключении ACC
  
}
 
if ((
U_akb_real U_acc_real) >)//проверка, выключили ли мы зажигание или просто стартуем (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 == && flagAKB == //проверка напруги АСС и АКБ при флаге ACC = 0
  
{
    
flagACC 1;
    
pauseTimeACC millis();
    
pauseTimeAKB millis();
    
lcd.clear(); //очистка экрана
  
}




  if (
millis() - pauseTimeACC >= 500 && flagACC == 1// пауза 0,5c после включения ACC и потом делать следующ(пока включено ACC):
  
{
    
digitalWrite(PlanshBATpin1);  //включаем питание на батарею планшета (in2)
    
digitalWrite(OTGpin1); //включаем минус на Y-OTG  (включается  звуковая карта)
  
}
  
  if (
millis() - pauseTimeACC >= 800 && flagACC == 1// пауза 0.8c после включения ACC и потом делать следующ(пока включено ACC): //через 0,8с после включения ACC включаем экран, включаем питание  на видеорегистратор.
  
{
    
digitalWrite(II_KIW_pin_POGOpin1); //включаем +5V (POGO(USB) нужно для распознавания планшетом признака зарядки. ( можно подавать на +5В USB кабеля (для тимуровской прошивки или если не используется датчик холла)
    
digitalWrite(REGISTRATORpin1); // включаем питание  на видеорегистратор
  
}
    
  if (
millis() - pauseTimeACC >= 2000 && flagACC == 1)//через 1с после включения ACC включаем экран (вЫключаем минус на упр SLEEP), выход REM(если больше 12в), Включаем хаб (подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб)
  
{
    
digitalWrite(SLEEPpin0); //включаем экран = вЫключаем минус на упр SLEEP
    
digitalWrite(HUBpin0); //Включаем хаб = подаем минус на управляющий транзюк хаба, тот открывается и пускает +5В с KIW (2вых)на хаб
    
if (U_akb_real >= 12 && flagACC == 1)//если напруга батареи больше 12В, то включаем еще и усилитель звука (выход REM)
    
{
      
digitalWrite(REMpin1); // включаем выход REM
    
}
  }



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

  
if (U_acc_real UaccONorOFF && flagACC == 1)
  {
    
flagACC 0;  //Выключили зажигание
    
digitalWrite(REMpin0); // выключаем выход 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(OTGpin0); //вЫключаем минус на Y-OTG (8 pin PW1)
    
digitalWrite(II_KIW_pin_POGOpin0); //вЫключаем +5V (POGO(USB))
    
digitalWrite(HUBpin1); // ВЫключаем хаб = подаем + на управляющий транзюк хаба, тот закрывается и не пускает +5В с KIW (2вых)на хаб
    
lcd.noBacklight(); // тушим подсветку экрана
    
if (flagHALL == 1)
    {
      
digitalWrite(SLEEPpin1); //включаем минус на SLEEP (7 pin PW1)при этом тухнет экран (если прошло 2 минуты с момента включения ардуины)
    
}
    else
    {
      
digitalWrite(SLEEPpin0);
    }
  }

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

  
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(SAMOZAPITKApin1);  // включаем самозапитку через 2с
    
flagAKB 1;} //подняли флаг батареи
  
}

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

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

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

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

 
  
  

  



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




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


//******************************************индикация светодиодом и задержка вывода на дисплей********************************************************************************************************************************************************************************
   
ms millis();
  
// Событие срабатывающее каждые 125 мс
  
if ( ( ms ms1 ) > 125 || ms ms1 ) {
    
ms1 ms;
    
// Режим светодиода ищем по битовой маске
    
if (  blink_mode << (blink_loop 0x07) ) digitalWrite(13HIGH);
    else  
digitalWrite(13LOW);
    
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(00);
  
lcd.print((millis() )/60000); // вывод кол-ва минут работы блока ( 1 строка 1 символ)
  
lcd.setCursor(90);
  
lcd.print(flagACC); // вывод флага АСС
  
lcd.setCursor(110);
  
lcd.print(U_acc_real); // вывод напряжения АСС
  
  //lcd.setCursor(5,1);
  //-------------------2 строка---------------------------------
  
lcd.setCursor(01);
  
unsigned long TIMER = (  pauseTimeAKB  37000000 millis()  )/60000// вывод кол-ва минут, оставшиеся до выключения блока (когда выключено АСС)
  
lcd.print(TIMER);
  
lcd.setCursor(91);
  
lcd.print(flagAKB); // вывод флага АКБ
  
lcd.setCursor(111);
  
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 == ){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 выключено.
   */
//**********************************************************************************************************


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


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

// 



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

T_r_D 08.06.2016 14:44

Вложений: 1
oleg707
Ну да- неравенства != в сях.

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

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

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

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

T_r_D 08.06.2016 18:05

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

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

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

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

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

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

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

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

Вячеслав23 18.06.2016 13:14

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

yuriy m 18.06.2016 13:24

Цитата:

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

резистор + конденсатор на вывод ON/OFF киса ..:bye:

Вячеслав23 18.06.2016 13:51

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

T_r_D 18.06.2016 23:26

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

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(18OUTPUT); //Tablet button
pinMode(19OUTPUT); //HUB power
pinMode(20INPUT);  //Tablet Screen action. Analog! If input >232 then screen on 
pinMode(21OUTPUT); //Tablet power
pinMode(10OUTPUT); //Tablet power supply low if car bat level low

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

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

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

void mag_car_on(){
  
in_progress 1;
  
digitalWrite(19LOW);
  
digitalWrite(21LOW);
//Клик кнопкой 300мс, после этого ждём 2с на стадии 3 проверяем включился ли планшет
//и если нет, то зажимаем кнопку на 3с, потом ждём 2с.
  
if (stage == 0) {
  
digitalWrite(18HIGH);
  
stage 1;
  
stage_timer millis();
  }
  if (
stage == && (millis() - stage_timer) > 300) {
  
digitalWrite(18LOW);
  
stage 2;
  
stage_timer millis();
  }
  if (
stage == && (millis() - stage_timer) > 2000) {
  
stage 3;
  }
  if (
stage == 3){
    if (
analogRead(20) > 400) {
    
stage 0;
    
in_progress 0;
    }
    else {
    
digitalWrite(18HIGH);
    
stage 4;
    
stage_timer millis();
    }
  }  
  if (
stage == && (millis() - stage_timer) > 3000) {
    
digitalWrite(18LOW);
    
stage 5;
    
stage_timer millis();
  }
  if (
stage == && (millis() - stage_timer) > 2000) {
  
stage 0;
  
in_progress 0
  }
}
 
void power_off(){
  
in_progress 2;
  
BtnClick(300);
  
delay(4000);
  
digitalWrite(19HIGH);
  
//проверить выключился или нет и если нет, то сбросить.
  
if (analogRead(20) > 400){
   
digitalWrite(10HIGH);
   
delay(2000);
   
digitalWrite(10LOW);
   
delay(10000);
  }
  
in_progress 0;
}
 
void halt(){
  
in_progress 3;
  
digitalWrite(19HIGH);
  
digitalWrite(21HIGH);
  
in_progress 0
}
 
void BtnClick(int Interval) {
    
digitalWrite(18HIGH);
    
delay(Interval);
    
digitalWrite(18LOW);
    
delay(1000);
  } 

PS Нашёл неприятность, не знаю как в нексусе, а у леновы это есть.
Суть в том, что после "жёсткой" перезагрузки питанием через примерно 10 секунд экран планшета включается и показывает текущий заряд батареи!
И это держится ещё примерно 10 секунд.
Тоесть из за этого код выключения отработал и тут на тебе- экран загарелся и естественно код начал отрабатываться ещё раз с тем же "жёстким" ресетом.
Ну короче дальше всё по кругу! Вовремя нашёл это, а то в машине было бы весело после первого же зависания.
Поправил в своём коде на 30с, а в котором тут не правил.
В общем-то я код оттестировал и если интерестно, то могу окончательный вариант запостить.

PPS Не в тему, но может кто знает. Lenovo tab2 A7 при подключении флехи выдаёт сообщение
"OTG-диск готов к использованию
Изменить настройки памяти по умолчанию?"
Ну и отмена и ок. Как убрать эту табличку нафиг? А то в машине при подключении флехи/выхода из слипа/загрузки она вылетать будет! Задолбает же в ноль!

plus88 20.06.2016 15:57

Конечно интересно кидай!


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

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