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

Вернуться   PCCar.ru - Ваш автомобильный компьютер > MP3Car ТехИнфа > AndroidCar > Питание

Результаты опроса: Писать ли про развитие проекта, или пофиг, есть свой и работает.
Пиши дальше 210 96.33%
Не пиши, лучше займись чем нибудь (другим) полезным. 8 3.67%
Голосовавшие: 218. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2016, 18:05   #471
oleg707
Гуру
 
Аватар для oleg707
 
Регистрация: 16.04.2014
Возраст: 39
Город: Gdynia
Регион: другой - для добавления сообщить ab
Сообщений: 2,548
oleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond repute
По умолчанию

Цитата:
Сообщение от T_r_D Посмотреть сообщение
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   #472
oleg707
Гуру
 
Аватар для oleg707
 
Регистрация: 16.04.2014
Возраст: 39
Город: Gdynia
Регион: другой - для добавления сообщить ab
Сообщений: 2,548
oleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond repute
По умолчанию

а как задать условие НЕ РАВЕН ?
!= так?

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

это правильно?
oleg707 вне форума   Ответить с цитированием
Старый 05.06.2016, 15:44   #473
oleg707
Гуру
 
Аватар для oleg707
 
Регистрация: 16.04.2014
Возраст: 39
Город: Gdynia
Регион: другой - для добавления сообщить ab
Сообщений: 2,548
oleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond repute
Arrow версия 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
могу отсутствовать на форуме около месяца.

Последний раз редактировалось oleg707; 08.06.2016 в 02:55.
oleg707 вне форума   Ответить с цитированием
Старый 08.06.2016, 14:44   #474
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

oleg707
Ну да- неравенства != в сях.

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

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

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

PS. Сам отсутствую по неделе
Миниатюры
Нажмите на изображение для увеличения
Название: Новый точечный рисунок.jpg
Просмотров: 424
Размер:	40.1 Кб
ID:	43977  
T_r_D вне форума   Ответить с цитированием
Старый 08.06.2016, 18:05   #475
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

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

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

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

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

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

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

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

Короче, я свою версию БП потестирую, у меня там функций мало, так что код вряд ли глючить будет и посмотрим.
На всякий случай выведу кнопку хард ресета (тоесть обесточивания контроллера).
Миниатюры
Нажмите на изображение для увеличения
Название: watchdog.jpg
Просмотров: 359
Размер:	31.0 Кб
ID:	44006  

Последний раз редактировалось T_r_D; 16.06.2016 в 00:11.
T_r_D вне форума   Ответить с цитированием
Старый 18.06.2016, 13:14   #476
Вячеслав23
Пользователь
 
Регистрация: 05.08.2015
Возраст: 32
Город: Краснодар
Регион: 23, 93
Машина: Toyota bB
Сообщений: 42
Вячеслав23 is on a distinguished road
По умолчанию

Как можно сделать задержку включения самым бюджетным способом, просто 1 кис который питает хаб и перефирию включается от АСС, и сейчас одновременно 2 кис включается с АСС для планшета!
Вячеслав23 вне форума   Ответить с цитированием
Старый 18.06.2016, 13:24   #477
yuriy m
Старший Пользователь
 
Регистрация: 13.11.2011
Возраст: 45
Город: Гомель BY
Регион: 03
Машина: Гольф2 -> Lancia Zeta
Сообщений: 376
yuriy m is a jewel in the roughyuriy m is a jewel in the roughyuriy m is a jewel in the rough
По умолчанию

Цитата:
Сообщение от Вячеслав23 Посмотреть сообщение
Как можно сделать задержку включения самым бюджетным способом, просто 1 кис который питает хаб и перефирию включается от АСС, и сейчас одновременно 2 кис включается с АСС для планшета!
резистор + конденсатор на вывод ON/OFF киса ..
__________________
Управление под ANDROID ... http://www.pccar.ru/showthread.php?t=24001
Мой старый проект http://www.pccar.ru/showthread.php?t=18038
yuriy m вне форума   Ответить с цитированием
Старый 18.06.2016, 13:51   #478
Вячеслав23
Пользователь
 
Регистрация: 05.08.2015
Возраст: 32
Город: Краснодар
Регион: 23, 93
Машина: Toyota bB
Сообщений: 42
Вячеслав23 is on a distinguished road
По умолчанию

Просто получается Планшет не успевает определить хаб и устройства в нем, есть пару реле и кондеры разные! Не пойму как это реализовать!
Вячеслав23 вне форума   Ответить с цитированием
Старый 18.06.2016, 23:26   #479
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Народ, для начала спрошу продолжать ли мне отписывать свои наработки для своего БП тут или создать отдельную тему? Может вы не хотите тут лишнего флуда видеть.
Ну а про свои наработки- подумал я и переписал код "чутка". Короче захотел убрать делеи и сделать более правильный алгоритм работы.
Вот код как ща есть- без перерывов цикла сделана только функция включения. Остальное потом допишу, а это для сравнения сколько нужно строк чтоб заменить 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-диск готов к использованию
Изменить настройки памяти по умолчанию?"
Ну и отмена и ок. Как убрать эту табличку нафиг? А то в машине при подключении флехи/выхода из слипа/загрузки она вылетать будет! Задолбает же в ноль!

Последний раз редактировалось T_r_D; 19.06.2016 в 01:33.
T_r_D вне форума   Ответить с цитированием
Старый 20.06.2016, 15:57   #480
plus88
Старший Пользователь
 
Регистрация: 05.05.2015
Город: Омск
Регион: 55
Машина: Prado 120
Сообщений: 133
plus88 is on a distinguished road
По умолчанию

Конечно интересно кидай!
plus88 вне форума   Ответить с цитированием
Ответ

Метки
arduino, nexus7, блок питания, блок питания планшета


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



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


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