Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы по С/С++ (СИ)
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср янв 07, 2026 21:31:36

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7704 ]     ... , , , 383, , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 11:31:25 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2927
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18900
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 2
Медали: 1
Лучший человек Форума 2017 (1)
WiseLord писал(а):
То есть изменение на единицу значения коррекции даёт изменение количества импульсов в минуту на 0.1.
ты не прав.
0.1ppm не имеет отношения к минуте.
ppm - это число миллионных долей.
0.1ppm - это одна десятимиллионная часть.
в сутках 3600 * 24 = 86400 секунд.
делим на 10 миллионов и получаем 86400 / 10000000 = 0,00864 секунды в сутки.
итого, 2 сек за 28 дней => 2/28 = 0.0714 сек за сутки => 0.0714/0.00864 = 8.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 12:14:00 
Мучитель микросхем
Аватар пользователя

Карма: 8
Рейтинг сообщений: 105
Зарегистрирован: Ср сен 02, 2015 07:47:20
Сообщений: 423
Рейтинг сообщения: 2
А оно точно от суток считается? Кстати, в процентах это будет вот так:
Изображение

_________________
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 6 декабря 2025 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.


Последний раз редактировалось HardWareMan Ср янв 08, 2025 14:27:30, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 12:53:49 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2927
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18900
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 2
Медали: 1
Лучший человек Форума 2017 (1)
HardWareMan писал(а):
А оно точно от суток считается?
с чего ты это взял?
сутки, как и минуты, тут ни при чем.
если ppm - это одна миллионная, то это одна миллионная к любому периоду времени.
и если не лень, можешь посчитать сколько будет одна миллионная за год.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 13:36:34 
Опытный кот
Аватар пользователя

Карма: 11
Рейтинг сообщений: 79
Зарегистрирован: Пт фев 27, 2015 12:00:53
Сообщений: 840
Откуда: Рязанская область
Рейтинг сообщения: 0
прошу прощения за свою серость, но как правильно записать число от -128 до +127 в 10 ячейку ds3231 :oops:

Код:
#include <Wire.h>// Подключаем библиотеку I2C 
#define DS3231_I2C_ADDRESS 0x68
// конвертируем обычные десятичные значения в двоично-десятичный код:
byte decToBcd(byte val){
  return( (val/10*16) + (val%10) );
}
// конвертируем двоично-десятичный код в обычные десятичные значения:
byte bcdToDec(byte val){
  return( (val/16*10) + (val%16) );
}
int8_t Aging_off = -12; //наше число
//---------- void SETUP----------------------------------------------------------------------------------------------
void setup(){                                     

  Serial.begin (9600);                           
  Wire.begin();                                   


Wire.beginTransmission(0x68);
Wire.write(0x10);
Wire.write(decToBcd(Aging_off));
Wire.endTransmission();
}
                                                                   
void loop() {
  Wire.beginTransmission(0x68);
  Wire.write(0x10);
  Wire.endTransmission();
  Wire.requestFrom(0x68,1);//Запрашиваем данные 
  Aging_off = bcdToDec(Wire.read() & 0xff);// читаем байты –


 Serial.println(Aging_off,DEC);
 Serial.println("****");
 Serial.println("      ");
 delay(1000);
}


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 14:01:19 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2557
Рейтинг сообщения: 2
Wire.write(Aging_off);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 14:10:17 
Опытный кот
Аватар пользователя

Карма: 11
Рейтинг сообщений: 79
Зарегистрирован: Пт фев 27, 2015 12:00:53
Сообщений: 840
Откуда: Рязанская область
Рейтинг сообщения: 0
ели не конвертировать Wire.write(decToBcd(Aging_off)); то...
у меня с конвертацией не так... но что?

Код:
#include <Wire.h>// Подключаем библиотеку I2C 
#define DS3231_I2C_ADDRESS 0x68
// конвертируем обычные десятичные значения в двоично-десятичный код:
int8_t decToBcd(int8_t val){
  return( (val/10*16) + (val%10) );
}
// конвертируем двоично-десятичный код в обычные десятичные значения:
int8_t bcdToDec(int8_t val){
  return( (val/16*10) + (val%16) );
}
int8_t Aging_off = -12; //наше число
//---------- void SETUP----------------------------------------------------------------------------------------------
void setup(){                                     

  Serial.begin (9600);                           
  Wire.begin();                                   


Wire.beginTransmission(0x68);
Wire.write(0x10);
Wire.write(decToBcd(Aging_off));
Wire.endTransmission();
}
                                                                   
