Jump to content
3d_killer

Модуль ic2 работа часов и внешней памяти EEPROM вместе

Recommended Posts

Не могу заставить работать модуль, отдельно все работает, но если хочу и считывать внешнюю EEPROM и работать с часами, то часы стоят и показывают ерунду, вот скетч

#include <Wire.h>
#include <Eeprom24C32_64.h>
#define EEPROM_ADDRESS  0x50
static Eeprom24C32_64 eeprom(EEPROM_ADDRESS);


#include <DS1307.h>
// Init the DS1307
DS1307 rtc(SDA, SCL);


void setup() {
  // put your setup code here, to run once:
// Initialize serial communication.
    Serial.begin(9600);
        
    // Initialize EEPROM library.
    eeprom.initialize();

    const word address = 0;
    
    // Write a byte at address 0 in EEPROM memory.
    Serial.println("Write byte to EEPROM memory...");
    eeprom.writeByte(address, 0xAA);
    
    // Write cycle time (tWR). See EEPROM memory datasheet for more details.
    delay(10);
    
    // Read a byte at address 0 in EEPROM memory.
    Serial.println("Read byte from EEPROM memory...");
    byte data = eeprom.readByte(address);
    
    // Print read byte.
    Serial.print("Read byte = 0x");
    Serial.print(data, HEX);
    Serial.println("");


    //Запуск времени
  // Set the clock to run-mode
  rtc.halt(false);
  // Set SQW/Out rate to 1Hz, and enable SQW
  rtc.setSQWRate(SQW_RATE_1);
  rtc.enableSQW(true);
}

void loop() {
  // put your main code here, to run repeatedly:
delay(1000);
Serial.println(rtc.getTimeStr());
}

IC2 сканер видит 2 устройства с разными адресами, может кто сталкивался?

2017-12-08_10-48-03.jpg

а вот тест часов

#include <Wire.h>
#include <Eeprom24C32_64.h>
#define EEPROM_ADDRESS  0x50
static Eeprom24C32_64 eeprom(EEPROM_ADDRESS);


#include <DS1307.h>
// Init the DS1307
DS1307 rtc(SDA, SCL);


void setup() {
  // put your setup code here, to run once:
// Initialize serial communication.
    Serial.begin(9600);
        
    // Initialize EEPROM library.
   // eeprom.initialize();

   // const word address = 0;
    
    // Write a byte at address 0 in EEPROM memory.
    Serial.println("Write byte to EEPROM memory...");
   // eeprom.writeByte(address, 0xAA);
    
    // Write cycle time (tWR). See EEPROM memory datasheet for more details.
    delay(10);
    
    // Read a byte at address 0 in EEPROM memory.
    Serial.println("Read byte from EEPROM memory...");
   // byte data = eeprom.readByte(address);
    
    // Print read byte.
    Serial.print("Read byte = 0x");
   // Serial.print(data, HEX);
    Serial.println("");


    //Запуск времени
  // Set the clock to run-mode
  rtc.halt(false);
  // Set SQW/Out rate to 1Hz, and enable SQW
  rtc.setSQWRate(SQW_RATE_1);
  rtc.enableSQW(true);
}

void loop() {
  // put your main code here, to run repeatedly:
delay(1000);
Serial.println(rtc.getTimeStr());
}

 

2017-12-08_10-49-51.jpg

Share this post


Link to post
Share on other sites

Такие вещи нужно самому писать, без ардуиновских библиотек. Неизвестно, что они там с шиной делают...
У меня в текущем проекте стоят часы и еепромина на одной шине - проблем нет никаких.

Share this post


Link to post
Share on other sites

Библиотека eeprom маленькая там 4 функции всего, библиотека часов чуть побольше, но тоже ничего особого, задается адрес и  Wire.beginTransmission(); и Wire.endTransmission();

могу сказать одно, что лучше я не напишу...

да и я понимаю что лучше писать не на Arduino, но знаний пока не хватает, да и ветка вроде как ардуино, или я перепутал?

Share this post


Link to post
Share on other sites

Вебинар «Экосистема MEAN WELL. Решения для любых задач электропитания» (20.05.2021)

Приглашаем 20 мая на вебинар, посвященный линейке поставок компании MEAN WELL и ее подходу к производству источников питания — как экосистемы продукции и услуг, которая позволяет подобрать оптимальный источник питания для любых задач электропитания. Рассмотрим весь спектр выпускаемой продукции MEAN WELL в области AC/DC-, DC/DC- и DC/AC-преобразователей с подробным разбором интересных и уникальных новинок, их применении и многое другое.

Подробнее

22 минуты назад, 3d_killer сказал:

могу сказать одно, что лучше я не напишу...

А Вы попробуйте. Если оно всё заработает - это уже будет лучше !
"Под лежачий камень вода не течёт" (c)
Найдите нормальную библиотеку I2C и с её помощью напишите свой код для часов и епром. Сначала по-отдельности. Потом уже и вместе соедините.

22 минуты назад, 3d_killer сказал:

но тоже ничего особого

Это на первый взгляд ничего сложного. На самом деле, там достаточно сложный механизм.
АрдуБиблиотеки основаны на С++ классах. И для каждого модуля (часы и еепром), где-то там внутри, создаются разные экземпляры этого класса, работающие с одним ресурсом (шиной i2c). Это уже косяк. Оно может работать, а может и не работать. И ели работать, то коряво. А если разные библиотеки юзают разные типы классов I2C, то это уже не косяк, а катастрофа...

Вам нужно найти библу для I2C, создать его единственный экземпляр класса и работать только с ним. Тогда счастье Вам обеспечено.

Да и, собственно, библу I2C тоже можно не искать. Сделайте свою, с программным I2C, а не аппаратным. Там всё ограничивается всего-лишь обычным дёрганьем ног, ничего сложного.

Share this post


Link to post
Share on other sites

Барьерные силовые клеммы от Degson – расширение складского ассортимента Компэл

Обновленная линейка барьерных клеммных блоков Degson, поступивших на склад Компэл, содержит широкий ряд клемм, подходящих для соединения проводников различного сечения (от 22AWG до 10AWG). Барьерные клеммные колодки сочетают в себе удобство, простоту и надежность соединения. Это достигается за счет ответственного производства и использования высококачественных материалов. Винтовые клеммные блоки барьерного типа Degson предназначены в первую очередь для коммутации в сильноточных цепях, например, в распределительных и измерительных системах.

Подробнее

Все заработало, проблема была в том что от часов я использовыход sqw с частотой 1гц для прерывания, в этом прерывании и производил попытку записи и чтения, когда сделал это в основной программе то все заработало

Share this post


Link to post
Share on other sites

Материалы вебинара «Решения Analog Devices для гальванической изоляции. Обзор технологий и новинок»

Опубликованы материалы вебинара, посвященного решениям Analog Devices для гальванической изоляции. На вебинаре рассказали о: технологии гальванической изоляции iCoupler, цифровых изоляторах, технологии isoPower, гальванически изолированных интерфейсах (RS-485, CAN, USB, I2C, LVDS) и многом другом. Материалы вебинара будут интересны разработчикам промышленной автоматики и медицинской техники.

Подробнее

В 09.12.2017 в 20:34, 3d_killer сказал:

Все заработало, проблема была в том что от часов я использовыход sqw с частотой 1гц для прерывания, в этом прерывании и производил попытку записи и чтения, когда сделал это в основной программе то все заработало

Здравствуйте. Не можете поделиться опытом решения проблемы с работой с EEPROM в DS1307. Как адресовать память при записи и чтении если адресный линии не выведены?

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...