Перейти к содержанию

Как подружить две ATMega8?


DimonRX

Рекомендуемые сообщения

Всем доброго времени суток!

В AVR-ках я новичёк и очень нуждаюсь в вашей помощи.

Задача у меня следующая. Есть драйвер управления серводвигателем на ATmega88. Помимо основной задачи ATmega88 через 74HC164D выводит на сдвоенный 7-ми сегментный индикатор направление вращения мотора в виде анимации (вращает сегмент по или против часовой стрелки). Рядом есть некая поделка на ATmega8, одной из задач которой является определение направления вращения мотора и, в зависимости от направления, выполнение различных действий. Как мне это сделать? Как подружить две меги? Всем заранее спасибо.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

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

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Автор , проще всего на первой атмеге выделить два пина и дергать их в зависимости от направления .

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

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

А если есть третье состояние? И не влево и не вправо? 

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Вполне возможно ,  но скорее всего это состояние будет когда устройство обесточено .  А так , даже если шим = 0 , то направление вращения уже определено в программе или в схеме . Конечно если будет нужно определить вращается ли мотор и куда вращается  , то безусловно 2 пина нужно . 

Ссылка на комментарий
Поделиться на другие сайты

Я думаю что в большинстве случаев как раз три состояния . Я поэтому и написал сразу за две ножки :)

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Приношу извинения за некорректно сформулированную задачу.

Уточню. У меня нет доступа к программе меги, которая установлена в драйвере серводвигателя. Нет и схемы драйвера. Этот драйвер-законченное заводское изделие.

Моя задача, имея вторую мегу, где работает написанная мною программа, каким-то образом подключить свою мегу  к меге драйвера (или к 74HC164D или к индикатору) и определить направление вращения двигателя.

Ссылка на комментарий
Поделиться на другие сайты

12 минуты назад, DimonRX сказал:

Моя задача, имея вторую мегу, где работает написанная мною программа,

Ну так возьми анализатор , запиши байты которые поступают при вращении влево и потом при вращении вправо . Создай буфер spi и в буфер записывай данные и анализируй . Исходя из результата - принимай решение о направлении вращения.

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

16 минут назад, DimonRX сказал:

У меня нет доступа к программе меги, которая установлена в драйвере серводвигателя. Нет и схемы драйвера. Этот драйвер-законченное заводское изделие.

Как Вы без схемы и без понятия о работоспособности устройства хотите к нему подключиться ?

PS: Анализировать что-то по индикации - та ещё головная боль...

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, artos5 сказал:

Ну так возьми анализатор

 

15 часов назад, DimonRX сказал:

В AVR-ках я новичёк

А можно подробнее?

3 минуты назад, Alex сказал:

Как Вы без схемы и без понятия о работоспособности устройства хотите к нему подключиться ?

Ну, кое-какие понятия о работе есть.

Была у меня мысль подключить все сегменты индикатора к моей меге и смотреть их состояние. При анимации в каждый момент времени может быть включен только один сегмент. И отсюда определять направление вращения мотора. Но такое решение мне не понравилось, не красиво как-то. Хотел как-то данные до сдвигового регистра анализировать.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, DimonRX сказал:

А можно подробнее?

Купи анализатор у китайцев за 10$ или сколько там он стоит .

8 канальный он. И проанализируй данные. За пару вечеров задачу можно решить.

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, DimonRX сказал:

Хотел как-то данные до сдвигового регистра анализировать.

Индикация может быть статической, а может динамической.
Схема нужна, в любом случае.

Ссылка на комментарий
Поделиться на другие сайты

37 минут назад, DimonRX сказал:

подключиться к линии индикации

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

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, artos5 сказал:

Купи анализатор у китайцев за 10$ или сколько там он стоит .

А можно ссылку? Или хотя бы название, как он у китайцев называется. Поймите правильно, для меня это все новое, я AVR-ками меньше месяца занимаюсь. Для меня это темный лес. Пытаюсь разобраться по мере сил и возможностей.

1 час назад, Alex сказал:

Индикация может быть статической, а может динамической.

Индикация динамическая.

1 час назад, BARS_ сказал:

Смысл?

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

3 часа назад, artos5 сказал:

Создай буфер spi и в буфер записывай данные и анализируй .

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

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, DimonRX сказал:

название, как он у китайцев называется.

Saleae logic

 

7 минут назад, DimonRX сказал:

Индикация динамическая.

И сколько знакомест?

9 минут назад, DimonRX сказал:

А как это сделать?

Научиться работать с МК, а потом уже куда-либо лезть.

Ссылка на комментарий
Поделиться на другие сайты

14 минуты назад, BARS_ сказал:

Научиться работать с МК, а потом уже куда-либо лезть.

Вот ради этого ответа я и задал вопрос. А Вы уже родились с абсолютными знаниями о МК? И пока не достигли просветления не задавали вопросов вообще? Тогда зачем нужен форум? Для общения гуру между собой?

