eZ430-Chronos

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: eZ430-Chronos

Сообщение 75rus01 » 20 мар 2012, 16:28

Еще несколько вопросов: поверхность экрана устойчива к царапинам при повседневной носке? возможно ли использовать часы как шагомер используя датчик-акселерометр без сторонних устройств?
p.s. часы как два брата похожи корпусами с Oregon scientific RA129.
75rus01
 
Сообщения: 4
Зарегистрирован: 20 мар 2012, 13:45
Откуда: Чита

Re: eZ430-Chronos

Сообщение Madf » 20 мар 2012, 16:36

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

Re: eZ430-Chronos

Сообщение Myp » 20 мар 2012, 16:38

забавно, к RA129 можно докупить шагомер и пульсометр беспроводной =) как и для кроносов

я так полагаю что это одни и те же часы что снаружи что внутри.
только дисплей чуток другой.
и наверняка RA129 можно разобрать и перепрошить ;)
кстати там целая линейка таких часиков

есть в красненьком корпусе :)

по этому и цена такая маленькая, потому что тираж действительно большой, наручные спортивные часы коммерсантам и игрушка для разработчиков =)
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: eZ430-Chronos

Сообщение Madf » 20 мар 2012, 16:52

Да, у RA129 экранчик по интереснее из-за графиков...а вот почему у 430 шагомер не сделали - не понятно. Я вообще думал вначале для них сделать счетчик кругов плавания, но из-за стартовой влагозащиты - идея как бы отпала, хотя можно и тут что-нить придумать.
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: eZ430-Chronos

Сообщение Dmitry__ » 20 мар 2012, 17:24

Madf писал(а):Господа, а не кто не пробовал не трогая имеющего кода в плане выкидывания лишнего, просто допилить будильник (чтобы звонил по дольше и возможно в другой тональности (чтобы стало по громче))?

Я не лазил, ибо не интересно, но чо там пилить?
Лезем в маин:
Код: Выделить всё
    // Generate alarm (two signals every second)
    if (request.flag.buzzer)
        start_buzzer(2, BUZZER_ON_TICKS, BUZZER_OFF_TICKS);

смотрим тут:
Код: Выделить всё
// Buzzer output signal frequency = 32,768kHz/(BUZZER_TIMER_STEPS+1)/2 = 2.7kHz
#define BUZZER_TIMER_STEPS                                      (5u)

// Buzzer on time
#define BUZZER_ON_TICKS                                         (CONV_MS_TO_TICKS(20))

// Buzzer off time
#define BUZZER_OFF_TICKS                                        (CONV_MS_TO_TICKS(200))


Но сам не проверял :oops:

75rus01 писал(а):Еще несколько вопросов: поверхность экрана устойчива к царапинам при повседневной носке? возможно ли использовать часы как шагомер используя датчик-акселерометр без сторонних устройств?
p.s. часы как два брата похожи корпусами с Oregon scientific RA129.

Очень царапаются, от чиха :shock:
Как шагомер можно, но акселерометр много жрет. :(
Как пример допила можно посмотреть исходники "Дай пять"
http://processors.wiki.ti.com/index.php/Chronos_High_5_Me!
в RA129 не нашел вч-модуля...
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: eZ430-Chronos

Сообщение 75rus01 » 20 мар 2012, 17:49

Еще по RA129: Официальные продажи в России с ноября 2008г. (видимо взяли их за основу для ez430)
Водостойкость: 30 м. (можно плавать,
нельзя нажимать под водой кнопки,
нельзя нырять с вышки, нельзя
глубоко погружаться под воду) где-то пишут про погружение до 30 метров.
75rus01
 
Сообщения: 4
Зарегистрирован: 20 мар 2012, 13:45
Откуда: Чита

Re: eZ430-Chronos

Сообщение Madf » 20 мар 2012, 17:59

75rus01 писал(а):Водостойкость: 30 м. (можно плавать,
нельзя нажимать под водой кнопки,
нельзя нырять с вышки, нельзя
глубоко погружаться под воду) где-то пишут про погружение до 30 метров.

Нельзя грести руками!
А как же плавать?
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: eZ430-Chronos

Сообщение Madf » 21 мар 2012, 13:01

Dmitry__ писал(а):Я не лазил, ибо не интересно, но чо там пилить?
Лезем в маин:
Код: Выделить всё
    // Generate alarm (two signals every second)
    if (request.flag.buzzer)
        start_buzzer(2, BUZZER_ON_TICKS, BUZZER_OFF_TICKS);

смотрим тут:
Код: Выделить всё
// Buzzer output signal frequency = 32,768kHz/(BUZZER_TIMER_STEPS+1)/2 = 2.7kHz
#define BUZZER_TIMER_STEPS                                      (5u)

// Buzzer on time
#define BUZZER_ON_TICKS                                         (CONV_MS_TO_TICKS(20))

// Buzzer off time
#define BUZZER_OFF_TICKS                                        (CONV_MS_TO_TICKS(200))


Но сам не проверял :oops:

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

Re: eZ430-Chronos

Сообщение Змей-Горыныч » 24 май 2012, 07:08

Поздравьте и меня - купил я часики такие. Штатную прошивку тут же забраковал - много ненужного, а чего хотелось нет. После недолгих поисков залил прошивку от Sonny, что он разработал (Обсуждение здесь http://easyelectronics.ru/otladochnyj-komplekt-ez430-chronos-ot-texas-instruments.html, сама прошивка здесь http://code.google.com/p/ez430-chronos-patched/). В ней практически все функции, что я сам собирался добавить. Особенно порадовал прогноз погоды - уже 2 дня по совету часов беру зонтик утром и они не обманывают - дождь действительно идёт. :)
Пока я только успел разобраться чем и как программировать и поотлаживал эмулятором из IAR, всё работает.
Вопрос: Может, кто-нибудь уже устранил глюк со спешащим секундомером, описанный выше в этой теме?
В электронике чудес не бывает! Бывают плохие контакты!
Аватара пользователя
Змей-Горыныч
 
Сообщения: 70
Зарегистрирован: 01 мар 2005, 14:54
Откуда: г. Томск

Re: eZ430-Chronos

Сообщение Dmitry__ » 24 май 2012, 07:56

Паздравлям :)
Исходник часов - унылое гамно :pardon:
Я потерял всякий интерес их допиливать. Там надо все переписывать...
Змей-Горыныч писал(а):Вопрос: Может, кто-нибудь уже устранил глюк со спешащим секундомером, описанный выше в этой теме?

Компилить исходники умеем?
Если да, то лезем в "Sports Watch/logic/stopwatch.c"
Находим:
Код: Выделить всё
void stopwatch_tick(void)
{
    static u8 delay = 0;

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

        // Draw flag minimizes display update activity
        //
        // swt.drawFlag = 1: refresh 1-th symbol
        // swt.drawFlag = 2: refresh 1-2 symbols
        // swt.drawFlag = 3: refresh 1-3 symbols
        // swt.drawFlag = 4: refresh 1-4 symbols
        // swt.drawFlag = 5: refresh 1-5 symbols
        // swt.drawFlag = 6: refresh 1-6 symbols
        if (delay++ > 17)
        {
            sStopwatch.drawFlag = 1;      //1
            delay = 0;
        }


И играемся с "if (delay++ > 17)"
Тут надо добавить прореживалку сброса tick-а
Т.е. чтоб на определенное число сбросов тика за 17 тактов происходил сброс на 18-м или 16-ом такте (отстает/бежит). Т.е. например на каждые 1000 сбросов тика 17 тактов, проходил 1 сброс на 18-м или 16-м такте. Число 1000 - константа скорости отставания/убегания
А вообще: унылое гамно, унылое гамно, унылое гамно.
Я так программы даже в 20 лет не писал :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: eZ430-Chronos

Сообщение Змей-Горыныч » 29 май 2012, 13:43

Dmitry__ писал(а):Исходник часов - унылое гамно.

Да, вы правы, мало того что гамно, так ещё и унылое! :D
Поэтому то я сразу и не смог разобраться, где искать в куче исходных файлов, спасибо что указали место.

Dmitry__ писал(а):Компилить исходники умеем?

Умеем :)
Правда по специфике работы пишу в основном для AVR и на ассемблере (чтоб не зависить от прихотей С-компилятора), ибо при разработки моих систем реального времени на счету буквально каждый такт контроллера. На С приходилось не часто писать, всего несколько проектов, где не требуется жёстких пребований по быстродействию и объёму кода.
Не очень разобрался в описанном вами алгоритме, как и в самом исходнике. Здесь ведь delay используется для "// Draw flag minimizes display update activity" как они пишут, хотя я тоже не понимаю ЗАЧЕМ, т.к. при отладке поглядел что дисплей не обновляется только первые 17 сотых секунды, а затем всё равно каждую сотую...
Сначаля я попытался подогнать константу STOPWATCH_100HZ_TICK==(32768/100) в модуле stopwatch.h, но это грубая подстройка времени срабатывания таймера, и хотя стал секундомер точнее тикать, мне хотелось иметь возможность точно подстроить. В итоге завёл свою переменную (MyKorr), в которой считаются тики таймера и через определённое кол-во их происходит пропуск одного прерывания таймера. Так можно точно подогнать. В случае моих часов, например получилось опытным путём, что нужно вычитать 0,01 с каждые 3,2 секунды.

Код: Выделить всё
void stopwatch_tick(void)
{
    static u8 delay = 0;
    static u16 MyKorr = 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


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

Re: eZ430-Chronos

Сообщение Dmitry__ » 29 май 2012, 14:52

Змей-Горыныч писал(а):В итоге завёл свою переменную (MyKorr), в которой считаются тики таймера и через определённое кол-во их происходит пропуск одного прерывания таймера. Так можно точно подогнать. В случае моих часов, например получилось опытным путём, что нужно вычитать 0,01 с каждые 3,2 секунды.

Дык, ты это и сделал, только чуть по другому :D
Dmitry__ писал(а):Тут надо добавить прореживалку сброса tick-а
Т.е. чтоб на определенное число сбросов тика за 17 тактов происходил сброс на 18-м или 16-ом такте (отстает/бежит). Т.е. например на каждые 1000 сбросов тика 17 тактов, проходил 1 сброс на 18-м или 16-м такте. Число 1000 - константа скорости отставания/убегания


Вот тебе жесткий хак :)
Выкидываем таблицу int_to_array
Код: Выделить всё
// Quick integer to array conversion table for most common integer values
const u8 int_to_array_conversion_table[][3] = {
    "000", "001", "002", "003", "004", "005", "006", "007", "008", "009", "010", "011", "012",
    "013", "014", "015",
    "016", "017", "018", "019", "020", "021", "022", "023", "024", "025", "026", "027", "028",
    "029", "030", "031",
    "032", "033", "034", "035", "036", "037", "038", "039", "040", "041", "042", "043", "044",
    "045", "046", "047",
    "048", "049", "050", "051", "052", "053", "054", "055", "056", "057", "058", "059", "060",
    "061", "062", "063",
    "064", "065", "066", "067", "068", "069", "070", "071", "072", "073", "074", "075", "076",
    "077", "078", "079",
    "080", "081", "082", "083", "084", "085", "086", "087", "088", "089", "090", "091", "092",
    "093", "094", "095",
    "096", "097", "098", "099", "100", "101", "102", "103", "104", "105", "106", "107", "108",
    "109", "110", "111",
    "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "122", "123", "124",
    "125", "126", "127",
    "128", "129", "130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "140",
    "141", "142", "143",
    "144", "145", "146", "147", "148", "149", "150", "151", "152", "153", "154", "155", "156",
    "157", "158", "159",
    "160", "161", "162", "163", "164", "165", "166", "167", "168", "169", "170", "171", "172",
    "173", "174", "175",
    "176", "177", "178", "179", "180",
};

меняем int_to_array:
Код: Выделить всё
// *************************************************************************************************
// @fn          int_to_array
// @brief       Generic integer to array routine. Converts integer n to string.
//                              Default conversion result has leading zeros, e.g. "00123"
//                              Option to convert leading '0' into whitespace (blanks)
// @param       u32 n                   integer to convert
//                              u8 digits               number of digits
//                              u8 blanks               fill up result string with number of
// whitespaces instead of leading zeros
// @return      u8                              string
// *************************************************************************************************
u8 *int_to_array(u32 n, u8 digits, u8 blanks)
{
    u8 i;
    u8 digits1 = digits;

    // Preset result string
    memcpy(int_to_array_str, "0000000", 7);

    // Return empty string if number of digits is invalid (valid range for digits: 1-7)
    if ((digits == 0) || (digits > 7))
        return (int_to_array_str);

    // Numbers 0 .. 180 can be copied from int_to_array_conversion_table without conversion
    if (n <= 180)
    {
        if (digits >= 3)
        {
            memcpy(int_to_array_str + (digits - 3), int_to_array_conversion_table[n], 3);
        }
        else                    // digits == 1 || 2
        {
            memcpy(int_to_array_str, int_to_array_conversion_table[n] + (3 - digits), digits);
        }
    }
    else                        // For n > 180 need to calculate string content
    {
        // Calculate digits from least to most significant number
        do
        {
            int_to_array_str[digits - 1] = n % 10 + '0';
            n /= 10;
        }
        while (--digits > 0);
    }

    // Remove specified number of leading '0', always keep last one
    i = 0;
    while ((int_to_array_str[i] == '0') && (i < digits1 - 1))
    {
        if (blanks > 0)
        {
            // Convert only specified number of leading '0'
            int_to_array_str[i] = ' ';
            blanks--;
        }
        i++;
    }

    return (int_to_array_str);


на int_to_array с аппаратной командой десятичной коррекции :)
Код: Выделить всё
/*
// *************************************************************************************************
// @fn          int_to_array
// @brief       Generic integer to array routine. Converts integer n to string.
//                              Default conversion result has leading zeros, e.g. "00123"
//                              Option to convert leading '0' into whitespace (blanks)
// @param       u32 n                   integer to convert
//                              u8 digits               number of digits
//                              u8 blanks               fill up result string with number of
// whitespaces instead of leading zeros
// @return      u8                              string
// *************************************************************************************************
u8 *int_to_array(u32 n, u8 digits, u8 blanks)
{
    u8 i;

// Return empty string if number of digits is invalid (valid range for digits: 1-7)
    if ((digits == 0) || (digits > 7)) goto return_;

//R15 = blanks, R14 = digits, R13,R12 = n
    asm(" push    R11");
    asm(" push    R10");
    // Preset result string: int_to_array_str[0..6] = '0'
    asm(" mov.b   #0x30, r10");
    asm(" mov.b   r10,   int_to_array_str +0");
    asm(" mov.b   r10,   int_to_array_str +1");
    asm(" mov.b   r10,   int_to_array_str +2");
    asm(" mov.b   r10,   int_to_array_str +3");
    asm(" mov.b   r10,   int_to_array_str +4");
    asm(" mov.b   r10,   int_to_array_str +5");
    asm(" mov.b   r10,   int_to_array_str +6");

// Convert 16 bit binary to 20 bit packed BCD
// C prototype: unsigned long bin2pbcd(unsigned bin)
//bin2pbcd
    asm(" clr     R10       "); // Clear BCD result
    asm(" clr     R11       "); //
    asm(" swpb    R12       "); // Swap upper/lower byte
    asm(" tst.b   R12       "); // Check if upper byte is zero
    asm(" jz      L1        "); // Yes, skip upper byte
    asm(" swpb    R12       "); // Sway upper/lower bytes back
    asm(" rla     R12       "); // Test msb of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
    asm(" rla     R12       "); // Test bit 14 of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
    asm(" rla     R12       "); // Test bit 13 of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
    asm(" rla     R12       "); // Test bit 12 of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
    asm(" rla     R12       "); // Test bit 11 of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
    asm(" rla     R12       "); // Test bit 10 of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
    asm(" rla     R12       "); // Test bit 9 of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
    asm(" rla     R12       "); // Test bit 8 of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
asm("L1:");
    asm(" rla     R12       "); // Test bit 7 of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
    asm(" rla     R12       "); // Test bit 6 of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
    asm(" rla     R12       "); // Test bit 5 of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
    asm(" rla     R12       "); // Test bit 4 of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
    asm(" rla     R12       "); // Test bit 3 of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
    asm(" rla     R12       "); // Test bit 2 of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
    asm(" dadd    R11, R11  "); //
    asm(" rla     R12       "); // Test bit 1 of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
    asm(" dadd    R11, R11  "); //
    asm(" rla     R12       "); // Test bit 0 of binary
    asm(" dadd    R10, R10  "); // Multiply BCD by 2 and add binary bit
    asm(" dadd    R11, R11  "); //

//i = digits    //set a pointer to a string
    asm(" mov.b   r14, r13");
    asm(" jmp     L3");
asm("L2:");
    asm(" rrc     r11");
    asm(" rrc     r10");
    asm(" rrc     r11");
    asm(" rrc     r10");
    asm(" rrc     r11");
    asm(" rrc     r10");
    asm(" rrc     r11");
    asm(" rrc     r10");
asm("L3:      mov     r10,r12");      //BCD_X mask
    asm(" and     #0x000f, r12"); //
//i--;
    asm(" dec.b   r13");
//int_to_array_str[i] += BCD_X;
    asm(" add.b   r12, int_to_array_str(r13)");
//if (i == 0) end;
    asm(" tst.b   r13");
    asm(" jnz      L2");

    asm(" pop     R10");
    asm(" pop     R11");

    // Remove specified number of leading '0', always keep last one
    i = 0;
    while ((int_to_array_str[i] == '0') && (i < digits - 1))
    {
        if (blanks > 0)
        {
            // Convert only specified number of leading '0'
            int_to_array_str[i] = ' ';
            blanks--;
        }
        i++;
    }
return_:
    return (int_to_array_str);
}

По губам не бить :roll:
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: eZ430-Chronos

Сообщение Змей-Горыныч » 29 май 2012, 15:03

Вот тебе жесткий хак :)
Выкидываем таблицу int_to_array
меняем int_to_array:
на int_to_array с аппаратной командой десятичной коррекции :)


А зачем, можно сразу спросить, до того как разбираться? В чём смысл замены?
В электронике чудес не бывает! Бывают плохие контакты!
Аватара пользователя
Змей-Горыныч
 
Сообщения: 70
Зарегистрирован: 01 мар 2005, 14:54
Откуда: г. Томск

Re: eZ430-Chronos

Сообщение Dmitry__ » 29 май 2012, 15:26

После нескольких таких переделок, программа похудеет на 40%. станет значительно шустрее, а это - меньше потребление, больше лайфа батарейке :)
Там еще надо подключить аппаратный умножитель, перевести всю арифметику на фиксир. точку. Отвалится куча библиотек.
В данном случае убралась memcpy и тупая ascii таблица перевода десятичного числа в строку. int_to_array стал быстрее в РАЗЫ, а он вызывается часто...
Правда до полного удаления memcpy еще далеко.
А вообще давно это было, все по памяти пишу :pardon:

Добавлено спустя 5 минут 44 секунды:
Вдумайся в этот прикол :shock: :)
Код: Выделить всё
    else                        // For n > 180 need to calculate string content
    {
        // Calculate digits from least to most significant number
        do
        {
            int_to_array_str[digits - 1] = n % 10 + '0';
            n /= 10;
        }
        while (--digits > 0);
    }
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: eZ430-Chronos

Сообщение Madf » 30 май 2012, 16:32

Змей-Горыныч писал(а):Поздравьте и меня - купил я часики такие. Штатную прошивку тут же забраковал - много ненужного, а чего хотелось нет. После недолгих поисков залил прошивку от Sonny, что он разработал (Обсуждение здесь http://easyelectronics.ru/otladochnyj-komplekt-ez430-chronos-ot-texas-instruments.html, сама прошивка здесь http://code.google.com/p/ez430-chronos-patched/). В ней практически все функции, что я сам собирался добавить. Особенно порадовал прогноз погоды - уже 2 дня по совету часов беру зонтик утром и они не обманывают - дождь действительно идёт. :)
Пока я только успел разобраться чем и как программировать и поотлаживал эмулятором из IAR, всё работает.
Вопрос: Может, кто-нибудь уже устранил глюк со спешащим секундомером, описанный выше в этой теме?

Как бы статья в инете не нова и описывает как пользоваться конструктором в комплексе (пример), ничего конкретного о прошивке от "Sonny" нет, только в комментах чуть-чуть есть. Нет вообще детально описания, что там было изменено и что осталось.
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Пред.След.

Вернуться в Микроконтроллеры

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

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