Не записывает в ПЗУ
- Войдите на сайт для отправки комментариев
Ср, 19/09/2018 - 19:47
Здравствуйте, при данном скетче при смене значения с 1 на 0 не происходить запись в EEPROM. в чем может быть проблемма?
#include <EEPROM.h>
byte i = 0;
int Upin = 6;
int N = 0;
int K = 0;
void setup() {
Serial.begin (9600);
pinMode (Upin, INPUT);
}
void loop() {
i = i + 1;
if (i > 254) {
i = 0;
}
Serial.println (i);
N = digitalRead (Upin);
Serial.println (N);
if (N = 0) {
EEPROM.write(0, i);
}
Serial.println (EEPROM.read(0));
delay (1000);
}
Вставьте код с номерами строк
не происходить запись в EEPROM.
Да, "не происходить".
в чем может быть проблемма?
В том, что Вы её неправильно написали.
1. Всегда вставляйте код как положено, чтобы можно было ссылаться на номера строк.
2. А пока, изучите вот это и посмотрите, что у Вас написано в строке №ХЗ
Проблемы нет: код работает в точности так, как написан.
if (N = 0)
Это - присваивание, а не сравнение ;)
Это - присваивание, а не сравнение ;)
Ну, вот, пришёл поручик Ржевский ....
Уж коль на то пошло,то вывсёврёти и вводите бедного ньюби в заблуждение! Это именно сравнение! Сравнение результата присваивания с нулём!
Ну, надо ж было так всё опошлить! Поручик! :))))
Скетч, конечно, убийца EEPROM-а.
Вот он, где поручик-то! Выше постом :) Евгений - я всёго лишь на полшишечки влез, а sadman41 - по самые не балуй засадил :)
Уж коль на то пошло,то вывсёврёти и вводите бедного ньюби в заблуждение! Это именно сравнение! Сравнение результата присваивания с нулём!
Отнюдь.
Здесь две операции: присваивание и проверка истинности.
Проблема в следующем
Проблема не в этом, а в том, что Вы не читаете, что Вам пишут. Я же Вам писал
1. Всегда вставляйте код как положено, чтобы можно было ссылаться на номера строк.
Игнорируете? Так и будем переписываться типа "ошибка в строке №ХЗ"?
#include <EEPROM.h> byte i = 0; int Upin = 6; int N = 0; int K = 0; void setup() { Serial.begin (9600); pinMode (Upin, INPUT); } void loop() { i = i + 1; if (i > 254) { i = 0; } Serial.println (i); N = digitalRead (Upin); Serial.println (N); if (N == LOW) { EEPROM.write(0, i); } Serial.println (EEPROM.read(0)); delay (4000); }Строки 14-16, в принципе можно удалить. Строка 25 обеспечивает эффект задержки реакции на случайное время (до ~4сек).
Проблема не в этом
Проблема не в этом
Если у всех получается, а у вас нет - тут два варианта:
1. Сломался аппарат
2. Кривые руки
Аппарат работает, но не так как надо, запись происходит, но не так как надо. Руки возможно. Поэтому и прошу помощи. Вообщем задача сделать одометр с сохранением значения. Может кто подскажет как по другому это реализовать
Влезу опять с FRAM. Если не получается с EEPROM - берете такую МС и пишете туда значения каждые... сколько метров критично потерять? Вот каждые эти N метров. Пропадание питания стеречь уже не надо. Если правильно организуете процесс, то скорее на пенсию выйдете, чем МС протрете.
рекомендация от atmel не применять адрес 0 eeprom, эта 0 память повреждает данные, если питание не стабильно. Также рекомендация, удерживать питание стабильное на время запись в eeprom.
Уважаемая strarbit, поделитесь источником информации о повреждении именно нулевой ячейки. Я на этот счет читал только это: https://www.microchip.com/webdoc/AVRLibcReferenceManual/FAQ_1faq_eeprom_corruption.html - тут написано, что в старых поколениях AVR чаще всего повреждалась нулевая ячейка, но не в обязательном порядке. В новых вроде как все пофиксили - монитор питания следит за напряжением.
Уважаемый господин sadman41! имела читать точно 0 адрес eeprom, нет память # техническое описание какое от atmel. Если это техническое описание вижу, то отправить адрес Вам.
в этом doc - If the reset occurs later in the write process both the requested address and address zero may be corrupted.