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

Вопросы от начинающих по МК


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

помогите разобраться с AT24C64 ...

два дня мучаюсь. хочу программно реализовать I2C.

отправляю "старт", затем адрес 0xA0, получаю ACK = 0, затем "стоп".

отправляю "старт", затем адрес 0x00, получаю ACK = 1, затем "стоп".

т.е. микросхема отвечает.

"Старт", 0xA0, первый байт адреса затем в ответ ACK = 0, второй байт и снова ACK = 0, данные и ACK = 0.

т.е. данные записались.

а вот прочитать никак не могу.

не совсем понятно как отправить старт и затем после адресов снова старт. думаю именно в этом проблема.

спасибо.

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

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

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

Когда адрес послан, каждое устройство в системе сравнивает первые семь бит после состояния START с собственным адресом. Если они совпадают, устройство считает себя выбранным в качестве SLAVE-а передатчика или приемника в зависимости от бита R/W.

Вы учитываете, что адрес это только семь бит, а восьмой бит (нулевой бит) указывает, что мы будем делать, читать или писать?

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

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

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

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

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

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

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

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

Когда адрес послан, каждое устройство в системе сравнивает первые семь бит после состояния START с собственным адресом. Если они совпадают, устройство считает себя выбранным в качестве SLAVE-а передатчика или приемника в зависимости от бита R/W.

Вы учитываете, что адрес это только семь бит, а восьмой бит (нулевой бит) указывает, что мы будем делать, читать или писать?

да, учитываю. напишу как я читаю:

"Старт", 0xA0, два байта адреса с получением ACK.

затем "старт2", 0xA1, получаю ACK = 0, и потом почему постоянно 0xFF читаю.

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

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

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

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

Все правильно.

Тогда такие предположения.

1. На ножке 7 какой у Вас уровень? (должна быть подключена к земле, а то может быть Вы в микросхему ни чего и не записали и она честно Вам выдает FF)

2. После записи данных команду "Stop" формируете? Проверяли сторонними средствами (например программатором), что Вы действительно туда что то записали?

Изменено пользователем rtfcnf

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

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

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

Если взять любой терминал и послать в порт некие данные(например наборы FFFFFFFFFFF0000000000 на низкой скорости) то можно заметить моргание второго светодиода.
\

Как это сделать. Мне инструкцию для чайников:)

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

:dance2: аааа! сделал! блин на третий день))

первая ошибка была в том, что я забыл переключить D в режим выхода после получения ACK. :blush: а вторая, как я и подозревал была в отправке повторного "старт".

я просто опускал D, а потом опускал C.

а нужно было поднять D, поднять C и потом уже опускать D и C.

Если взять любой терминал и послать в порт некие данные(например наборы FFFFFFFFFFF0000000000 на низкой скорости) то можно заметить моргание второго светодиода.
\

Как это сделать. Мне инструкцию для чайников:)

http://softsearch.ru/programs/123-258-wterm-download.shtml

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

Посоветуйте как лучше организовать сортировку данных для AVR в порядке возрастания и убывания? как в паскале методом пузырька? пока значений немного в районе 20.

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

МакроАссемблер! данные простые числа до 100. данные хранятся во флаш потом органищуется их пересылка в ОЗУ, в начале я как понимаю в буферную зону иЛи в стек,а потом в началО ОЗУ они записываются в порядке возрастания(убывания)

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

Здравствуйте!

У меня пару вопросов, МК ATtiny2313:

1. Слышал что перед тем как прошивать надо еще дрова установить туда, зачем там дрова? если можно ссылочку, почитать...

2. При подключении МК к программатору, на МК должно подаваться только питание и 5 проводов от программатора? т.е. "в скобках указаны номера ног" +5в(1,20), mosi(17), miso(18), sck(19), reset(1), GND(10) верно?

3. По схеме у меня +5в подается на 1 и 20 ногу, при подключении к программатору reset на 1 ноге, надо ли при программировании отключать 1 ногу от +5в питания?

Заранее спасибо за ответы)

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

данные простые числа до 100.

Вы поаккуратней с терминами, здесь для многих простые числа это 1,3,5,7 итд:D

Вы наверно имели виду целые числа.

данные хранятся во флаш потом органищуется их пересылка в ОЗУ, в начале я как понимаю в буферную зону иЛи в стек,а потом в началО ОЗУ они записываются в порядке возрастания(убывания)

Можно и так, но имейте ввиду, что ОЗУ у МК как правило мало и весь ряд может не поместиться там.

Что мешает делать это во флеше?

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

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

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

А есть пики с АЦП и ЦАП на одном чипе?

В качестве ЦАПа в 8-разрядных МК обычно используют ШИМ.

Есть несколько чипов с классическим R-2R, но это экзотика. Дорогая и в общем то не нужная, учитывая задачи этих контроллеров.

Но в сигнальных контроллерах (16-разрядных dsPIC33), есть даже звуковые ЦАПы и соответственно АЦП до 1,1 MSPS.

戦う前に相手のベルトの色に注目

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

Скажите, если AVR настроен на тактирование внешним тактовым сигналом, он "заведется" от кварца? И наоборот, если настроен на кварц, "заведется" от внешнего сигнала на XT1? Делаю программатор. Схема "дает" постоянный меандр 1Мгц для тактирования прошиваемого МК. Может нужно будет еще и кварц предусмотреть?

С уважением, Дмитрий

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

Не заведется, предусматривайте кварц.

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

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

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

В сигнальных контроллерах (16-разрядных dsPIC33), есть даже звуковые ЦАПы и соответственно АЦП до 1,1 MSPS.

Нельзя ли этот звуковой контроллер применить в SDR приемнике? Там как раз требуется оцифровка, побитная дигитальная обработка и потом преобразование результата в аудиосигнал.

Слава антисионистам Владимиру Путину и Владимиру Квачкову!

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

А есть пики с АЦП и ЦАП на одном чипе?

ЦАП получается из ШИМ ( он есть во многих PIC и AVR ) добавлением резистора и конденсатора, а иногда еще и О.У. :D
Ссылка на комментарий
Поделиться на другие сайты

Скажите, если AVR настроен на тактирование внешним тактовым сигналом, он "заведется" от кварца? И наоборот, если настроен на кварц, "заведется" от внешнего сигнала на XT1?

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

ЦАП получается из ШИМ ( он есть во многих PIC и AVR ) добавлением резистора и конденсатора

Только не надо забывать что в этом случае полностью избавится от "помех" не получится, и у этого ЦАП будет ограничено быстродействие - чем больше постоянная времени RC-цепочки, тем меньше быстродействие и меньше пульсации. Для медленно изменяющихся сигналов такой способ еще пойдет, но уже на звуковых частотах возникают серьезные проблемы.

Например чтобы сделать 8 бит ЦАП опрная частота должна быть не меньше чем в 256 раз больше чем частота отсчетов - это без фильтрации, а если необходим чистый аналоговый сигнал на выходе - частоту повышать придется еще раз в 10.

Учение - изучение правил. Опыт - изучение исключений.

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

Всем привет.

Помогите пожалуйста.

Собираю устройство на основе AT89S53 но не где не могу найти этот МК. Есть возможность купить AT89S8253. Посмотрел даташиты на них – вроде одинаковое, по крайней мере все ноги и объем памяти одинаково. Вопрос – можно ли заменить AT89S53 на AT89S8253 без изменения прошивки??? То есть зашить в AT89S8253 прошивку которая предназначенная для AT89S53. И будет ли оно работать, хотябы теоретически...

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

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

Учение - изучение правил. Опыт - изучение исключений.

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

Спасибо за ответ.

Дальше мне понятно - нужно покупать проц и пробовать…

А еще такой вопрос – на мой проект есть исподники. Я так понимаю, что их можно будет подкорректировать под 8253??? Или нужно будет писать прошивку абсолютно заново под конкретный МК???

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

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

Учение - изучение правил. Опыт - изучение исключений.

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

Покупаю проц, пробую шить, а дальше будет видно…

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

Спасибо за помощь.

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

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

Сам я физик по образованию, так что то, что происходит с микросхемами понимаю лишь теоретически.

Но тем не менее на мою долю выпало следующее:

для нашего любительского чемпионата по ледовому ралли потребовалось информационное табло.формата 888 88:88,88 88:88,88 и так пять строк подряд

ну то есть на семисегментниках, так я думаю попроще будет.

светодиоды, как я понимаю, нужны не менее 2Кд, чтобы при солнечном свете все это дело было видно.

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

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

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

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

питание по выбору-12 или 220В.

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

заранее спасибо!

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

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

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

Гость
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 В.
  • Похожий контент

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