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

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

Вт янв 06, 2015 12:49:24

Си - великая вэщ... но иногда источник великого садомазохизма...
Увы, пользуюсь токмо асмом, мож кто из Сишников подскажет...
8)

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

Вт янв 06, 2015 14:20:43

Это делалось по аналогии, увиденного в интернете.
С секундами/минутами/часами все работает, однако там все куда проще. После преобразования в двоичный код они сразу выводятся на дисплей и все...

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

Вт янв 06, 2015 14:25:26

двоично-десятичный формат был преобразован в двоичный

У вас в восьмеричный... а не в двоичный...
00111 это 73 в десятичном...
Последний раз редактировалось HHIMERA Вт янв 06, 2015 14:26:26, всего редактировалось 1 раз.

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

Вт янв 06, 2015 14:25:50

Зачем Вы числа в восьмеричном виде написали? 00010 = 8. Хотя бы 0b00010. А ещё понятней в десятичном (1,2,3,4...).

ps. опередили :-)
И ещё, зачем из BCD переводить числа меньше 10-ти?

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

Вт янв 06, 2015 14:40:29

:facepalm:
Как тогда мне считать данные? Точнее даже не считать, а что писать в условие if?

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

Вт янв 06, 2015 15:05:27

Так и писать, только числа правильные поставить.
Код:
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);

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

Вт янв 06, 2015 19:24:00

У меня в таком случае выводит "SAT" всегда.
То есть дни недели не в виде 1-7...
(пробовал ставить условие и на субботу, однако тогда не выводит ничего - подтверждение предыдущих слов)

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

Вт янв 06, 2015 19:42:07

Возможно, при первом включении этот регистр не инициализирован и там ноль. Попробуйте туда записать значение от 1 до 7, а потом прочитать.

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

Вт янв 06, 2015 19:44:33

Спасибо за совет!
Да, так заработало.
Это гарантия, что все верно работает и будет считываться как нужно?

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

Вт янв 06, 2015 19:53:26

Выставьте день в семерку, время 23:59 и дождитесь переключения дня на единицу. Должно.

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

Вт янв 06, 2015 20:00:26

Выставил...
День не переключило... :(

Но дату прибавило.

Вот еще решил установить 28 декабря 2014 года, а оно мне:
Изображение
залить картинку

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

Ср янв 07, 2015 08:42:20

Бывают кристаллы с поврежденной маской календаря...
И не только среди DSок - касается ВСЕХ типов RTC... :(
Проверь заведомо годным.
Насчет усяких симуляторов- инструкции на соответствующих ветках форума.

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

Ср янв 07, 2015 11:20:51

Всмысле?
Я в протеусе проверяю, там нерабочих деталей нет)
Под словом "симулятор" вы имели ввиду протеус?

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

Ср янв 07, 2015 11:56:37

Тогды точно "шпротоглюки" - надо искать ответ у спецов по шпроту. 8)

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

Ср янв 07, 2015 15:51:15

Вы, чего, издеваетесь, какой протеус??? в железе проверили?

ps. я Вам дам под десяток глюков Протеуса.... а я думал, Вы всё-таки в железе... жаль...

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

Ср янв 07, 2015 16:59:59

Все знают, что в протеусе досточно ошибок. Однако время выводит вполне адекватно, почему оно должно ошибаться с датой?
В железе нет возможности проверить, т.к. нет DS1307...

Я вот не пойму, в ds1307 информация хранится в двоично-десятичном коде, однако день недели (и т.д.) мы записываем в десятичном формате...

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

Ср янв 07, 2015 18:00:31

А если не понимаете, то озвучьте разницу, чем отличается день недели (т.е., число, меньшее 8-ми) в двоично-десятичном формате от дня недели в десятичном?

P.S. Протеус вполне адектватно работает с DS1307, за исключением одного момента, что при старте программы день недели он из системного времени считает не Пн..Вс = 1..7, а как Вс..Сб = 1..7.

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

Ср янв 07, 2015 19:39:22

Отличается ведь...
Изображение

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

Ср янв 07, 2015 20:21:00

Вы меня не так поняли, наверное. Я имел в виду, что непреобразованное десятичное число и преобразованное в двоично-десятичный формат ничем не отличается, если оно меньше 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. Покажите, что у вас в коде сейчас вместо ранее приведённого ошибочного кода.

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

Ср янв 07, 2015 23:27:08

На данный момент работает такой вариант (знаю, использовать switch лучше, однако на самом деле день недели мне не нужен будет, это так, лишь бы во всем разобраться)
Код:
 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...
Аналогично и с годом...
Ответить