Модуль часов реального времени DS3231 (ZS-042)

Здесь обсуждаем Arduino
Аватара пользователя
gurvinok
Сообщения: 1500
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Модуль часов реального времени DS3231 (ZS-042)

Сообщение gurvinok » 07 фев 2016, 13:37

sprintf(string, "%02i:%02i:%02i", hour, minute, second);
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1115
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Модуль часов реального времени DS3231 (ZS-042)

Сообщение GhostX » 07 фев 2016, 13:42

говорит
invalid conversion from 'const char*' to 'size_t {aka unsigned int}' [-fpermissive]

Аватара пользователя
gurvinok
Сообщения: 1500
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Модуль часов реального времени DS3231 (ZS-042)

Сообщение gurvinok » 07 фев 2016, 13:51

Кино с 32:48. У меня никто ни на что не ругался.
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1115
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Модуль часов реального времени DS3231 (ZS-042)

Сообщение GhostX » 07 фев 2016, 14:14

Я знаю. Но я уперся в эту ошибку и решил передохнуть. Мож свежие мысли посетят. :)

Аватара пользователя
gurvinok
Сообщения: 1500
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Модуль часов реального времени DS3231 (ZS-042)

Сообщение gurvinok » 07 фев 2016, 14:31

А я принтер 3D рисую.
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1115
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Модуль часов реального времени DS3231 (ZS-042)

Сообщение GhostX » 06 мар 2016, 08:02

Сижу, пытаюсь записать в at24c32 несколько массивов и не получается, не пойму где косячу.
Читать, читает. Писать, не пишет.
Что я не так делаю?

Код: Выделить всё

#include <Wire.h>
#define AT24C32 0x56

	byte degree[8] = { B00111, B00101, B00111, B00000, B00000, B00000, B00000, B00000,};// кодируем символ градуса
	byte PE_lit[8] = { B11111, B10001, B10001, B10001, B10001, B10001, B10001, B00000,};// кодируем символ П
	byte EL_lit[8] = { B00111, B01001, B10001, B10001, B10001, B10001, B10001, B00000,};// кодируем символ Л
	byte ZH_lit[8] = { B10001, B10101, B10101, B01110, B10101, B10101, B10001, B00000,};// кодируем символ Ж
	byte MZ_lit[8] = { B10000, B10000, B10000, B11110, B10001, B10001, B11110, B00000,};// кодируем символ Ь
	byte U_lit[8] = { B10001, B10001, B10001, B01111, B00001, B00001, B01110, B00000,};// кодируем символ У
	byte YA_lit[8] = { B01111, B10001, B10001, B01111, B00101, B01001, B10001, B00000};// кодируем символ Я
	byte D_lit[8] = { B00110, B01010, B01010, B01010, B01010, B01010, B11111, B10001};// кодируем символ Д
	byte CH_lit[8] = { B10001, B10001, B10001, B01111, B00001, B00001, B00001, B00000};// кодируем символ Ч
	byte Z_lit[8] = { B01110, B10001, B00001, B00110, B00001, B10001, B01110, B00000};// кодируем символ З
	int Adress = 0;
void setup() {
	Wire.begin();
	Serial.begin(9600);
	
	Adress = 0;
	zapisal(degree);
	Adress = 8;
	zapisal(PE_lit);
	Adress = 16;
	zapisal(EL_lit);
	Adress = 24;
	zapisal(ZH_lit);
	Adress = 32;
	zapisal(MZ_lit);
	Adress = 40;
	zapisal(U_lit);
	Adress = 48;
	zapisal(YA_lit);
	Adress = 56;
	zapisal(D_lit);
	Adress = 72;
	zapisal(CH_lit);
	Adress = 80;
	zapisal(Z_lit);
Serial.println(" ok ");

for(int i = 0; i < 9; i ++){	
	vid();
	Adress += 8;
	}
	vid();
}

void loop() {
 
}

void zapisal(byte *val){

for(int g = 0; g < 8; g++) zap(Adress+g, val[g]);
}
void zap(int adr, byte infa){ //Запись!!!!------------------------------------------------------------------
 
 Wire.beginTransmission(AT24C32);
 Wire.write(highAddressByte(adr));      //старший адрес
 Wire.write(lowAddressByte(adr));      //младший адрес

 Wire.write(infa);      //Запишем данные

 Wire.endTransmission();
 delay(10);
 
}

