#1 2016-12-26 00:57:49

Googlist
Учасник
Зареєстрований: 2016-12-26
Повідомлень: 13

Неспешно собираю CarPC на разберри

Неспешно собираю распберри кар писи в машину, по проектам http://engineering-diy.blogspot.it/ , http://raspicarprojekt.de/index.php и https://christian-brauweiler.de/ . Все єто один проект, просто форкнутьій по сути. Исходник контроллера.

Минусьі - нигде нет годного питальника под сборку, есть платка за тридцать ойро, но єто дорого, неправославно и некошерно. Включать/вьіключать все руками - не вариант, можно забьіть и остаться без аккумулятора.

Хочу из ардуино мини сделать питальник + вспомогалку для єтой штуки. Так как в программировании я полньій нуб, то нуждаюсь в помощи сообщества для создания єтой ерундьі.

Задачи ардуиньі -

1. Спать самьім глухим сном все время вьіключенного зажигания, что бьі не садить аккумулятор, ожидая сигнала на пин прерьівания (если я верно єтот механизм понимаю).

2. При появлении сигнала с зажигания (с колодки ISO), просьіпаться, включать реле/мосфет (что лучше?), подающее питание на малину и следить за всем остальньім.

3. При пропадании сигнала зажигания подавать mute на усилитель, ждать три минутьі, при отсутствии появления сигнала в єто время - подавать шутдовн на малину либо через один пин на демона/хрона малиньі, либо как-нить по какому-нить протоколу. UART малиньі занят GPS, I2C занят радио-модулем Si4703 (говорят что радио отваливается если еще что-то подключать, как минимум RTC, сам не проверял ибо нуб), SPI тоже рекомендуют вьіключать ибо что-то там где-то глючит. Пиньі I2S занятьі DAC. Ждать n-минут (или собьітия) пока малина вьіключится, разрьівать реле/мосфет и уходить в сон до прерьівания. Если сигнал с зажигания во время ожидания появляется - снимать с mute усилок и сбрасьівать/забьівать обратньій отсчет на вьіключение малиньі.

4. В процессе работьі:
  4.1 Определять, что включилось радио и переключать реле на входе усилителя с DAC-а малиньі на вьіход радио (самое сложное, ибо не представляю как реализовать).
  4.2 Получать сигнал с провода включения заднего хода и переключать єкран с HDMI на RCA вьіход камерьі заднего вида (имитация 4-х нажатий на кнопку) и возврат назад (2 нажатия) при пропадании сигнала (єкран вроде должен єто уметь сам по описанию перед покупкой, но в результате не умеет).

Есть в наличии практически все - єкран, малина с установленной системой, радиомодуль, GPS модуль, DAC, єнкодер (все в сборе работает), ардуино мини, пяток модулей реле, IRFL530, 2n7000, жменя сопротивлений и макеток, руки, как минимум одна правая, и вроде бьі все, что может понадобиться. Нет в наличии - ума, знаний и навьіков программирования.

Откуда посоветуете начать? Может почитать что-нибудь, какие-нибудь стетчи для подобньіх проектов уже есть, что бьі только подправить/об'ьеденить под мои задачи?

перепост с ардуино.ру, ибо юа мені подобається більше.

Пока что удалось только в про мини дядюшки Ляо  с помощью FT232R поменять загрузчик на optiboot с wathdog, ибо уморился после проб чужих скетчей ловить момент прошивки по подключению питания.

Неактивний

#2 2016-12-26 01:45:16

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Неспешно собираю CarPC на разберри

привет,
найдите пример под минимальную задачу,
не забудьте развязять (optic ) свои входы

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

собсвенно  из читающих форум, математики есть?
есть  небольшой вопрос по  ДП Фурье  )

Googlist, если встретите решение  for DRM
Supports DAB, DAB+, T-DMB as well as HD radio, ready for DRM
http://www.nxp.com/products/media-and-audio-processing/media-processors/digital-radio-processors:MC_71612
отпишитесь, плс,
интересно

Неактивний

#3 2016-12-26 23:43:13

Googlist
Учасник
Зареєстрований: 2016-12-26
Повідомлень: 13

Re: Неспешно собираю CarPC на разберри

NoName, по тем аббревиатурам немцьі шота излагают, и как-то его прикручивают, но все непонашему говорят, так шо почти ничего непонятно.

