Поклонники продукции Microchip Technology Inc тусуются тут.
Чт фев 18, 2021 12:49:37
Ничего сложного нет. Просто нужно выбрать правильный подход к программе.
Зачем опрашивать часы с частотой 1 КГц ? Ну вот зачем ??? Просто, чтобы впихнуть этот опрос между переключениями индикаторов ?
С таким подходом, микрокотроллеры нужны будут только для индикации, и больше заниматься ничем не смогут. Ленивые МК
Добавлено after 7 minutes 23 seconds:Кстати, 4096 Гц - это не 1.7 мс, а ~244 мкс.
Чт фев 18, 2021 12:58:32
korob
Ты наверное считаешь по CLK и забываешь про другие операции МК. Загрузить, переложить, сдвинуть и т.д.
Чт фев 18, 2021 13:04:59
Аlex писал(а):Кстати, 4096 Гц - это не 1.7 мс, а ~244 мкс.
Так вроде же разобрались... 4096Гц. это
тактовая для индикации, период которой составляет 32 такта. А 1,7мс. это время индикации одного разряда, при скважности 32/7 это 7 тактов. А теперь 244мкс. (период одного такта тактовой частоты) умножаем на 7 (7 тактов длится индикация одного разряда), вот и получается ~1,7мс.
otest писал(а):Ты наверное считаешь по CLK и забываешь про другие операции МК
Ну да.
Во время индикации одного разряда опросил DS3231, во время индикации друго разряда посчитал/перевёл/переложил, во время индикации следующего разряда... и .т.д.
Разве не так?
Чт фев 18, 2021 13:10:06
korob писал(а):А 1,7мс. это время индикации одного разряда, при скважности 32/7 это 7 тактов.
Таким макаром можно сказать, что у нас есть в запасе 7.8 мс., ибо частота индикации всего = 128 Гц
4 КГц - несущая частота индикации. а это значит, что контроллер будет прерываться с этой частотой и делать некие вычисления. По всей видимости, между этими вычислениями (между прерываниями) человек и хотел уложиться в опрос DS'ки. Другого объяснения я не вижу
Чт фев 18, 2021 13:19:05
Аlex писал(а):4 КГц - несущая частота индикации. а это значит, что контроллер будет прерываться с этой частотой
Даже так? Прерываться каждый такт?
Я думал иначе - прерываться будет только при изменении уровней выходных сигналов. Т.е. у МК будут "рабочие окна" в 1,7мс. А иначе зачем прерываться семь раз за время индикации одного разряда если ничего по сути не нужно делать в этих прерываниях?
Чт фев 18, 2021 13:24:59
Чтение состоит из двух процедур — установить указатель на нужный
регистр и прочитать его. Чтобы установить указатель на нужный регистр, нужно передать
условие старта, потом передать адрес микросхемы с битом записи и байт с адресом
регистра. Далее либо условие остановки и следом условие старта, либо просто рестарт.
Теперь вторая процедура — непосредственно чтение из регистров. Старт передан, далее
нужно отправить адрес микросхемы с битом чтения и далее считывать регистры в
необходимом количестве, по окончании передать условие остановки. Если информация из
регистра была прочитана, то указатель автоматически переходит на следующий за ним
регистр без лишних действий со стороны микроконтроллера (мастер устройства.
Чт фев 18, 2021 13:35:18
А иначе зачем прерываться семь раз за время индикации одного разряда если ничего по сути не нужно делать в этих прерываниях?
Несущая так поднялась из-за требований к скважности.
Ты видишь только 7/32-ых, но не видишь другую 1/32-ую. Которая и является минимальным квантом для несущей.
У меня начальник такой-же. "Да чего тут сложного ? Всего-то, нужно чтобы на дисплейчике нарисовалось то-то и менялось в зависимости от того-то" ....
Будучи обычным пользователем, не имея опыта программирования, и не зная структуры уже имеющейся программы, нельзя оценивать программу только по наружним берюшкам
Чт фев 18, 2021 13:40:00
otest, с описанным выше всё как раз понятно (время опроса прикидывал с учётом всего выше сказанного).
Не понятно зачем затягивать с опросом? Это же не DS18B20 где после запроса выполняется преобразование температуры, и МК вынужденно приходится ждать завершения преобразования. Здесь же просто прочесть регистры без ожиданий на преобразование/вычисление. Более того - у нас есть возможность "читать" в Fast Mode.
Аlex писал(а):но не видишь другую 1/32-ую. Которая и является минимальным квантом для несущей.
Я её вижу.
Только пока не понимаю чем она так мешает. Такты разве не таймер считает?
Чт фев 18, 2021 13:54:19
У меня даже для одного считывания в 1.7 не помещается. Внимательно читаем
Далее либо условие остановки и следом условие старта, либо просто рестарт.
Т.е. потоком считывать у меня не получается. Если уложиться в 1.7 , то без разницы как считывать.
Чт фев 18, 2021 13:55:57
korob писал(а):Только пока не понимаю чем она так мешает. Такты разве не таймер считает?
Всё очень просто.
Каждый квант времени, на несущей частоте, увеличивается счётчик периода и сравнивается со значением скважности. И, в зависимости от результата на выходе компаратора, принимается решение.
Это принцип PWM'а. А тут он программный. Каждый квант, таймер дёргает прерывание. И делаются определённые вычисления - счётчик, сравнение, вывод результата на PIN, ....
Чт фев 18, 2021 14:06:14
Аlex
Это общий принцип построения алгоритма. Сделайте считывание данных с ДСки за 1.7 мсек.. Остальное приложится.
Чт фев 18, 2021 14:08:47
otest, а без привязки к индикации не получится ?
Индикация, по-любому, будет крутиться в прерывании таймера. Почему бы не реализовать работу с DS'кой в основном потоке ? Спокойно, не спеша, с чувством-толком-расстановкой ...
Добавлено after 1 minute 20 seconds:Сделайте считывание данных с ДСки за 1.7 мсек..
Я до сих пор не могу взять в толк, откуда взялась эта циферка ?
Почему мы должны уложиться именно в этот промежуток времени ?
Чт фев 18, 2021 14:13:22
Основной поток-1.7мс светим разрядом +0.25 мс пауза ,и в это же время считываем ДС.( Больше негде)
Дальше идёт следующий разряд с такими же интервалами. И т.д.
1.7 желание КОРОБа
Чт фев 18, 2021 14:20:24
otest писал(а):Основной поток- ....
А, Вы без прерываний хотите сделать. Всё понятно тогда....
Чт фев 18, 2021 14:39:41
Сделайте с прерыванием. На что прерываться будете?
Чт фев 18, 2021 15:03:01
Вот чтение одного байта (регистра) из DS3231 на 400 кГц тактах. Справа видно время, за которое он прочитался.
Время (часы-минуты) содержится в двух регистрах, так что нужно добавить 26 мкс еще на один байт, всего 142 мкс на чтение. Еще некоторое время (зависит от МК и его частоты) на распаковку нибблов этих двух регистров в 4-х элементный массив, после чего вывод на индикатор.
Если не отобрать секунды, то считывать достаточно раз в секунду.
Чт фев 18, 2021 15:16:17
Где программа часов для korobа ? Ваши теоретические рассуждения похожи на упрёки и отмазки.
Вы сколько времени готовили ДСку для считывания?
Считать готовое как 2 байта передать. Мне ещё НОПить приходилось.
Чт фев 18, 2021 16:35:41
Сделайте с прерыванием. На что прерываться будете?
Я уже сказал - я бы сделал, если бы было железо. Протеусом не пользуюсь уже много-много лет, он у меня не установлен и ставить его не хочу. Предпочитаю реальное железо
Вас ни в чём не упрекаю. Делать или нет, и как делать, - Ваше право.
Чт фев 18, 2021 16:55:24
Право моё, но мне интересно какая часть программы будет обрабатываться в прерывании.
Чт фев 18, 2021 17:19:46
Динамическая индикация, по всей видимости
А в основном потоке, спокойно и не спеша, работаем с часами.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.