Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Re: Нужна помощь в программировании

Вс июн 11, 2017 20:06:28

Просто опрос часов происходит по прерыванию таймера 0, он же используется и для индикации.
По какой-то причине они дергают 1302 после каждых четырех обновления разрядов, а не 1000 например.
Да и частота обновления дисплея у них чрезмерно высокая.

Странный какой-то глюк, из-за которого МК греется. На плате все чисто?

Re: Нужна помощь в программировании

Вс июн 11, 2017 20:13:01

Просто опрос часов происходит по прерыванию таймера 0, он же используется и для индикации.
По какой-то причине они дергают 1302 после каждых четырех обновления разрядов, а не 1000 например.
Да и частота обновления дисплея у них чрезмерно высокая.

Странный какой-то глюк, из-за которого МК греется. На плате все чисто?


300 Герц у них обновления разрядов мерцания нет и яркость не страдает, хотя если уменьшить частоту как у вас яркость повыситься, хотя нет пробовал зажигать сегменты без контроллера примерна была та же яркость.

Я плату промывал после пайки. Пока думаю может в прошивке косяк у них, хотя врятли. Но если часы запустились то работают, если выключил включил может не запуститься и греться.

Пока определил пакеты запросы 0х81 секунды 0х85 часы 0х83 мин 7 ячеек RAM (наверное настройки часов типа пикать не пикать и будильник насколько выставлен) 0х89 месяц 0х87 дата 0х8B день, у вас считывание раз в секунду Burst mode, а они постоянно по очереди опрашивают.
Я понял у них получается если секунды сменились сразу отобразятся, у вас получается погрешность если секунды сменились то задержка на считывание примерно от 0 до 1 сек. Зависит от того на какой милисекунде запустился контроллер после подачи питания это и будет плавающая погрешность в пределах 1 секунды. Получается рассинхронизация. Я думаю вы мою мысль поняли.

Re: Нужна помощь в программировании

Пн июн 12, 2017 11:12:25

Кстати, если интересно, это мой опрос 1302.

Показан только один пакет, данные запрашиваются раз в секунду. У нас запросы отличаются по форме. Неохота поднимать документацию по 1302, чтобы выяснять, что они там делали. Я делал т.н. Burst Mode, прием 8 байт оптом. Диаграмму с дисплея я не снимал.


Разобрал ваш опрос DS1302. 0xBE запись. 0 сек 2 мин 11 часов 4 дата 12 месяц 7 день 16 год 0 бит защиты. 0xC2 RAM запись чего-то. 0xC4 RAM запись чего-то. 0xBF чтение все то же самое плюс регистр зарядки.

Набор заказывал здесь за 374 рублей зеленого цвета, шел с треком, отслеживался. https://ru.aliexpress.com/item/2016-new ... cb434288e1
В контроллере китайская прошивка. Закоротил 7 ногу на минус (GND), для этого на плате предусмотрены контактные площадки. Теперь показывают 55 сек время и 5 сек температуру, то что надо. Яркость тоже устраивает дневной и ночной режим.
DIY SKU 972289 plata v2_0005 обрезок.jpg
(135.81 KiB) Скачиваний: 739

Осталось разобраться с не всегда корректным запуском, как бы не сгорел от перегрева. Заказал запасной чистый (пустой) без прошивки STC15W404AS буду с ним химичить. А этот оставлю с оригинальной прошивкой, потому что её потом негде будет взять.

Re: Нужна помощь в программировании

Пн июн 12, 2017 12:27:31

Записью в 0хС2 и 0хС4 ДС1302 сохраняются начало и конец срабатывания "кукушки". 0xC3 и 0xC5 соответственно чтение их.
Я изначально хранил настройки в еепром МК, а потом подумал, что грех не использовать такое хранилище, как ОЗУ 1302. И размер кода уменьшился при этом.

Varimon писал(а):Заказал запасной чистый (пустой) без прошивки STC15W404AS буду с ним химичить. А этот оставлю с оригинальной прошивкой, потому что её потом негде будет взять.

Правильный подход. У меня тоже в начале изысканий хранился оригинальный чип (15F204EA) с прошивкой, не помню только остался или я его задействовал куда-то.

Re: Нужна помощь в программировании

Вт июл 04, 2017 19:24:08

Пришла STC15F204EA, у меня часы на STC15F404AS схема как у вас в 3 архиве из статьи. Загрузил в 204 прошивку из 1 архива, на ней видны мерцания разрядов не сильно но есть все таки, вам нужно повысить частоту смены разрядов как у китайцев мое мнение.

Re: Нужна помощь в программировании

Вт июл 04, 2017 19:39:41

Я все понимаю, но вот браться за часы опять просто-напросто влом :(
Есть другие вещи, которыми хочется заниматься, а эти часы как дамоклов меч надо мной. И пообещал, что исправлю, и жутко неохота.

Re: Нужна помощь в программировании

Вт июл 04, 2017 20:05:27

Я все понимаю, но вот браться за часы опять просто-напросто влом :(

Очень надеюсь, что появится все-таки время поправить прошивку, ибо очень заметно мерцание индикаторов) Тоже сегодня получил новую STC15F404AS, прошил - все отлично работает, да и настраивать часы стало намного удобнее!

Re: Нужна помощь в программировании

Вт июл 04, 2017 20:36:44

Просто опрос часов происходит по прерыванию таймера 0, он же используется и для индикации.
По какой-то причине они дергают 1302 после каждых четырех обновления разрядов, а не 1000 например.
Да и частота обновления дисплея у них чрезмерно высокая.


Так вам всего лишь поделить значения таймера 0 на 6 и все, хотя я не знаю что у вас еще привязано к нему, а 300 Герц в самый раз получается, у Вас 50 Герц навскидку, не замерял.

Re: Нужна помощь в программировании

Вт июл 04, 2017 20:41:41

Если интересно:

Спойлер
Код:
void timer0_isr (void) interrupt 1 using 1
{
//********************************************
// В прерывание по Т0 мы попадаем каждые 5 мс.
//********************************************

//******** Вывод на индикатор ********
   anode |= 0x3C;            // Р3[5:2] - set anode pins to switch off LEDs
   cathode = filldisplay(row, digit, Led[row][digit]);   // Преобразование числа в символ индикатора dbuf.
  anode &= ~(1 << (digit + 2));   // Включаем разряд.
   if (++digit > 3) digit = 0;   // Следующий разряд.
   if (abc_ena) t1set();  // Если автояркость активна, запускаем таймер для псевдо-ШИМ:
   
//******** Отображение ********
   if ((!edit) && (screen_cnt)) screen_cnt--;  // Счетчик режима отображения (screen_cnt=400).
  if (screen_cnt == 0) screen_start = 1;  // Проверка режима отображения (every 2 seconds).
 
//******** Запуск АЦП ********
// Счетчик adc_cnt нигде не загружается, он декрементируется
// по кругу за счет размерности типа переменной.
   if (--adc_cnt == 0)
  {
    ADC_CONTR = 0x8E;
    EADC = 1;
  }

// Счетчик мигания разделительных точек
   if (--flash_cnt == 0)
   {
      flash = ~flash;
      flash_cnt = 100;      // 5ms * 100 = 0.5s
    if (longplusedit) key = 0x08; // Имитация нажатия кнопки ПЛЮС каждые полсекунды.
   }

//********* Сhime/alarm beep *********
  if (chime || alarm) beep();
   
//========= DS1302 read counter ===========
    if (rtc_cnt) rtc_cnt--;
      else ds_read = 1;

//******* Read buttons' state ********
    if (btn_cnt) btn_cnt--;
      else  btn_start = 1;  // Проверка каждые 20 мс.
 
} // End of T0 interrupt


Вот все эти счетчики надо будет подгонять под переполнение 1 мс.

Re: Нужна помощь в программировании

Вт июл 04, 2017 20:44:58

Хорошо если здесь не трогать, а для индикации использовать Timer 1 их ведь два. Он то свободен?

Re: Нужна помощь в программировании

Вт июл 04, 2017 21:19:54

Он используется для АРЯ. Отключает разряды индикатора раньше времени прерывания Т0 для снижения яркости.

Re: Нужна помощь в программировании

Чт июл 06, 2017 18:33:08

Есть регистр AUXR по умолчанию у него все биты в 0. Если выставить 7 бит в 1, то таймер нулевой заработает в 12 раз быстрее. Просто ради эксперимента.

Re: Нужна помощь в программировании

Чт июл 06, 2017 19:34:24

Я знаю, но это не выход из положения.
Скомпилировать - секундное дело. Персонально вам (в личку) могу скинуть хекс под 204-й с AUXR=1 (сейчас там 0). Покрутите, посмотрите как и что, потом поделитесь информацией здесь. Хотя и так ясно, что все будет так же, только все временные интервалы (выше выкладывал) будут быстрее. Кстати, этот бит и на Т1 влияет.
Хотите?

Re: Нужна помощь в программировании

Чт июл 06, 2017 20:20:52

Я знаю, но это не выход из положения.
Скомпилировать - секундное дело. Персонально вам (в личку) могу скинуть хекс под 204-й с AUXR=1 (сейчас там 0). Покрутите, посмотрите как и что, потом поделитесь информацией здесь. Хотя и так ясно, что все будет так же, только все временные интервалы (выше выкладывал) будут быстрее. Кстати, этот бит и на Т1 влияет.
Хотите?

Давайте попробую. 7 бит на T1 не влияет, влияет на него только 6 бит. Запишите в AUXR=0x80, если запишите AUXR=0xC0 тогда повлияет и на Т1.
Почему также, разряды перестанут мерцать что народ и хочет. Быстрее таймер срабатывает и частота обновления повышается. Может и программа конечно порушиться, по тестируем.

Re: Нужна помощь в программировании

Чт июл 06, 2017 21:12:28

Пробуйте.
Перелистывание будет слишком частым, опросы АЦП и прочее.
В общий доступ я это выкладывать не буду.

Re: Нужна помощь в программировании

Чт июл 06, 2017 21:23:26

Секундные точки мигают часто это понятно, и перелистывание примерно через 3 секунды время день температура. При затемнении появляется мерцание разрядов. При полной яркости (яркость очень приличная) мерцания НЕТ.
Это раньше если на советских АЛ318 АЛ324 выставишь 300Герц то ни чего не увидишь, а здесь применяются сверхяркие светодиоды в сегментах, что 300 Герц им не заметно снижения яркости.

Re: Нужна помощь в программировании

Вт авг 29, 2017 15:34:08

Уважаемые Гуру! Подскажите, пожалуйста, что делать. Я прошил контроллер STC15W404AS из архива 03.zip. Все работало, но было заметно моргание цифр. Решил прошить прошивкой https://github.com, но в программаторе ошибочно нажал "Next time can program only wen P3.2 & P3.3". Прошивка залилась и контроллер работает (моргает двоеточие, переключаются точки при нажатии на кнопки, цифры не показывает), а программатор теперь контроллера не видит. Можно с ним что-нибудь сделать?

Re: Нужна помощь в программировании

Вт авг 29, 2017 16:43:52

Указанные пины посадите на массу при прошивке. Это вы активировали защиту от случайного программирования.

Re: Нужна помощь в программировании

Вт авг 29, 2017 19:32:45

Сажал - не реагирует.

Re: Нужна помощь в программировании

Ср авг 30, 2017 09:30:40

Такая ситуация требует имитации "полного стирания" - заливки в МК дампа, содержащего 0xFF по всем адресам дабы МК случайно не задрыгал тест-лапками.
Затем повторим то же самое, но с отменой защиты - приводим МК в "исходное по умолчанию" состояние.
И лишь потом прошиваем необходимую прожку (но уже не повторяя ошибок с "залочкой").
:roll:
Ответить