Ничего сложного нет. Просто нужно выбрать правильный подход к программе.
Зачем опрашивать часы с частотой 1 КГц ? Ну вот зачем ??? Просто, чтобы впихнуть этот опрос между переключениями индикаторов ?
С таким подходом, микрокотроллеры нужны будут только для индикации, и больше заниматься ничем не смогут. Ленивые МК
Добавлено after 7 minutes 23 seconds:
Кстати, 4096 Гц - это не 1.7 мс, а ~244 мкс.
Аlex писал(а):Кстати, 4096 Гц - это не 1.7 мс, а ~244 мкс.
Так вроде же разобрались... 4096Гц. это тактовая для индикации, период которой составляет 32 такта. А 1,7мс. это время индикации одного разряда, при скважности 32/7 это 7 тактов. А теперь 244мкс. (период одного такта тактовой частоты) умножаем на 7 (7 тактов длится индикация одного разряда), вот и получается ~1,7мс.
otest писал(а):Ты наверное считаешь по CLK и забываешь про другие операции МК
Ну да. Во время индикации одного разряда опросил DS3231, во время индикации друго разряда посчитал/перевёл/переложил, во время индикации следующего разряда... и .т.д.
Разве не так?
Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. Всегда с уважением, Александр.
korob писал(а):А 1,7мс. это время индикации одного разряда, при скважности 32/7 это 7 тактов.
Таким макаром можно сказать, что у нас есть в запасе 7.8 мс., ибо частота индикации всего = 128 Гц
4 КГц - несущая частота индикации. а это значит, что контроллер будет прерываться с этой частотой и делать некие вычисления. По всей видимости, между этими вычислениями (между прерываниями) человек и хотел уложиться в опрос DS'ки. Другого объяснения я не вижу
Аlex писал(а):4 КГц - несущая частота индикации. а это значит, что контроллер будет прерываться с этой частотой
Даже так? Прерываться каждый такт?
Я думал иначе - прерываться будет только при изменении уровней выходных сигналов. Т.е. у МК будут "рабочие окна" в 1,7мс. А иначе зачем прерываться семь раз за время индикации одного разряда если ничего по сути не нужно делать в этих прерываниях?
Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. Всегда с уважением, Александр.
Чтение состоит из двух процедур — установить указатель на нужный
регистр и прочитать его. Чтобы установить указатель на нужный регистр, нужно передать
условие старта, потом передать адрес микросхемы с битом записи и байт с адресом
регистра. Далее либо условие остановки и следом условие старта, либо просто рестарт.
Теперь вторая процедура — непосредственно чтение из регистров. Старт передан, далее
нужно отправить адрес микросхемы с битом чтения и далее считывать регистры в
необходимом количестве, по окончании передать условие остановки. Если информация из
регистра была прочитана, то указатель автоматически переходит на следующий за ним
регистр без лишних действий со стороны микроконтроллера (мастер устройства.
[uquote="korob",url="/forum/viewtopic.php?p=3983075#p3983075"]А иначе зачем прерываться семь раз за время индикации одного разряда если ничего по сути не нужно делать в этих прерываниях?[/uquote]Несущая так поднялась из-за требований к скважности.
Ты видишь только 7/32-ых, но не видишь другую 1/32-ую. Которая и является минимальным квантом для несущей.
У меня начальник такой-же. "Да чего тут сложного ? Всего-то, нужно чтобы на дисплейчике нарисовалось то-то и менялось в зависимости от того-то" ....
Будучи обычным пользователем, не имея опыта программирования, и не зная структуры уже имеющейся программы, нельзя оценивать программу только по наружним берюшкам
otest, с описанным выше всё как раз понятно (время опроса прикидывал с учётом всего выше сказанного).
Не понятно зачем затягивать с опросом? Это же не DS18B20 где после запроса выполняется преобразование температуры, и МК вынужденно приходится ждать завершения преобразования. Здесь же просто прочесть регистры без ожиданий на преобразование/вычисление. Более того - у нас есть возможность "читать" в Fast Mode.
Аlex писал(а):но не видишь другую 1/32-ую. Которая и является минимальным квантом для несущей.
Я её вижу. Только пока не понимаю чем она так мешает. Такты разве не таймер считает?
Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. Всегда с уважением, Александр.
korob писал(а):Только пока не понимаю чем она так мешает. Такты разве не таймер считает?
Всё очень просто.
Каждый квант времени, на несущей частоте, увеличивается счётчик периода и сравнивается со значением скважности. И, в зависимости от результата на выходе компаратора, принимается решение.
Это принцип PWM'а. А тут он программный. Каждый квант, таймер дёргает прерывание. И делаются определённые вычисления - счётчик, сравнение, вывод результата на PIN, ....
otest, а без привязки к индикации не получится ?
Индикация, по-любому, будет крутиться в прерывании таймера. Почему бы не реализовать работу с DS'кой в основном потоке ? Спокойно, не спеша, с чувством-толком-расстановкой ...
Добавлено after 1 minute 20 seconds:
[uquote="otest",url="/forum/viewtopic.php?p=3983100#p3983100"]Сделайте считывание данных с ДСки за 1.7 мсек..[/uquote]Я до сих пор не могу взять в толк, откуда взялась эта циферка ?
Почему мы должны уложиться именно в этот промежуток времени ?
Основной поток-1.7мс светим разрядом +0.25 мс пауза ,и в это же время считываем ДС.( Больше негде)
Дальше идёт следующий разряд с такими же интервалами. И т.д.
1.7 желание КОРОБа
Вот чтение одного байта (регистра) из DS3231 на 400 кГц тактах. Справа видно время, за которое он прочитался.
Время (часы-минуты) содержится в двух регистрах, так что нужно добавить 26 мкс еще на один байт, всего 142 мкс на чтение. Еще некоторое время (зависит от МК и его частоты) на распаковку нибблов этих двух регистров в 4-х элементный массив, после чего вывод на индикатор.
Если не отобрать секунды, то считывать достаточно раз в секунду.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Где программа часов для korobа ? Ваши теоретические рассуждения похожи на упрёки и отмазки.
Вы сколько времени готовили ДСку для считывания?
Считать готовое как 2 байта передать. Мне ещё НОПить приходилось.
[uquote="otest",url="/forum/viewtopic.php?p=3983128#p3983128"]Сделайте с прерыванием. На что прерываться будете?[/uquote]
Я уже сказал - я бы сделал, если бы было железо. Протеусом не пользуюсь уже много-много лет, он у меня не установлен и ставить его не хочу. Предпочитаю реальное железо
Вас ни в чём не упрекаю. Делать или нет, и как делать, - Ваше право.