Общение двух МК
- Войдите на сайт для отправки комментариев
Добрый день.
Делаю сейчас проект (пневмоподвеска) и столкнулся с тем что у МК закончились ноги , да
и программные ресурсы тоже подходят к концу.
И вот я решил вынести дисплей на второй МК.
Городить какие то протоколы нет ни времени ни желания.
Так вот решил я сделать простой интерфейс ЦАП - АЦП.
Т.е. один МК отдает ШИМ другому (например analogWrite(6,100);) .
На другом МК пытаюсь поймать это дело analogRead(14).
По идее должно быть 400. Но там либо чушь либо уровень подтяжки.
Проблемы скорее всего с ШИМом (АЦП не определяет его как сигнал).
Почему так ? И что делать ?
Не хочу делать какие то протоколы так как нужно передать всего лишь 8 -12 команд.
Команды идут не одновременно т.е. строго одна команда сменяется другой , двух команд в одно время не будет.
Варианты типа взять мегу не подходят. Так же в схеме все нормально . Общий провод между МК не нужен т.к. у них общее питание.
Т.е. один МК отдает ШИМ другому (например analogWrite(6,100);) .
На другом МК пытаюсь поймать это дело analogRead(14).
По идее должно быть 400. Но там либо чушь либо уровень подтяжки.
Проблемы скорее всего с ШИМом (АЦП не определяет его как сигнал).
Частота ШИМа - 488 Гц. АЦП способен отработать до 8000 показаний в секунду. Т.е. за один цикл ШИМа вы успеваете 15-20 раз уровень замерить. Практически замеряете логические 0 и 1 и только изредка напарываетесь на фронты ШИМа. Хотите сколько нибудь приемлемый уровень получить - либо вычисляйте среднее по последним 30-40 измерениям, либо поставьте сглаживающий пульсации конденсатор.
Есть вариант поставить RC-цепь.
Но, если есть свободные ноги, может всетаки для общения между мк лучше использовать какой-нибудь цифровой интерфейс?
Например: I2C, OneWire, SPI или собственный написать...
Связь должна быть односторонней? т.е. есть ведущий мк и ведомый?
Внешние прерывания уже заняты?
Тебе нужно, чтобы приемник инициировал обмен или передатчик?
Городить какие то протоколы нет ни времени ни желания.
А зачем их гороодить, если они уже железно реализованные есть? I2C, SPI. Да тот же банальный serial. Соединить RX,TX крест накрест - и шли себе команды.
Так вот решил я сделать простой интерфейс ЦАП - АЦП.
Т.е. один МК отдает ШИМ другому (например analogWrite(6,100);) .
Проблемы скорее всего с ШИМом (АЦП не определяет его как сигнал).
По идее должно быть 400. Но там либо чушь либо уровень подтяжки.
Почему так ? И что делать ?
А зачем эти приобразования ЦАП-АЦП? Не должно быть там 400. analogWrite и analogRead это не прямая и обратная функции. Они делают "вообще разное".
analogWrite выдает на ногу ШИМ. То есть импульсы и паузы. Ипмульсы пяти-вольтовые. А analogRead меряет напряжение на ноге. Попали на импульс - она даст вам 1023, попали на паузу - 0. Попали на "смену сигнала" - что-нибудь случайное в этом промежутке.
Что-бы analogRead могла "распознать" уровень шима - его нужно превратить в что-то полее постоянное. Сгладить-интегрировать конденсатором. Что-бы, например, ШИМ 50% превращался в 2.5v.
В любом случае использовать ШИМ для общения между камнями - не самая светлая идея. В итоге вы просто реализуете какой-то "доморощенный протокол", который будет хуже чем "специально для этого предназначенный и реализованный на железном уровне".
У меня получилось с помощью analogWrite() и pulseIn()
В передатчик (Attiny45) залил вот это:
А в приемник(Atmega328) вот это:
Ну а дальше остается только разбить диапазоны по командам.
Может проще как то так соеденить?
Может проще как то так соеденить?
Это и есть i2c.
А я что сказал что это SPI?
А я что сказал что это SPI?
Ты сказал, что это проще чем SPI, i2c, 1-Wire и Serial.
А чем Мега-то неустраивает?
Управлять какими контроллерами?
Если я догадываюсь о чем идет речь, то просто можно обойтись вторым компрессором, разъединив тем самым общую систему две двухконтурные.
Конечно сама идея, с первого взгляда, кажется простенькой, и все датчики вроде как уже заведены в эти МК, только вот парадокс, как так получается, что ног не хватило. Получается что именно Ардуино управляет датчиками, т.е. все датчики висят на Ардуино и она распределяет сигналы между двумя МК?
А я что сказал что это SPI?
Ты сказал, что это проще чем SPI, i2c, 1-Wire и Serial.
Я так не говорил, прочитай внимаетльней мое сообщение
Я имел ввиду что проще взять готовый пример.
Arduino Nano v3 так и соединял
Можно описать функции ардуино в этой связке (что она должна делать и чем управлять?).
Можно описать функции ардуино в этой связке (что она должна делать и чем управлять?).
В коде есть коментарии на каждую строку
Какой код? Я не про вас а про автора - где эти прописанные 8-12 команд? Как их увидеть? Не про связь вопрос.
Общение одностороннее. Передатчик отдает приемнику команды , а тот выводит на дисплей символы соответствующие этим командам. Цель: скинуть дисплей на другой МК для получения свободных портов на основном МК.
9 клапанов , 4 датчика клиренса , 1 - акселерометр , 2кнопки , 1 концевик тормоза , 6 - дисплей , 1 датчик давления.
Возможно будет еще что то.
А использоватьserial это мысль. Спасибо.
Другими словами, перекинуть все то что стоит на штатных блоках и зацепить их на Ардуино? А уже с Ардуино распределять сигналы между двумя штатными блоками?
Да , нет никаких штатных блоков. Я делаю контроллер с нуля (уже сделал ).
Есть , грубо говоря , две дуины. Одна получает сигналы с датчиков и рулит клапанами , другая рулит дисплеем.
И что - оставить одну и добавить регистр - не судьба?
Дисплей какие значения отображает и что за дисплей?
Дисплей HD44780 . Отображает много чего.
Названия предустановок , показания датчиков клиренса , системные данные , сообщения самодиагностики
(авария датчика , блока , тип аварии и т.д.) , отображает процесс установки режима , режим установлен.
Вобщем много чего.
Общение одностороннее. Передатчик отдает приемнику команды , а тот выводит на дисплей символы соответствующие этим командам. Цель: скинуть дисплей на другой МК для получения свободных портов на основном МК.
9 клапанов , 4 датчика клиренса , 1 - акселерометр , 2кнопки , 1 концевик тормоза , 6 - дисплей , 1 датчик давления.
Возможно будет еще что то.
А использоватьserial это мысль. Спасибо.
зажигание, стартер и концевики дверей....
стартер и концевик тормоза на один и тот-же вход ибо реакция системы одинакова для обоих входо- блокировка изменения уровня...
состав системы впринципе представляется... но я вот немогу понять зачем 9 клапанов??? хотя и имею всякие предположения....
nestandart, как с вами можна связаться???
Двери не предусмотрены. Стартер там как общий выключатель. 9 клапанов : 4 - клапана накачки , 4- клапана сброса ,
1 - клапан ресивера. Связаться : heruvim219@mail.ru
Двери не предусмотрены. Стартер там как общий выключатель. 9 клапанов : 4 - клапана накачки , 4- клапана сброса ,
1 - клапан ресивера. Связаться : heruvim219@mail.ru
двери зря не предусмотрели, зачем сартер как общий, его воздействие на систему тоже что и в случае тормоза, плюс как результат свободный вывод....
Двери не предусмотрены. Стартер там как общий выключатель. 9 клапанов : 4 - клапана накачки , 4- клапана сброса ,
1 - клапан ресивера. Связаться : heruvim219@mail.ru
Двери пожалели, а вот клапанов в избытке.
Двери, кстати , очень важный датчик. Стартер - под вопросом, так как сейчас у множества машин при включения стартера множество потребителей отключается.
>>Двери пожалели, а вот клапанов в избытке.<<
Это тех.задание заказчика.
А почему двери так важны ?
Потому что через эти датчики происходит изменеие массы автомобиля
Говоря проще - двери открыты - происходит процесс посадки-высадки пассажиров и погрузка-выгрузка багажа (к примеру), и соответственно в этот момент нет необходимости накачивать-спускать, а лучше дождаться когда двери и багажник закроются, что и будет сигналом к готовности машины к поездке (в этот момент и устанавливается уровень подвески, так как движение масс прекращено).
Двери не предусмотрены. Стартер там как общий выключатель. 9 клапанов : 4 - клапана накачки , 4- клапана сброса ,
1 - клапан ресивера. Связаться : heruvim219@mail.ru
Двери пожалели, а вот клапанов в избытке.
Двери, кстати , очень важный датчик. Стартер - под вопросом, так как сейчас у множества машин при включения стартера множество потребителей отключается.
вполне возможно, что система предусматривает некую универсальность, об этом как-раз и говорит количесто клапанов и их назначение.
смотрим, сигнал АСС при включении стартера не прерывается, тем самым реакция системы будет такой-же как и без включения стартера.
собстно, получить данные о том что включен сартер можна и просто замеряя напряжение питания, но это всеравно требует для реализации програмно одного аналогового входа или цифрового но с внешней реализацией.
собственно введение измерение напряжения питания позволяет еще реализовать и защиту от розряда акб.... в случае чего....
Потому что через эти датчики происходит изменеие массы автомобиля
Говоря проще - двери открыты - происходит процесс посадки-высадки пассажиров и погрузка-выгрузка багажа (к примеру), и соответственно в этот момент нет необходимости накачивать-спускать, а лучше дождаться когда двери и багажник закроются, что и будет сигналом к готовности машины к поездке (в этот момент и устанавливается уровень подвески, так как движение масс прекращено).
собстно, немного не так...
штатно, это имеет немного иную реализацию. тоисть, сигнал открытия двери является сигналом перевода системы из дежурного режима в режим активности с ограниченым временем работы, если нет иных розрешающих сигналов типа АСС и генератор.
тоже относится и к сигналу АСС, его присутствие активирует систему но имеет ограничение...
самым основным сигналом переводящим систему в активный режим является сигнал генератора, или если проще то замеряем напряжение и исходя из полученого результата толи переводим систему в спящий режим или полностью активируем.... скажем, если напряжение ниже 11 вольт то отправляем систему спать ибо имеется или неиспаравность в электрооборудовании или авто незаведено, и скажем так если напряжение больше 13 вольт система полностью активна....
А почему двери так важны ?
Это было пояснения этого вопроса, а не первоочередность датчиков и переходов из одного режима в другой.
А почему двери так важны ?
Это было пояснения этого вопроса, а не первоочередность датчиков и переходов из одного режима в другой.
но именно написаное является и обьяснением зачем, почему и как. тоисть более полно развернутый ответ....
штатные блоки имеют определенное количество активаций (переводов из спящего в дежурный) по реакции на концевик дверей, после чего этот вывод просто игнорируется до включения зажигания. тоже и в отношении зажигания к сигналу генератора.тоисть основным является сигнал работающего двигателя но реакция системы при задействовании входов *двери* и *зажигание* всеравно имеют отличия. сюда-же следует добавить и сигнал с датчика скорости, в данном случае здесь предположительно для этого добавляется акселерометр. также с его помощью можна реализовать компенсацию кренов. хотя это более применительно для управления регулируемыми амортами нежели подушками...