Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Re: Мелкие вопросы по МК и ПЛИС.

Пт мар 06, 2015 11:12:26

три мелких вопроса по часикам DS1307
1) мне нужно получить с SQW 4кГц, кварц по-любому цеплять часовой на 32768 Гц и программно задавать RS1..RS0 0 1? без кварца она не работает?
2) при тактовой частоте меги32 8 МГц и подключении обработчика прерываний INT1 к SQW DS1307 (на 4 кГц) протеус кряхтит и его отсчетная секунда в готовом коде превращается в 10-15 реальных секунд (там опрос кнопок, парсинг времени и вывод на дисплей). если поставить частоту 1 Гц, то работает норм. самих часиков еще нет, проверить не могу, но теоретически же в железе все должно быть ок, это протеус тормозит?
3) мне объективно не нужно 4 тысячи прерываний в секунду для секундомера, достаточно даже 128 (я так делал на таймер/каунтере2, но в протеусе все было ок, а в железе он не запустился почему-то, правда я случайно спалил контроллер раньше, чем добрался конкретно до отладки счетчика). можно ли как-то от этих часиков взять кратные частоты, с частотой не только 1гц, 4, 8 и 32 кгц?

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Пт мар 06, 2015 11:24:14

1. да. нет.
2. да
3. напрямую нет.
four square - wave frequencies (1Hz, 4kHz, 8kHz, 32kHz)
Можно поставить делитель частоты на триггере(-рах).

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Пт мар 06, 2015 12:01:33

А зачем завязывать опрос кнопок на внешнее тактирование от DS-ки и прерывание на INT1? Почему просто не делать опрос по прерываниям таймера, чтобы опрос кнопок не зависел от часов? А завязываться на внешние 4кГц - неправильно архитектурно, с точки зрения здравого смысла, да и сложнее в реализации.

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Пт мар 06, 2015 12:08:42

Может, у человека все таймеры заняты :)

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Пт мар 06, 2015 12:49:23

WiseLord писал(а):А зачем завязывать опрос кнопок на внешнее тактирование от DS-ки и прерывание на INT1?

ненене, ds-ка тикает только для реализации секундомера/таймера. внутренние таймеры не заняты. я ж описал в 3 вопросе ситуацию: изначально на T/C2 я и сделал, меня все устраивало при симуляции, но в железе не запустилось, а пока я других функции до ума доводил, случайно уронил плату на припой, замкнул видимо дорожки и все :) я попробую сначала добить этот вариант как только контроллер приедет, но на всякий случай продумал и запасной, если все же не получится.

Gudd-Head, спасибо за ответы. если в железе по быстродействию все ок (как и предполагается теорией), то частоту делить и не нужно мне

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Сб мар 07, 2015 09:34:50

Рано я обрадовался по поводу рабочих часиков :( После полного цикла записи регистров провожу их чтнение - и получаю какой - то бред. Но часы идти видимо начинают (читаемый бред с течением времени изменяется). Пока покопаюсь в коде обмена по шине. Но не исключаю и электротехническую проблему. Паял все на коленке при практически полном отсутствии инструментов на отломаном куске от макетки :))) Где то тут видел сообщение о установке конденсатора по питанию, которая решила подобную проблему. Не подскажете, каким номиналом ставить кондер и куда?
Возник вопрос по поводу чтения, в двух разных источниках обнаружил различные инструкции:
1)После приёма и декодирования байта адреса, устройство выдаёт подтверждение на линию SDA. Затем DS1307 начинает передавать данные, начиная с указанного адреса, находящегося в регистровом указателе. Если перед началом чтения указатель регистра не записан, то первый читаемый адрес - это адрес, который был сохранён в нём последним. DS1307 должен принять "неподтверждение" для окончания чтения.
Судя по этому, что бы начать читать данные откуда мне нужно, я инициирую запись 1 байта в ds1307, этим байтом я устанавливаю указатель регистра. Потом я заканчиваю сеанс, и начинаю новый уже на чтение. Сейчас именно так делаю.
В другом источнике:
2)В отличии от станларта I2C данная ИС должна принять ACK=0 от ведущего в случае, когда ведущий передает заголовок чтения по заданному адресу
Изображение

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Сб мар 07, 2015 12:49:43

С "кольцевым чтением" проблем нету, а вот с чтением по заданному адресу - имеются. Это главное отличие 1307 от I2C...
На ассемблере образчик имеется.
:)

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Сб мар 07, 2015 14:08:51

ACK всегда выставляет тот, кто принимает данные, а читает его всегда тот, кто передаёт. Дабы передающий знал, что приёмник принял данные и можно проводить дальнейшие действие.
"Непердавание" микроконтроллером АСК при чтении данных, соответственно, "рубит" DS'ку от передачи данных, и дальше она перестаёт что-либо передавать, до следующего старта и принятия адреса.
И с чтением по определённому адресу, так же, нет никаких проблем. Читаем один байт и всё.

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Сб мар 07, 2015 14:29:45

