Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 12:49:37

Ничего сложного нет. Просто нужно выбрать правильный подход к программе.
Зачем опрашивать часы с частотой 1 КГц ? Ну вот зачем ??? Просто, чтобы впихнуть этот опрос между переключениями индикаторов ? :dont_know:
С таким подходом, микрокотроллеры нужны будут только для индикации, и больше заниматься ничем не смогут. Ленивые МК :)))

Добавлено after 7 minutes 23 seconds:
Кстати, 4096 Гц - это не 1.7 мс, а ~244 мкс. :music:

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 12:58:32

korob
Ты наверное считаешь по CLK и забываешь про другие операции МК. Загрузить, переложить, сдвинуть и т.д.

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 13:04:59

Аlex писал(а):Кстати, 4096 Гц - это не 1.7 мс, а ~244 мкс.
:)))
Так вроде же разобрались... 4096Гц. это тактовая для индикации, период которой составляет 32 такта. А 1,7мс. это время индикации одного разряда, при скважности 32/7 это 7 тактов. А теперь 244мкс. (период одного такта тактовой частоты) умножаем на 7 (7 тактов длится индикация одного разряда), вот и получается ~1,7мс. :wink:
otest писал(а):Ты наверное считаешь по CLK и забываешь про другие операции МК
Ну да. :oops: Во время индикации одного разряда опросил DS3231, во время индикации друго разряда посчитал/перевёл/переложил, во время индикации следующего разряда... и .т.д.
Разве не так? :dont_know:

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 13:10:06

korob писал(а):А 1,7мс. это время индикации одного разряда, при скважности 32/7 это 7 тактов.
Таким макаром можно сказать, что у нас есть в запасе 7.8 мс., ибо частота индикации всего = 128 Гц :)
4 КГц - несущая частота индикации. а это значит, что контроллер будет прерываться с этой частотой и делать некие вычисления. По всей видимости, между этими вычислениями (между прерываниями) человек и хотел уложиться в опрос DS'ки. Другого объяснения я не вижу :dont_know:

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 13:19:05

Аlex писал(а):4 КГц - несущая частота индикации. а это значит, что контроллер будет прерываться с этой частотой
Даже так? Прерываться каждый такт? :roll:
Я думал иначе - прерываться будет только при изменении уровней выходных сигналов. Т.е. у МК будут "рабочие окна" в 1,7мс. А иначе зачем прерываться семь раз за время индикации одного разряда если ничего по сути не нужно делать в этих прерываниях? :dont_know:

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 13:24:59

Чтение состоит из двух процедур — установить указатель на нужный
регистр и прочитать его. Чтобы установить указатель на нужный регистр, нужно передать
условие старта, потом передать адрес микросхемы с битом записи и байт с адресом
регистра. Далее либо условие остановки и следом условие старта, либо просто рестарт.
Теперь вторая процедура — непосредственно чтение из регистров. Старт передан, далее
нужно отправить адрес микросхемы с битом чтения и далее считывать регистры в
необходимом количестве, по окончании передать условие остановки. Если информация из
регистра была прочитана, то указатель автоматически переходит на следующий за ним
регистр без лишних действий со стороны микроконтроллера (мастер устройства.

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 13:35:18

А иначе зачем прерываться семь раз за время индикации одного разряда если ничего по сути не нужно делать в этих прерываниях?
Несущая так поднялась из-за требований к скважности.
Ты видишь только 7/32-ых, но не видишь другую 1/32-ую. Которая и является минимальным квантом для несущей.

У меня начальник такой-же. "Да чего тут сложного ? Всего-то, нужно чтобы на дисплейчике нарисовалось то-то и менялось в зависимости от того-то" .... :)))
Будучи обычным пользователем, не имея опыта программирования, и не зная структуры уже имеющейся программы, нельзя оценивать программу только по наружним берюшкам :dont_know:

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 13:40:00

