INT 21h

Домашняя страница самого страшного прерывания

ESP8266: Пример работы с внешней EEPROM через I2C

№ 8349 В разделах: Программирование Электроника от July 8th, 2017,

Решил тряхнуть стариной со второй купленой отладочной платой с ESP8266 и что-нить запрогать. Под руку попалась ППЗУ от Atmel на целый 1 кБайт :) Поскольку код особо писать не хотелось была найдена библиотечка. У автора возникла проблема с точно такой же микросхемой как у меня. После быстрого просмотра кода стало понятно, что используется 16 битная адресация, которая есть только на более объемных моделях типа 24LC256. Всего несколько строчек изменено и вот уже работает 8 битная адресация :) В writeEEPROM и readEEPROM закомментировал 2 строки со смещением и засылом байтов и просто написал свою строку с 8 битным адресом.

#include <Wire.h>
#include <EEPROM.h>

unsigned int EEPROMBank = 0x50; // Base address of 1st EEPROM chip
unsigned int EEPROMAddress = 0; // Sets the start EEPROM address
unsigned int EEPROMValue = 0; // EEPROM value
byte Dummy;

// EEPROM list taken from:
// http://vascoferraz.com/projects/24c-eeprom-check/
// Sets the Maximum EEPROM address, uncomment accordingly:
//#define MaxBankAddress = 128 - 1; //24C01 -> 1024 bit -> 128 byte
//#define MaxBankAddress = 256 - 1; //24C02 -> 2048 bit -> 256 byte
//#define MaxBankAddress = 512 - 1; //24C04 -> 4096 bit -> 512 byte
unsigned int MaxBankAddress = 1024 - 1; //24C08 -> 8192 bit -> 1024 byte
//#define MaxBankAddress = 2048 - 1; //24C16 -> 16384 bit -> 2048 byte
//#define MaxBankAddress = 4096 - 1; //24C32 -> 32768 bit -> 4096 byte
//#define MaxBankAddress = 8192 - 1; //24C64 -> 65536 bit -> 8192 byte
//#define MaxBankAddress = 16384 - 1; //24C128 -> 131072 bit -> 16384 byte
//#define MaxBankAddress = 32768 - 1; //24C256 -> 262144 bit -> 32768 byte
//#define unsigned int maxaddress = 65536 - 1; //24C512 -> 524288 bit -> 65536 byte

#define SCLPin D1 // I2C SCL Pin
#define SDAPin D2 // I2C SDA Pin

void setup() {
 Wire.begin(SDAPin, SCLPin); // Initialize 2-Wire bus
 pinMode(D1, INPUT_PULLUP); // I Need to validate this line
 pinMode(D2, INPUT_PULLUP); // I Need to validate this line
 Serial.begin(19200); // Initialize serial port
 while(!Serial); // wait for serial
 delay(3000); // Waits 3 seconds
 Serial.println("\n============================="); // Sends preamble and Cr+Lf
 EEPROMAddress = 0; // EEPROM word variable
 EEPROMValue = 120; // EEPROM value
 Serial.print("EEPROMAddress: ");
 Serial.print(EEPROMAddress);
 Serial.print(", EEPROMValue: ");
 Serial.print(EEPROMValue);
 Serial.print(", EEPROMBank: 0x");
 Serial.println(EEPROMBank,HEX);
 writeEEPROM(EEPROMBank, EEPROMAddress, byte(EEPROMValue));
 for (EEPROMAddress = 0; EEPROMAddress < 3; EEPROMAddress++) {
 Serial.print("EEPROMAddress: ");
 Serial.print(EEPROMAddress);
 Serial.print(", Value: ");
 Serial.println(readEEPROM(EEPROMBank, EEPROMAddress), DEC);
 }
}
void loop(){
}

void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data ) {
 Wire.beginTransmission(deviceaddress);
 //Wire.write((int)(eeaddress >> 8)); // MSB
 //Wire.write((int)(eeaddress & 0xFF)); // LSB
 Wire.write((int)(eeaddress)); //only for 8 bit addressing
 Wire.write(data);
 Wire.endTransmission();
 delay(5);
}

byte readEEPROM(int deviceaddress, unsigned int eeaddress ) {
 byte rdata = 0xFF;
 Wire.beginTransmission(deviceaddress);
 //Wire.write((int)(eeaddress >> 8)); // MSB
 //Wire.write((int)(eeaddress & 0xFF)); // LSB
 Wire.write((int)(eeaddress)); //only for 8 bit addressing
 Wire.endTransmission();
 Wire.requestFrom(deviceaddress,1);
 if (Wire.available()) rdata = Wire.read();
 return rdata;
}

Нет комментариев »

Оставьте ваш комментарий »

Форма отправки комментария

*

Разрешенные HTML-теги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

RSS RSS Feed только для этого поста |


Комментарии
  • 21h: нене ) без меня )
  • Серегй: Не совсем грабить)) если грабить можно и без рации, есть более благие цели, вы просто ответьте на мой вопрос,...
  • 21h: магазин грабить собрались? ) не, тут я не помощник ;)
  • Серегй: А что бы мне поймать чужую волну, что мне для этого нужно сделать? Допустим я купил данную рацию себе, мне...
  • 21h: слушать никто не запрещает. нет закона, который запрещает слушать. те, кто говорит иначе нагло врут. а если...
  • Серегй: Я хотел узнать могу ли я просто прийти с данной рацией baofeng uv-5r, допустим на объект, ну или вообще...
  • 21h: У меня есть только эти 2. По другим ничего не знаю. В интернете можно скачать инструкцию к вашей модели рации,...
  • Серегй: Добрый день! Хотелось бы задать пару вопросов по поводу раций, у Вас есть куда можно обратиться ТАТ.
  • 21h: потому, что нейросетью проще. яркость светофора меняется в зависимости от времени суток от маленькой красной...
  • Михаил: А зачем нейросеть? Почему цвет светофора определить без нейросетей?