- Может ли узел кварцевого резонатора на 2 МГц у AtXmega256A3U потреблять 6 мА при 3,3В? Потребление при Reset 2.3мА, при 4 МГц - 8,4 мА, при изменении с 4 до 32 МГц возрастает на 15 мА что в 1,5 раза больше чем в pdf AU08(85 знак., 10.09.2013 02:26 - 02:28, AVR, полностью)
- ATmega128 программируется, читается и успешно выдаёт 49 вместо 31'250 Гц... Конденсаторы (22.6 и 22.7 пФ), кварц 16 МГц и переходные отверстия повторно пропаяны. Похоже "Изя всё"... - AU08(31.08.2013 20:06, AVR, полностью)reZident
- А есть в природе небольшие АТмеги у которых часовой таймер выполнен как отдельный блок регистров не подверженный общему аппаратному сбросу? Или, другими словами, как пересбросить AVR сохранив ход внутренних часов? Юра(10 знак., 01.09.2013 11:00,
, AVR, полностью)
- оформить счетчик в секцию .noinit ? - zeleny(01.09.2013 20:45)
- А не проще тогда к авр внешний RTC прилепить? - Mazur(01.09.2013 19:40)
- А внешний таймер - сильно влом поставить. У Maxim/Dallas они есть. С последовательным интерфейсом в том числе. 8 DIP/SOIC не сильно много места займет. - tesla(01.09.2013 19:29)
- Аппаратный сброс - reset или wdt? Если reset, то все. А если wdt, то есть кристаллы, где сработку на wdt не сброс, а прерывание можно сделать. - mazur(01.09.2013 16:23)
- Мелких вроде нет, в каких-то XMega есть - MBedder(01.09.2013 12:28)
- Это хорошо, спасибо. Уже по скайпу начал убеждать руководство менять ориентацию с Атмела на ARM)) - Юра(01.09.2013 13:18,
)
- У Atmel и АРМы есть. - tesla(01.09.2013 15:18)
- Ну, я не силен в номенклатуре Атмела. Про ARM - имел в виду STM32 - Юра(01.09.2013 15:43,
)
- :-) "Мы говорим ARM - подразумеваем STM32!" Я бы на месте ARM обиделся :-))) - SciFi(01.09.2013 16:26)
- Я битый год STMы изучал, уже вкус ощутил) А щас чувствую что все забуду к чьей-то матери, изучая AVR. - Юра(01.09.2013 16:33,
)
- А ты не забывай. Кстати, оно для мозгов полезно, програмить на разных архитектурах. Главное, решить задачу с минимальными издержками, а не сидеть на работе до 12 ночи, изучая STM. Лучше за это время подхалтурить. - tesla(01.09.2013 19:15)
- AVR хороши тем, что многого знать не надо. XMega чуть сложнее, но после прочих AVR адаптация не трудна. А STM32 - такие дебри, которые приучают новичка бездумно копипастить куски чужого кода, не вникая в то, как тот работает. - Ксения(01.09.2013 18:30)
- профессианальных МК пик24 есть часы - хи-хи(01.09.2013 14:45,
)
- Переношу асмовские наработки на си. Очередные затруднения. Есть очередь таймеров в ОЗУ. Блоки по 3 байта. Первый байт-статус. Два - счетчик. Подобные конструкции у меня часты. Также есть наработки с памятью программ. mazur(4660 знак., 12.08.2013 21:35, AVR, полностью)MBedder
- Знаете, почему я на асме остановился на этом варианте программных таймеров? Нет ничего лишнего. Хватает почти на все. В моем случае значение просто декрементируется. Если мы берем другие варианты таймеров, то нужно класть в ОЗУ значение для mazur(104 знак., 24.08.2013 23:47)fk0
- Лично я использовал отдельные таймеры на "каждый чих" только в самом первом своем проекте. В дальнейшем везде использовал один таймер, отсчитывающий время в мс (меньше 1мс интервалов времени никогда не требовалось). - rezident(25.08.2013 00:10)
- Да, меньше 1 мс программные таймеры и не требуются. Тут уже разброс в несколько мкс, даже десяток-другой, вообще роли не играют. Потому что эти временные рамки - человеко-интерфейс. mazur(509 знак., 25.08.2013 00:50 - 00:52)
- Опять эти байты. Что, в этих ваших атмелах так туго с памятью? А ёжики плакали, кололись, но продолжали его есть. SciFi(198 знак., 25.08.2013 09:50)
- Вам уже не раз указывали на зашоренность ваших взглядов в отношении программирования. Нужно учиться рассматривать задачу на разных (в т.ч. и более высоких) уровнях абстракций. rezident(621 знак., 25.08.2013 01:07)
- У меня рассуждения были такие: раз нас не интересует разброс в несколько мс (а если критично, то уже подход другой), то и пусть это будет в одном месте. Чем в каждой задаче каждый раз проверять на каждый таймер на N-ое количество тактов дольше mazur(194 знак., 25.08.2013 01:03)
- Подразумевалось, что есть некая функция получения текущего времени timer(). И всё, больше ничего нет. Программа крутится в цикле, проверяет значение timer(), и когда подойдёт -- что-то делает. И так может несколько программ (псевдо)параллельно fk0(491 знак., 25.08.2013 00:56)
- Если хватает на всё, то нафига учить Си (нет, серьёзно)? А вот эти вот "2 байта" - это та самая "преждевременная оптимизация" (на самом деле эти два слова должны звучать жутко неприлично, типа "черножопый ниггер" для наших американских партнёров). SciFi(307 знак., 24.08.2013 23:55 - 25.08.2013 00:05)
- Про указатели: Ксения(2326 знак., 24.08.2013 20:46 - 21:52)
- Нужно не else после continue выкинуть, а изменить проверку условия на противоположную и выкинуть continue, иначе до ptr++ дело не дойдёт. Или так for( cnt = 0, ptr = Sys_Timers_Queue; cnt < ST_QUANTITY; cnt++, ptr++ ) Ну и ; после for() убрать, а зануда(16 знак., 24.08.2013 23:52,
)
- Да, возможно вас что-то будет раздражать, но! Поймите, это для вас сейчас элементарщина. Для меня же все в си в новинку. Сейчас мне на асме проще реализовать многое. Но раз уж перехожу, поэтому... - mazur(24.08.2013 21:31)
- Вот результат на данный момент: mazur(24.08.2013 21:27)
- В данный момент для меня трудности во всех приведенных примерах и материалах по указателям имена чего-то там. Если на асме я просто указал начальный адрес Timers_Queue и смещение элемента скажем, EL_SIZE, статус+счетчик, 1+2=3, то в материалах и mazur(480 знак., 24.08.2013 21:13)
- А смысл? Получится тот же ассемблер, только на Си. Надобно Си использовать как ЯВУ (язык высокого уровня). Да, на первых порах сложно, SciFi(70 знак., 16.08.2013 17:09 - 17:13)
- Edit. Как указать размер элемента структуры? Если я неправильно выразился, поправьте. Скажем, есть: mazur(326 знак., 16.08.2013 15:17 - 15:32)
- 1) за u08, u16 и т.п. сжигать нужно -- используй стандартные типы данных. 2) заморачиваться и не нужно -- для размера любого типа есть sizeof(type name or variable name), размер массива можно узнать как sizeof(array)/sizeof(array[0]), смещение fk0(116 знак., 16.08.2013 16:12)
- За использование типов данных, размер которых не гарантирован нужно, перед созжением, долго-долго пытать калёным железом :) - Скрипач(16.08.2013 19:53)
- Твое возмущение понятно. Потому что на разных платформах разная разрядность. Не помню, чего именно. Но меня это сейчас не трогает, пока я пробую на AVR. Да и в лом писать каждый раз и искать, чтобы скопипастить unsigned char, unsigned int. Быстро mazur(26 знак., 16.08.2013 17:55)
- в стандарте написано что размеры short, int и long имеют не убывающую последовательность, те могут быть 8-16-32, а могут и 32-32-32. так что uint8_t, uint16_t, uint32_t и сжигай сколько хочешь. - Nikolay801_(16.08.2013 17:39)
- avrlibtypes.h: mazur(2233 знак., 16.08.2013 16:52)
- 1) и CMSIS сжечь - Vit(16.08.2013 16:16)
- Размер элемента массива Timers_Queue определяется его типом tmrs_queue. sizeof (tmrs_queue) даст вам размер элемента массива (размер структуры) в байтах. Или нужно что-то другое? - rezident(16.08.2013 15:50)
- Размер указать нельзя, но можно оставить в структуре резерв. Например, так: Ксения(179 знак., 16.08.2013 15:24 - 15:39)
- Если я правильно понял суть ваших затруднений, то обратите внимание на union. - rezident(16.08.2013 15:32, ссылка)
- ну ты спросил. уже 3 ответа на 3 разных вопроса - abivan(16.08.2013 15:28)
- где у Вас элемент размером 3 байта? для определения размеров используйте sizeof и offsetof - abivan(16.08.2013 15:26)
- эээ, а вопрос то в чем? ты объявляешь тип переменной - на основании объявленного типа под нее выделится нужный объем памяти. по большому счету неважно объявил ты ее отдельно или внутри структуры. Snaky(126 знак., 16.08.2013 15:24)
- объявление с выделением места struct {u08 st_flags; u16 st_cnt} Sys_Timers_Queue [ST_QUANTITY]; делается не в хедере Vit(1756 знак., 12.08.2013 23:12 - 23:19)
- Ага, а память под timer перед вызовом Sys_Timer_Append динамически выделять ? Для всяких там AVR и MSP - это не гуд. Да и вообще, для серьезных встраиваемых систем лучше на этапе компиляции знать, хватит ли оперативки. tesla(243 знак., 13.08.2013 00:29 - 00:44)
- Проще и быстрее проверить флаг, чем проверка на ноль. Я делал и большей разрядности таймеры. Таймерная служба только перебирае, проверяет флаг блокировки, декрементирует, и выставляет флаг таймаута, если отщелкало. Так как мне и этого хватило для mazur(86 знак., 12.08.2013 23:25)
- Непонятно зачем у вас локальная переменная volatile ? Apтём(367 знак., 12.08.2013 22:08)
- На данный момент мне нечем вас отблагодарить. Могу выложить пробное баловство. Там на ассемблере работа с моей таймерной службой, клавиатурой, дисплеем с видеопамятью (1 раз в мс в дисплей выплевывается символ, обновление экрана за 84 мс). Видео -> mazur(12.08.2013 21:48, youtube)
- Значит, вы доросли до массива структур :) Ксения(143 знак., 12.08.2013 21:43)
- чё-то не вкурил по поводу аппаратного CRC в XMEGA с флешем всё понятно, но вот с ОЗУ как? Через DMA считать, или вообще никак ?? :(( - Adept(24.08.2013 21:19, AVR, полностью)
- Как-то вопрошал о термал-пэде для ATXMEGA32A4U-MH. В даташите про это ни слова, в чертежах он обозначен, но не пронумерован как вывод, в общем не очень понятно, вообще есть он или нет :( Сегодня пришли образцы Adept(225 знак., 20.08.2013 01:06, AVR, полностью)
- OFF на тему AVR :)) кто-нибудь может объяснить с каким-таким тайным смыслом не сделана возможность автоматической загрузки всех калибровочных констант в калибровочные регистры ?? Вот смотрю на XMEGU и думаю: "какого хрена я должен заниматься Adept(239 знак., 21.08.2013 05:00 - 05:20, AVR, полностью)
- а сделают бутлодырь, который константы перегружает - начнется: "почему такая большая пауза между включением и зажиганием светодиода" :) - ыыыы(21.08.2013 12:47)
- какой нафиг бутлодырь, пару десятков байт перекинуть в регистры при загрузке потребует 20-50 тактов Сделали же аппаратную загрузку калибровочных байт для RC-генератора по сбросу. Что мешает сделать так везде?? Это было бы логично, Adept(972 знак., 21.08.2013 14:13)
- я не могу спорить аргументировано, так как последний AVR, который я держал в руках, был ATmega8515 :) но переложить калибровку на пользователя - как правило, сильно удешевляет систему. опять же точный DAC будет дороже неточного, но если ыыыы(363 знак., 21.08.2013 17:42)
- Это встроенная проверка IQ - защита от дурака :) - Ксения(21.08.2013 15:04)
- Да ладно, несколько байт прочитать-записать не проблема. Apтём(151 знак., 21.08.2013 14:38)
- А чтоб оно программировалось на Бейсике тебе не сделать? Оно во-первых не аппаратно, а скорей очень даже программно (программа отнюдь не с адреса 0 стартует). Аппаратно такие штуки сложно делать. И как верно отмечено -- не всем это надо, бывает fk0(629 знак., 21.08.2013 14:20 - 14:22)
- Можно в AVR-GCC вычислять адрес для in/out? Dingo(581 знак., 19.08.2013 10:29, AVR, полностью)
- AVR меня доконает своей простотой. Не очень в нём рюхаю, тут намечается к WatchdogTimer еще прерывания приделать. То есть интересует режим где в первый раз прерывание а во второй раз сброс. Вроде по описанию читаю - понятно как работает, а смотрю Юра(137 знак., 17.08.2013 18:23,
, AVR, полностью)
- На sourceforge есть у кого-нть экаунт? Вроде нашёл ошибку в блочной записи EEPROM через AVRdude + AVR910/109. Точка опоры(199 знак., 25.07.2013 20:44, AVR, полностью)
- Вопросы по переменным. mazur(6370 знак., 10.08.2013 21:29, AVR, полностью)Kceния
- Спасибо всем откликнувшимся. Вроде разобрался. Буду дальше копать. - mazur(11.08.2013 22:07)
- На пальцах Vit(2309 знак., 11.08.2013 09:38)
- Есть в WinAVR настройка, чтобы после ресета обнулялась вся ОЗУ? Или для этого свою функцию нужно писать? - mazur(11.08.2013 03:34)
- Как сделано в WinAVR, не знаю, но в IAR существует startup-код, который вставляется неявно перед процедурой main(). Он инициализирует области RAM константами и устанавливает указатели стеков. Часто он пишется на ассемблере. Наверняка, что-то Ксения(267 знак., 13.08.2013 15:29)
- Все глобальные (global) и статические (static) переменные обычно попадают в секцию, которая автоматически очищается (инициализируется нулями) еще до выполнения main, если только они не объявляются одновременно с инициализацией их явными rezident(694 знак., 11.08.2013 04:11 - 04:14)
- Настройки такой наверное нет, но свою функцию сразу после старта запустить можно: Apтём(441 знак., 11.08.2013 04:05)
- Интересно только, что означает это выражение Bill(51 знак., 12.08.2013 10:09)
- это ж константа, время исполнения не жрет - можно писать что угодно. ну и если вдруг захочется на 1 поменять - то все уже готово :) - ыыыы(13.08.2013 17:36)
- Я всегда пишу единообразно. Тогда не нужно ничего менять. Bill(183 знак., 13.08.2013 19:18)
- ИМХО, низковато. Вот еще вверх на полуровня абстракции - и хорошо. То есть в тексте программе должно быть то, что в Ваших комментариях: LED_OFF; LED_ON; ... А эти |= и &= пусть лежат в платформозависимом хидере. Не надо эти субпродукты на экран Юра(63 знак., 14.08.2013 00:21,
)
- И как именно вы предлагаете писать? - Bill(14.08.2013 07:10)
- Да пусть в том же хидере, где Вы указали, что #define LED_PORT PORTB и что #define RED_LED_PIN 6, - описать чуть ниже для удобной работы несколько строк вроде: #define RED_LED_ON LED_PORT |= (1 < < RED_LED_PIN). И все. Лучше сразу там описать Юра(897 знак., 14.08.2013 09:10,
)
- А что мешает к порту "привязать" еще что-то, например, Bill(246 знак., 14.08.2013 11:17)
- +1. Только косметики чуток добавляю - #define RED_LED_ON() do{ LED_PORT |= (1 < < RED_LED_PIN); }while(0) Vit(168 знак., 14.08.2013 09:21)
- do-while зачем? просто { } не достаточно? - abivan(14.08.2013 12:00)
- Нет, тогда я делаю функции inline. Не люблю пользоваться препроцессором. - Bill(14.08.2013 11:20)
- почему такая нелюбовь? препроцессор как управдом - друг программиста - Snaky(14.08.2013 11:27)
- А я наоборот, считаю inline-функции костылями и использую их только если без них не складывается - Vit(14.08.2013 11:26, ссылка)
- так и я так же поступаю. Просто я лучше оформлю манипуляцию с портом в виде inline функции, а не виде макроопределения с параметрами. Впрочем, все люди пишут исходя из своих собственных представлений и своего собственного опыта. А и представления, Bill(31 знак., 14.08.2013 11:57)
- Да, это просто две стороны одной медали. По большому счету неважно, под именем макроса или под именем инлайн-функции Вы скрываете внутренности операций. Удобная и наглядная упаковка (говорящая, но без лишних подробностей) + локальное место для Юра(20 знак., 14.08.2013 12:13,
)
- Я Вас не заставляю и не уговариваю. Просто когда пишешь для нескольких архитектур и под разные компиляторы, задалбывает запоминать различия синтаксиса. Но это полбеды, а вот когда Кейлу в зависимости от версии нужно ещё и прагму разную ставить - Vit(175 знак., 14.08.2013 12:12)
- не использовал инлайн потому как не было их у меня(не поддерживалось) да и сейчас не поддерживается в "моем" компиляторе. Вопрос для общего развития, так сказать, как использовать инлайн в разных модулях? В хедер поместить? - abivan(14.08.2013 12:05)
- Для наглядности. И чтобы представлять что туда писать нужно. Apтём(123 знак., 13.08.2013 03:10 - 03:29)
- Очень удобно, чтобы видеть, что в настоящий момент этот бит выключен. Не нужно комменты писать. - Vladimir Ljaschko(12.08.2013 10:20)
- Edit. Хедеры добавляются в другие файлы, если используются константы или переменные этого хедера? Не совсем понял правила добавления хедеров. mazur(138 знак., 10.08.2013 22:43 - 23:02)
- Прочие пожелания: Ксения(627 знак., 10.08.2013 22:48 - 22:51)
- -> - zeleny(10.08.2013 22:45, ссылка)
- Рыба для глобальных флагов Daniilvb(679 знак., 10.08.2013 22:18)
- Угу. Вроде получилось. extern если разные модули используют. static если в пределах одного модуля. Так? - mazur(10.08.2013 22:09)
- Не понял, зачем в одном файле несколько объявлений одной переменной. - Vladimir Ljaschko(10.08.2013 21:51)
- И ещё: Apтём(307 знак., 10.08.2013 21:51)
- есть правило: всегда старайся сделать минимально возможную область видимости. Если можешь вместо глобальной переменной использовать переменную, видимую только в пределах модуля - хорошо. Если можешь вместо переменной, видимой в пределах модуля, koyodza(33 знак., 10.08.2013 21:46)
- Объявляете "extern u08 st_flags;" в хидере, и включаете его во все модули проекта, которые st_flags используют. Однако заводите его "u08 st_flags;" только одном из модулей! И не в коем случае не в каждом. А вы, кажется, кучу клонов ему завели. Ксения(35 знак., 10.08.2013 21:38 - 21:40)
- Кто-нить в руках держал XMEGA-A4 MH ( в QFN) корпусе ?? Интересует что там у неё с ThermalPad ?? По даташиту (рисунку корпуса) оне вроде присутствует, но выводом не обозначен :(( Adept(391 знак., 01.08.2013 21:29, AVR, полностью)
- ATmega644PA в TQFP не коннектится с драконом по житагу студия пишет- failed to identify target. would you like to retry with external reset enabled? запаял второй камень - та же хрень . житаг исправный мега16 и 128-я шьются-отлаживаются без m16_home(32 знак., 27.07.2013 22:59, AVR, полностью)
- ларчик просто открывался. понизил питание меги до 4,3 В (впаял диод по питанию) и эта сука отозвалась. программирование/отладка по житагу - без проблем. видимо такова особенность Р серии. всем спасибо за соучастие. - m16_home(28.07.2013 23:40)
- А не может ли быть, что у этих ATmega644PA jtag в фузах отключен. Понимаю, что у фабричных экземпляторов такого быть не должно, но вдруг? Может быть через isp проверить, что у нее в фузах написано. Хотя бы не у той, что уже запаяна, а у другой. Ксения(454 знак., 28.07.2013 12:11 - 22:05)
- JTD установлен из программы в нём? Если так, то с дополнительной подачей !Reset'а от Дракона должно сработать. - Точка опоры(28.07.2013 19:47)
- У моего дракона при 3в питании "reset" не не держит уровень нуля (аналоговый ключ не то подгорел, не то просто такой был). Пришлось откусить даже резистор подтяжки. Может оно? - Гудвин(28.07.2013 00:07)
- Недавно пробовал, все работало. Может, проводок какой отпал? - Vladimir Ljaschko(27.07.2013 23:01)
- чтение калибровочных коэффициентов инструкцией LPM - есть какие траблы ?? Adept(378 знак., 24.07.2013 00:42, AVR, полностью)
- Не могу найти дырку в своём простом алгоритме. А желательно сделать это за пару часов. Суть: измерение оборотов, программно(старшее слово)-аппаратный(младшее слово) захват значения таймера . Юрий_СВ(3689 знак., 22.07.2013 15:51 - 16:52, AVR, полностью)