Jump to content

    

vvppvv

Участник
  • Content Count

    15
  • Joined

  • Last visited

Community Reputation

0 Обычный

About vvppvv

  • Rank
    Участник
  • Birthday 10/18/1967

Контакты

  • Сайт
    Array
  • ICQ
    Array
  1. А что не так с частотой 8МГц? Для Тини24А норма 20МГц при +5 Вольтах, так что не вижу повода для треволнений. Возможно, при -70 она на 20МГц не заработает. А при 8 МГц работает. Но при -70 автомобиль и не поедет, никакой. На УРАЛы производитель (Миасс) установил порог -45, и "кратковременно до -50". Так что с процессором все нормально, Атмелы в мороз работают ничуть не хуже Майкрочипов. А вот с электролитическими конденсаторами получилась путаница, думали, что они -55...+105, а оказались -25...+105 :) Запаяли тантал, все, проблема ушла. Блок пашет даже в сухом льду.
  2. Господа, спасибо всем! Ответившим, и принявшим участие в обсуждении. Докладываю - проблема была в электролитических конденсаторах, которые при -40 просто не хотели гонять электроны в своем замерзшем киселе. Тантал - наше все! И Атмел на высоте - в сухом льде весь АЦП, весь ЕЕПРОМ -все работает. При -70 градусов!
  3. Беда в том, что тинька чудит на морозе. Как тинька может померить встроеный датчик температуры, если у тиньки снесло крышу? :) Спасибо! Схема интересная. Жаль, что не подойдет, т.к. при выключении зажигания со схемы полностью снимается напряжение, а работать она (схема) должна практически сразу при подаче набортных +24В.
  4. Блок остынет, т.е. будет находится в машине, под капотом. Пенопласт самотризирует понижение температуры, но ненадолго. Если машина сутки простоит на морозе, пенопласт не спасет.
  5. Увы! :( Подогревы хороши для единичных спец. приборчиков, а тут серийное производство, блоки для автомобилей. Которые (блоки) должны быть недорогими и надежными. И хоть какой блок будет с вечера теплый, наутро при -45 он весь насквозь будет -45.
  6. Добрый день! Есть некая железка на базе ATTiny24A (SOIC14). Используются каналы АЦП, чтение из ЕЕПРОМ, то да се. С наступлением холодов при включении начали наблюдаться странности в работе. В лабораторных условиях, с использованием сухого льда, картина повторилась. По даташиту гарантируется до -40, видно, как раз в предел и уперлось. Частота внутренняя 8Мгц. SUT 64мс, BOD Level >4 Вольт. Потрогаешь микросхему пальцем - о! Заработала... Подскажите пожалуйста, что и где почитать о работе AVR при морозах? Пока ничего не нашел, а сроки поджимают, надо бы какую-нибудь заплатку срочно придумать. А в перспективе, если все так плохо - на что перейти? Что-то все автомотивные камешки в плюсе хорошо, до +150, а вот на морозе везде -40. Для Казахстана, Сибири - не айс.. :-(( Спасибо
  7. Для бутлоадера на AVR ATMega128 я когда-то использовал CRC-32, табличный метод. По таблице у меня сначала проверялась CRC-32 самого бутлоадера, далее, если не были нажаты кнопки, то проверяется рабочая программа тоже по CRC-32. Контрольную сумму самого бутлоадера считает сам Xlink, и сам кладет ее в соответствующий сегмент "CHECKSUM" из 4х байт. Надо только указать его в xcl-файле: //------ Code (FLASH) segments -------------------------- -Z(CODE)INTVEC=1E000-1E08B -Z(CODE)CODE=1E000-1FFF9 -Z(CODE)TINY_F,TINY_ID,NEAR_F,NEAR_ID,INITTAB,DIFUNCT,SWITCH,HUGE_F=1E000-1FFF9 -Z(CODE)CHECKSUM=1FFFA-1FFFD -Z(FARCODE)FAR_F=0-1FEF9 Способ подсмотрен в каком-то аппноте, от IAR (уже не помню, в каком, но точно не для AVR :)) Сама проверка очень проста: unsigned long lCrc32Table [256] = { 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, 0x2608edb8, ..., ..., ..., 0xb1f740b4 }; //------------------------------------------------------------------------ // Проверить CRC-32 самого BootLoader'а { unsigned long ltemp = 0; unsigned int ilenth = 0x1FFFA - 0x1E000; unsigned char __hugeflash* pcHFpoint = (unsigned char __hugeflash*)0x1E000; while (ilenth--) ltemp = lCrc32Table [(ltemp >> 24) ^ *pcHFpoint++] ^ (ltemp << 8); if (ltemp != *(unsigned long __hugeflash*)0x1FFFA) { MCUCR = (1<<SE)+(1<<SM1); // если CRC-32 несовпадает, __sleep(); // уснуть в полный PowerDown } }
  8. Сделать функцию, например: #pragma inline = forced char cGetReg_R8 (void) {asm("mov r16, r8");} Использовать как обычно, например, вывести R8 в порт А: 212 PORTA = cGetReg_R8(); \ 00000000 2D08 mov r16, r8 \ 00000002 BB0B OUT 0x1B, R16 Просто и лаконично. Хотя компилятор вполне обоснованно ругается, что в функции отсутствует Return :-)) Если нужен именно 14 регистр, то заменить в функции R8 на R14 ;)
  9. Ответ - подцепить нелегко. Но в данном конкретном месте проекта вопрос про "любые другие функции" не стоял. Там была задача достичь максимального быстродействия этого, конкретного, специфического куска кода. Грубо говоря, написать его на ассемблере. Что позволило с меги128 вытянуть пол-мегабитный проприетарный протокол, вместо 128кБит, когда "обеспечивается универсальность и хорошая переносимость кода". Разумеется. Это и делается в 99% случаев. Да, именно так. Причем сохранять будет в памяти, используя обычный "сишный" стек. А мой "ручной" пролог-эпилог использует команды MOVW, копирования слов (пар регистров), это самый быстрый способ сохранения-восстановления регистров в системе команд AVR. А это зачем? :) Рав нужен только для прерываний. Вот, выдержка из мануала: "This keyword prevents saving used registers in interrupt functions. Interrupt functions preserve the contents of all used processor registers at function entrance and restore them at exit. However, for some very special applications, it can be desirable to prevent the registers from being saved at function entrance. This can be accomplished by the use of the keyword __raw." Вот у меня как раз пример был из "very special applications". Совершенно верно! Что я и сделал. Не пойдет. Не бывает универсальных правильных решений. Тогда мне бы пришлось семафорить, развешивать флажки, статусы и пр. В итоге - раздутость кода и потеря производительности и потребительских свойств проектируемой железки.
  10. Тупо можно на этапе изучения контроллера, системы команд и написания первых "Hello, World". Дальше "тупо" - не надо. У меня перед объявлением программ прерываний стоИт __raw. Это совсем не просто так. Оптимизатор IAR спотыкается о косвенный взов, и начинает, как Вы говорите, "тупо" сохранять все регистры. Поэтому были составлены специальные inline-функции interrupt_entry (); и interrupt_exit (); Просто я выдрал пример из конкретного проекта, и немного его "не очистил" от лишнего, не относящегося к теме ;))
  11. Ну, во-первых, корректней использовать не косвенный переход, а косвенный вызов, раз уж мы о функциях ;) Во-вторых, IAR можно настроить под свои, сугубо специфические заскоки. Вот, навскидку, мой пример, косвенный вызов каких-то функций (их может быть хоть сотня), указатель на которые лежит в регистрах R15:R14 (сделано для быстроты): __no_init __regvar void (* volatile Ufunc_ptr)(void) @14; Использование 3х разных прерываний для вызова этих функций (а какая будет вызвана функция, т.е. какой загружен указатель, зависит от предыдущего контекста): __interrupt __raw void irqOverflowTimer2 (void) { interrupt_entry (); TCCR2=0; // остановить Timer2 (* Ufunc_ptr)(); interrupt_exit (); } __interrupt __raw void irqUSART0_UDRE (void) { interrupt_entry (); (* Ufunc_ptr)(); interrupt_exit (); } __interrupt __raw void irqUSART0_RXC (void) { interrupt_entry (); (* Ufunc_ptr)(); interrupt_exit (); } сам вызов (* Ufunc_ptr)() очень изящен, если он из регистров: 1436 (* Ufunc_ptr)(); \ 0000000E 01F7 MOVW R31:R30, R15:R14 \ 00000010 9509 ICALL Как-то так.. :))
  12. Ну и пусть исполняют код из Flash. Можно использовать указатель на функцию (-ции), хранить сами указатели в ОЗУ и/или регистрах, и играть-тусовать их в рантайме, насколько фантазии хватит.
  13. Кноуны иссьюсы в АВР студии: Timer/Counters 16-bit Timer/Counters on all devices have several problems with PWM, prescaler and output compare. Output compare registers are not buffered properly.
  14. Собираемся соорудить железку, обменивающуюся пакетами по 130 байт в обе стороны (RS232). Если работать с драйверами USBxpress от силабса, система Вынь2К - ХР, какую _реальную_ пропускную способность можно получить? Интересует долговременный (дни, недели) полный дуплекс. На железке АТМега128 от Атмела, с выгребанием-передачей данных проблем нет. Еще - нет ли у кого доброго излечивающего совета по HHD USB monitor 2.37?