void loop() {
  Wire.beginTransmission(0x68);
  Wire.write(0x10);
  Wire.endTransmission();
  Wire.requestFrom(0x68,1);//Запрашиваем данные 
  Aging_off = bcdToDec(Wire.read() & 0xff);// читаем байты –


 Serial.println(Aging_off,DEC);
 Serial.println("****");
 Serial.println("      ");
 delay(1000);
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 14:16:29 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 48
Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 482
Рейтинг сообщения: 2
Serzh2000, вы когда в свою decToBcd() передаете -12, то надеетесь получить двоично-десятичное число со знаком? Где он там хранится? )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 14:19:38 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4901
Откуда: Минск
Рейтинг сообщения: 2
WiseLord писал(а):
То есть изменение на единицу значения коррекции даёт изменение количества импульсов в минуту на 0.1.
ты не прав.
0.1ppm не имеет отношения к минуте.
ppm - это число миллионных долей.
0.1ppm - это одна десятимиллионная часть.
в сутках 3600 * 24 = 86400 секунд.
делим на 10 миллионов и получаем 86400 / 10000000 = 0,00864 секунды в сутки.
итого, 2 сек за 28 дней => 2/28 = 0.0714 сек за сутки => 0.0714/0.00864 = 8.


Понятно. Я думал, что это что-то типа аббревиатуры для pulses per minute

P.S. Забавно, что 32768*60 почти равно 2 миллионам, и ошибочный результат почти ровно вдвое некорректен :)


Последний раз редактировалось WiseLord Ср янв 08, 2025 14:25:16, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 14:30:38 
Опытный кот
Аватар пользователя

Карма: 11
Рейтинг сообщений: 79
Зарегистрирован: Пт фев 27, 2015 12:00:53
Сообщений: 840
Откуда: Рязанская область
Рейтинг сообщения: 0
да, :idea: его хранить надо 7 бите

Добавлено after 6 minutes 37 seconds:
и как это сделать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 14:39:33 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 48
Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 482
Рейтинг сообщения: 2
и как это сделать?

Никак. А раз никак и при этом вам нужно в байт поместить число которое может быть со знаком, значит оно не двоично-десятичное.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 15:27:04 
Опытный кот
Аватар пользователя

Карма: 11
Рейтинг сообщений: 79
Зарегистрирован: Пт фев 27, 2015 12:00:53
Сообщений: 840
Откуда: Рязанская область
Рейтинг сообщения: 0
Цитата:
Значение в этом регистре закодировано в формате двоичного целого числа со знаком с дополнением до 2, где бит 7 представляет бит знака числа.

https://microsin.net/adminstuff/hardwar ... e-rtc.html
во всем интернете нет ни одного живого примера как записать число от -128 до +127 в 10 ячейку ds3231 :facepalm:

Добавлено after 29 minutes 41 second:
Цитата:
Регистр старения кристалла хранит 8-битовый код в формате «дополнение до двух» предназначенный для компенсации точности хода часов.
Результирующая частота = частота резонатора + значение регистра * 0.1ppm, где значение регистра может быть, как положительным, так и отрицательным.

то есть мне нужно конвертировать обычные десятичные значения в 8-битовый код в формате «дополнение до двух"?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 17:26:27 
Это не хвост, это антенна

Карма: 12
Рейтинг сообщений: 136
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1318
Рейтинг сообщения: 2
Преобразование в BCD и обратно лишнее.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 18:35:50 
Опытный кот
Аватар пользователя

Карма: 11
Рейтинг сообщений: 79
Зарегистрирован: Пт фев 27, 2015 12:00:53
Сообщений: 840
Откуда: Рязанская область
Рейтинг сообщения: 0
Цитата:
регистр 10h (Aging offset), записывая в который число от -128 до 127, можно влиять на используемую в DS3231

НУ ЕГО НАФИК!!! :)))
В DS3231 есть будильник у меня он не используется...
вот и буду сажем писать в регистр который отвечает за минуты
Код:
         Wire.beginTransmission(0x68);
         Wire.write(0x08);
         Wire.write(decToBcd(tik_correc));
         Wire.endTransmission();

он от внешнего питания не зависит
при пропадании и последующей подачи внешнего питания в

Код:
void setup(){                                     

  Serial.begin (9600);                           
  Wire.begin();                                   

  Wire.beginTransmission(0x68);
  Wire.write(0x08);
  Wire.endTransmission();
  Wire.requestFrom(0x68,1);//Запрашиваем данные
  tik_correc = bcdToDec(Wire.read() & 0x7f);// читаем


и все просто получается и корректировать можно в меню часов будет, а не прошивать если цифра не та.
всем кто помогал спасибо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 19:16:34 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2927
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18900
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 2
Медали: 1
Лучший человек Форума 2017 (1)
если тебе не нужен будильник, совсем необязательно использовать формат bcd. регистру будильника пофигу, в каком формате записано в него число.
на счет "НУ ЕГО НАФИК!!!".
ну, прочитал ты из будильника tik_correc, все равно это число нужно записать в регистр старения. так что, твоя затея с регистром будильника - совершенно лишняя работа.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 20:07:05 
Опытный кот
Аватар пользователя

Карма: 11
Рейтинг сообщений: 79
Зарегистрирован: Пт фев 27, 2015 12:00:53
Сообщений: 840
Откуда: Рязанская область
Рейтинг сообщения: 0
да нет не надо записывать число в регистр старения. я вообще больше в регистр 10h (Aging offset) не полезу
делаем так:

Код:
  //если время 00 : 00 : 30 : понедельник
  if (hour == 0 && minute == 0 &&  second == 30 && Wday == 1) {
    if (millis() - timing > 10000) { // 10 seconds пауза
      if (tik_correc >= 3) {                 //четвертая неделя или нет

        //корректируем секунды прибавляя или отнимая число TIME_CORRECT (от - 5 сек. до +5 сек.)
        NowSecond = second + TIME_CORRECT;
        setRTCTime(); tik_correc = 0; set_tik_correc();
      }     //обнуляем неделю и записываем в ds 3231 новые секунды и счетчик недель.

      else {
        tik_correc++;  // прибавляем счетчик недель
        set_tik_correc(); //и запись в ds 3231
      }
      timing = millis();
    }
  }


на четвертой неделе прибавим (или убавим ) секунды и все

Добавлено after 2 minutes 14 seconds:
Цитата:
совсем необязательно использовать формат bcd. регистру будильника пофигу,

это для себя, чтобы понятнее было в мониторе пота смотреть Serial.println(tik_correc);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 08, 2025 21:40:28 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2557
Рейтинг сообщения: 2
Где же таких берут то? У меня дочка в 7 классе проходит как числа хранятся в памяти.

Я же написал сразу как делать..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт янв 09, 2025 01:24:51 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4901
Откуда: Минск
Рейтинг сообщения: 0
Ну хочется человеку ограничить себя диапазоном числел 0..99 вместо -128..127 - кто мы такие, чтобы это запретить :)