byte highAddressByte(word address){ //делим число на страший байт
  byte BYTE_1;
  BYTE_1 = address >> 8;
  return BYTE_1;
}

byte lowAddressByte(word address){ //делим число на бладший байт
  byte BYTE_1;
  byte BYTE_2;
  BYTE_1 = address >> 8;
  BYTE_2 = address - (BYTE_1 << 8);
  return BYTE_2;
} 

void vid(){
	for(int i = 0; i < 9; i ++){
	
		Serial.print(readByte(Adress), BIN);
		Serial.print(", ");
		Adress++;
	}
	Serial.println(readByte(Adress), BIN);
}

byte readByte(word address){
    Wire.beginTransmission(AT24C32);
    Wire.write(address >> 8);
    Wire.write(address & 0xFF);
    Wire.endTransmission();
    Wire.requestFrom(AT24C32, (byte)8);
    byte data = 0;
    if (Wire.available())
    {	
        data = Wire.read();
    }
    return data;
}

Аватара пользователя
gurvinok
Сообщения: 1500
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Модуль часов реального времени DS3231 (ZS-042)

Сообщение gurvinok » 06 мар 2016, 10:19

А если попробовать моими функциями записать и прочитать? Просто ардуиновские функции мне не извесны и я не могу дать гарантию их четкой работы. Или попробуй просто записать и прочитать один байт.
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1115
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Модуль часов реального времени DS3231 (ZS-042)

Сообщение GhostX » 30 апр 2016, 16:22

Привет.)) Почему не работает? Что не так пишу?
error: invalid operands of types 'float' and 'int' to binary 'operator>>'
Я не понимаю, в чем смысл ошибки.

Код: Выделить всё

void EEPROM_AT24C32_int_write(int p_address, Float p_value){
        byte oneByte = ((p_value >> 0) & 0xFF);
        byte twoByte = ((p_value >> 8) & 0xFF);
        byte threeByte = ((p_value >> 16) & 0xFF);
        byte fourByte = ((p_value >> 24) & 0xFF);

        zap(p_address, oneByte);
        zap(p_address + 1, twoByte);
        zap(p_address + 2, threeByte);
        zap(p_address + 3, fourByte);
        }

void zap(int adr, int infa){ //Запись!!!!------------------------------------------------------------------
 
        Wire.beginTransmission(AT24C512);
        Wire.write(adr >> 8);      //старший адрес
        Wire.write(adr & 0xFF);      //младший адрес

        Wire.write(infa);      //Запишем данные

        Wire.endTransmission();
        delay(4);
 
}
а когда переписал вот так

Код: Выделить всё

void EEPROM_float_write(int addr, float val) // запись в ЕЕПРОМ
{  
  byte *x = (byte *)&val;
  for(byte g = 0; g < 4; g++) AT24c512write(g+addr, x[g]);
}
void AT24c512write(int adr, byte infa){ //Запись!!!!------------------------------------------------------------------
 
 Wire.beginTransmission(AT24C512);
 Wire.write(adr >> 8);      //старший адрес
 Wire.write(adr & 0xFF);      //младший адрес

 Wire.write(infa);      //Запишем данные

 Wire.endTransmission();
 delay(4);
 
}
то работает.
Саму запись не проверял, не припаял еще микросхему, а компиляция успешна.

Аватара пользователя
gurvinok
Сообщения: 1500
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Модуль часов реального времени DS3231 (ZS-042)

Сообщение gurvinok » 02 май 2016, 07:07

А потому что нельзя записать в байтовую переменную вещественное число. В первом вареанте идет попытка затолкать слона в перевозку для кошек. А во втором варианте слона пилят на части и распихивают в четыре перквозки. А для последущей сборки вешают бирки с порядковым номером.
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1115
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Модуль часов реального времени DS3231 (ZS-042)

Сообщение GhostX » 02 май 2016, 11:20

Помсмотрел что такое вещественное число и не понял.
Наверное когда вот это пойму, пойму и что такое вещественное число...
Про флоат прочитал раз наверное 15 и толком не понял.

PS
Запись работает во втором варианте все пишется.

Ответить