Главная  
20.04.2024 г.
Главная
Проекты
Статьи
Начинающим
Архив новостей
Ссылки
Контакты
Поиск
Файлы
Форум
Карта сайта
Авторизация





Забыли пароль?
Ещё не зарегистрированы? Регистрация
Поддержи наш сайт!
Через WebMoney

 R785211844650
 Z210696637574
 E368177590409

Форум ARV Research
Добро пожаловать, Гость
Пожалуйста Вход или Регистрация.
Забыли пароль?
В ответ на: Часы на газоразрядных индикаторах (1 просматривает)
_GEN_GOTOBOTTOM Ответить

TOPIC: В ответ на: Часы на газоразрядных индикаторах

#8462
jackbl (Пользователь)
Посетитель
Постов: 55
graphgraph
Часы на газоразрядных индикаторах 23.09.2014 12:58 Репутация: 21  
Собрал часы по этой статье: http://radiokot.ru/circuit/digital/home/182/

Подарил отцу. Тот говорит, что периодически часы показывают на час меньше. Потом время приходит в норму.

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

Посмотрел листинг. Изучил и разобрал. Вроде бы такой проблемы быть не должно. Разве что сама функция остатка от деления работает неправильно. Посмотрел как она выглядит в ассемблере. Но мало что понял. Попробовал перекомпилировать программу в более свежем AVR-Studio. Код получился компактней, но фукция остатка от деления идентична. Пока прошивать и тестировать не пробовал. Будет время протестирую, конечно, хотя надежды мало, ничего ж принципиально не изменилось. Может кто-то сталкивался с подобным? Может известный глюк функции остатка от деления на ноль для ATMega или еще что? Куда копать?
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8464
ARV (Администратор)
Администратор
Постов: 2386
graph
В ответ на: Часы на газоразрядных индикаторах 25.09.2014 14:26 Репутация: 176  
вопрос слишком абстрактный.
при чем тут функция остатка от деления? уверен на 100%, что не в ней дело.
тут либо алгоритм/программа с ошибко, либо помеха.
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8465
jackbl (Пользователь)
Посетитель
Постов: 55
graphgraph
В ответ на: Часы на газоразрядных индикаторах 25.09.2014 19:49 Репутация: 21  
Вопрос совсем не абстрактный. В статье архив с исходниками. В т.ч. Мейк-файл.
Часы ИДУТ абсолютно правильно... т.е. как я их поставил в середине августа, так они правильно считают время. До сих пор. Но вот ПОКАЗЫВАЮТ они его иногда неправильно. Иногда на час меньше, иногда на минуту меньше.

Кусок кода, отвечающих за отображение весьма прост:
Code:

                     case NORMAL:                     case MIN_SET:                         PORTC minutes 10;                         PORTB |= 0x08;                         break;


(аналогично и с единицами часов).

Т.е. байтовая переменная minutes считает правильно. А вот что выводится в PORTC...?

А вот кусок кода, отвечающий за остаток от деления:
Code:

 000006f6 <__udivmodqi4>:  6f6:    99 1b           sub    r25r25  6f8:    79 e0           ldi    r230x09    9  6fa:    04 c0           rjmp    .+8          0x704 <__udivmodqi4_ep> 000006fc <__udivmodqi4_loop>:  6fc:    99 1f           adc    r25r25  6fe:    96 17           cp    r25r22  700:    08 f0           brcs    .+2          0x704 <__udivmodqi4_ep>  702:    96 1b           sub    r25r22 00000704 <__udivmodqi4_ep>:  704:    88 1f           adc    r24r24  706:    7a 95           dec    r23  708:    c9 f7           brne    .-14         0x6fc <__udivmodqi4_loop>  70a:    80 95           com    r24  70c:    08 95           ret


Здесь R24 - минуты или часы, R22 = 10, а результат считывается из R25.

Может вопрос в оптимизаторе? где-то что-то не сохраняется... несколько разных прерываний...


Пока прошил еще 2 МК. Один без изменений, но перекомпилированный, во второй зашил вместо остатка от деления обход = minutes - 10*(minutes/10);
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8466
ARV (Администратор)
Администратор
Постов: 2386
graph
В ответ на: Часы на газоразрядных индикаторах 25.09.2014 21:10 Репутация: 176  
если грешить на недостаток компилятора в реализации одной из основополагающих математических операций, то надо бросать нахрен программирование и уходить в дворники... это основы основ. скорее смотрите, в каких еще местах у вас имеется обращение к PORTC - где-то там и портится все.
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8468
jackbl (Пользователь)
Посетитель
Постов: 55
graphgraph
В ответ на: Часы на газоразрядных индикаторах 05.10.2014 21:35 Репутация: 21  
Мдя. Ну, а на что было грешить, если весь код облазил, а ошибки не нашел.

Но проблема решена. И она оказалась сугубо хардварной. Паяльник решил вопрос. Прошу прощения за беспокойство, тему можно закрыть.
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
_GEN_GOTOTOP Ответить
© Copyright 2007 Best of Joomla, Работает на FireBoardполучить последние сообщения прямо на Ваш рабочий стол