0 голосов

Добрый день! Собрал схемку, запитал контроллер 5в, на пин +5V. Пытаюсь записать число в EEPROM

#include <EEPROM.h>


void EEPROMWriteInt(int p_address, int p_value)
{
  byte lowByte = ((p_value >> 0) & 0xFF);  
  EEPROM.write(p_address, lowByte);
  delay(80);
}

unsigned int EEPROMReadInt(int p_address)
{
  byte lowByte = EEPROM.read(p_address);

  return lowByte;
  delay(80);
}

void setup () {
//Пишу значение
 EEPROMWriteInt(50, 199);

//читаю значение
int val = EEPROMReadInt(50);
}

Читаю значение и получаю 255. А записываю 199... В чем косяк может быть?

(2 баллов) 1

2 Ответы

0 голосов
С типами данных. В функцию EEPROMWriteInt входит переменная типа int и после побитовых операций присваивается к байту. Что бы получить младший байт из int и других есть функция lowByte().

Также и с чтением вы присваивание переменной int переменную byte, но это уже не так зазорно.
(626 баллов) 1 5 21
0 голосов

Я для себя написал такие функции, т.к. мне абсолютно лень изучать библиотеки. Ну и со своими функциями полностью развязаны руки. Функции не блокирующие.

	//... Чтение из EEPROM
inline uint8_t EEPROM_read(uint16_t ucAddress)
{
	while(EECR & (1<<EEPE));			//.. Ждем завершения предыдущей операции с памятью

	cli();
		
	EEAR = ucAddress;				//.. Запишем адрес ячейки
		
	EECR |= (1<<EERE);				//.. Старт чтения EEPROM

	sei();

	EEAR = 0;					//.. Вернем адрес в начало
		
	return EEDR;				//.. Возвращаем полученные данные
}


	//... Запись в EEPROM
void EEPROM_write(uint16_t ucAddress, uint8_t ucData)
{
	while(EECR & (1<<EEPE));			//.. Ждем завершения предыдущей операции с памятью

	cli();
		
	EECR = (0<<EEPM1)|(0<<EEPM0);			//.. Установим режим работы - стирание и запись за одну операцию длительностью 3.4 мс (Atomic Operation)
		
	EEAR = ucAddress;				//.. Запишем адрес ячейки и данные в регистры
	EEDR = ucData;

	EECR |= (1<<EEMPE);				//.. Установим мастер бит EEMPE
		
	EECR |= (1<<EEPE);				//.. и произведём запись в EEPROM

	sei();

	EEAR = 0;					//.. Вернем адрес в начало
}

Для записи необходимо передать байт данных. При чтении также читаем один байт данных.

(876 баллов) 1 5 26
Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.
  1. parovoZZ

    370 балл(ов)

  2. gokase

    183 балл(ов)

  3. Un_ka

    179 балл(ов)

  4. issaom

    108 балл(ов)

  5. dartWaiter

    38 балл(ов)

  6. sser

    38 балл(ов)

Награды месяца
1-е место: Роторный инструмент Dremel 7750-10
2-е место: Мультиметр Uni-T UT61C
3-е место: Кримпер Pro'sKit 8PK-371D

...