Попробуй комп перегрузи
Вид для печати
Попробуй комп перегрузи
Ценный совет. Только не помогает, впрочем как и попробовать на другом компе. То двигаются хаотично то вообще все по нулям. При подключении 12 В. на разъем аккумулятора через делитель встают в максимум стрелочные приборы и напряжение показывает 15 В. А другой раз вообще на питание не реагирует.
Какой вопрос такой и ответ.
У тебя одно устройство FTDI к компу подключено?
Сом порт прописал правильно?
Устройство одно, порт точно правильно (он 1 у меня)
USB устройство не может быть на 1 или 2 ком порту , так как система резервирует их под хардверные порты
у меня оно на 5
А вы уверены что схема подключения правильная. Это на счет аналоговых сигналов например с акб
схема правильная(12/3=4) 4 вольта будет на входе АЦП , а вот калибровка по всей видимости нужна.
на схеме резисторы 20к стоят левее резисторов 10к хотя должны быть справа
(12/3=4) что такое 3?
20к+10к=30к общее сопротивление где 10к это одна треть
Вот пример делителя если на U1 подать 12 В при сопротивлениях R1=20 и R2=10, то на U2 будет 4 В.
http://cdxp.zx6.ru/s/delitel.GIF
Ну и чем этот делитель отличается от того что в схеме?
а по схеме в первом посте получается что напряжение подаем на U2, в итоге на U1 получаем 36
Действительно ошибка в схеме, делитель перевернут.
Исправил.
видимо из-за этого у меня приборы скакали
Приборы могли скакать либо от сильной помехи или если программа данные не правильно принимает. В процессе отладки тоже такое наблюдал
Что должно идти через serial monitor? У меня идет ~yyyy[vc9 и в программе не работает ничего. Я пока не могу отследить когда работает когда нет и что на это влияет.
Перед запуском torpedo отключаю serial monitor и жду когда лампочка передачи (зеленая) на arduino перестанет мигать, только после этого запускаю.
Что за кнопка NIL?
Бинарные данные , как будут отражатся примерно так как ты указал
Кнопка NIL не используется в прошивке
Похоже все таки какой то баг в программе
Программа показывает ровно то, что она принимает с порта
Не уверен , нужно проверять.
Пока версия такая :
По каким то причинам она иногда сдвигает от начала указатель, и все данные путаются.
У меня несколько раз так было. Проверял своим софтом данные с кардуино в порядке.
Нужно после каждой процедуры чтения из буфера USB делать очистку входящего буфера
Purge_USB_Device_In;
Почему при отключение питания с АКБ напряжение на D4 относительно "-" АКБ падает плавно, примерно так 3.9В - (1сек) - 3.2В - (1сек) - ... - 0В. Как будто разряд конденсатора. И как чтоб падало немедленно после отключения
ТАк вроде лежит в открытом доступе
Извеняюсь. ;) Это я подключил настольный блок питания, а он при отключении так себя ведет.
Добрался до машины (ВАЗ-2110) подключил. Индикаторы лампочек работаю нормально, а со спидометром и тахометром непонятки. Поблема в том что при подключении на провод тахометра стрелка в программе Urvina прыгает при стабильных оборотах от 0 до 3000 об.мин. Есть подозрение что программа в carduino измеряет не количество импульсов а уровень напряжения, потому что при подклчении вольтметра на нем показаня напряжения аналагично меняются.
Также подключал осцилограф (ардуино) он показывал импульсы и они изменялись по длительности в зависимости от оборотов двигателя.
При увеличении оборотов период импульсов уменьшается, соответственно при уменьшении импульс растягивается по времени
Нужно параллельный входу подобрать конденсатор
я так понимаю считывание информации о напряжении и показания тахометра происходят одним и тем же средством - что не верно.Код HTML:// Сбор данных с пяти АЦП, диапазон значений [0, 255]
// 0 - скорость
// 1 - тахометр
// 2 - температура охлаждающей жидкости
// 3 - уровень топлива
// 4 - напряжение автомобильной сети
for(i=0; i<=4; i++)
{
resultInput[i]=analogRead(i);
}
Вопрос: Как заставить ардуино считать количество импульсов в заданую еденицу времени?
ДА .
Хотя по хорошему нужно программу переделать.
конечно программу потому что с конденсатором не будет работать 2"аппаратный" тахометр. Дайте хотябы направление как на ардуино подсчитать импульсы за определенное время.
На аппаратный тахометр кондер не повлияет , так как он будет висеть на входе Кардуино через резистор
Настроить пин 2 на прерыване , включить таймер, в подпрограмме прерывания считать импульсы и время
А если воспользоватся вот этимт.е программа будет такойКод HTML:pulseIn(порт, значение);
Описание:
Считывает импульс (высокий или низкий) c цифрового порта и возвращает продолжительность импульса в микросекундах.
Например, если параметр «значение» при вызове функции установлен в HIGH, то pulseIn() ожидает, когда на порт поступит высокий уровень сигнала. С момента его поступления начинается отсчет времени до тех пор, пока на порт не поступит низкий уровень сигнала. Функция возвращает длину импульса (высокого уровня) в микросекундах. Работает с импульсами от 10 микросекунд до 3 минут. Обратите внимание, что эта функция не будет возвращать результат, пока импульс не будет обнаружен.
Параметры:
порт: номер порта, с которого считываем импульс
значение: тип импульса HIGH или LOW
Возвращаемое значение: возвращает длительность импульса в микросекундах (тип int)
Пример:
int duration; // объявление переменной duration типа int
duration = pulseIn(pin, HIGH); // измеряем длительность импульса
Код HTML:// Сбор данных с двух АЦП, и двух цифровых входов
// 12 - скорость
// 13 - тахометр
// 2 - температура охлаждающей жидкости
// 3 - уровень топлива
// 4 - напряжение автомобильной сети
for(i=3; i<=4; i++)
{
resultInput[i]=analogRead(i);
}
for(i=12; i<=13; i++)
{
resultInput[i]= pulseIn(pin(i), HIGH);
}
Зачем тебе для тахометра длительность импульса считать?
Нужно примерно так
PHP код:
#define etaho 2
unsigned long time, tpl;
void setup()
{
pinMode(etaho, INPUT);
digitalWrite(etaho, HIGH); // подключить подтягивающий резистор
attachInterrupt(0, taho, FALLING); // настроить прерывание при перепаде с высокого в никий
Serial.begin (115200);
}
void loop()
{
if (tpl > 0) //проверить срабатывание прерывания
{
Serial.println( tpl, DEC); // отправить значение компьютеру
tpl=0; //обнулить
}
}
// обработка прерывания
void taho()
{
cli();
tpl=millis()-time; //время между импульсами
time = millis(); //обнулить
sei();
}
В последнем примере есть ошибка, хотя вероятность того, что она проявится крайне низка.
Во время выполнения
Serial.println( tpl, DEC);
может вызваться таймер. И что в результате такой коллизии уйдет в порт неизвестно. Поэтому надо сбросить флаг прерываний перед выполнением этой команды и установить сразу после. Еще лучше - сначала скопировать эту переменную в какое-то место и обнулить внутри блока с запрещенными прерываниями, а затем уже отправить в uart.
примерно так:
unsigned long temp_tpl;
cli;
temp_tpl = tpl;
tpl=0;
sei;
Serial.println( temp_tpl, DEC);
Так вроде как после обработки прерывания контроллер продолжит выполнение с того места где был прерван. Потому что при переходе на прерывание адрес сохраняется в стеке