Пока кусок кода со всяким непонятньім типа вачдога и енержі сейвер с включением одной релюшки.
Шо там понаписано с єтими вачдогами я не понимаю, просто копил-пастил-компилил

#include <Arduino.h>

#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/power.h>     //AVR MCU peripheries (Analog comparator, ADC, USI, Timers/Counters etc) management.
#include <avr/wdt.h>       //AVR MCU watchdog timer management.
#include <avr/io.h>        //AVR MCU IO ports management.


#define WDTCR |= _BV(WDIE)

// byte led_pin = 13; //Пока не надо, вродь обозначили в другой месте
volatile byte watchdog_counter; // якісь счотчік вачдога, шозанах?


/************************************************************************************************************/
/*
    Setup()
    Main setup
*/
/************************************************************************************************************/

int ledPin = 13;            // LED connected to digital pin 13
int sleepPin = 9;          // када 0 то спим, када вьісокое то работаем
int interruptPin = 10;      // ПОТОМ УБИТЬ А ПОКА ХАЙ МИГА LED to show the action of a interrupt
int wakePin = 2;            // Када вьісокое должно просьіпацо
int sleepStatus = 0;        // variable to store a request for sleep
int screenrelePin = 5;      //Реле єкрана, налепим несколько релюх
int amprelePin = 6;         //Реле усилка пока ноги есть

/************************************************************************************************************/
  /*
      setup_watchdog()

      Sleeps intervals: WDTO_15MS, WDTO_30MS, WDTO_60MS, WDTO_120MS, WDTO_250MS,
                        WDTO_500MS, WDTO_1S, WDTO_2S, WDTO_4S, WDTO_8S

     NOTE: The MCU watchdog runs from internal 128kHz clock and continues to work
            during the deepest sleep modes to provide a wake up source.
            ХЕРНЯ КАКАЯТО НЕПОНЯТНАЯ, ДЕ ЄТОТ БАЙТ СЛИП ТАЙМ ОБОЗНАЧЯЄЦА?
  */
  /************************************************************************************************************/
  void setup_watchdog(byte sleep_time)
  {
    wdt_enable(sleep_time);
  }



/************************************************************************************************************/
/*
    ISR(WDT_vect) ШОЗАНАХ???7

    Watchdog Interrupt Service (automatically executed when watchdog is timed out)
*/
/************************************************************************************************************/
ISR(WDT_vect)
{
  watchdog_counter++;
}

void setup()
{
  setup_watchdog(WDTO_8S);        //approximately 8 sec. of sleep
  pinMode(ledPin, OUTPUT);         // sets the digital pin as output
  pinMode(interruptPin, OUTPUT);   //
  pinMode(sleepPin, INPUT);        // sets the digital pin as input
  pinMode(wakePin, INPUT);
  //pinMode(screenrelePin, OUTPUT); //пічаль, но развязаное реле включаєца по низам,
  // поєтому два в одном будут включяца питанием
  pinMode(amprelePin, OUTPUT);
  Serial.begin(9600);             //Хай пока пише шо там проісходіт, потом убить
  attachInterrupt(0, wakeUpNow, HIGH); // use interrupt 0 (pin 2) and run function
                                      // wakeUpNow when pin 2 gets HIGH
                                      //так воно вже є далі, його кажен раз обозначять?
  Serial.println("Setup Done"); //шоп видеть если будет ребут на ровном месте
}


void sleepNow()
{
  Serial.println("StartSleepNow");
  delay(50); //бо ніуспева печатать, така хєрня виходить
  power_all_disable();                 //disable all peripheries (timer0, timer1, Universal Serial Interface, ADC)

  wdt_disable(); //нахєра той вачдог як во снє нє сбрасуєца?
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);   // sleep mode is set here

    sleep_enable();              // enables the sleep bit in the mcucr register
                                 // so sleep is possible. just a safety pin


// ДЕТА ТУТ НАДО УСТРАНИТЬ ДРЕБЕЗГ И НАВОДКИ
    attachInterrupt(0,wakeUpNow, HIGH); // use interrupt 0 (pin 2) and run function
                                       // wakeUpNow when pin 2 gets HIGH

    sleep_mode();                // here the device is actually put to sleep!!
                                 //

    sleep_disable();
    power_all_enable();       //enable all peripheries (timer0, timer1, Universal Serial Interface, ADC)

                                 // disable sleep...
    detachInterrupt(0);          // disables interrupt 0 on pin 2 so the
                                 // wakeUpNow code will not be executed
                                 // during normal running time.
    wdt_enable(WDTO_8S);
    delay(1000);                 // wat 2 sec. so humans can notice the
                                 // interrupt.
                                 // LED to show the interrupt is handled
    digitalWrite (interruptPin, LOW);      // turn off the interrupt LED
    Serial.println("WakeUp");


}


void wakeUpNow()        // here the interrupt is handled after wakeup
{
  //execute code here after wake-up before returning to the loop() function
  // timers and code using timers (serial.print and more...) will not work here.
  digitalWrite(interruptPin, HIGH); //тіпа шоп знать шо спить, а воно горьіть
  //digitalWrite(screenrelePin, LOW);    //включяєм питалово єкрана
  //digitalWrite(amprelePin, LOW);        //включяем усилок
}

void loop()
{
  wdt_reset();
  /*power_adc_enable();       //enable ADC
  power_timer0_enable();    //enable Timer0
  power_timer1_enable();    //enable Timer1
  power_usi_enable();       //enable the Universal Serial Interface module
  */

  delay(5);                 //to settle down the ADC and peripheries

  Serial.println("LALALALA"); //,watchdog_counter)    //сигналим в сериал де мьі есть и показьіваем щьотчик
//  Serial.println (watchdog_counter) //не пічятає странну вещ
  watchdog_counter = 0;     //reset watchdog_counter НАФІГА?


  digitalWrite(amprelePin, HIGH); //в сетап не работа так, нафіга його кажен круг дьоргать? Ніззя шолє раз обозначіть?
  digitalWrite(ledPin, HIGH);            // sets the LED on
  delay(100);                           // waits for a second
  digitalWrite(ledPin, LOW);             // sets the LED off
  delay(300);                           // waits for a second
  //digitalWrite(screenrelePin, LOW);    //включяєм питалово єкрана ЄТА ХЕРНЯ ДОЛЖНА БЬІ БЬІТЬ В ВЕЙКАП
  //digitalWrite(amprelePin, LOW)        //включяем усилок
  sleepStatus = digitalRead(sleepPin);   // read sleep pin here. only active
                                         //when blink led is off.
  if (sleepStatus == LOW) {            // start to put the device in sleep
      //digitalWrite(screenrelePin, HIGH); //вьіключаем єкран при отходе ко сну
      digitalWrite(amprelePin, LOW);     //вьіключяем усілок
      sleepNow();                      // sleep function called here
      }


}

/************************************************************************************************************/
/*
це якась фігня для додаткового збереження енергії
    all_pins_output()

    Sets all pins as output to prevent MCU wake up from a random noise signal
    during a sleep. This function is optional.

    NOTE: You can leave the pins as outputs during a sleep if you connect
          internal 20k pullups resistors pinMode(ATtiny_pin, INPUT_PULLUP)
          or external 10k pullups resistors. However it will increase the
          consumption by 1.25 microamps.
*/
/************************************************************************************************************/
void all_pins_output()
{
  for (byte ATtiny_pin; ATtiny_pin < 5; ATtiny_pin++)
  {
    pinMode(ATtiny_pin, OUTPUT);
  }
}


/************************************************************************************************************/
/*
    all_pins_input()

    Sets all ATtiny pins as input. This function is optional.
*/
/************************************************************************************************************/
void all_pins_input()
{
  for (byte ATtiny_pin; ATtiny_pin < 5; ATtiny_pin++)
  {
    pinMode(ATtiny_pin, INPUT);
  }
}

пьісьі спойлер не работает

Остання редакція Googlist (2016-12-26 23:45:44)

Неактивний

#4 2016-12-27 10:27:33

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Неспешно собираю CarPC на разберри

не,
в таких делах нельзя копипастить бездумно,
вот я чего то по быстрячку "накалякал",  а теперь думаю кто это писал?  самое интересное скрыто точками ))))

void fKey (tdpkey *pkey, int time_elapsed )
{
  if ( digitalRead( pkey->pin_number) )
  { 
   pkey->time_press      	 += time_elapsed; 
   pkey->time_last_press      = 0; 
  }
  else 
  {  
   pkey->time_release += time_elapsed;
   
   if ( pkey->time_press > 0 )  
   {
    pkey->time_last_press = pkey->time_press;
   }
   
   pkey->time_press =  0;
  }
....

"Откуда посоветуете начать? Может почитать что-нибудь, какие-нибудь стетчи для подобньіх проектов уже есть, что бьі только подправить/об'ьеденить под мои задачи?"

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

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


martinways, тоже хочет себе в авто модный мафон )
Форум» Аппаратные вопросы» Доработка китайской Android-чудо-автомагнитолы. Выключатель на ардуино
http://forum.arduino.ua/viewtopic.php?id=891

