1. Очищается ли EEPROM при сбросе? 2. Если нет то, как очистить EEPROM? Просто у меня проблемы начались с подключением пульта после нескольких перепрошиваний и тестирования пультов по схеме из этой темы. Сначала выводилось все нормально, а потом: Код (Text): Otlichiya 0 Code 0 // 0 или 8, а иногда(очень редко) и другие числа и еще позже отличия совсем стали пустыми. Может кто знает в чем проблема?
Дык EEPROM на то и EEPROM, чтобы оставаться персистентной между сбросами и сессиями питания. Эдакий жёсткий диск Arduino. Очистить можно просто пробежавшись и заполнив нулями.
Спасибо, очистка EEPROM не помогла. Ничего не понимаю, если я не вносил изменений в программу и не менял схему то, от чего могут быть изменения еще? Буду разбираться)
Начну с начала. Захотелось мне как-то раз управлять компом с пульта, взял пульт от dvd, собрал схему и сразу же все заработало. Есть у меня по мимо моих развлечений свой проект и в нем используется тоже ардуинка и поэтому я перепрошивал на скетч проекта, а потом, когда хотелось опять поиграться с пультом обратно прошивал скетчем(1) по ссылке выше. Примерно на второй или третий раз прошивания начались непонятные вещи: во первых "различия" и "код" стали нулями, во вторых пульт от tv показывал все как должно быть, а от dvd - нет. Думаю ладно и обратно прошил на проект. После, когда уже нужно было цеплять пульт для проекта стало еще хуже, при этой же схеме с пультом от dvd код выдавал ноль, а отличия совсем не отображались, такое стало и с пультом от tv. И еще один может быть важный момент при самой первой прошивке я не подавал "высокий" как сказано в инструкции, но при этом пульт сразу распознался, но в дальнейшем это уже не играло роли, хотя я так и не узнал важно ли подавать в начале "высокий", что бы занести опорный массив.
Наверно важно. Я так понимаю что изначально Arduino не понимает код кнопок. Мы подаем ему код примера который заносится в EEPROM, а все остальные коды это просто отличия от первого. Но если в EEPROM ничего не заносилось, какие могут быть отличия. Моя схема отличается от указанной тем, что я использовал только один конденсатор на питание приемника. Если у вас 0 отличий потому что EEPROM пустой и не с чем сравнивать? Кстати как у вас в начале пульт сразу распознался без опорного массива?
даже не знаю) может все же нажал на кнопку, но факт, что после очистки EEPROMа у меня ничего не меняется - убивает. Днем попробую собрать как у вас по питанию, а может я просто спалил случайно ИК приемник.
А попробуйте прочитать что вообще записано в EEPROM. Если Arduino реагирует на нажатие клавиши пульта, пусть даже выдает нули, значит ИК работает.
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() { }
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
У меня ИК tsop 2238, хотя вряд ли это имеет значение. Интересно, а если сравнить опорный массив при нажатии разных кнопок? Создается впечатление что Arduino принимает сигнал нажатия, но получает одинаковый код.
Напишу в эту тему, т.к. более-менее похожа по смыслу. Проблема вот в чем. Очищаю eeprom с помощью предложенного в теме скетча, читаю все байты eeprom по очереди -> супер, везде нули. Выключаю МК, включаю снова, читаю - > опять нули. Но если перезаливаю скетч, любой, читаю -> в каждом байте eeprom 255. Что за штука такая с перезаписью скетча в МК? почему и кто закидывает 255 в каждый байт eeprom? Попробовал поставить другой МК, новенький... та же ситуация.
Надо свою тему создавать. Зачем некропостить? Это не очистка EEPROM, а запись в него нулей. После очистки каждая ячейка должна содержать число 255 или 0xFF. Т.е. все биты установлены в единички. Скорее всего у Вас так сконфигурирована прошивка МК. Вы указываете стирать EEPROM при заливке скетча. Вот после стирания все ячейки становятся 255.
Исторически сложилось так, что на первых ПЗУ стояли пережигаемые перемычки, подтянутые к плюсу питания. При программировании подавали питание на ячейку, там где бит был 0, возникало КЗ, перемычка пережигалась, бит читался как 0 потом. Теперь для ЕПРОМ это стало стандартом, чистое ПЗУ содержит все FF во всех ячейках.
Вероятно из-за того, что у человека 6 лет назад могла быть подобная проблема по содержанию. Хотя теперь понимаю, что врядли. Всем спасибо за наводку. Вы правы, во фьюзах не было прописано сохранять данные eeprom после очистки кристалла. P.S. не удержался. Про стандартное заполнение единицами известно. Таким добром в описании заполняется eeprom во всех новых МК. Смущало и было забыто, что это не заполнение FF-ками, а возвращение к базовому виду.