Увы, пользуюсь токмо асмом, мож кто из Сишников подскажет...
Всё по DS1307 и прочим часам Dallas (Maxim)
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Си - великая вэщ... но иногда источник великого садомазохизма...
Увы, пользуюсь токмо асмом, мож кто из Сишников подскажет...

Увы, пользуюсь токмо асмом, мож кто из Сишников подскажет...
- tantrum
- Мучитель микросхем
- Сообщения: 447
- Зарегистрирован: Сб фев 09, 2013 11:39:13
- Откуда: Украина, Марганец
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Это делалось по аналогии, увиденного в интернете.
С секундами/минутами/часами все работает, однако там все куда проще. После преобразования в двоичный код они сразу выводятся на дисплей и все...
С секундами/минутами/часами все работает, однако там все куда проще. После преобразования в двоичный код они сразу выводятся на дисплей и все...
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
двоично-десятичный формат был преобразован в двоичный
У вас в восьмеричный... а не в двоичный...
00111 это 73 в десятичном...
Последний раз редактировалось HHIMERA Вт янв 06, 2015 14:26:26, всего редактировалось 1 раз.
"Я не даю готовых решений, я заставляю думать!"(С)
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Зачем Вы числа в восьмеричном виде написали? 00010 = 8. Хотя бы 0b00010. А ещё понятней в десятичном (1,2,3,4...).
ps. опередили
И ещё, зачем из BCD переводить числа меньше 10-ти?
ps. опередили
И ещё, зачем из BCD переводить числа меньше 10-ти?
- tantrum
- Мучитель микросхем
- Сообщения: 447
- Зарегистрирован: Сб фев 09, 2013 11:39:13
- Откуда: Украина, Марганец
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Как тогда мне считать данные? Точнее даже не считать, а что писать в условие if?
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Так и писать, только числа правильные поставить.
Код: Выделить всё
DS1307Read(0x03,&week); // Чтение регистра дня недели
lcd_gotoxy(0,1);
if(week == 1) lcd_string("SUN",3);
else if (week == 2) lcd_string("MON",3);
else if (week == 3) lcd_string("TUE",3);
else if (week == 4) lcd_string("WED",3);
else if (week == 5) lcd_string("THU",3);
else if (week == 6) lcd_string("FRI",3);
else lcd_string("SAT",3);- tantrum
- Мучитель микросхем
- Сообщения: 447
- Зарегистрирован: Сб фев 09, 2013 11:39:13
- Откуда: Украина, Марганец
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
У меня в таком случае выводит "SAT" всегда.
То есть дни недели не в виде 1-7...
(пробовал ставить условие и на субботу, однако тогда не выводит ничего - подтверждение предыдущих слов)
То есть дни недели не в виде 1-7...
(пробовал ставить условие и на субботу, однако тогда не выводит ничего - подтверждение предыдущих слов)
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Возможно, при первом включении этот регистр не инициализирован и там ноль. Попробуйте туда записать значение от 1 до 7, а потом прочитать.
- tantrum
- Мучитель микросхем
- Сообщения: 447
- Зарегистрирован: Сб фев 09, 2013 11:39:13
- Откуда: Украина, Марганец
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Спасибо за совет!
Да, так заработало.
Это гарантия, что все верно работает и будет считываться как нужно?
Да, так заработало.
Это гарантия, что все верно работает и будет считываться как нужно?
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Выставьте день в семерку, время 23:59 и дождитесь переключения дня на единицу. Должно.
- tantrum
- Мучитель микросхем
- Сообщения: 447
- Зарегистрирован: Сб фев 09, 2013 11:39:13
- Откуда: Украина, Марганец
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Выставил...
День не переключило...
Но дату прибавило.
Вот еще решил установить 28 декабря 2014 года, а оно мне:

залить картинку
День не переключило...
Но дату прибавило.
Вот еще решил установить 28 декабря 2014 года, а оно мне:

