Re: Бортовой компьютер мотоцикла
Oleg_33, если захочется кому то потом показать, то лучше этого не делать
Цитата:
RELAY_CURENT, flag_FAN_CYRENT, FUELPOMP_RELAY__DIGITAL_PIN, LOW_COLING_FAN, GEAR_NEITRAL__DIGITAL_PIN
Блин, неужто так сложно словарик открыть и посмотреть как пишется правильно? Тем более, что сейчас словари онлайн.
Зачем писать вот так
Цитата:
#define LED_ERROR__DIGITAL_PIN 13
#define FUEL_LEVEL__ANALOG_PIN 0
Когда можно писать более кратко так
Цитата:
#define LED_ERROR_PIN 13
#define FUEL_LEVEL_APIN 0
?
Если по файлам разносить не будешь, то скоро запутаешься. Arduino IDE хуже блокнота.
P.S. Я не профессиональный программист, но от такого кода шерсть шевелится.
Re: Бортовой компьютер мотоцикла
Да действительно о чем я думал, контролер ошибки проверяет в длииинных названиях временных!! "переменных", тратит процессорное время на перевод ... а у меня не оригинальный ардуино, он понимает даже с акцентом!
Запутаться в собственном коде это нонсенс, ну если кроме ошибок в четырёх словах сказать нечего ... !
Re: Бортовой компьютер мотоцикла
Кто подскажет как считывать температуру с двух датчиков DS18B20 ?
На температуру двигателя хотел подключить резистивный датчик от автозапуска, да характеристика подкачала не линейная она и на разных датчиках отличается (не говоря уж о муках преобразования АЦП в температуру), чем грозит замена неисправного датчика думаю понятно :eek:
Вложений: 1
Re: Бортовой компьютер мотоцикла
Внешнее прерывание эмуляция.
Для входа прерываний использую Pin 0 (RX). Pin 7 у меня почему-то не работает на прерывание, на Pin 2 и 3 вешать нельзя на них шина I2C и она мне нужна.
Для заливки скетча отключаем Pin 0 от схемы.
Эмулятором сигнала прерывания является Pin 13.
В режиме FALLING подключаем вот так.
Вложение 18430
Видео:http://youtu.be/QZFZSx0Q_XU
Замучился снимать этот дисплей, пришлось без подсветки, он засвечивает камеру ...
PHP код:
#include <TimerOne.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
volatile int state = !LOW;
volatile int in = 0;
volatile long time, time1;
LiquidCrystal_I2C lcd(0x27,16,2);
//Плата int.0 int.1 int.2 int.3 int.4
//UNO, Ethernet-Pin 2 3
//Leonardo-Pin 3 2 [0] [1] 7
void setup()
{
pinMode(13, OUTPUT);
Timer1.initialize(100000); // Эмитируем внешний сигнал.
Timer1.attachInterrupt(blinkLED);
attachInterrupt(2, Interrupt_Func, FALLING); // Прерывание 0 пин
}
void loop(){
lcd.init();
lcd.backlight();
lcd.print(in);
}
void Interrupt_Func(){
in+=1;
}
void blinkLED(){
state = !state;
digitalWrite(13, state);
}
Вложений: 1
Re: Бортовой компьютер мотоцикла
Добил схему, так выглядит по интереснее. Провода без прямых линий и углов (нарисованных про принципу кривых Безье) это внешние провода, они покидают блок с МК... а может и не покидают :),в общем схема наглядная для общего понимания происходящего.
Печатную плату делать не буду, тк напрочь отсутствует возможность добавить, что-либо, поэтому исходник Fritzing`a пока не выкладываю.
Вложение 18443
Re: Бортовой компьютер мотоцикла
Прирывания не работают на других пинах потому что ты используешь библиотеку TimerOne которая заточена на использование системного 16разрядного таймера (Timer1) который завязан аппаратно на пины 2 и 3 Для использования других пинов пользуй стандартные команды (почитай здесь) библиотека полезна в случае если нужно за действовать мощный 16 разрядный таймер, например ШИМ с высокой тактовой частотой до 1023 итд... А в твоем случае можно обойтись стандартными опираторами оброботки прирываний.
Вложений: 1
Re: Бортовой компьютер мотоцикла
да, спасибо.
Не работает только пин 7 на прерывание, я уже исключил эту библиотеку.
Дело идёт потихоньку, застрял на таймере выключении микроконтроллера и защите аналогового входа (по нему измеряется напряжение)
Вот изобрел :) схему, ребята помогли с форума Паяльника, схему не пробовал ещё.
Вложение 18469
Re: Бортовой компьютер мотоцикла
А что этот вход который ты защищаешь будет делать? Замер бортового питания? А какая проблема с таймером? Выложи последний код.
Re: Бортовой компьютер мотоцикла
Да верно с аналогового входа будет мерится напряжение, желательно защитить его от высоковольтных всплесков и прочих гадостей мотоциклетной ботр.сети.
С таймером всё хорошо, не могу дойти до магазина и купить детальки ... напомню он нужен, что бы записать в EPPROM данные при отключении питания.
Кодом уже месяц не занимался, он такой же как на 8 странице форума.
Единственное адаптировал пример для записи больших чисел в EPRROM.
Код:
#include <EEPROM.h>
#define UBOUND_EEPROM_ARRAY 9
int EEPROM_DATA[UBOUND_EEPROM_ARRAY] = {88,110,120,25,12000,6000,1000,20,20};
/*
0 - вентилятор отключение,
1 - вентилятор включение
2 - перегрев
3 - по температуре окр. воздуха
4 - TO2
5 - TO1
6 - Chain
7 - коррекция ТОВ
8 - коррекция ТД
*/
int Expon[UBOUND_EEPROM_ARRAY] = {2,4,6,8,10,12,14,16,18};
void setup(){
Serial.begin(9600);
for (int i = 0; i <= (UBOUND_EEPROM_ARRAY - 1); i++)eeprom_write(EEPROM_DATA[i], Expon[i]);
}
void loop(){
for (int i = 0; i <= UBOUND_EEPROM_ARRAY - 1; i++) Serial.println(eeprom_read(Expon[i]));
delay(1000);
}
unsigned int eeprom_read(int cell)//чтение из еепром
{
unsigned int res=0;
res=(EEPROM.read(cell)<<8)|EEPROM.read(cell-1);
return res;
}
void eeprom_write(unsigned int val, int cell)//запись в еепром
{
EEPROM.write(cell - 1, (val & 0xFF)); //пишем младший байт
EEPROM.write(cell, ((val & 0xFF00) >> 8));//пишем старший байт
}
[
Re: Бортовой компьютер мотоцикла
как-то непонятно. по схеме получается, что при включении зажигания идет питание на dc. что мешает запитать напрямую от 15 клеммы без оптопары и транзистора? для защиты АЦП входа неплохо бы минимум стабилитрон параллельно конденсатору C2. и еще защитный диод по входу до делителя. учти, что напряжение на vd1 повлияет на показания, это надо учесть программно. по питанию тоже не помешает диод и конденсторы.