Кстати, а зачем вообще счётчик недель нужен? Вычислить номер недели вполне можно и по дате и применять коррекцию, когда N % 4 == 0.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт янв 09, 2025 09:41:14 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2927
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18900
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 2
Медали: 1
Лучший человек Форума 2017 (1)
Serzh2000 писал(а):
на четвертой неделе прибавим (или убавим ) секунды и все
интересно, а куда ты спрячешь минус в формат BCD, когда у тебя tik_correc должен быть отрицательный и нужно будет убавить?

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт янв 09, 2025 16:55:49 
Опытный кот
Аватар пользователя

Карма: 11
Рейтинг сообщений: 79
Зарегистрирован: Пт фев 27, 2015 12:00:53
Сообщений: 840
Откуда: Рязанская область
Рейтинг сообщения: 0
Код:
    //========  Режим корректировки секунд,один раз в каждую четвертую неделю (от - 5 сек. до 5 сек.)

    case 16: {
        setups[10] = PressingButton(setups[10], 0, 10);// кнопки диопазон 0-10
        switch (setups[10]) {
          case 0: TIME_CORRECT = 5;  var = 5; break;
          case 1: TIME_CORRECT = 4;  var = 4; break;
          case 2: TIME_CORRECT = 3;  var = 3; break;
          case 3: TIME_CORRECT = 2;  var = 2; break;
          case 4: TIME_CORRECT = 1;  var = 1; break;
          case 5: TIME_CORRECT = 0;  var = 0; break;
          case 6: TIME_CORRECT = -1; var = 1; break;
          case 7: TIME_CORRECT = -2; var = 2; break;
          case 8: TIME_CORRECT = -3; var = 3; break;
          case 9: TIME_CORRECT = -4; var = 4; break;
          case 10: TIME_CORRECT = -5; var = 5; break;
        }
        if (setups[10] <= 5) {
          DigitOut(14, 11, PROBEL, var , 0, led_color); //вывод на экран положитетельной коррекции
        }
        else {
          DigitOut(14, 11, 15, var, 0, led_color);//вывод на экран отрицательной коррекции
        }
        break;
      }


в программе TIME_CORRECT принимает отрицательное число и храниться еероре
Код:
        //корректируем секунды прибавляя или отнимая число TIME_CORRECT (от - 5 сек. до +5 сек.)
        NowSecond = second + TIME_CORRECT;

а tik_correc только считает недели :facepalm:

Цитата:
Кстати, а зачем вообще счётчик недель нужен? Вычислить номер недели вполне можно и по дате и применять коррекцию, когда N % 4 == 0.

интересно надо подумать.

Цитата:
регистр 10h (Aging offset), записывая в который число от -128 до 127, можно влиять на используемую в DS3231

а с этим делом у меня не получается вот почему:

Если число неотрицательное, то в старший разряд записывается ноль, далее записывается само число.
например число 12 = 7 бит 0 число положительное 0001100 остальные не инвертированы

Если число отрицательное, то все биты модуля числа инвертируются
например число -12 = 7 бит 1 означает минус 1110011 остальные инвертированы

да записать отрицательное число не проблема Wire.write(11110011 );
но работать с такими числами (в формате двоичного целого числа со знаком с дополнением до 2, где бит 7 представляет бит знака числа.) неудобно.
а преобразовать из Десятичных в Двоичное NEG (n) и обратно я не соображу как (в институтах не учился, да и в школе тройки ) :oops:
https://studfile.net/preview/5398032/page:4/


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт янв 09, 2025 18:46:40 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4901
Откуда: Минск
Рейтинг сообщения: 2
В чём неудобство? Наоборот же, никаких не нужно преобразований - складывай-вычитай-умножай-не-хочу. Положительное записать - Wire.write(12), отрицательное - Wire.write(-12).


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7704 ]     ... , , , 383, , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y