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

Вебинар «Каждому ключу — свой драйвер» (13.08.2020)

Компания КОМПЭЛ приглашает вас принять участие в вебинаре, который будет посвящен теме драйверов управления транзисторами компании Infineon. Мы рассмотрим четыре различных технологии изготовления микросхем драйверов, в чём их отличия и особенности.

Подробнее

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

Новый ХИТ FANSO CR123A/SN

Параметры новой батарейки показывают прекрасные результаты. Она используется для приложений с повышенными импульсами тока. Широко применяется в охранно-пожарных датчиках, устройствах телеметрии, поисковых маячках, LED-фонарях и других промышленных и бытовых устройствах.

Подробнее

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

Share this post


Link to post
Share on other sites

Сетевой источник питания с расширенным диапазоном входных напряжений на основе VIPER26xK

Питание стационарных устройств чаще осуществляется напряжением 220 В, получаемым от одной фазы трехфазной промышленной сети. Однако существует ряд приложений, которым необходима энергия из всех трех фаз, в т.ч. и в аварийных режимах. Решение этой задачи обычно требует введение в модули питания дополнительных узлов, увеличивающих как их размеры, так и стоимость. Упростить схемы источников питания от трехфазной сети переменного тока либо от других высоковольтных источников, позволяет использование преобразователей с расширенным диапазоном входного напряжения.

Подробнее

В 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...

  • Сообщения

    • Ну, отличить 10% КНИ от 25% и оценить неравномерность АЧХ в 25дБ вполне можно... А что, думаете там сильно лучше?
    • я не пойму почему усе самоделкины делают его на трансформаторе) потому полез - а вообще бустер не сильно сложно расчитывается , позже попробуем собрать на фан7530
    • Тогда может стоит поставить нормальную сигналку? Да и блок ЦЗ не должен держать напряжение постоянно, сколько бы сигнала не выдавала импульс.
    • Если отдельно платкой ничего  трудного берешь fan7930 fan7530  или mc33262 дальше в даташите уже готовые варианты схем на 200 -300- 400 вт + сколько витков мотать ! или читаете для образований по этой части ?  
    • Если подаешь звук по аналогу то получишь только стерео. Для 5.1 необходимо подавать на кинотеатр сигнал по цифре, посмотри на многих был вход оптики. Но учти, что у тебя в цифру также должно быть упаковано 5.1. Что за источник хочешь использовать?
    • Лучше регулятор между ОУ. Вот ещё что. Параллельно R9,R23 и особенно R10,R20 включите конденсаторы 33...47 пФ. R49,R58 - 15...22 пФ. R61 - 33...47 пФ. Ну, и в других каналах то же самое. А то можете словить возбуды и/или наловить радиомусора. На мик. входах параллельно R4,R14 включите по 330 пФ, плюс-минус. Они для подавления синфазной помехи. А то у вас давится только диф. помеха  (С3), его, кстати, лучше уменьшить до 470 пФ. Если кабели не очень длинные, то можно оставить и 1 нФ. Поменяйте очерёдность элементов на входе: R1,R15,C3 перенесите на вход. Далее, С1,С5, а прямо возле входов ОУ - R4,R14 и параллельные им конденсаторы.
×
×
  • Create New...