Общение двух МК

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Добрый день.

Делаю сейчас проект (пневмоподвеска) и столкнулся с тем что у МК закончились ноги , да

и программные ресурсы тоже подходят к концу.

И вот я решил вынести дисплей на второй МК.

Городить какие то протоколы нет ни времени ни желания. 

Так вот решил я сделать простой  интерфейс ЦАП - АЦП.

Т.е. один МК отдает ШИМ другому (например analogWrite(6,100);) .

На другом МК пытаюсь поймать это дело analogRead(14).

По идее должно быть 400. Но там либо чушь либо уровень подтяжки.

Проблемы скорее всего с ШИМом  (АЦП не определяет его как сигнал).

Почему так ? И что делать ?

Не хочу делать какие то протоколы так как нужно передать всего лишь 8 -12 команд.

Команды идут не одновременно т.е. строго одна команда сменяется другой , двух команд в одно время не будет.

Варианты типа взять мегу не подходят. Так же в схеме все нормально . Общий провод между МК не нужен т.к. у них общее питание.

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

nestandart пишет:

Т.е. один МК отдает ШИМ другому (например analogWrite(6,100);) .

На другом МК пытаюсь поймать это дело analogRead(14).

По идее должно быть 400. Но там либо чушь либо уровень подтяжки.

Проблемы скорее всего с ШИМом  (АЦП не определяет его как сигнал).

Частота ШИМа - 488 Гц. АЦП способен отработать до 8000 показаний в секунду. Т.е. за один цикл ШИМа вы успеваете 15-20 раз уровень замерить. Практически замеряете логические 0 и 1 и только изредка напарываетесь на фронты ШИМа. Хотите сколько нибудь приемлемый уровень получить - либо вычисляйте среднее по последним 30-40 измерениям, либо поставьте сглаживающий пульсации конденсатор.

maksim
Offline
Зарегистрирован: 12.02.2012

Есть вариант поставить RC-цепь.

Но, если есть свободные ноги, может всетаки для общения между мк лучше использовать какой-нибудь цифровой интерфейс?

Например: I2C, OneWire, SPI или собственный написать...

maksim
Offline
Зарегистрирован: 12.02.2012

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

Внешние прерывания уже заняты?

Тебе нужно, чтобы приемник инициировал обмен или передатчик?

leshak
Offline
Зарегистрирован: 29.09.2011

 

nestandart пишет:

Городить какие то протоколы нет ни времени ни желания.

А зачем их гороодить, если они уже железно реализованные есть? I2C, SPI. Да тот же банальный serial. Соединить RX,TX крест накрест - и шли себе команды.

nestandart пишет:

Так вот решил я сделать простой интерфейс ЦАП - АЦП.

Т.е. один МК отдает ШИМ другому (например analogWrite(6,100);) .

Проблемы скорее всего с ШИМом (АЦП не определяет его как сигнал).

По идее должно быть 400. Но там либо чушь либо уровень подтяжки.

Почему так ? И что делать ?

А зачем эти приобразования ЦАП-АЦП? Не должно быть там 400. analogWrite и analogRead это не прямая и обратная функции. Они делают "вообще разное".

analogWrite выдает на ногу ШИМ. То есть импульсы и паузы. Ипмульсы пяти-вольтовые. А analogRead меряет напряжение на ноге. Попали на импульс - она даст вам 1023, попали на паузу - 0. Попали на "смену сигнала" - что-нибудь случайное в этом промежутке.

Что-бы analogRead могла "распознать" уровень шима - его нужно превратить в что-то полее постоянное. Сгладить-интегрировать конденсатором. Что-бы, например, ШИМ 50% превращался в 2.5v. 

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

maksim
Offline
Зарегистрирован: 12.02.2012

У меня получилось с помощью analogWrite() и pulseIn()

В передатчик (Attiny45) залил вот это:

#define PIN 0
void setup() {
  pinMode(PIN, OUTPUT); 
}
void loop() {
  analogWrite(PIN, map(analogRead(1),0,1023,0,255));

А в приемник(Atmega328) вот это:

void setup() {
  Serial.begin(9600);
}
void loop() {
 Serial.println(pulseIn(4, HIGH), DEC);
}

 Ну а дальше остается только разбить диапазоны по командам.

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Может проще как то так соеденить?

maksim
Offline
Зарегистрирован: 12.02.2012

carduino.ru пишет:

Может проще как то так соеденить?

Это и есть i2c.

carduino.ru
Offline
Зарегистрирован: 06.12.2011

А я что сказал что это SPI? 

maksim
Offline
Зарегистрирован: 12.02.2012

 

maksim
Offline
Зарегистрирован: 12.02.2012

carduino.ru пишет:

А я что сказал что это SPI? 

Ты сказал, что это проще чем SPI, i2c, 1-Wire и Serial.

italius
Offline
Зарегистрирован: 19.12.2011

А чем Мега-то неустраивает?

Управлять какими контроллерами?

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

Конечно сама идея, с первого взгляда, кажется простенькой, и все датчики вроде как уже заведены в эти МК, только вот парадокс, как так получается, что ног не хватило. Получается что именно Ардуино управляет датчиками, т.е. все датчики висят на Ардуино и она распределяет сигналы между двумя МК?

carduino.ru
Offline
Зарегистрирован: 06.12.2011

maksim пишет:

carduino.ru пишет:

А я что сказал что это SPI? 

Ты сказал, что это проще чем SPI, i2c, 1-Wire и Serial.

Я так не говорил, прочитай внимаетльней мое сообщение

Я имел ввиду что проще взять готовый пример.

Arduino Nano v3 так и соединял 

italius
Offline
Зарегистрирован: 19.12.2011

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

carduino.ru
Offline
Зарегистрирован: 06.12.2011

italius пишет:

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

В коде есть коментарии на каждую строку

italius
Offline
Зарегистрирован: 19.12.2011

 Какой код? Я не про вас а про автора - где эти прописанные 8-12 команд? Как их увидеть? Не про связь вопрос.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

 

Общение одностороннее. Передатчик отдает приемнику команды , а тот выводит на дисплей символы соответствующие этим командам.  Цель: скинуть дисплей на другой МК для получения свободных портов на основном МК.

9 клапанов , 4 датчика клиренса , 1 - акселерометр , 2кнопки , 1 концевик тормоза , 6 - дисплей , 1 датчик давления.

Возможно будет еще что то.

А использоватьserial это мысль. Спасибо.

 

italius
Offline
Зарегистрирован: 19.12.2011

 Другими словами, перекинуть все то что стоит на штатных блоках и зацепить их на Ардуино? А уже с Ардуино распределять сигналы между двумя штатными блоками?

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Да , нет никаких штатных блоков. Я делаю контроллер с нуля (уже сделал ).

Есть , грубо говоря , две дуины. Одна получает сигналы с датчиков и рулит клапанами , другая рулит дисплеем. 

italius
Offline
Зарегистрирован: 19.12.2011

И что - оставить одну и добавить регистр - не судьба?

Дисплей какие значения отображает и что за дисплей?

 

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Дисплей  HD44780 . Отображает много чего.

Названия предустановок , показания датчиков клиренса , системные данные , сообщения самодиагностики

(авария датчика , блока ,  тип аварии и т.д.) , отображает процесс установки режима , режим установлен.

Вобщем много чего.

chaytan
Offline
Зарегистрирован: 02.02.2012

nestandart пишет:

 

Общение одностороннее. Передатчик отдает приемнику команды , а тот выводит на дисплей символы соответствующие этим командам.  Цель: скинуть дисплей на другой МК для получения свободных портов на основном МК.

9 клапанов , 4 датчика клиренса , 1 - акселерометр , 2кнопки , 1 концевик тормоза , 6 - дисплей , 1 датчик давления.

Возможно будет еще что то.

А использоватьserial это мысль. Спасибо.

 

зажигание, стартер и концевики дверей....

стартер и концевик тормоза на один и тот-же вход ибо реакция системы одинакова для обоих входо- блокировка изменения уровня...

состав системы впринципе представляется... но я вот немогу понять зачем 9 клапанов??? хотя и имею всякие предположения....

 

 nestandart, как с вами можна связаться???

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Двери не предусмотрены.  Стартер там как общий выключатель. 9 клапанов : 4 - клапана накачки ,  4-  клапана сброса ,

1 - клапан ресивера.  Связаться : heruvim219@mail.ru

 

chaytan
Offline
Зарегистрирован: 02.02.2012

nestandart пишет:

Двери не предусмотрены.  Стартер там как общий выключатель. 9 клапанов : 4 - клапана накачки ,  4-  клапана сброса ,

1 - клапан ресивера.  Связаться : heruvim219@mail.ru

 

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

italius
Offline
Зарегистрирован: 19.12.2011

nestandart пишет:

Двери не предусмотрены.  Стартер там как общий выключатель. 9 клапанов : 4 - клапана накачки ,  4-  клапана сброса ,

1 - клапан ресивера.  Связаться : heruvim219@mail.ru

 

Двери пожалели, а вот клапанов в избытке.

Двери, кстати , очень важный датчик. Стартер - под вопросом, так как сейчас у множества машин при включения стартера множество потребителей отключается.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>Двери пожалели, а вот клапанов в избытке.<< 

Это тех.задание заказчика.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

А почему двери так важны ? 

italius
Offline
Зарегистрирован: 19.12.2011

 Потому что через эти датчики происходит изменеие массы автомобиля

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

chaytan
Offline
Зарегистрирован: 02.02.2012

italius пишет:

nestandart пишет:

Двери не предусмотрены.  Стартер там как общий выключатель. 9 клапанов : 4 - клапана накачки ,  4-  клапана сброса ,

1 - клапан ресивера.  Связаться : heruvim219@mail.ru

 

Двери пожалели, а вот клапанов в избытке.

Двери, кстати , очень важный датчик. Стартер - под вопросом, так как сейчас у множества машин при включения стартера множество потребителей отключается.

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

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

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

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

chaytan
Offline
Зарегистрирован: 02.02.2012

italius пишет:

 Потому что через эти датчики происходит изменеие массы автомобиля

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

собстно, немного не так...

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

тоже относится и к сигналу АСС, его присутствие активирует систему но имеет ограничение...

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

italius
Offline
Зарегистрирован: 19.12.2011

nestandart пишет:

А почему двери так важны ? 

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

chaytan
Offline
Зарегистрирован: 02.02.2012

italius пишет:

nestandart пишет:

А почему двери так важны ? 

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

но именно написаное является и обьяснением зачем, почему и как. тоисть более полно развернутый ответ....

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