Задержек не нужно
Вид для печати
Задержек не нужно
Chip, уже неудобно просить. :) помогай.
Вариант расширение кол-ва входов... Вроде разобрался, спаял. Запустил, написал тестовую прожку...
...но не работает. А конкретно:
1) терминал всегда кажет, что считывается единица, какой бы адрес ты не записывал.
2) прибором мерял выход мульт-ора, все подтверждается.
3) после подачи на входы 5в (в MUX), за диодами напр-е = 0,5в. Т.е. лог 0. Т.е. на входы высокий уровень не проникает, диоды режут.
4) Диоды поставлены 1N4148, те которые ты в свои проекты ставил.
5) ВСЕГДА на выходе мультиплекора лог 1.
:(
Прикрепляю схему подключения. И прогу:
Код:int addr_out_0 = 5;
int addr_out_1 = 6;
int addr_out_2 = 4;
int addr_in_state = 7;
void setup()
{
pinMode(addr_out_0, OUTPUT);
pinMode(addr_out_1, OUTPUT);
pinMode(addr_out_2, OUTPUT);
pinMode(addr_in_state, INPUT);
digitalWrite(addr_in_state, HIGH);
Serial.begin(115200);
}
int get_port_state(int index)
{
int b[3];
if (index == 0) {b[0] = 0; b[1] = 0; b[2] = 0;}
if (index == 1) {b[0] = 0; b[1] = 0; b[2] = 1;}
if (index == 2) {b[0] = 0; b[1] = 1; b[2] = 0;}
if (index == 3) {b[0] = 0; b[1] = 1; b[2] = 1;}
if (index == 4) {b[0] = 1; b[1] = 0; b[2] = 0;}
if (index == 5) {b[0] = 1; b[1] = 0; b[2] = 1;}
if (index == 6) {b[0] = 1; b[1] = 1; b[2] = 0;}
if (index == 7) {b[0] = 1; b[1] = 1; b[2] = 1;}
digitalWrite(addr_out_0, b[0]);
digitalWrite(addr_out_1, b[1]);
digitalWrite(addr_out_2, b[2]);
delay(5);
return (digitalRead(addr_in_state));
}
void loop()
{
Serial.println("");
for (int i=0; i<=7; i++)
{
Serial.print(get_port_state(i), BIN);
Serial.print(" ");
}
delay(500);
}
Ну ты даешь!!!
А подтягивать входы кто будет? В кардуине есть внутренние подтягивающие резисторы , а у мультиплексора их нет, так что 10к резистор на каждый вход и на +5в
Спасибо) А почему к плюсу подтягивать надо, а не к земле?
Потому что при таком включении диода он будет пропускать только (-)
А если развернуть диоды наоборот и подтянуть землю, то мона будет подавать на входы + ?
Будет много дыма :)
+12в на вход нельзя подавать
%) ойойой. У меня датчик скорости, там как я понял надо ловить импульс с плюсом. Как развязать, чтобы + подать?
off:
Execpt, а у тебя Consult I или II?
off: видел, наверное, VOBD
может дороговато, но он того стоит ...
НЕ РЕКЛАМА - совет ;)
Вот в шапке спидометр и тахометр подключается к аналоговому входу. Почему так? Это прокатывает для спидометра/тахометра импульсного? Я думал надо частоту мерить.
У меня датчик скорости 9 импульсов на оборот, там как я понял надо ловить импульс с плюсом. Как развязать, чтобы + подать?
Или же можно вот так вот просто бросить спидометр на аналоговый вход?
Лучше частоту импульсов измерять , прерыванием
Походу я накосячил. Подрубил 2 штуки HCF4094BE для того, чтобы увеличить кол-во вЫходов. А он оказался ShiftIn а не ShiftOut регистр. :(
На скока я понял из даташита, на него наоборот надо на 8 входов подать сигналы, и с 3х выходов считать число.
Возьми регистр тот который я тебе рекомендовал
не могу понять как это всё будет работать без компьютера
Уважаемый Chip не мог бы объяснить что делает ниже указанный код,я в параллельной ветке делаю тоже самое только на ЖКИ. У меня почему то при включении проскакивают надписи
PHP код:
// Перевод состояний на цифровых входах в общее число
// 5 - двоиный код включения лампочек (
// 6 - двоичный код включения лампочек
// + двоичный код включенной передачи (3 старших бита)
// 7-10 - текущее значение одометра
resultInput[5] = digitalRead(2) +
digitalRead(3)*2 +
digitalRead(4)*4 +
digitalRead(5)*8 +
digitalRead(6)*16 +
digitalRead(7)*32 +
digitalRead(8)*64;
resultInput[6] = digitalRead(9) +
digitalRead(10)*2 +
digitalRead(11)*4 +
digitalRead(12)*8 +
digitalRead(13)*16;
Переводит из принятых бит данных в байт
Можно это сделать еще вот таким способом:
PHP код:
resultInput[5]|=0;
for(int i=2; i<8; i++)
{
if (digitalRead(i)) resultInput[5]|=1<<i;
}
Спасибо за разьеснение
я вот подумал сделать из двух матриц 6 дюймовых на одном будет тахометр и температура охл жидкости на другом спидометр и показания бензина ,но вот я все таки не могу понять как это всё будет работать без компа куда подключать монитор?
гораздо сложне, заставить это работать С компьютером :)
Например вот так
наверное, это не очень похоже на спидометр... и даже на тахометр ;)
Можно взять уже готовые узлы с минимальной переделкой - тахометр, спидометр, вольтметр... Разместить их на приборной панели как заблагорассудится. Индикаторов от той же Nokia, Simens много и стоят они 50 - 200 рублей (распиновка и система команд известны). Можно взять пример с открытыми исходниками отсюда:
http://forum.cxem.net/index.php?showtopic=46012&st=1340
Люди добрые, кто-нибудь покажите пожалуйста кусок кода на Delphi, как это всё принять в компьютер? Если не затруднит!!! Буду очень благодарен!!!
А то замучился я уже, две недели ковыряю.... помогите тупому)))
Установи компонент для COM порта
я их всяких уже наустанавливал...
мне надо в линухе под вайном это запускать, а компоненты не видят сом-порт и не работают...
С линуксом я не помошник
а компонет можно как-то подправить, чтоб он не из реестра брал инфу о сом-портах?
Ну конечно можно
Для линукса возьми лазарус и компилируй в нем дельфовые исходники (там есть функция импорта дельфового проекта). При небольшой переделке большинство несложных проектов взлетают. Но про дебаг под лазарь+линух забудь :-(.
Что-то мне лазарус не нравится....
а что скажите про processing?
доброго времени суток, прочитал всю тему так и не понял, проект доделали? Если нет то что осталось... и еще один простите глупый вопрос! как запустить эту программу с первого поста!?
Все работает, только спидометр и тахометр не совсем правильно реализованы
а в чем их неправильность?
В том что считываются не импульсы , а измеряется напряжение на самом приборе
т.е. неправильно будет показывать... :( А подскажите как поставить то программу... там нет **.exe