Перевод кода

dronsoft
Offline
Зарегистрирован: 02.06.2011

 Народ подскажите как можно перевести код на писанный на С или асамблере под код для ардуино.

whoim
Offline
Зарегистрирован: 03.11.2011

1) головой

2) зачем?

Zaliv
Offline
Зарегистрирован: 05.03.2011

 Если какой расчет по формуле скопировать, то языки очень похоже, это я про С, скажем так синтаксис скетчей для Ардуино, основан на С

Зачем, тоже  любопытно.

step962
Offline
Зарегистрирован: 23.05.2011

dronsoft пишет:

 Народ подскажите как можно перевести код на писанный на С или асамблере под код для ардуино.

А для какого микроконтроллера (если вообще для мк) написан код?

Может быть и нельзя...

dronsoft
Offline
Зарегистрирован: 02.06.2011

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

Зачем?

хочу переделать под себя так чтоб понятней было это блок управления двигателем "Vems" или "MS2"

dronsoft
Offline
Зарегистрирован: 02.06.2011

 подсебя и под арду

step962
Offline
Зарегистрирован: 23.05.2011

dronsoft пишет:

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

Ну это, по крайней мере, не маш.коды?

Кусок кода выложить что мешает?

dronsoft
Offline
Зарегистрирован: 02.06.2011
/*********************************************************\
*  AVR MegaSquirt - 2003                                  *
*  (C) 2003 [Michael Kristensen, mik@caffrey.dk]          *
***********************************************************
*  -- History --                                          *
*    release 0.1 - 06-03-2003                             *
*            http://caffrey.dk/megasquirt                 *
*    initial Motorola version by Bowling & Grippo (2002)  *
*            http://www.bgsoflex.com/megasquirt.html      *
\*********************************************************/


#include "megasquirt.h"
#include "global.h"
#include "comm.h"
#include "fuelcalc.h"
#include "helpers.h"
#include "storage.h"
#include "adc.h"
#include "actuators.h"
#include "tables.h"

#include <avr/io.h>
#include <inttypes.h>
#include <avr/wdt.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <avr/sfr_defs.h>
#include <avr/pgmspace.h>


/*
TODO:
  Check reset source at power-up
  Watchdog timer 
*/


extern uint8_t sensors[];
extern volatile struct squirt_t inj_port1, inj_port2;
extern volatile struct engine_t engine;
extern volatile struct config_t config;

extern uint8_t tpsfuelcut;

volatile uint8_t alive;
extern volatile uint8_t crank_enable_timeout;

int main(void) {

  /* инициализация портов IO */
  PORTA = 0x0F; // misc LEDs
  DDRA = 0xF8;

  PORTB = 0x63; // pwm active low
  DDRB = 0xFC;

  PORTC = 0xE0; // stepmotor
  DDRC = 0x1F;

  PORTD = 0xFF;
  DDRD = 0x00;
  
  PORTE = 0xFF;
  DDRE = 0x00;

  PORTF = 0x00; // adc channels
  DDRF = 0x00;

  PORTG = 0xFF; // unused
  DDRG = 0x18;

  /* инициализация датчиков и оперативной информации */ 
  initSensors();

  /*
    инициализация таймеров
    установить для timer0 прерывание с частотой 10 kHz
  */
  TCCR0 = _BV(WGM01) | _BV(CS01); 				// CTC, div8
  OCR0 = 200;
  TIMSK = _BV(OCIE0);  							//output-compare interrupt

  /* 
    инициализация pwm  
    Set OCnA/OCnB/OCnC on compare match, clear OCnA/OCnB/OCnC at TOP
    fast pwm mode, TOP is stored in ICR1
    TCCR1A = _BV(COM1A1) | _BV(COM1A0) | _BV(COM1B1) | _BV(COM1B0) | _BV(WGM11);
  */
  TCCR1A = _BV(WGM11);
  TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10);
  ICR1 = PWM_FREQUENCY; 						// change pwm frequency

  /* характеризация внешнего прерывания */ 
  EICRB = _BV(ISC61);  							/* спадающий фронт */ 
  EIMSK = _BV(INT6);   							/* разрешить прерывание INT6 */

  /* инициализация канала связи (rs232) */
  initUART();

  /* инициализация глобальных переменных */ 
  engine.status = 0;
  engine.status_ext = _BV(o2_not_ready) | _BV(crank_enable);
  engine.rpm = 0;
  engine.rpm_p = 0;

  inj_port1.pw = 0;
  inj_port2.pw = 0;

  crank_enable_timeout = CRANK_TIMEOUT;

  /* */
  init_fuelcalc();

  /* загрузить данные из eeprom в sram */
  loadConfig();

  // get current barometric pressure
  sensors[BARO] = sensors[MAP];

  /* fully close stepper so position is known */
  init_idle_stepper();

  // how about priming the fuelpump for a couple of seconds first
  PORTB |= _BV(FUELPUMP); /* включить топливный насос */

  // We have pressure, the fuelpump is really fast!

  // Do a temperature interpolation and schedule a priming pulse
  primepulse();

  /* разрешаем прерывания */ 
  sei();

  /* главный цикл программы*/
  for (;;) {
    calc_parameters();
    
	/* управление вентилятором радиатора ОЖ */
	coolant_fan(); 
    
	/* */
	check_fast_idle();

    if (engine.status & _BV(running)) {

		/* если двигатель вращается */
		if (engine.rpm_p) {

			/* расчитываем rpm только если это необходимо*/ 
			if (engine.status_ext & _BV(new_rpm)) {
				cli();
				engine.status_ext &= ~_BV(new_rpm);
				sei();
				calc_rpm();
			}

			/*
			  вход в режим пуска только по включению питания, 
			  или спустя CRANK_TIMEOUT секунд после выхода из режима пуска, 
			  или если обороты двигателя (rpm) упали до нуля.
			*/
			if ((engine.status_ext & _BV(crank_enable)) && (engine.rpm <= config.cranking_thres)) {
				cranking();
				cli();
				engine.status_ext &= ~_BV(left_crankmode); /* флаг, выход из режима пуска */
				crank_enable_timeout = CRANK_TIMEOUT;
				sei();
			} else {    								   /* двигатель работает */ 
				cli();
				engine.status_ext |= _BV(left_crankmode);  /* флаг, выход из режима пуска */
				sei();
				// check if idle ?
				warmup_enrich();
				tps_acc_enrich();
				o2();
				ve_table_lookup();
				calc_total_enrichment();
			}
		}
    }

	alive = 1;  /* указывает, что достигнут конец главного цикла */
  }

  return (0);
}

 

