Поздравляем SciFi с днём рождения!
 
 
- Как в AtmelStudio 6.0 обновить компилятор, не обновляя все остальное? - LightElf(19.09.2013 21:03 - 21:53, AVR, полностью)
	
- Не могу найти где в документации на ATMega указано какой ток можно брать наружу с ноги AREF соединенной с внутренним источником опорного напряжения 2.56в. - Petrovich(18.09.2013 14:06,  , AVR, полностью) , AVR, полностью)
		- В разделе "ADC Voltage Reference": Note that Vref is a high impedant source, and only a capacitive load should be connected in a system. - Точка опоры(18.09.2013 14:16)
			
				- Вход ОУ не потянет? - Petrovich(18.09.2013 14:29,  ) )
						- Думаю - да, но лучше с входным током поменьше взять. Кстати, можете и чуток поисследовать, взять резисторы (скажем 3.3М, 1.0М, 330к и 100к), замерить и нам всем сообщить. - Точка опоры(18.09.2013 15:12)
- Вход ОУ потянет. Для подстраховки можно взять JFET или MOSFET ОУ. Хотя для такой точности, как у встроенного REF, входные токи вреда не принесут. К тому же, не очевидно, что лучше - разориться на ОУ или внешний опорник, хотя бы TL431. - Лeoнид Ивaнoвич(18.09.2013 14:34)
							
						
 
 
- AREF заявлен только как вход внешнего опорного напряжения. - Лeoнид Ивaнoвич(18.09.2013 14:15)
 
- Подскажите, есть ли у AVR контроллер с возможностью обновления прошивки через USB или SDcard? Чтоб самому бутлодер не ваять - Ljutik1(17.09.2013 13:55, AVR, полностью)
	
- до чего же бестолковая нынче документация пошла :((( Касательно XMEG, например, читаем, что есть регистры, защищаемые от модификации (разблокировка происходит на 4 такта, записью сигнатуры в спец.регистр CCP), но нифига, нигде нет списка таких  Adept(1161 знак., 11.09.2013 01:52 - 01:57, AVR, полностью)
	
		- Cпец.регистр CCP ничего не разблокирует, а, наоборот, блокирует I/O-регистры на 4 такта! И это надо делать только перед записью в CLK, чтобы в этот момент не сглючило. Ну, и может быть еще перед записью в WDT и RST. - Ксения(11.09.2013 02:19 - 02:25)
			
		
- Может вы мне не поверите, но что называется "на зеркало пеняете". Или нет?  Apтём(1316 знак., 11.09.2013 02:20 - 02:22)
			
				- "..ну рожи-то у нас у всех - "будь здоров" (С) :))  про запись регистров через CPP - нихрена нигде не указано,  Adept(501 знак., 11.09.2013 02:34)
					
						- Про "флаги прерываний установленные вручную" хотелось бы послушать поподробнее. Попкорном запасся :)) - MBedder(11.09.2013 03:17)
							
								- Бывает оно таки надо. Интересует не периферия, от которой прерывание, а собственно лишнее прерывание. Например, когда хочется продолжить обработку в несколько более низкоприоритетном прерывании начав на с высокоприоритетного. Просто сменить  fk0(30 знак., 11.09.2013 08:44)
									
								
- "Слушать" и "попкорн" тут не поможет. Нужно РАБОТАТЬ, а именно - осваивать современные инстрУменты (IDE). В частности симуляторы от фирмы Atmel. AVRStudio либо Atmelstudio. - Apтём(11.09.2013 03:39)
- чё там слушать-то? крутим симулятор, когда надо ставим флаги, чтобы проверить, скажем корректность отработки хэндлеров, так вот это падларедиска (студия) как-то не на все флаги реагировала. Сейчас уже и не припомню, как было дело, но было  Adept(96 знак., 11.09.2013 03:26)
 
- Ну рожи-то да... :).  Apтём(1049 знак., 11.09.2013 02:55)
- Вы конечно извините, здесь это офф, но мне приходилось читать мануалы и на 3000 страниц (суммарно) по DSP процессорам TI и ADI, да, долго и муторно, но иначе не понять ничего. - Alex68(11.09.2013 02:37)
							
						
 
 
- totem-pole - двухтактный выход, push-pull иначе. - Alex68(11.09.2013 02:15)
			
		
 
- Может ли узел кварцевого резонатора на 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, полностью) , 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, полностью) , 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)