Пока что не разобрался особо, но как понял — специальная память, которая питается от отдельного источника, например как ионистора, и в паре с часами реального времени она себе работает и кушает какие-то микроамперы.
Пробовал в Arduino IDE написать функцию для чтения состояния кнопок, в протеусе почему-то не работает, а в реальном железе проверить возможности пока что нет.
Не судите строго, писал ночью
#define PIN1 10
#define PIN2 11
#define DOWN 1
#define OK 2
#define UP 3
#define SET 4
void setup()
{
Serial.begin(9600);
}
char checkKeys()
{ // понеслась
pinMode(PIN1, OUTPUT);
digitalWrite(PIN1, LOW);
pinMode(PIN2, OUTPUT);
digitalWrite(PIN2, LOW);
int keysRead = 0;
for (keysRead = 1; keysRead <= 4; keysRead++) {
switch (keysRead) {
case DOWN:
digitalWrite(PIN1, INPUT_PULLUP);
if (digitalRead(PIN1) == false) {
return DOWN;
}
break;
case OK:
pinMode(PIN1, OUTPUT);
digitalWrite(PIN1, LOW);
digitalWrite(PIN2, INPUT_PULLUP);
if (digitalRead(PIN2) == false) {
return OK;
}
break;
case UP:
pinMode(PIN2, OUTPUT);
digitalWrite(PIN2, LOW);
digitalWrite(PIN1, INPUT_PULLUP);
if (digitalRead(PIN1) == false) {
return UP;
}
break;
case SET:
digitalWrite(PIN2, INPUT_PULLUP);
if (digitalRead(PIN2) == false) {
return SET;
}
break;
default:
return 0;
}
}
}
void loop()
{
int keyScan = checkKeys();
Serial.print(keyScan);
Serial.print(" ");
switch (keyScan) {
case DOWN:
Serial.println("DOWN");
break;
case OK:
Serial.println("OK");
break;
case UP:
Serial.println("UP");
break;
case SET:
Serial.println("SET");
break;
}
delay(500);
}
У ATmega328, если мне не изменяет память, столько же.
А вот отсутствие EEPROM — да, смущает немного. Хотя слыхал про Backup Domain:
http://mcu8.ru/wp-gull/mylinks/2012/04/08/stm32-sohranenie-parametrov/
Пока что не разобрался особо, но как понял — специальная память, которая питается от отдельного источника, например как ионистора, и в паре с часами реального времени она себе работает и кушает какие-то микроамперы.
Rockerman Моя статья в каком-то смысле пересекается с Вашей.