dronsoft
Offline
Зарегистрирован: 02.06.2011

Есть целая папка с кодами

Voltran
Offline
Зарегистрирован: 11.12.2012
whoim
Offline
Зарегистрирован: 03.11.2011

спрашивайте построчно, что непонятно - поможем

Voltran
Offline
Зарегистрирован: 11.12.2012

Есть схема ЭБУ Megasqirt только она на 8-Bit MC68HC908

Есть его клон на AVR с ограниченными функциями, на просторах интернет он называется MegasqirtAVR

На форуме http://www.audi-club.ru/forum

есть тема "ЭСУД под управлением EFI MegasquirtAVR в автомобилях AUDI 84/94 годов выпуска"

где подробно обсуждается как собрать ЭБУ на ATmega128

собственно исходники программы для ATmega128

Но не каждый может самостаятельно изготовить двухстороннюю плату и запаять TQFP корпус!

А использовать Arduino для этих целей я считаю наиболее правильное решения

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

а силовую часть можно развести и самостоятельно

dronsoft
Offline
Зарегистрирован: 02.06.2011

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

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

dronsoft
Offline
Зарегистрирован: 02.06.2011

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

whoim
Offline
Зарегистрирован: 03.11.2011

dronsoft - а в чем проблема то?

dronsoft
Offline
Зарегистрирован: 02.06.2011

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

или с чего начать перекодировать код для ардуино

 

Voltran
Offline
Зарегистрирован: 11.12.2012

Предлагаю рассмотреть
В качестве клона MegasqirtAVR

Due — новая плата на базе ARM микропроцессора 32bit Cortex-M3 ARM SAM3U4E
http://arduino.ru/Hardware/ArduinoDue
Arduino ADK - версия платы Mega 2560
http://arduino.ru/Hardware/ArduinoBoardADK
Mega2560 – на базе Atmega2560
http://arduino.ru/Hardware/ArduinoBoardMega2560
Mega – на базе Atmega1280
http://arduino.ru/Hardware/ArduinoBoardMega

Кто возьмется развести схему?

dronsoft
Offline
Зарегистрирован: 02.06.2011

А зачем? если можно развети только то что нужно и на готовую плату установить арду

китай или оригинал продается места для крепежей есть и можно припаять зачем разводить (изобретать велосипед) у меня сейчас в наличии нано v4 и mega1280. Я считаю что той или другой платы за глаза должно хватить.

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

Borland
Offline
Зарегистрирован: 17.05.2012

Голимый ардуиновский код, а точнее голимый C,. откомпилится  на любом компиляторе

поблема не в переводе кода, а понимании взаимодействия с портами, и датчиками имхо

тоесть к проекту не плохо бы иметь даташит подключения всей перефирии от вентилятора, до датчика оборотов коленвала. Если

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

 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Borland пишет:

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

 

Все не так просто. Нужно еще смотреть использование прерываний от таймеров и другую "скрытую ардуистами" перефирию. Прогнозируются подводные камни.

krikus
Offline
Зарегистрирован: 22.07.2011

Может открою Америку, но - В Ардуино ИДЕ - можно писать хоть на Си, хоть на Асме. Хоть на его wiring. Компилятор один и тот же используется. Просто нужно флаг поставить, если на Си, то @extern "C" {@, а может и вовсе без него. Вот пример кода, который написан на Си и компилируется в Ардуино. http://files.pelz-familie.de/chiptune_uno.ino Там без loop-ов и прочих - чистый Си

Voltran
Offline
Зарегистрирован: 11.12.2012
Voltran
Offline
Зарегистрирован: 11.12.2012

Photo 1Photo 2Photo 3

Voltran
Offline
Зарегистрирован: 11.12.2012

Photo 4

Voltran
Offline
Зарегистрирован: 11.12.2012

А вот собственно подключение MegaSqirtAVR на автомобиле

http://www.audi-club.ru/forum/attachment.php?attachmentid=190689&d=12820...