otest, с описанным выше всё как раз понятно (время опроса прикидывал с учётом всего выше сказанного). :)
Не понятно зачем затягивать с опросом? Это же не DS18B20 где после запроса выполняется преобразование температуры, и МК вынужденно приходится ждать завершения преобразования. Здесь же просто прочесть регистры без ожиданий на преобразование/вычисление. Более того - у нас есть возможность "читать" в Fast Mode. :dont_know:
Аlex писал(а):но не видишь другую 1/32-ую. Которая и является минимальным квантом для несущей.
Я её вижу. :) Только пока не понимаю чем она так мешает. Такты разве не таймер считает? :dont_know:

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 13:54:19

У меня даже для одного считывания в 1.7 не помещается. Внимательно читаем
Далее либо условие остановки и следом условие старта, либо просто рестарт.

Т.е. потоком считывать у меня не получается. Если уложиться в 1.7 , то без разницы как считывать.

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 13:55:57

korob писал(а):Только пока не понимаю чем она так мешает. Такты разве не таймер считает?
Всё очень просто.
Каждый квант времени, на несущей частоте, увеличивается счётчик периода и сравнивается со значением скважности. И, в зависимости от результата на выходе компаратора, принимается решение.
Это принцип PWM'а. А тут он программный. Каждый квант, таймер дёргает прерывание. И делаются определённые вычисления - счётчик, сравнение, вывод результата на PIN, ....

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 14:06:14

Аlex
Это общий принцип построения алгоритма. Сделайте считывание данных с ДСки за 1.7 мсек.. Остальное приложится.

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 14:08:47

otest, а без привязки к индикации не получится ?
Индикация, по-любому, будет крутиться в прерывании таймера. Почему бы не реализовать работу с DS'кой в основном потоке ? Спокойно, не спеша, с чувством-толком-расстановкой ... :))

Добавлено after 1 minute 20 seconds:
Сделайте считывание данных с ДСки за 1.7 мсек..
Я до сих пор не могу взять в толк, откуда взялась эта циферка ?
Почему мы должны уложиться именно в этот промежуток времени ? :dont_know:

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 14:13:22

Основной поток-1.7мс светим разрядом +0.25 мс пауза ,и в это же время считываем ДС.( Больше негде)
Дальше идёт следующий разряд с такими же интервалами. И т.д.
1.7 желание КОРОБа

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 14:20:24

otest писал(а):Основной поток- ....
А, Вы без прерываний хотите сделать. Всё понятно тогда.... :roll:

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 14:39:41

Сделайте с прерыванием. На что прерываться будете?

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 15:03:01

Изображение
Вот чтение одного байта (регистра) из DS3231 на 400 кГц тактах. Справа видно время, за которое он прочитался.
Время (часы-минуты) содержится в двух регистрах, так что нужно добавить 26 мкс еще на один байт, всего 142 мкс на чтение. Еще некоторое время (зависит от МК и его частоты) на распаковку нибблов этих двух регистров в 4-х элементный массив, после чего вывод на индикатор.
Если не отобрать секунды, то считывать достаточно раз в секунду.

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 15:16:17

Где программа часов для korobа ? Ваши теоретические рассуждения похожи на упрёки и отмазки.
Вы сколько времени готовили ДСку для считывания?
Считать готовое как 2 байта передать. Мне ещё НОПить приходилось.

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 16:35:41

Сделайте с прерыванием. На что прерываться будете?

Я уже сказал - я бы сделал, если бы было железо. Протеусом не пользуюсь уже много-много лет, он у меня не установлен и ставить его не хочу. Предпочитаю реальное железо :dont_know:

Вас ни в чём не упрекаю. Делать или нет, и как делать, - Ваше право.

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 16:55:24

Право моё, но мне интересно какая часть программы будет обрабатываться в прерывании.

Re: Часы на PIC16F628 + DS3231

Чт фев 18, 2021 17:19:46

Динамическая индикация, по всей видимости :roll:
А в основном потоке, спокойно и не спеша, работаем с часами.
Ответить