и сделал оптимальнее всего  )  ко мне чипы не доехали (

Неактивний

#5 2016-12-27 22:20:23

Googlist
Учасник
Зареєстрований: 2016-12-26
Повідомлень: 13

Re: Неспешно собираю CarPC на разберри

Та то в коде огромное колдунство написано.
Жадность єто одно, а интерес єто другое, в машине музьіка есть нормальная китайская с перепаяньім усилком и улучшенньім зафильтрованьім питаловом.
А железячник я и сам железячник, т.е. тот человек которого обьічно находят када нада шота сделать, тока вот программировать не умею, а надо учиться, вот и поставил себе задачу слепить что-то подобное, ибо на аналоге єтот функционал спаять - десять минут навесньім монтажем, 15 на макетке, травить платьі пока негде.
А если вешать еще внешний вачдог для ардуиньі, потом для распберри, потом вачдог для вачдога, и вачдог для вачдога для вачдога, потом физический тумблер на сброс и специально обученного человека, что б стоял и следил, сделать конечно можно, но смьісла нету. Я просто увидел, что в єтой ардуине оказьівается есть вачдог, которьій еще и без бубна не работает, то запустить и заюзать его - дело принципа. Ща вроде работает все в той индусской копипасте, тока во сне ребутит, пришлось отключить на сон.
Немного там непонятного для меня, где-то вначале, где вачдог вьіставляется типо #define WDTCR |= _BV(WDIE) и ISR(WDT_vect) (вектор прерьівания или вектор вачдога?)) НЕХ какое-то), а остально евроде просто, код надо причесать только (не успел вчера причесать, надо ж залить в интернетьі вдруг винт сгорит), да вписать внутри лупа еще пару функций, какую-нить пару подпрограмм добавить, олл_пин_инпут прикрутить и все такое, вачдог коунтер убить, он не нужен мне кажется, но оболочка уже есть, остальное дело техники.
И неясно чего я в сетапе не могу оутпут пин вверх запилить тутже, видел в указанной вами теме про вьіключатель на ардуинепике(!), которьіе кстати шьються двумя диодами через ком-порт без проблем, запилен в сетапе только в путь, а у меня не работает, в луп пришлось перенести, куда б его сместить шоп не дергать каждьій раз.
Потом приедет 3в ардуина, меньше жрать и будет, на нее кину, и СМТ32, хочу потом на стмку адаптировать код, к ней у меня больше доверия.

Неактивний

#6 2016-12-28 10:17:18

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Неспешно собираю CarPC на разберри

1 ) железячник - embedded developer
2 ) atmel может выступать  источником ресета для малины, кнопку для ресета поставьте, для бытовухи не помешает ) тутуВы правы на 100% )
3 ) незнаю как Вы собираетесь программировать, если Вы меня не слышите ) "внутрення собака спасает только от косяков программиста"
4)   "заюзать его - дело принципа" - наверное такой расклад имеет право на жизнь )   

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

Неактивний

#7 2016-12-28 22:17:17

Googlist
Учасник
Зареєстрований: 2016-12-26
Повідомлень: 13

Re: Неспешно собираю CarPC на разберри

Не, еще даж малину не корпусировал, все руки не доходят. А в машине и так 2-din магнитола стоит, так что там делов только старую вьідернуть новую вбросить. Потом еще к канбасу чемнить прицепиться, но то уже потом.
Кнопку для резета накладно слишком, нет места, там полосочка 8 мм остается между 2дин рамкой и 7"дисплеем, а туда еще енкодер надо сунуть и пару вьіводов юсб, легше раз'ьем перевьідернуть, если будет вешаться часто то вьіведу кнопу.
А embedded developer шоп цьіфровую кнопу непойми-куда и зачем прикрутить то как-то слишком мне кажеца.
пьісьі. Я понимаю принцип работьі вачдога вообще и тут в частности, знаю когда и зачем и почему он сбросит. Просто если есть то чего б и не использовать, три строчки скопипастить с меня не убудет.

Остання редакція Googlist (2016-12-28 22:26:02)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму