Вопросы по EEPROM

Тема в разделе "Arduino & Shields", создана пользователем Oleg, 18 апр 2012.

  1. Oleg

    Oleg Нуб

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

    Сначала выводилось все нормально, а потом:
    Код (Text):
    Otlichiya  0
    Code   0 // 0 или 8, а иногда(очень редко) и другие числа
    и еще позже отличия совсем стали пустыми.
    Может кто знает в чем проблема?:(
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Дык EEPROM на то и EEPROM, чтобы оставаться персистентной между сбросами и сессиями питания. Эдакий жёсткий диск Arduino. Очистить можно просто пробежавшись и заполнив нулями.
     
  3. Oleg

    Oleg Нуб

    Спасибо, очистка EEPROM не помогла. Ничего не понимаю, если я не вносил изменений в программу и не менял схему то, от чего могут быть изменения еще? Буду разбираться)
     
  4. fox7812

    fox7812 Нерд

    Отпишитесь, интересно в чем дело. У меня сборка по той же схеме - все ок.
     
  5. Oleg

    Oleg Нуб

    Начну с начала.
    Захотелось мне как-то раз управлять компом с пульта, взял пульт от dvd, собрал схему и сразу же все заработало. Есть у меня по мимо моих развлечений свой проект и в нем используется тоже ардуинка и поэтому я перепрошивал на скетч проекта, а потом, когда хотелось опять поиграться с пультом обратно прошивал скетчем(1) по ссылке выше. Примерно на второй или третий раз прошивания начались непонятные вещи: во первых "различия" и "код" стали нулями, во вторых пульт от tv показывал все как должно быть, а от dvd - нет. Думаю ладно и обратно прошил на проект. После, когда уже нужно было цеплять пульт для проекта стало еще хуже, при этой же схеме с пультом от dvd код выдавал ноль, а отличия совсем не отображались, такое стало и с пультом от tv. И еще один может быть важный момент при самой первой прошивке я не подавал "высокий" как сказано в инструкции, но при этом пульт сразу распознался, но в дальнейшем это уже не играло роли, хотя я так и не узнал важно ли подавать в начале "высокий", что бы занести опорный массив.
     
  6. fox7812

    fox7812 Нерд

    Наверно важно. Я так понимаю что изначально Arduino не понимает код кнопок. Мы подаем ему код примера который заносится в EEPROM, а все остальные коды это просто отличия от первого. Но если в EEPROM ничего не заносилось, какие могут быть отличия. Моя схема отличается от указанной тем, что я использовал только один конденсатор на питание приемника. Если у вас 0 отличий потому что EEPROM пустой и не с чем сравнивать? Кстати как у вас в начале пульт сразу распознался без опорного массива?
     
  7. Oleg

    Oleg Нуб

    даже не знаю) может все же нажал на кнопку, но факт, что после очистки EEPROMа у меня ничего не меняется - убивает. Днем попробую собрать как у вас по питанию, а может я просто спалил случайно ИК приемник.
     
  8. fox7812

    fox7812 Нерд

    А попробуйте прочитать что вообще записано в EEPROM. Если Arduino реагирует на нажатие клавиши пульта, пусть даже выдает нули, значит ИК работает.
     
  9. Oleg

    Oleg Нуб

    1. Очистка EEPROM
    2. Принятие сигнала с пульта без подачи высокого сигнала для записи опорного массива
    3. Считывание EEPROM:
    0 0 0 0 0 0 0 0 0 0 0 0 0 4 FD 4 FD 4 FD 8 F9 4 FD 4 FD 4 FD 4 FD 4 FD 8 FD 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    4. Очистка EEPROM
    5. Принятие сигнала с пульта с подачей высокого сигнала для записи опорного массива
    6. Считывание EEPROM:
    F8 4 F9 4 FD 4 FD C F4 4 FD 4 FD 4 FD 4 FD 8 F8 4 FD 4 FD 4 FD 4 FD 4 FD 8 FD 4 F8 4 FD 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    Из этого всего можно понять, что в любом случае составляется опорный массив.
    Может скинешь свой массив из EEPROM, а я его себе залью и проверю?:)
    для UNO:
    Код (Text):
    #include <EEPROM.h>

    void setup()
    {
      Serial.begin(9600);
      for (int i = 0; i < 512; i++)
      {
        Serial.print(EEPROM.read(i), HEX);
        Serial.print(" ");
      }
    }

    void loop()
    {
    }
     
  10. fox7812

    fox7812 Нерд

    D5 5 F1 5 F1 5 F1 5 FB 5 FC 5 FC 5 FC 5 FB 5 F1 5 F1 5 F1 5 FC 5 FC 5 FC 5 FC 5 FC 5 F1 5 F1 5 FC 5 F0 5 FC 5 FC 5 FC 5 FC 5 FC 5 FC 5 F1 5 FB 5 F1 5 F1 5 F1 5 F1 5 0 0 0 0
     
  11. Oleg

    Oleg Нуб

    залил, результат такой же :(
    Вывод:
    1. я попал в сказку)
    2. что-то неправильно делаю
     
  12. fox7812

    fox7812 Нерд

    У меня ИК tsop 2238, хотя вряд ли это имеет значение. Интересно, а если сравнить опорный массив при нажатии разных кнопок? Создается впечатление что Arduino принимает сигнал нажатия, но получает одинаковый код.
     
  13. Oleg

    Oleg Нуб

    Для меня уже проще написать код с нуля. Ну что же проверю свои знания)
     
  14. Stas0232

    Stas0232 Нерд

    Напишу в эту тему, т.к. более-менее похожа по смыслу.
    Проблема вот в чем.
    Очищаю eeprom с помощью предложенного в теме скетча, читаю все байты eeprom по очереди -> супер, везде нули. Выключаю МК, включаю снова, читаю - > опять нули. Но если перезаливаю скетч, любой, читаю -> в каждом байте eeprom 255.
    Что за штука такая с перезаписью скетча в МК? почему и кто закидывает 255 в каждый байт eeprom? Попробовал поставить другой МК, новенький... та же ситуация.
     
  15. AlexU

    AlexU Гуру

    Надо свою тему создавать. Зачем некропостить?
    Это не очистка EEPROM, а запись в него нулей. После очистки каждая ячейка должна содержать число 255 или 0xFF. Т.е. все биты установлены в единички.
    Скорее всего у Вас так сконфигурирована прошивка МК. Вы указываете стирать EEPROM при заливке скетча. Вот после стирания все ячейки становятся 255.
     
    Igor68 нравится это.
  16. parovoZZ

    parovoZZ Гуру

    там и должно быть FF в каждой ячейке. А оно мешает? И как сильно?
     
  17. DetSimen

    DetSimen Guest

    Исторически сложилось так, что на первых ПЗУ стояли пережигаемые перемычки, подтянутые к плюсу питания. При программировании подавали питание на ячейку, там где бит был 0, возникало КЗ, перемычка пережигалась, бит читался как 0 потом. Теперь для ЕПРОМ это стало стандартом, чистое ПЗУ содержит все FF во всех ячейках.
     
    Igor68, Mitrandir, Daniil и ещё 1-му нравится это.
  18. parovoZZ

    parovoZZ Гуру

    Грациозно прибежавший кошак всех положил на лопатки))

    Это стало стандартом и для фьюзов.
     
  19. DetSimen

    DetSimen Guest

    Ну да. Оне тоже своеобразное ПЗУ конфигурацеи.
     
  20. Stas0232

    Stas0232 Нерд

    Вероятно из-за того, что у человека 6 лет назад могла быть подобная проблема по содержанию. Хотя теперь понимаю, что врядли.
    Всем спасибо за наводку. Вы правы, во фьюзах не было прописано сохранять данные eeprom после очистки кристалла.

    P.S. не удержался. Про стандартное заполнение единицами известно. Таким добром в описании заполняется eeprom во всех новых МК. Смущало и было забыто, что это не заполнение FF-ками, а возвращение к базовому виду.