Jump to content
AronIIStone

Использовать Arduino в качестве программатора i2c для 24rf08

Recommended Posts

Добрый день

Возникла ситуация: имеется ноутбук IBM ThinkPad t20 с запароленым Bios. Пароль никто не помнит, но он зашит в 24rf08. Его можно прочитать програмкой для считывания данной микросхемы, но для этого нужен программатор. Можно ли использовать в качестве такого программатора Ардуино, чтобы он вопринимался этой программой как надо, и если можно, то как нужно подключить их и какой скетч залить в ардуинку? 

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

Спасибо 

Share this post


Link to post
Share on other sites

Можно.


Пока ты жив, надежда есть.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Вебинар «Экосистема MEAN WELL. Решения для любых задач электропитания» (20.05.2021)

Приглашаем 20 мая на вебинар, посвященный линейке поставок компании MEAN WELL и ее подходу к производству источников питания — как экосистемы продукции и услуг, которая позволяет подобрать оптимальный источник питания для любых задач электропитания. Рассмотрим весь спектр выпускаемой продукции MEAN WELL в области AC/DC-, DC/DC- и DC/AC-преобразователей с подробным разбором интересных и уникальных новинок, их применении и многое другое.

Подробнее

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


Пока ты жив, надежда есть.

Share this post


Link to post
Share on other sites

Барьерные силовые клеммы от Degson – расширение складского ассортимента Компэл

Обновленная линейка барьерных клеммных блоков Degson, поступивших на склад Компэл, содержит широкий ряд клемм, подходящих для соединения проводников различного сечения (от 22AWG до 10AWG). Барьерные клеммные колодки сочетают в себе удобство, простоту и надежность соединения. Это достигается за счет ответственного производства и использования высококачественных материалов. Винтовые клеммные блоки барьерного типа Degson предназначены в первую очередь для коммутации в сильноточных цепях, например, в распределительных и измерительных системах.

Подробнее

Материалы вебинара «Решения Analog Devices для гальванической изоляции. Обзор технологий и новинок»

Опубликованы материалы вебинара, посвященного решениям Analog Devices для гальванической изоляции. На вебинаре рассказали о: технологии гальванической изоляции iCoupler, цифровых изоляторах, технологии isoPower, гальванически изолированных интерфейсах (RS-485, CAN, USB, I2C, LVDS) и многом другом. Материалы вебинара будут интересны разработчикам промышленной автоматики и медицинской техники.

Подробнее

Кстати, как ни странно, поисковик на "24rf08" выдаёт кучу ссылок на решения проблем с паролями ноутов IBM.
ТС похоже просто поленился в поисковике посидеть 10 минут.

Share this post


Link to post
Share on other sites

Спасибо

Даташит читал, но видимо не внимательно, если можно её прочитать светодиодами.

8 часов назад, skripach сказал:

подробнее здесь.

http://it-technology.complexdoc.ru/1964399.html

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

8 часов назад, Alex сказал:

Кстати, как ни странно, поисковик на "24rf08" выдаёт кучу ссылок на решения проблем с паролями ноутов IBM.
ТС похоже просто поленился в поисковике посидеть 10 минут.

Отнюдь. По этому поводу сидел в поисковиках далеко не 10 минут. Просто хотел найти ответ на вопрос, связанный именно с чтением из-под Arduino конкретной МК, так как таких тем я не нашел.

Edited by AronIIStone
дополнил

Share this post


Link to post
Share on other sites

Есть прошивка под USBasp с поддержкой микросхем памяти, а он работает также на атмега. Так что да, можно.

Share this post


Link to post
Share on other sites
Guest Максим

Пароль можно сбросить на bios достать батарейку и замкнуть контакты:D Но это работает с о обычной настольной материнской платы. Как с ноутбуком не знаю.

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Гуру подскажите как подсчитать размеры радиатора для мостового модуля на 2092 при питании +/-65 Вольт и нагрузке 4 Ом для обычного фазоинверторного корпуса колонки?
    • Прозвоните разъёмы между собой, а лучше разберите и посмотрите что там внутри. Очень часто в таких адаптерах USB разъёмы тупо запараллелены, а надписи на корпусе полная ерунда. Не факт что этот адаптер и свои заявленные 3.4 А выдаст.
    • Купил я себе регистратор в машину  и ч ним в комплекте идет бп в прикуриватель. Но в нем есть два выхода , один на 2.4 А и второй на 1А. Тот, что на 2.4 предназначен для питания регистратора, на входе так и помечено. Есть у меня еще и навигатор, который отдельно был запитан. Для него якобы нужно питания 5в с током 1.5 А. Я хотел бы задействовать оба гнезда и не городить дополнительное питание для навигатора. Наверное так не получится?   ps запитывать буду от отдельного плюса, а не от прикуривателя.
    • в даташите посмотрите, какое минимально допустимое питание, все остальное - от лукавого. Если надо, чтобы не работал ниже минимума, на 4 ногу повесьте цепь, затыкающую ИМС ниже порога 7В. На рисунке R10, R23, R7, Q3. Напряжение питания контролируется на верхней ноге R10. Порог затыкания Uотс=(Vref-0,6)*(1+R10/R23). Для 7В, R10=6.2к, R23=10к. Параллельно Q4 стоит цепь софтстарта C4R7, срабатывает сразу после появления нормального питания. я ни**ена не понял... 
    • ну я так понимаю, что плата обрабатывала сигналы с клавиатуры, возможно делала какие-то вычисления и передавала сигнал на дисплей? Скорее всего без платы эта клавиатура работать не будет. Поэтому хочу попробовать подключить это все в сборе к компу, может хоть что-нибудь вылезет на монитор, что хоть как то подскажет что это такое . Поэтому возвращаюсь к первому вопросу: как эти 5 пинов подключить к компу?
    • Всё за 500р. Перешлю без проблем. Со схемами Схемы есть Схемы есть   Часы 3 шт, схемы есть   Книжка  Схемы есть
  • Similar Content

    • By Антон Палыч
      Мне нужно сделать структурную схему по вот такой электрической схеме для дипломного проекта. Это примочка дилея на основе ардуио нано. Сам я в электронике совсем не сведущ, выбрал такой проект только из-за программирования самой ардуины.

    • By демидос
      имеем: ардуино нано дисплей 1602 с i2c переходником блок релюшек 4 кнопки. все работало около часа при различних кнопкотыканиях. и на испытании произошла непонятная програмная ошибка: сначала вылезли случайные символы потом потухла подсветка, хотя как понял она управляется перемычкой. при дальнейшем перезапуске на выходах висит 0 и нет никакой реакции на нажатия. убрал из программы дисплей и она заработала. пробовал переустановить библиотеки liquid cristal i2c но не помогло. пробовал отключать дисплей. даже инвертированные выходы лежат в 0. код прилагаю
      #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C _lcd1(0x27, 16, 2); int _dispTempLength1=0; boolean _isNeedClearDisp1; const byte _menuParametrsArray[] PROGMEM = {1, 3, 2, 0, 0, 0, 5, 6, 1, 8, 3, 0, 2, 3, 1, 0, 0, 0, 5, 6, 1, 8, 1, 0, 3, 4, 1, 0, 0, 0, 2, 3, 1, 4, 2, 0, 4, 3, 3, 0, 0, 0, 5, 6, 1, 8, 4, 0}; bool _menuValueArray_bool[3]; const bool _menuConstantValuesArray_bool[] PROGMEM = {1, 0}; int _menuValueArray_int[1]; const int _menuConstantValuesArray_int[] PROGMEM = {3, 15, -3}; const char _flprogMenuNameString1[] PROGMEM = "dislink"; const char _flprogMenuNameString2[] PROGMEM = "attenuator"; const char _flprogMenuNameString3[] PROGMEM = "cross line"; const char _flprogMenuNameString4[] PROGMEM = "noise generaror"; const char _flprogMenuNameString5[] PROGMEM = "ON"; const char _flprogMenuNameString6[] PROGMEM = "OFF"; const char* const _flprogMenuStringsArray[] PROGMEM = { _flprogMenuNameString1, _flprogMenuNameString2, _flprogMenuNameString3, _flprogMenuNameString4, _flprogMenuNameString5, _flprogMenuNameString6}; struct _menuItemStricture { int startInArrayIndex; } ; struct _menuMainStricture { byte startIndex; byte stopIndex; bool isSwitchMenuAroundRing; _menuItemStricture currentItem; } ; _menuItemStricture _MenuItems[4]; _menuMainStricture _MainMenus[1]; String _MenuBlock_41244328_MNO; String _MenuBlock_41244328_VNO; bool _MenuBlock_41244328_OEIS = 0; bool _MenuBlock_41244328_OMUIS = 0; bool _MenuBlock_41244328_OMDIS = 0; bool _MenuBlock_41244328_OVUIS = 0; bool _MenuBlock_41244328_OVDIS = 0; bool _bounseInputD0S = 0; bool _bounseInputD0O = 0; unsigned long _bounseInputD0P = 0UL; int _disp2oldLength = 0; bool _bounseInputD2S = 0; bool _bounseInputD2O = 0; unsigned long _bounseInputD2P = 0UL; int _disp1oldLength = 0; bool _bounseInputD1S = 0; bool _bounseInputD1O = 0; unsigned long _bounseInputD1P = 0UL; bool _bounseInputD3S = 0; bool _bounseInputD3O = 0; unsigned long _bounseInputD3P = 0UL; bool _tempVariable_bool; byte _tempVariable_byte; void setup() { pinMode(0, INPUT_PULLUP); pinMode(1, INPUT_PULLUP); pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); pinMode(4, OUTPUT); digitalWrite(4, 0); pinMode(5, OUTPUT); digitalWrite(5, 0); pinMode(6, OUTPUT); digitalWrite(6, 0); pinMode(7, OUTPUT); digitalWrite(7, 0); pinMode(8, OUTPUT); digitalWrite(8, 0); pinMode(9, OUTPUT); digitalWrite(9, 0); pinMode(10, OUTPUT); digitalWrite(10, 0); pinMode(11, OUTPUT); digitalWrite(11, 0); pinMode(12, OUTPUT); digitalWrite(12, 0); pinMode(13, OUTPUT); digitalWrite(13, 0); Wire.begin(); delay(10); _lcd1.init(); _lcd1.backlight(); _bounseInputD0O = digitalRead(0); _bounseInputD3O = digitalRead(3); _bounseInputD1O = digitalRead(1); _bounseInputD2O = digitalRead(2); _MenuItems[0].startInArrayIndex = 0; _MenuItems[1].startInArrayIndex = 12; _MenuItems[2].startInArrayIndex = 24; _MenuItems[3].startInArrayIndex = 36; _MainMenus[0].startIndex = 1; _MainMenus[0].isSwitchMenuAroundRing = 1; _MainMenus[0].stopIndex = 4; _MainMenus[0].currentItem = _MenuItems[0]; } void loop() { if (_isNeedClearDisp1) { _lcd1.clear(); _isNeedClearDisp1= 0; } bool _bounceInputTmpD0 = (digitalRead (0)); if (_bounseInputD0S) { if (millis() >= (_bounseInputD0P + 40)) { _bounseInputD0O= _bounceInputTmpD0; _bounseInputD0S=0; } } else { if (_bounceInputTmpD0 != _bounseInputD0O) { _bounseInputD0S=1; _bounseInputD0P = millis(); } } bool _bounceInputTmpD3 = (digitalRead (3)); if (_bounseInputD3S) { if (millis() >= (_bounseInputD3P + 40)) { _bounseInputD3O= _bounceInputTmpD3; _bounseInputD3S=0; } } else { if (_bounceInputTmpD3 != _bounseInputD3O) { _bounseInputD3S=1; _bounseInputD3P = millis(); } } bool _bounceInputTmpD1 = (digitalRead (1)); if (_bounseInputD1S) { if (millis() >= (_bounseInputD1P + 40)) { _bounseInputD1O= _bounceInputTmpD1; _bounseInputD1S=0; } } else { if (_bounceInputTmpD1 != _bounseInputD1O) { _bounseInputD1S=1; _bounseInputD1P = millis(); } } bool _bounceInputTmpD2 = (digitalRead (2)); if (_bounseInputD2S) { if (millis() >= (_bounseInputD2P + 40)) { _bounseInputD2O= _bounceInputTmpD2; _bounseInputD2S=0; } } else { if (_bounceInputTmpD2 != _bounseInputD2O) { _bounseInputD2S=1; _bounseInputD2P = millis(); } } //Плата:1 digitalWrite(4, (_menuValueArray_bool[1])); digitalWrite(5, !((_menuValueArray_bool[0]))); digitalWrite(13, ((((_bounseInputD0O) || (_bounseInputD1O))) || (((_bounseInputD3O) || (_bounseInputD2O))))); if (1) { _tempVariable_bool = 1; if (! _MenuBlock_41244328_OEIS) { _MenuBlock_41244328_OEIS = 1; } _tempVariable_byte = pgm_read_byte(&_menuParametrsArray[((_MainMenus[0].currentItem).startInArrayIndex)+10]); _MenuBlock_41244328_MNO = _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_byte - 1]))); _MenuBlock_41244328_VNO = _menuOutputValueString (0); } else { _tempVariable_bool = 0; if (_MenuBlock_41244328_OEIS) { _MenuBlock_41244328_OEIS = 0; } _MenuBlock_41244328_MNO = ""; _MenuBlock_41244328_VNO = ""; } if(_bounseInputD0O) { if (! _MenuBlock_41244328_OMUIS) { _MenuBlock_41244328_OMUIS = 1; if(_tempVariable_bool) { _menuUpEvents(0); } } } else { _MenuBlock_41244328_OMUIS = 0; } if(_bounseInputD1O) { if (! _MenuBlock_41244328_OMDIS) { _MenuBlock_41244328_OMDIS = 1; if(_tempVariable_bool) { _menuDownEvents(0); } } } else { _MenuBlock_41244328_OMDIS = 0; } if(_bounseInputD3O) { if (! _MenuBlock_41244328_OVUIS) { _MenuBlock_41244328_OVUIS = 1; if(_tempVariable_bool) { _valueUpEvents(0); } } } else { _MenuBlock_41244328_OVUIS = 0; } if(_bounseInputD2O) { if (! _MenuBlock_41244328_OVDIS) { _MenuBlock_41244328_OVDIS = 1; if(_tempVariable_bool) { _valueDownEvents(0); } } } else { _MenuBlock_41244328_OVDIS = 0; } if (1) { _dispTempLength1 = ((_MenuBlock_41244328_VNO)).length(); if (_disp2oldLength > _dispTempLength1) { _isNeedClearDisp1 = 1; } _disp2oldLength = _dispTempLength1; _lcd1.setCursor(0, 1); _lcd1.print((_MenuBlock_41244328_VNO)); } else { if (_disp2oldLength > 0) { _isNeedClearDisp1 = 1; _disp2oldLength = 0; } } if (1) { _dispTempLength1 = ((_MenuBlock_41244328_MNO)).length(); if (_disp1oldLength > _dispTempLength1) { _isNeedClearDisp1 = 1; } _disp1oldLength = _dispTempLength1; _lcd1.setCursor(0, 0); _lcd1.print((_MenuBlock_41244328_MNO)); } else { if (_disp1oldLength > 0) { _isNeedClearDisp1 = 1; _disp1oldLength = 0; } } digitalWrite(6, !((_menuValueArray_bool[2]))); digitalWrite(7, !(((String("0")).equals((String(0, DEC)))))); digitalWrite(8, !(((String("3")).equals((String(0, DEC)))))); digitalWrite(9, !(((String("6")).equals((String(0, DEC)))))); digitalWrite(10, !(((String("9")).equals((String(0, DEC)))))); digitalWrite(11, !(((String("12")).equals((String(0, DEC)))))); digitalWrite(12, !(((String("-3")).equals((String(0, DEC)))))); } String _readStringFromProgmem (char *string) { String result = String(""); while (pgm_read_byte(string)!='\0') { result=result+ char(pgm_read_byte(string)); string++; } return result; } void _menuUpEvents (byte menuIndex) { byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]); byte parIndex = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+5]); byte parentStartIndex; byte parentStopIndex; if (parIndex == 0) { parentStartIndex = (_MainMenus[menuIndex]).startIndex; parentStopIndex =(_MainMenus[menuIndex]).stopIndex; } else { parentStartIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[parIndex - 1]).startInArrayIndex)+3]); parentStopIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[parIndex-1]).startInArrayIndex)+4]); } if (tempIndex == parentStartIndex) { if((_MainMenus[menuIndex]).isSwitchMenuAroundRing) { (_MainMenus[menuIndex]).currentItem = _MenuItems[parentStopIndex -1]; return; } else { return; } } (_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex - 2]; return; } void _menuDownEvents (byte menuIndex) { byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]); byte parIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+5]); byte parentStartIndex; byte parentStopIndex; if (parIndex == 0) { parentStartIndex = (_MainMenus[menuIndex]).startIndex; parentStopIndex =(_MainMenus[menuIndex]).stopIndex; } else { parentStartIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[parIndex-1]).startInArrayIndex)+3]); parentStopIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[parIndex-1]).startInArrayIndex)+4]); } if (tempIndex == parentStopIndex) { if((_MainMenus[menuIndex]).isSwitchMenuAroundRing) { (_MainMenus[menuIndex]).currentItem = _MenuItems[parentStartIndex -1]; return; } else { return; } } (_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex]; return; } void _valueUpEvents (byte menuIndex) { byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+2]); byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+1]); byte indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+6]); byte indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+8]); if(itemType ==3) { _menuValueArray_bool[valIndex - 1 ] = 1; return; } if (itemType == 4) { if (! indexMax == 0) { if (! (int(pgm_read_word(&_menuConstantValuesArray_int[indexMax -1])) > int(_menuValueArray_int[valIndex -1]))) { return; } } _menuValueArray_int[valIndex -1] = _menuValueArray_int[valIndex -1] + (pgm_read_word(&_menuConstantValuesArray_int[indexStep -1])); } } void _valueDownEvents (byte menuIndex) { byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+2]); byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+1]); byte indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+7]); byte indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+8]); if(itemType ==3) { _menuValueArray_bool[valIndex -1] = 0; return; } if (itemType == 4) { if (! indexMin == 0) { if (! ((int(pgm_read_word(&_menuConstantValuesArray_int[indexMin - 1]))) < int(_menuValueArray_int[valIndex - 1]))) { return; } } _menuValueArray_int[valIndex - 1] = _menuValueArray_int[valIndex - 1] - (pgm_read_word(&_menuConstantValuesArray_int[indexStep - 1])); } } String _menuOutputValueString (byte menuIndex) { byte itemType = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+1]); byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+2]); byte indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+7]); byte indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+6]); if(valIndex == 0) { return ""; } byte convFormat = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+9]); if(itemType == 3) { return _convertBoolean(itemType, convFormat, valIndex, indexMax, indexMin); } if(itemType == 4) { return _convertNamber(itemType, convFormat, valIndex, indexMax, indexMin); } return ""; } String _convertNamber(byte itemType, byte convFormat, byte valIndex, byte indexMax, byte indexMin) { if (itemType== 4) { if (convFormat == 4) { return String((_menuValueArray_int[valIndex - 1 ]),DEC); } if (convFormat == 5) { return String((_menuValueArray_int[valIndex - 1]),HEX); } if (convFormat == 6) { return String((_menuValueArray_int[valIndex -1]),BIN); } } } String _convertBoolean(byte itemType, byte convFormat, byte valIndex, byte indexMax, byte indexMin) { if (convFormat == 1) { if(_menuValueArray_bool[valIndex -1]) { return "1"; } else { return "0"; } } if (convFormat == 2) { if(_menuValueArray_bool[valIndex -1]) { return "True"; } else { return "False"; } } if (convFormat == 3) { if(_menuValueArray_bool[valIndex -1 ]) { return "Да"; } else { return "Нет"; } } if(_menuValueArray_bool[valIndex -1]) { return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMax - 1]))); } else { return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMin - 1]))); } }  
      пишу в flprog
      i2c сканер тоже молчит и не отправляет данные через порт
       
    • By admin
      В видео поговорим об энергоэффективности микроконтроллеров. Сравним потребление в режима сна arduino, blue pill с STM32F103 и представителя новой линейки энергоэффективных микроконтроллеров от st — STM32L552.
      Подробную информацию об линейке L5 можно найти тут: https://www.compel.ru/lib/143383
      Пи тест часть 1: https://youtu.be/ozu1IUjH1_Q
      Пи тест часть 2: https://youtu.be/uLOWYE-JJpA
    • By Dj_Grander Z Play
      У меня есть ESP32Cam которая берет кадры (240*176пкс. QQVGA) и пересылает их серверу по UDP. С этой частью проекта проблем нет всё работает всё ОК. Но хочу прикрутить получение данных по UDP от того же сервера причем с достаточно приличной частотой. Кто пробовал работать с такими модулями, не подскажете не будет и помехой работа с камерой, работе с сервером по UDP-протоколу. У меня есть сомнения по поводу того не будет ли эспешка в момент взятия кадра зацикливаеся на этом и в этот момент не сможет принять сообщения от сервера и управлять периферией. Подскажите пожалуйста кто может т.к. работаю с этими камнями впервые. Заранее спасибо.
    • By Nikolay_R
      Добрый день! В данный момент прохожу производственную преддипломную практику (сам учусь в УРТК). Стоит задача соединить Lego EV3 и Raspberry PI по I2C интерфейсу. До этого, при работе с другими устройствами, у меня никогда не было проблем с I2C интерфейсом, но в данной связке "EV3-RPI" - начались ошибки. Перед описанием ошибок, уточню, что EV3 - Master, а Raspberry - Slave, т.к. EV3 умеет работать только в режиме Master.
      Первое, что бросается в глаза, это практически постоянная передача в эфир SLA пакета (адреса Slave-устройства). По-факту, именно с этого и должна начинаться передача, но в данном случае, её попросту не происходит. А, если быть точнее, то происходит она только каждый шестой раз.
      Следующая проблема заключается в том, что обмен данными не всегда происходит до конца. Даже если EV3 отправляет свой пакет (два байта), то ответ от Raspberry (он тоже два байта) приходит через-раз, а то и ещё реже.
      я также пробовал соединять EV3 с Arduino, Arduino с Raspberry, что бы найти причину, но там всё отлично работало и ошибок было ноль. Стабильный обмен двумя байтами, как и нужно.

      Очень нужна помощь в устранении данных ошибок!


      P.S: У EV3 используется нестандартный уровень лог. единицы (там он 4.3в) и обычные конверторы уровней уже не работают с ним. Поэтому, мне пришлось перепаивать его под другие номиналы подтягивающих резисторов, что бы всё заработало. В его работе нареканий нет.

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


×
×
  • Create New...