04.06.2016, 01:41
|
#467
|
Гуру
Регистрация: 16.04.2014
Возраст: 41
Город: Gdynia
Регион: другой - для добавления сообщить ab
Сообщений: 2,548
|
Цитата:
Сообщение от T_r_D
Вот что получилось с "антизависанием".
Делей в 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(18, OUTPUT); //Tablet button
pinMode(19, OUTPUT); //HUB power
pinMode(20, INPUT); //Tablet Screen action. Analog! If input >232 then screen on
pinMode(21, OUTPUT); //Tablet power
pinMode(10, OUTPUT); //Tablet power supply low if car bat level low
pinMode(A7, INPUT); //Car bat level (In bord PIN 6!!!) 541=11,91 **analogRead(A7) * (1.1 / 1023.0*20.50);
pinMode(8, INPUT); //Radio input
pinMode(9, INPUT); //ACC input
digitalWrite(21, LOW);
digitalWrite(19, LOW);
digitalWrite(18, LOW);
digitalWrite(10, LOW);
}
void loop() {
WorkLoop();
//Измеряем среднее значение напряжения автомобиля.
if ((millis() - time0) > 100){
if (accpowercount == 60){
accpoweravg = accpower / 60;
accpowercount = 0;
accpower = 0;
}
else{
accpower = accpower + analogRead(A7);
accpowercount = accpowercount + 1;
}
time0 = millis();
}
//Планшет завис, питание выключено, напряжение в норме.
if ((millis() - time1) == 5000 && analogRead(20) > 400 && !TabErr){
digitalWrite(10, HIGH);
delay(2000);
digitalWrite(10, LOW);
delay(10000);
TabErr = true;
}
}
void WorkLoop(){
//_____________________________ON_______________________________
if (digitalRead(8) == HIGH || digitalRead(9) == HIGH){
OnceLoPow = false;
digitalWrite(19, LOW);
digitalWrite(21, LOW);
if(analogRead(20) < 400) {
BtnClick(300);
if (analogRead(20) < 400) BtnClick(3000);
}
}
//____________________STAND-BY or LO POWER_______________________
else{
if (accpoweravg > 541){
OnceLoPow = false;
if(analogRead(20) > 400) {
BtnClick(300);
delay(4000);
if (analogRead(20) > 400 && TabErr){
time1 = millis();
TabErr = false;
}
}
digitalWrite(19, HIGH);
}
else{
if (!OnceLoPow){
digitalWrite(10, HIGH);
delay(2000);
digitalWrite(10, LOW);
OnceLoPow = true;
}
digitalWrite(19, HIGH);
digitalWrite(21, HIGH);
}
}
}
void BtnClick(int Interval) {
digitalWrite(18, HIGH);
delay(Interval);
digitalWrite(18, LOW);
delay(1000);
}
|
kis3r33 слишком ЖИРНО для дежурного источника питания. Или режима ожидания у тебя нет?
Сколько потребление самого блока при выключенном зажигании и при активном состоянии (без планшета) ?
|
|
|