Страница 1 из 1

Доработка библиотеки EEPROM 24LC256 для 2-х байт переменных

Добавлено: Пн апр 27, 2020 23:48:51
CAT86
Привет всем. Кто может доработать стандартную библиотеку EEPROM 24LC256 что бы можно было сохранять int data=745; Очень нужно :shock:

Код: Выделить всё

/* now you can include the I2C Functions */
#include <i2c.h>

/* function declaration for delay_ms */
#include <delay.h>

#define EEPROM_BUS_ADDRESS 0xa0      // Tyt stavim adress for EEPROM 

/* read a byte from the EEPROM */
unsigned char eeplc24_read(unsigned char address_high, unsigned char address_low) {
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address_high);
i2c_write(address_low);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}

/* write a byte to the EEPROM */
void eeplc24_write(unsigned char address_high, unsigned char address_low, unsigned char data) {
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address_high);
i2c_write(address_low);
i2c_write(data);
i2c_stop();
/* 10ms delay to complete the write operation */
delay_ms(7);
}

Код: Выделить всё

#ifndef _24lcxx_INCLUDED_
#define _24lcxx_INCLUDED_

#pragma used+

/* read a byte from the EEPROM */
unsigned char eeplc24_read(unsigned char address_high, unsigned char address_low);

/* write a byte to the EEPROM */
void eeplc24_write(unsigned char address_high, unsigned char address_low, unsigned char data);

#pragma used-

#pragma library 24lcxx.lib

#endif
Вот я где то скопи-пастер код:

Код: Выделить всё

unsigned int EEPROM_read_int(unsigned int addr) {    
  unsigned char buf[2];
  unsigned char i;
  
  for( i = 0; i < 2; i++ ) buf[i] = EEPROM_read(addr+i);
  unsigned int &num = (unsigned int&)buf;
  return num;

Код: Выделить всё

void EEPROM_write_int(unsigned int addr, unsigned int num) {
  unsigned char buf[2];
  unsigned char i;
  
  (unsigned int&)buf = num;
  for( i = 0; i < 2; i++ ) EEPROM_write(addr+i, buf[i]);
}

Re: Доработка библиотеки EEPROM 24LC256 для 2-х байт перемен

Добавлено: Вт апр 28, 2020 09:42:22
Самсусамыч
По шине I2C данные передаются по байтно… то есть data должна быть однобайтовой переменной (зависит от алгоритма библиотеки), а в неё последовательно перед отправкой очередного байта необходимо помещать отправляемый байт. Окончание передачи определяется командой СТОП. Пока ведущее устройство не отправит команду СТОП, ведомое устройство будет принимать байты сохраняя их последовательно в ячейки начиная с ранее указанного ведущим адреса.

Re: Доработка библиотеки EEPROM 24LC256 для 2-х байт перемен

Добавлено: Вт апр 28, 2020 11:43:45
ARV

Код: Выделить всё

// чтение блока данных
// addr - 16-бит адреса начала блока данных в микросхеме памяти
// dest - указатель на принимающий буффер
// count - количество читамых байтов
void i2c_read_block(uint16_t addr, uint8_t *dest, uint8_t count){
   i2c_start();
   i2c_write(EEPROM_BUS_ADDRESS);
   i2c_write(addr >> 8);
   i2c_write(addr);
   i2c_start();
   i2c_write(EEPROM_BUS_ADDRESS | 1);
   while (count--) *dest++ = i2c_read(0);
   i2c_stop();   
}

// чтение переменной типа int
int var;

i2c_read_block(125, &var, sizeof(int));
аналогично сделать и запись - это сами уже.

однако, помните, что запись во всех микросхемах i2c ведется постранично, поэтому надо следить, чтобы блок записываемых данных не пересекал границу страницы. если все-таки пересекает, то писать его надо частями.

Re: Доработка библиотеки EEPROM 24LC256 для 2-х байт перемен

Добавлено: Вт апр 28, 2020 18:56:58
CAT86
Привет ARV. я ни когда не работал с внешней еепром, по этому прошу помощь зала :))
Нужно собрать библиотеку, что бы в будущем удобно было пользоваться.

Re: Доработка библиотеки EEPROM 24LC256 для 2-х байт перемен

Добавлено: Ср апр 29, 2020 04:23:31
Аlex
У Вас есть функции для работы с байтом. В чём сложность сделать "тупо в лоб" - разбить Ваши записываемые/читаемые данные на байты и работать с ними по-отдельности ?
Вы не знаете как сделать цикл ? Вы не знаете как разбить данные на байты ? Вы не сможете создать функцию, удовлетворяющую Ваши требования ?
Как Вы тогда вообще собрались писать программу ? :dont_know:

Re: Доработка библиотеки EEPROM 24LC256 для 2-х байт перемен

Добавлено: Ср апр 29, 2020 19:54:16
CAT86
Привет Alex. я могу написать функцию, сделать цикл. Просто сейчас вообще нет времени разбираться. Вы можете мне помочь с библиотекой?
Пишите в личку.