залить картинку
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Бывают кристаллы с поврежденной маской календаря...
И не только среди DSок - касается ВСЕХ типов RTC...
Проверь заведомо годным.
Насчет усяких симуляторов- инструкции на соответствующих ветках форума.
И не только среди DSок - касается ВСЕХ типов RTC...
Проверь заведомо годным.
Насчет усяких симуляторов- инструкции на соответствующих ветках форума.
- tantrum
- Мучитель микросхем
- Сообщения: 447
- Зарегистрирован: Сб фев 09, 2013 11:39:13
- Откуда: Украина, Марганец
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Всмысле?
Я в протеусе проверяю, там нерабочих деталей нет)
Под словом "симулятор" вы имели ввиду протеус?
Я в протеусе проверяю, там нерабочих деталей нет)
Под словом "симулятор" вы имели ввиду протеус?
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Тогды точно "шпротоглюки" - надо искать ответ у спецов по шпроту. 
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Вы, чего, издеваетесь, какой протеус??? в железе проверили?
ps. я Вам дам под десяток глюков Протеуса.... а я думал, Вы всё-таки в железе... жаль...
ps. я Вам дам под десяток глюков Протеуса.... а я думал, Вы всё-таки в железе... жаль...
- tantrum
- Мучитель микросхем
- Сообщения: 447
- Зарегистрирован: Сб фев 09, 2013 11:39:13
- Откуда: Украина, Марганец
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Все знают, что в протеусе досточно ошибок. Однако время выводит вполне адекватно, почему оно должно ошибаться с датой?
В железе нет возможности проверить, т.к. нет DS1307...
Я вот не пойму, в ds1307 информация хранится в двоично-десятичном коде, однако день недели (и т.д.) мы записываем в десятичном формате...
В железе нет возможности проверить, т.к. нет DS1307...
Я вот не пойму, в ds1307 информация хранится в двоично-десятичном коде, однако день недели (и т.д.) мы записываем в десятичном формате...
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
А если не понимаете, то озвучьте разницу, чем отличается день недели (т.е., число, меньшее 8-ми) в двоично-десятичном формате от дня недели в десятичном?
P.S. Протеус вполне адектватно работает с DS1307, за исключением одного момента, что при старте программы день недели он из системного времени считает не Пн..Вс = 1..7, а как Вс..Сб = 1..7.
P.S. Протеус вполне адектватно работает с DS1307, за исключением одного момента, что при старте программы день недели он из системного времени считает не Пн..Вс = 1..7, а как Вс..Сб = 1..7.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Вы меня не так поняли, наверное. Я имел в виду, что непреобразованное десятичное число и преобразованное в двоично-десятичный формат ничем не отличается, если оно меньше 10.
Скажем, если нам надо записать в микросхему дату например, 23.02.2015, мы пишем:
Байт 4: 23 число => записываем в ячейку памяти 0x23, т.е. число 35.
Байт 5: 02 месяц => записываем в ячейку памяти 0x01, т.е. число 02.
Байт 6: 15 год => записываем в ячейку памяти 0x15, т.е. число 21.
День недели понедельник - пишем 01 как 0x01, оно же всё равно 01.
А вот для Proteus-a понедельник - это число 2 в DS1307.
P.S. Покажите, что у вас в коде сейчас вместо ранее приведённого ошибочного кода.
Скажем, если нам надо записать в микросхему дату например, 23.02.2015, мы пишем:
Байт 4: 23 число => записываем в ячейку памяти 0x23, т.е. число 35.
Байт 5: 02 месяц => записываем в ячейку памяти 0x01, т.е. число 02.
Байт 6: 15 год => записываем в ячейку памяти 0x15, т.е. число 21.
День недели понедельник - пишем 01 как 0x01, оно же всё равно 01.
А вот для Proteus-a понедельник - это число 2 в DS1307.
P.S. Покажите, что у вас в коде сейчас вместо ранее приведённого ошибочного кода.
- tantrum
- Мучитель микросхем
- Сообщения: 447
- Зарегистрирован: Сб фев 09, 2013 11:39:13
- Откуда: Украина, Марганец
Re: Всё по DS1307 и прочим часам Dallas (Maxim)
На данный момент работает такой вариант (знаю, использовать switch лучше, однако на самом деле день недели мне не нужен будет, это так, лишь бы во всем разобраться)
Я специально назвал переменные по разному, чтобы убедиться в том, что данные записываются в микросхему и считываются.
А почему это число 35? Нам ведь нужно 23...
Аналогично и с годом...
Код: Выделить всё
week_write = 5;
DS1307Write(0x03, week_write);
DS1307Read(0x03,&week); // Чтение регистра дня недели
lcd_gotoxy(0,1);
if(week == 1) lcd_string("SUN",3);
else if (week == 2) lcd_string("MON",3);
else if (week == 3) lcd_string("TUE",3);
else if (week == 4) lcd_string("WED",3);
else if (week == 5) lcd_string("THU",3);
else if (week == 6) lcd_string("FRI",3);
else lcd_string("SAT",3);Я специально назвал переменные по разному, чтобы убедиться в том, что данные записываются в микросхему и считываются.
tantrum писал(а):0x23, т.е. число 35.
А почему это число 35? Нам ведь нужно 23...
Аналогично и с годом...
