24с32 на часах 3231
- Войдите на сайт для отправки комментариев
Пт, 12/02/2016 - 12:13
День всем добрый!
Возник вопрос:
все ли ячейки памяти 24С32, установленную на часах модуле часов 3231, можно использовать для своих нужд, или что-то используют часы?
почитайте, пожалуйста, с адреса 0 до 25. какие значения там? 65-90?
пытался писать с 0-го адреса. значеня по адресам 1 и 2 сбиваются, на 66 и 67.
видимо 3231 туда пишет.
ds3231 самодовольная rtc, ей и нафик не нужна память, если только библиотека что-то использует
Для часов использую библиотеку 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
И странно, по даташиту номер устройства должен быть 0b1010 0 A2 A1 A0 R/W, читаться должен 0b101001110
а у меня на 0х57 читается, т.е. 0b01010111 т.е. полубайты не с того конца подаются.
кто объяснит?
Може микросема битая? Другую пробовали?
Я вечером тоже буду мучать модуль на DS3231 с памятью 24с32. Там память никак к часам не прикручена кроме того что I2C выводы у них соеденены :-)
Как по мне так модуль очень удобен, и часы и память для сохранения времени и длительности срабатывания таймеров.
И к стати вот в этой теме в функции записи бита после
Wire.endTransmission();стоитdelay(10);Не знаю на сколько это необходимо, автор пока в той теме не ответил, но попробуй поставить задержку, может заработает. Потому как вот тут тоже код записи бита с задержкой 10мс.
задержка помогла. спасибо за подсказку.
может быть кто знает как проверить состояние микросхемы памяти, чтоб проверить на занятость до вызова функции записи.
и вопрос по адресации девайса не понятен. полубайты перевернуты.