Ссылка на комментарий
Поделиться на другие сайты

Только что, DimonRX сказал:

А Вы уже родились с абсолютными знаниями о МК? И пока не достигли просветления не задавали вопросов вообще?

Нет. Но вот вопросов я не задавал. Мне с головой хватило примеров в сети и даташитов. Вместо того, чтобы сидеть на форумах я разбирал примеры.

 

2 минуты назад, DimonRX сказал:

Тогда зачем нужен форум?

Форум? А смысл что-то советовать, если такое слово, как "буфер" уже вводит в ступор? Чтобы что-то посоветовать необходимо чтобы у вас были хотя бы начальные знания программирования. Выше ужа дали совет, слить данные, которые идут в индикатор за пару кадров анимации вращения на индикаторе (учитывая динамическую индикацию - это не такая уж и простая задача). Найти закономерость, т.е. выделить байты, которые отвечают именно за анимацию и по порядку байт в двух кадрах определять направление. Например, картинка крутится вправо, подается 0x01 (один кадр анимации), а в другом пакете 0х02 (второй кадр анимации). При анимации влево подается тоже самое, но в обратном порядке, сначала 0х02, потом 0х01. Проблема будет лишь в том, что из-за динамики десяток раз придет пакет с 0х01, и десяток с 0х02. Т.к. заранее известно, сколько байт занимает одна прорисовка, то и записывать буфер в МК будет легко.

Ссылка на комментарий
Поделиться на другие сайты

BARS_,  вот за совет по делу спасибо!

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

 

IMG_2581.TRIM.MOV

Изменено пользователем DimonRX
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Снова попробую обратиться за помощью.

Читать данные с индикатора не получилось. Хочу попробовать читать данные со входа сдвигового регистра. Запись туда происходит по следующему алгоритму:

1. выдаём первый старший бит из пачки на линию DATA

2. опускаем в лог. 0 линию CLC

3. поднимаем в лог.1 линию CLC

4. повторяем все пункты с 1, пока не выдадим все биты.

Мысли такие. Повесить линию CLC на прерывание, например на INT1 со срабатыванием по спаду уровня. При срабатывании прерывания считывать бит данных. И так, пока не прочитаю байт. Вроде логично (на мой дилетантский взгляд), но есть проблема. Как мне синхронизироваться с передачей? Я же могу начать читать не обязательно сначала, а с любого места? И тогда будет считана неверная информация. Как мне узнать, что в данный момент начата передача нового байта?

Ссылка на комментарий
Поделиться на другие сайты

