Приветствую!!! пытаюсь прикрутить ds1302 к МК.Да что-то непонятных вещей полно. одна из них тайминги. В даташите большинство из них в наносекундах, так в студии задержки в наносекундах нет. ну и быть наверное не может у меня кварц 8 Мгц отсюда 1 такт длится 125 нс... что делают обычно с этим? вообще без задержки работать? Спасибо
Цикл ожидания пишется в пару строчек. Значения вычисляются по ассемблерным командам или подгоняются с помощью осциллографа.
В шите такие параметры как 50,60,70 нс. время 1 цикла МКна частоте 8 Мгц 125 нс...какими ассемблерными командами мне заставить МК работать быстрее?или я что-то не правильно понимаю?
Да, неправильно. Например, время предустановки линии I/O относительно активного фронта SCLK должно быть не менее 50ns при напряжении питания 5V (200ns при 2V), а на максимальное время оной никаких ограничений не накладывается. Или, момент начала обмена должен быть задержан относительно фронта CE не менее чем на 1us (4us при 2V). Всё остальное по аналогии.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
В ДШ на стр.11 есть параметр, на который надо ориентироваться: CLK Frequency, максимальное значение которой равно 2 МГц при питании от 5 В и 0.5 МГц при питании от 2 В. Соответственно меньше может быть, больше - нет. 2 МГц равно периоду 0.5 мкс, значит половина периода (состояние 0 или 1) максимально может быть 250 нс. Но если будете "дергать" такты каждую микросекунду (0.5 МГц), 1302 также возражать не будет.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Три раза перевел Даташит в переводчике google. никак не могу прикрутить ds1302 к МК. Взял новый модуль 1302 с кварцем и батарейкой. подключил к МК. напсиал функции записи и чтения. Отправляю ему байт команды 0b10000001 на чтение. и смотрю по осциллографу че мне он пишет...так он выдает корявенькие импульсы синхронные с CSLK напряжением 2 В. Никак не могу допедрить что да как с ним общаться.Подскажите пожалуйста что я делаю не так.
Код, конечно, жуткий. Я за такой код расстреливал бы. И тебя даже не оправдывает то, что код не твой. Вроде, должно работать, хоть и такое. Реальную схему подключения покажи.
Отправляю ему байт команды 0b10000001 на чтение. и смотрю по осциллографу че мне он пишет...
Вначале проверь, что в часы пишешь - насколько диаграмма передачи соответствует таковой из даташита. Надо порыть даташит - вывод I/O с открытым коллектором или же полноценный? В том плане, что нужна ли ему подтяжка в "1".
По поводу этого я скажу,что он частично не мой. Нужно же мне как- то найти проблему.Методом исключения решил проверить рабочий код(хотя я не проверял на работоспособность его), может я сам пишу не правильно.
Добавлено after 25 minutes 5 seconds:
Цитата:
Вначале проверь, что в часы пишешь - насколько диаграмма передачи соответствует таковой из даташита.
Можете пробовать. Это писалось мной под 8051, соответственно переключений вход-выход у даты нет, поскольку порт имеет двунаправленный режим (quasi-bidirectional). Настройку портов и переключение даты добавите самостоятельно. Заголовочный файл не даю, там ничего существенного нет. Спойлер
while (i) { b >>= 1; DS_SCLK = 0; _nop_(); if (DS_IO) b |= 0x80; // set bit else b &= 0x7F; // clear bit i--; if (i) DS_SCLK = 1; _nop_(); } return b; }
void writebyte (unsigned char b) { unsigned char i = 8;
while (i) { DS_SCLK = 0; DS_IO = (b & 1); DS_SCLK = 1; b >>= 1; i--; } }
// Ток заряда может изменяться от большего к меньшему значениями // A5h, A6h, A7h, A9h, AAh, ABh, либо отключен записью нуля. if (ds_readbyte(0x8F)) ds_writebyte(0x8E,0); // Clear Write Protection bit if it's set. if (ds_readbyte(0x91)) ds_writebyte(0x90,0); // Trickle charger off. b = ds_readbyte(0x81); if (b & 0x80) ds_writebyte(0x80, (b & 0x7F)); // clear "Clock Halt" bit. b = ds_readbyte(0x85); if (b & 0x80) ds_writebyte(0x84, (b & 0x7F)); // Set 24 hour mode. }
void ds_reset_clock() // reset date, time { ds_writebyte(0x80, 0x00); // Clock halt off ds_writebyte(0x82, 0x00); // 00 minutes ds_writebyte(0x84, 0x07); // 07 hours ds_writebyte(0x86, 0x01); // 01 ds_writebyte(0x88, 0x01); // January ds_writebyte(0x8A, 0x05); // Friday ds_writebyte(0x8C, 0x16); // 2016 ds_writebyte(0x8E, 0x00); // Write protect off ds_writebyte(0x90, 0x00); // Trickle charger off }
void delay1us (void) //@11.0592MHz { _nop_(); }
Добавлено after 13 minutes 11 seconds: Кстати, относительно изначального вопроса про скорость работы хочу заметить, что задержка в конце листинга имеет чисто формальное название. Сколько там было в реальности я не помню, а диаграмму с ЛА я выкладывал здесь.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Спасибо за код! но я боюсь меня точно расстреляют за это хотелось бы самому со своим кодом разобраться во всем. Снял диаграмму как у Вас, с подтяжкой формируются какие то импульсы вроде как...как можно проверить их достоверность? чет добавить файл с ЛА не могу
Последний раз редактировалось ROMan2947 Пт июн 30, 2017 12:46:42, всего редактировалось 1 раз.
Теперь смотрим на осциллограмму. Хотелось бы увидеть полную картинку - от выдачи сигнала CE (который ты обозвал RST на схеме - так он назывался в старом даташите! ) По твоему коду вообще нет установки сигнала CE - он как встал в "1", так и стоит там.
По схеме, надеюсь: сигнал "земля" у часов, а также "земля", "питание" и кварц у AVR не показаны лишь на схеме?
да,без них уж глупо чет ожидать)
Добавлено after 5 minutes 23 seconds:
Цитата:
По твоему коду вообще нет установки сигнала CE - он как встал в "1", так и стоит там.
Смысл моего кода, указанного выше в том, чтоб отправить команду на часы и увидеть обратную связь. ничего более. остальное уже допишем как надо.Мне нужно видеть, что часы меня слышать и отвечают. согласно даташиту я выставляю СЕ в 1 и шлю командный байт, затем перевожу ножку DATA на вход и наблюдаю по диаграмме что да как....ну и в конце main я сбрасываю ее для приличия. это не правильно?
Поясни в чем глубокий смысл обнулять передаваемый бит сразу после нарастающего фронта CLK?
в даташите на диаграмме я вижу,что: после считывания бита данных по нарастающему фронту SCLK нужно сбросить в исходное положение затем снова выставить бит...это может и лишняя операция,но на работоспособность думаю не влияет...
Добавлено after 1 minute 19 seconds:
Цитата:
Правый верхний угол окна "Options - Save capture".
я его сохранил, но на форум не идет пишет, чт о администраторы запретили добавлять файл подобного расширения
согласно даташиту я выставляю СЕ в 1 и шлю командный байт
Сравни диаграмму из даташита и свою. Там английским по белому сказано установить CE из "0" в "1" перед обменом и сбросить в "0" по окончанию. Т.е. между обменом держать в "0". Покажи на своей осциллограмме переход CE из "0" и "1" и сброс в "0" по окончанию обмена?
в даташите на диаграмме я вижу,что: после считывания бита данных по нарастающему фронту SCLK нужно сбросить в исходное положение затем снова выставить бит...
Ну-ка, ну-ка покажи где ты такое нашёл? Я вижу, что на нарастающему фронту происходит запись бита в сдвиговый регистр. А все изменения значения бита происходят только при низком уровне CLK. Мелкий совет: когда что-то не получается, то стоит сделать всё по даташиту с "точностью до секунды"(с).
Да, на время обмена CE=1, после обмена CE=0. Причем, в таташите указаны ВСЕ времена: пауза после CE=1, после CE=0 и т.д. и т.п. И эти времена необходимо выдерживать.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения