roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 07:30

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 443 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9, 10, 11 ... 30  След.
Автор Сообщение
 Заголовок сообщения: Re: eZ430-Chronos
СообщениеДобавлено: 12 июн 2012, 00:43 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Главное - это чтобы не нарушалась возможность беспроводного обновления и секундомер не сбивал ход хода (впрочем на часы вообще понятное дело ничто не должно влиять), а остальное - полет фантазии. Просто если выкинуть/не использовать беспроводность, то это уже будут ничем не приметные часы на фоне конкурентов по функционалу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: eZ430-Chronos
СообщениеДобавлено: 12 июн 2012, 01:53 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Ну, это можно было даже не озвучивать.
Я уже себе с трудом представляю как обновлять прошивку не через радиоканал. Когда брикаю часы, со слезами иду за отверткой. :cry:
Допил точности часов и секундомера для меня тож на первом месте. Прерывания хронометра уже докурил.
Для меня белое пятно в часах только монстроидальная SimpliciTI


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: eZ430-Chronos
СообщениеДобавлено: 21 июл 2012, 23:36 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Всё, запарился я с точностью ходьбы в часах относительно секундомера (на работе его часто использую), после длительных мучений по пересборки проекта под 868МГц (от Sonny) - удалось её собрать и залил в часы. Это просто не передаваемый визг от удовольствия, что человек поправил там: секундомер, будильник, отображение даты в днях недели, расширился функционал в разделе "высота над уровнем моря" (можно менять 0 точку и ещё хренова туча функционала) + вниз теперь можно выводить часы, что очень удобно, если сверху выводятся какие-то показания, подсветка по другому работает (более экономно). Вот бы ещё найти более подробное описание возможностей новых, а то куча всего...

зы: IAR - ппц какой-то, ещё более глючной и непонятной IDE не встречал, раньше думал, что Идея и Эклипс капризные, но это чудо...мата не хватает.

Добавлено спустя 50 минут 17 секунд:
На странице проекта есть описание (перевод). Единственная проблема (для меня), не хватает опции отключения короткого сигнала каждый час.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: eZ430-Chronos
СообщениеДобавлено: 22 июл 2012, 02:42 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Чего-то я больших изменений в исходниках, в сторону повышения точности часов, не увидел.
Глюкавый "logic/stopwatch.c" вообще без изменений :pardon:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: eZ430-Chronos
СообщениеДобавлено: 22 июл 2012, 10:09 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Понятно, я в коде не рылся, видимо разговор об каких-то исправлениях не затронуло данную проблему.
На самом деле есть глючек ещё, когда кнопками на часах пытаешься выставляешь время (основное), то можно так натыкаться, что потом выйти нельзя. Часы перестают реагировать на управляющие кнопки. Надо какое-то время подождать, не трогать их и тогда отпускает.
Дмитрий, может найдется время и желание допилить эту глючность с таймером?
А насчет пика каждый час, надо было его делать не на общее время, а при включении вывода часов вниз (на доп экран)...меня жена чуть не убила, когда это чудо техники начало под ухом, на полке, ночью пикать (два контрольных писка). :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: eZ430-Chronos
СообщениеДобавлено: 22 июл 2012, 16:42 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Капельку допелил относительно писка каждый час как хотел.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: eZ430-Chronos
СообщениеДобавлено: 22 июл 2012, 17:19 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Вот тебя бесит разная скорость секундомера и часов :)
Ща допилю часы до одного генератора секундных импульсов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: eZ430-Chronos
СообщениеДобавлено: 22 июл 2012, 19:47 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Будет здорово. Если всё будет "ок", то могу попробовать собрать на все частоты прошивки и выложить. :good: Это в Sonny версии?
Пробовал в новой версии менять настройки давления, жаль - дает только высоту менять. :pardon:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: eZ430-Chronos
СообщениеДобавлено: 23 июл 2012, 03:35 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Гыыыы, ну придурки :shock:
Компилятор, их константу "STOPWATCH_100HZ_TICK" сделал не как они думают (32768 / 100 = 328), a = 327 :)
И получилось: 32700/32768 *60сек * 20 мин = 1197,5 сек, что на 2.5 сек. короче настоящих 20 минут.
Лезем в "stopwatch.h" и корректируем строку:
Код:
#define STOPWATCH_100HZ_TICK                    328   //!!! (32768 / 100)


И много вопросов к:
Код:
        // Timer interrupts occur every 32768/100 = 328 ACLK
        // --> stopwatch runs too slow (1 sec nominal != 100 interupts * 328 ACLK = 32800 ACLK =
        // 1.00098 sec)
        // --> ideally correct timer value every 10 ticks by (32768 - 32800)/10 = 3.2
        // --> correct timer value every 10Hz by 3,
        // --> correct timer value every 1Hz correct by 5
        value += STOPWATCH_100HZ_TICK;

        if (sStopwatch.swtIs1Hz)
        {
            value -= 5;
            sStopwatch.swtIs1Hz = 0;
            sStopwatch.swtIs10Hz = 0;
        }
        else if (sStopwatch.swtIs10Hz)
        {
            value -= 3;
            sStopwatch.swtIs10Hz = 0;
        }

Почему это при "(32768 - 32800)/10 = 3.2", они:
Код:
        // --> correct timer value every 10Hz by 3,
        // --> correct timer value every 1Hz correct by 5


Похоже для них две десятых равны одной пятой для вычитания :lol:
Правда, ошибка тут минимальна: 32800 -30 -5 = 32765/32768 *60 * 20 = 1199,89 сек в 20-ти минутах.
Но я бы подправил:
Это:
Код:
        if (sStopwatch.swtIs1Hz)
        {
            value -= 5;
            sStopwatch.swtIs1Hz = 0;
            sStopwatch.swtIs10Hz = 0;
        }

На это:
Код:
        if (sStopwatch.swtIs1Hz)
        {
            value -= 2;                 //!!! 5;
            sStopwatch.swtIs1Hz = 0;
            sStopwatch.swtIs10Hz = 0;
        }

Да, это в "Sports Watch\logic\stopwatch.c"

Добавлено спустя 14 минут 8 секунд:
Проверил, гуд, с тебя пиво :crazy:

Добавлено спустя 46 минут 29 секунд:
Опс, остался глюк при переходе секундомера >20 мин. режима, прибавляет лишнюю секунду.
Завтра допилю...
Да, чтоб на экране часов не появлялся секундомер (не в режиме секундомера) при переходе режима >20 мин., надо в "Sports Watch\logic\stopwatch.c" в функции "void stopwatch_tick(void)" найти и закомментировать (2 шт.):
Код:
display_stopwatch(LINE2, DISPLAY_LINE_UPDATE_FULL);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: eZ430-Chronos
СообщениеДобавлено: 23 июл 2012, 10:15 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Спасибо! Вечером постараюсь внести изменения.
На счет ">20 мин", отказываться от этой возможности не хотелось, если её убирать, тогда просто секундомер нужно ограничивать в максимально отсчитываемом времени (точность же теряется, впрочем для больших временных измерений она не нужна).

зы: эм...пиво? - не вопрос! Вопрос в разных городах! :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: eZ430-Chronos
СообщениеДобавлено: 23 июл 2012, 12:26 
Не в сети
Аватара пользователя

Зарегистрирован: 01 мар 2005, 14:54
Сообщения: 70
Откуда: г. Томск
Я выше в теме писал, как я сделал точную настройку секундомера. А при переключении его в режим >20 мин. действительно добавлялась лишняя секунда - надо её не добавлять.

_________________
В электронике чудес не бывает! Бывают плохие контакты!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: eZ430-Chronos
СообщениеДобавлено: 23 июл 2012, 12:33 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Нужно работу вести над одним проектом/контентом, а то сейчас запутаемся.
Змей-Горыныч, если не сложно, то повтори пожалуйста свои изменения на этой версии сборки (Sonny).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: eZ430-Chronos
СообщениеДобавлено: 23 июл 2012, 12:44 
Не в сети
Аватара пользователя

Зарегистрирован: 01 мар 2005, 14:54
Сообщения: 70
Откуда: г. Томск
В модуле stopwatch.c поправил функцию stopwatch_tick вот так:

Код:
void stopwatch_tick(void)
{
    static u8 delay = 0;
    static u16 MyKorr = 0;
    static u8 My_First_Add_Sec = 0;

    // Default view (< 20 minutes): display and count MM:SS:hh
    if (sStopwatch.viewStyle == DISPLAY_DEFAULT_VIEW)
    {
        // Add 1/100 sec
        sStopwatch.time[7]++;

        // Draw flag minimizes display update activity
        //
        // swt.drawFlag = 1: second L
        // swt.drawFlag = 2: second H/L
        // swt.drawFlag = 3: minutes L, second H/L
        // swt.drawFlag = 4: minutes H/L, second H/L
        // swt.drawFlag = 5: hours L, minutes H/L, second H/L
        // swt.drawFlag = 6: hours H/L, minutes H/L, second H/L
        // swt.drawFlag = 7: 1/10 sec, 1/100 sec
        // swt.drawFlag = 8: 1/100 sec (every 17/100 sec to reduce display draw activity)

        if (delay++ > 17)
        {
            sStopwatch.drawFlag = 8;  //8
            delay = 0;
        }
       
        if (MyKorr++ == 320)          //Каждые 3.20 секунды вычитаем 0.01 сек. для коррекции секундомера
        {
          sStopwatch.time[7]--;
          MyKorr = 0;
        };

        // Add 1/10 sec
        if (sStopwatch.time[7] == 0x3A)
        {
            sStopwatch.time[7] = '0';
            sStopwatch.time[6]++;
            My_First_Add_Sec = 0;

            // 1/10Hz trigger
            sStopwatch.swtIs10Hz = 1;

            // Update draw flag
            sStopwatch.drawFlag = 7;
        }
    }
    else                        // Alternative view (20 minutes .. 20 hours): display and count
                                // HH:MM:SS
    {
        // Just add 1 second
      if (My_First_Add_Sec != 0)
      {
        sStopwatch.time[6] = 0x3A;
      }
      My_First_Add_Sec = 1;
    }

    // Second overflow?
    if (sStopwatch.time[6] == 0x3A)
    {
        // Reset draw flag
        sStopwatch.drawFlag = 1;

        // 1Hz trigger
        sStopwatch.swtIs1Hz = 1;

        // Add data
        sStopwatch.time[6] = '0';
        sStopwatch.time[5]++;                      // second  L (0 - 9)
        if (sStopwatch.time[5] == 0x3A)
        {
            sStopwatch.drawFlag++;                 // 2
            sStopwatch.time[5] = '0';
            sStopwatch.time[4]++;                  // second  H (0 - 5)
            if (sStopwatch.time[4] == '6')
            {
                sStopwatch.drawFlag++;             // 3
                sStopwatch.time[4] = '0';
                sStopwatch.time[3]++;              // minutes L (0 - 9)
                if (sStopwatch.time[3] == 0x3A)
                {
                    sStopwatch.drawFlag++;         // 4
                    sStopwatch.time[3] = '0';
                    sStopwatch.time[2]++;          // minutes H (0 - 5)
                    if (sStopwatch.time[2] == '2')
                    {
                        // SWT display changes from MM:SS:hh to HH:MM:SS when reaching 20 minutes
                        sStopwatch.viewStyle = DISPLAY_ALTERNATIVE_VIEW;
                        display_stopwatch(LINE2, DISPLAY_LINE_UPDATE_FULL);

                    }
                    else if (sStopwatch.time[2] == '6')
                    {
                        sStopwatch.drawFlag++;     // 5
                        sStopwatch.time[2] = '0';
                        sStopwatch.time[1]++;      // hours L (0-9)

                        if (sStopwatch.time[1] == 0x3A)
                        {
                            sStopwatch.drawFlag++; // 6
                            sStopwatch.time[1] = '0';
                            sStopwatch.time[0]++;  // hours H (0-1)

                            if (sStopwatch.time[0] == '2')
                            {
                                // When reaching 20 hours, start over
                                reset_stopwatch();
                                sStopwatch.state = STOPWATCH_RUN;
                                display_stopwatch(LINE2, DISPLAY_LINE_UPDATE_FULL);
                            }
                        }
                    }
                }
            }
        }
    }

    // Always set display update flag
    display.flag.update_stopwatch = 1;
}

Может не очень "красиво", сделал быстро, зато работает.

_________________
В электронике чудес не бывает! Бывают плохие контакты!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: eZ430-Chronos
СообщениеДобавлено: 23 июл 2012, 12:54 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Спасибо.
Я так полагаю, это изменения только по части секундомера и ранее корректировки Dmitry__ тоже нужны (т.к. они касаются только часов)? Или нет (уже законченный блок)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: eZ430-Chronos
СообщениеДобавлено: 23 июл 2012, 17:40 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Madf писал(а):
На счет ">20 мин", отказываться от этой возможности не хотелось

Да нееее, ни какие функции не пропадут. Просто эти придурки в функцию подсчета секундомера засунули вывод на дисплей :)
Глюк проявляется как появление секундомера на короткое время (во время перехода секундомера в режим >20 мин) в любом режиме часов.

Добавлено спустя 1 час 1 минуту 40 секунд:
Опс, понял почему каждую секунду вычитают 5 а не 2.
При выполнении условия "if (sStopwatch.swtIs1Hz)" другие условия не проверяются, а значит в 1/10 секунду не вычитается 3, вот они скопом и отнимают: -3 -2 = -5
Жесть

Добавлено спустя 3 часа 33 минуты 6 секунд:
Допилил секундомер, идут как вкопанные :D
Резюмирую:
Относительно версии "Sports Watch 1_6", к "Sonny_Sports Watch" это тоже подходит, т.к. корректируемые файлы там без изменений

Лезем в "stopwatch.h" и корректируем строку:
Код:
#define STOPWATCH_100HZ_TICK                    328   //!!! (32768 / 100)


В "stopwatch.c":
В функции "void stopwatch_tick(void)" найти и закомментировать (2 шт.):
Код:
//!!!     display_stopwatch(LINE2, DISPLAY_LINE_UPDATE_FULL);


И отнимаем 1 секунду при смене режима >20 мин.
У меня это выглядит так (с закомментированным display_stopwatch) :

Код:
                        // SWT display changes from MM:SS:hh to HH:MM:SS when reaching 20 minutes
                        if (sStopwatch.viewStyle == DISPLAY_DEFAULT_VIEW)
                        {
                          sStopwatch.time[1]--; //!!!
                        }
                        sStopwatch.viewStyle = DISPLAY_ALTERNATIVE_VIEW;
//!!!                        display_stopwatch(LINE2, DISPLAY_LINE_UPDATE_FULL);

Чего еще допилить? 8)


Последний раз редактировалось Dmitry__ 23 июл 2012, 19:00, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 443 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9, 10, 11 ... 30  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO