24с32 на часах 3231

MacSim
Offline
Зарегистрирован: 28.11.2012

День всем добрый!

Возник вопрос:

все ли ячейки памяти 24С32, установленную на часах модуле часов 3231, можно использовать для своих нужд, или что-то используют часы?

почитайте, пожалуйста, с адреса 0 до 25. какие значения там? 65-90?

пытался писать с 0-го адреса. значеня  по адресам 1 и 2 сбиваются, на 66 и 67.

видимо 3231 туда  пишет.

 

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

ds3231 самодовольная rtc, ей и нафик не нужна память, если только библиотека что-то использует

MacSim
Offline
Зарегистрирован: 28.11.2012

Для часов использую библиотеку Sodaq_DS3231. Может быть и она. Спасибо поковыряю ее. поковырял она не причем.

#include <Wire.h> 
int deviceaddress = 0x57;
byte d;
byte read824C( int deviceaddress, unsigned int eeaddress );
void wright824C( int deviceaddress, unsigned int eeaddress, byte data );
void setup() {
  // put your setup code here, to run once:
 Wire.begin(); 
Serial.begin(9600);
while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
Serial.print("ready");

}

void loop() {
  // put your main code here, to run repeatedly:
 for (int i=0; i<=20;i++){
 d=read824C(  deviceaddress, i );
 Serial.print("adr=");Serial.print(i);Serial.print(" ");
 Serial.print("data= ");Serial.println(d);
 }
 delay(1000);
 for (int i=0; i<=10;i++){
wright824C(  deviceaddress, i, 21 );
 Serial.print("adr=");Serial.print(i);Serial.print(" ");
 Serial.println("data= 21 wright");
 }
}

//Функция для записи:
  void wright824C( int deviceaddress, unsigned int eeaddress, byte data ) {
    int rdata = data;
    Wire.beginTransmission(deviceaddress);
    Wire.write((int)(eeaddress >> 8)); // MSB
    Wire.write((int)(eeaddress & 0xFF)); // LSB
    Wire.write(rdata);
    Wire.endTransmission();
  }

//Функция для чтения:
 byte read824C( int deviceaddress, unsigned int eeaddress ) {
    byte rdata = 0xFF;
    Wire.beginTransmission(deviceaddress);
    Wire.write((int)(eeaddress >> 8)); // MSB
    Wire.write((int)(eeaddress & 0xFF)); // LSB
    Wire.endTransmission();
    Wire.requestFrom(deviceaddress,1);
    if (Wire.available()){ rdata = Wire.read();}
    return rdata;
  }

написал все отдельно.

1 и 2 упорно 66 и 67

MacSim
Offline
Зарегистрирован: 28.11.2012

И странно, по даташиту номер устройства должен быть 0b1010 0 A2 A1 A0 R/W, читаться должен 0b101001110

а у меня на 0х57 читается, т.е. 0b01010111 т.е. полубайты не с того конца подаются.

кто объяснит?

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Може микросема битая? Другую пробовали?

Я вечером тоже буду мучать модуль на DS3231 с памятью 24с32.  Там память никак к часам не прикручена кроме того что I2C выводы у них соеденены :-)

Как по мне так модуль очень удобен, и часы и память для сохранения времени и длительности срабатывания таймеров.

И к стати вот в этой теме в функции записи бита после  Wire.endTransmission(); стоит delay(10);

Не знаю на сколько это необходимо, автор пока в той теме не ответил, но попробуй поставить задержку, может заработает. Потому как вот тут тоже код записи бита с задержкой 10мс.

MacSim
Offline
Зарегистрирован: 28.11.2012

задержка помогла. спасибо за подсказку.

может быть кто знает как проверить состояние микросхемы памяти, чтоб проверить на занятость до вызова функции записи.

и вопрос по адресации девайса не понятен. полубайты перевернуты.