По SPI у меня подключен цифровой потенциометр MCP41010. И SPI у меня инициализирован как master. Мысли были попробовать по SPI прочитать, но не могу врубиться, как?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Релюхи не причём. При неисправности релюх симптомы были бы другие. И ИБП даже не клацает когда переходит в  "аварию".   Да. Аккум новый. Более того - 2 новых пробовал. И без АКБ тоже. Не влияет. Да мелкие особо не вздуваются ж. Хотя С21 под подозрением..   Спасибо. Буду иметь ввиду.
    • #include <Wire.h> #include <Oregon_TM.h> #include <BME280I2C.h> //////////////////////////////////////////////////////////////////////////////////////////////////////////// //Скетч для устройства, передающего данные датчика BME280 в формате Oregon Scientific THGN132N //Принципиальная схема прилагается. //Для работы необходима библиотека https://github.com/finitespace/BME280/ //Устройство работает от 3-ех пальчиковых батареек, для экономии электричества заливать скетч нужно через ISP //////////////////////////////////////////////////////////////////////////////////////////////////////////// //Также возможна передача данных в формате - THP (температура, влажность, давление, напряжение батареи) //Пример с приёмником поддерживает расшифоовку THP //////////////////////////////////////////////////////////////////////////////////////////////////////////// # define THGN_SEND 1 // Передавать ли данные в формате THGN132 # define THP_SEND 0 // Передавать ли данные в формате THP # define DEVICE_LOG 1 //Писать ли лог В Serial # define DONE_PIN 15 // вывод сигнала об окончании работы на таймер # define BME_WAIT 10 // Сколько мс ожидать датчик BME # define BATTERY_THR 3.5 // Порог напряжения для выставляения флага разряда батарейки (THGN) ///////////////////////////////////////////////////////////////////////////////////////////////// //Ниблы датчика THP //Во всех полях младшие ниблы идут вперёд!!! // 1-2 - тип (55) // 3 - канал (0-7) // 4-6 - (температура от -100С) * 10. Т.е. +25.1С = 1251 = 4E3h // 7-9 - Влажность *10 Т.е. 25.1% = 251 = 0FBh // 10-12 - (давление от 500ммртст) * 10. Т.е. 765мм = 2650 = A5Ah // 13-15 - данные с АЦП (A0) // 16-17 - CheckSUM // 18-19 - CRC8 (poly 0x07 start 0x00) ///////////////////////////////////////////////////////////////////////////////////////////////// Oregon_TM transmitter(4); BME280I2C bme; bool bme_present = false; float bme_temp(NAN), bme_hum(NAN), bme_pres(NAN); ///////////////////////////////////////////////////////////////////////////////////////////////// void setup() { digitalWrite(DONE_PIN, LOW); pinMode(DONE_PIN, OUTPUT); #ifdef DEVICE_LOG Serial.begin(115200); Serial.println("Waiting for BMEsensor..."); #endif //Обмен данными с BME////////////////////////////////// Wire.begin(); while(!bme.begin()) { if (millis() > BME_WAIT) break; } if (!bme.begin()) { #ifdef DEVICE_LOG Serial.println("No BME sensor found"); #endif bme_present = false; } else { switch(bme.chipModel()) { case BME280::ChipModel_BME280: bme_present = true; bme.read(bme_pres, bme_temp, bme_hum); #ifdef DEVICE_LOG Serial.println("Found BME280 sensor! Success."); Serial.print("Temperature = "); Serial.print(bme_temp, 1); Serial.println("C"); Serial.print("Humidity = "); Serial.print(bme_hum, 1); Serial.println("%"); Serial.print("Pressure = "); Serial.print(bme_pres * 0.75, 1); Serial.println("mmHg"); #endif break; default: #ifdef DEVICE_LOG Serial.println("Found UNKNOWN sensor! Error!"); #endif bme_present = false; } } //Напряжения батареи/////////////////////////////////////////// word battvotage = (word)(((float)(1.1 * 16368) / Vbg()) * 100); #ifdef DEVICE_LOG Serial.print("Battery voltage = "); Serial.println(battvotage,HEX); #endif //Подготовка и отправка данных THGN////////////////////////////////////// transmitter.protocol == 2; if (THGN_SEND) { transmitter.setType(THGN132); transmitter.setChannel(3); transmitter.setBatteryFlag(battvotage < BATTERY_THR); if (bme_present) { if (bme_hum > 98) bme_hum = 98; if (bme_hum < 2) bme_hum = 2; if (bme_temp > 70) bme_temp = 70; if (bme_temp < -50) bme_temp = -50; transmitter.setTemperature(bme_temp); transmitter.setHumidity(bme_hum); transmitter.setComfort(bme_temp, bme_hum); } else { transmitter.setTemperature(-49.9); transmitter.setHumidity(2); transmitter.setComfort(-49.9, 2); } transmitter.SendPacket(); } // Если отправляются оба формата пакетов, межу ними надо выдержать паузу if (THP_SEND && THGN_SEND) delay(100); //Подготовка и отправка данных THP////////////////////////////////////// if (THP_SEND) { transmitter.setType(THP); transmitter.setChannelTHP(1); transmitter.setBatteryTHP( battvotage); if (bme_present) { transmitter.setTemperatureTHP(bme_temp); transmitter.setHumidityTHP(bme_hum); transmitter.setPressureTHP(bme_pres * 0.75); // перевод Pa в mmHg } else { transmitter.setErrorTHP(); } transmitter.SendPacket(); } #ifdef DEVICE_LOG Serial.println(); Serial.print(millis()); Serial.println("ms"); Serial.println(); #endif //Команда на отключение питания digitalWrite(DONE_PIN, HIGH); } ///////////////////////////////////////////////////////////////////////////////////////////////// void loop(){} ///////////////////////////////////////////////////////////////////////////////////////////////// int Vbg() { ADMUX = (1<<REFS0)|(0<<REFS1)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(0<<MUX0); long buffersamp=0; for (int n=0x0; n<=0xff; n++ ) { ADCSRA = 0xc7; while (bit_is_set(ADCSRA,ADSC)); buffersamp += ADC; } buffersamp >>=4; //16368 full scale 14bit ADCSRA &= ~(1 << ADEN); // отключаем АЦП return buffersamp; } Вот код программы. Пробовал по разному и от 5в запитывал и всю систему от 3,3 в. Причем голая ардуинка с таймером работает в нормальном режиме некоторое время, но потом все равно слетает и начинает питать мк постоянно( Причем это происходит всегда через разный промежуток времени.
    • На фото может быть название , характеристики и т.д. И по этому фото я смогу выбрать такой же в инете.. самому мне не собрать..
    • А что даст фотка? Тот же щуп, только чуть крупнее и с проводами питания.
    • Для меня наверное лучше купить готовый.. цель повысить чувствительность до 1 mV.. Наверное на Авто стоит покупать , мне бы фотку какую нить..такого активного щупа..))
    • Так на схемах обозначается подключение к сети 220 В.
  • Похожий контент

×
×
  • Создать...