Это для стандартного I2C.
1307 такой функции как чтение по произвольно заданному адресу официально не знает (такой режим в даташите явно не указан).
Там есть только установка заданного адреса для записи байта - ежли применить таким образом - запись в последний байт ОЗУ фиктивного значения - последующее чтение будет выполнено с адреса 0х00 ( или установленный в предыдущей команде адрес записи +1) что чаще всего и делается...
Посему и "изголяж" дабы избавится от автоинкремента адреса внутри 1307.
Естественно там добавляется "повторный старт" - как в случае с обычным протоколом. Пользуюсь практически во всех своих конструкциях (особо удобно при выборке отдельных ячеек ОЗУ).
Хотя... как кому удобнее.
:dont_know: 8)

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Сб мар 07, 2015 14:37:42

Ну и какие это проблемы ?
Старт -> Передача адреса -> Рестарт -> Читаем байт -> Стоп
Ровно как и с чтением нескольких байтов :
Старт -> Передача адреса -> Рестарт -> Читаем байты -> Стоп
Рестарт в любом случае необходим, т.к. бит "R/W" нужно сменить на "read".

ПыСы: Рабочие функции по-байтного чтения и записи:

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Сб мар 07, 2015 16:36:14

Старт -> Передача адреса -> Рестарт -> Читаем байты -> Стоп

Делаю почти так же: Старт->Передача адреса->Стоп; Старт->Читаем байты->Стоп
Немного переделал код, в общем добился кое-какого результата. Записываем данный массив:
Изображение
На SMB_ARRAY_OUT[0] внимания особо не обращайте - в ней хранится адрес первой записываемой ячейки.
После окончания записи сразу производим чтение, и о чудо:
Изображение
Далее небольшая задержка - на паузе пока делал скриншоты, плюс программно 500мс. Производим повторное чтение, и рыдаем
Изображение
Ну как же так :cry:
И еще - может все таки поставить конденсаторы по питанию? А то мне никто так и не подсказал. На руках есть на 100мкф и 0,1мкф. Хотя, по идее, питание просидать не должно, так как стоит стабилизатор LM, в цепи которого уже употребляются конденсаторы.

upd:
Ошибка обнаружена. Видимо, не правильно понял ДШ на микроконтроллер. Начал перед любой записью сбрасывать бит STO вручную, все заработало. До этого в начале второй итерации записи оставался поднятым бит STO после окончания предыдущей записи. Таким образом получали STA = 1 & STO = 1, SMBus фиксировал нестандартную ситуацию и благополучно сбрасывался, запись не производилась. Теперь все проде бы работает, спасибо за помощь!!!
Последний раз редактировалось 4elovek37 Сб мар 07, 2015 19:22:31, всего редактировалось 3 раз(а).

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Сб мар 07, 2015 19:19:00

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

Рабочие функции чтения и записи нескольких байтов:

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Сб мар 07, 2015 19:27:55

Пока редактировал предыдущий пост, проглядел Ваш. Как написано выше, проблема решена.
Рабочие функции чтения и записи нескольких байтов:

Спасибо, но у меня аппаратный smbus (он же i2c с примочками), и часть операций делается аппаратно, при этом большинство действий у меня производится в прерывании). Поэтому очень сложно брать что то из чужого кода.

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Сб мар 07, 2015 19:37:06

Ну код я выложил для наглядности, не обязательно его использовать. Хотя и можно, т.к. в нём ничего, связанного с низким уровнем I2C, нет. Только вызовы его функций.
Ну мож кому и пригодится :)
То, что Вы разобрались - хорошо. Мои поздравления :tea:

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Чт мар 12, 2015 06:54:54

Я так понимаю что и DS1338Z то же в эту ветку.

Может кому пригодиться.
Беда: счёт убегает на несколько секунд в минуту! Это не ошибка! Со всеми доступными (5-6 шт. перепробовал) кварцами 32768 Гц.

Искал решение по форумам, но ничего подходящего.
Оказалась проблема с питанием. У меня LM317 питает ATmega8A и сами RTC.
Навесил кондёр 0,1 Мкф на ножки DS1338Z и точность (с адекватной погрешностью) пришла в норму.

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Чт мар 12, 2015 09:02:57

Дык, куда ж без кондёров по питанию у (цифровых) микросхем???

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Чт мар 12, 2015 09:19:03

для часового кварца нужны кондеры при использовании его с DS или на входах TOSC МК? кто-то пишет, что они нужны только для основного высокочастотного кварца. но без них часы не запускаются ни на T/C2, ни через DS1307 нет генерации импульсов на SQW (даже диодик не моргает раз в секунду в железе). то ли кондеры решают, то ли кварц мертвый. сегодня докуплю еще парочку для чистоты эксперимента и пару кондеров на 22пФ (пойдут такие?)

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Чт мар 12, 2015 09:37:48

Для DS-ки не нужны (при этом хорошо бы кварц с указанной в ДШ нагрузочной ёмкостью), у МК AVR при настраивании асинхронного таймера на работу от часового кварца они подключаются внутренние.

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Чт мар 12, 2015 10:08:28

боюсь что у меня один вариант выбора кварца: "бери любой из этого пакетика с одинаковыми" :(

Re: Всё по DS1307 и прочим часам Dallas (Maxim)

Чт мар 12, 2015 12:32:07

Предпочтение маленькому цилиндрику диаметром под 3 милиметра и длиной милиметров под 8 с выводами "в торец". Примерно такой (жаль отдельной фотки нету...):
http://img.radiokot.ru/files/20529/dtg3kkk1v.jpg
:hunger:
Ответить