Добавить форум Lasers.fonarevka.ru в Избранное ×
LASERS.FONAREVKA.RU - Всё о лазерах и лазерной технике  

Вернуться   Форум Lasers.fonarevka.ru > Электроника > Микроконтроллеры
Забыли пароль? Регистрация
Темы с вашим участием Новые сообщения Сообщения за день

  • Бесплатные розыгрыши призов
  • Для гостей форума
  • Пожертвования (Donate)
На форуме ежемесячно проходят бесплатные розыгрыши призов для зарегистрированных и активно общающихся форумчан. Вы можете выиграть не только различные лазерные указки и другое лазерное оборудование, но и фонарики, зарядные устройства, аккумуляторы и другие аксессуары известных брендов, а также фонари и компоненты от известных кастомщиков и мелкосерийных производителей. Также разыгрываются и другие призы, такие как мультитулы, ножи, рюкзаки и другое снаряжение. Все проходящие розыгрыши призов являются действительно абсолютно бесплатными для самих участников, т.к. все расходы берут на себя организаторы (т.е. владельцы данного форума) и сами спонсоры, которые предоставляют тот или иной приз для наших розыгрышей призов. Форумчане не несут никаких имущественных рисков, связанных с участием в данных розыгрышах (т.е. вы ничего не оплачиваете и ничем не рискуете). Вам достаточно нажать кнопку "Принять участие" и ждать результата!

На данный момент проходит 1 розыгрыш призов.

1. Зарядное устройство XTAR XP4 Panzer + 2 аккумулятора Panasonic NCR18650B 3400 мАч

Рекомендуем Вам подписаться на тему (оптимальнее с уведомлением на ваш E-mail), где публикуется информация о новых розыгрышах призов.
Подробная информация по ссылке
Искренне рады видеть Вас на нашем независимом проекте о лазерах и лазерной технике!

Что Вам даст регистрация на нашем проекте:


- Возможность участия во всевозможных акциях, конкурсах и лотереях постоянно проходящих на форуме
- Возможность пользоваться скидками и бонусами, которые предоставляют различные популярные магазины специально для наших форумчан
- Возможность побывать в роли тестеров новейших разработок в области лазерной техники и их комплектующих
- Возможность неограниченного доступа к закрытой технической информации и некоторым интересным разделам форума

и много других приятных привилегий

Искренне надеемся, что Вам у нас понравится!
Если вы хотите финансово поддержать работу проекта LASERS.FONAREVKA.RU, будем искренне благодарны!
Даже самая малая сумма поможет дальнейшему развитию и прогрессу нашего с вами уже общего проекта.


Ответ
Просмотров в теме 114399   Ответов в теме 119   Подписчиков на тему 10   Добавили в закладки 0
Опции темы
Старый 23.02.2012, 17:17   101
chem_kot
Научный сотрудник
 
Аватар для chem_kot
 
Регистрация: 13.03.2010
Последняя активность: 15.08.2015 06:45
Адрес: Екатеринбург
Сообщений: 648
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Если разрешены прерывания, то выполнение программы "приостанавливается" - сохраняются значения регистров, производится вызов обработчика прерывания. Как только он отработал, производится возврат управления программе, т.е. в вашем случае продолжится выполнение delay_ms(8000);. Как следствие из этого и не следует долго засиживаться в обработчиках прерываний
chem_kot вне форума   Ответить с цитированием Вверх
Старый 24.02.2012, 10:43   102
us5mch
Лазеростроитель
 
Регистрация: 23.02.2012
Последняя активность: 24.02.2012 10:43
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Да это всё понятно, в прерывании я выполняю одну-две команды, возвращаюсь в delay, как из него экстренно выйти, ждать 8000ms нельзя, нужен экстренный стоп ну или запуск чего либо, а программа в задержке сидит. Как тут быть?
us5mch вне форума   Ответить с цитированием Вверх
Старый 24.02.2012, 14:53   103
ECCOsea
Новичок
 
Аватар для ECCOsea
 
Регистрация: 14.02.2010
Последняя активность: 28.04.2016 13:07
Сообщений: 614
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Вообще то вам правильно все объяснили. Если прерывание сработает, то у вас ТУТ ЖЕ программа ВЫЙДЕТ из той задержки. И начнет ВЫПОЛНЯТЬ ПРОГРАММУ ПРЕРЫВАНИЯ. А после выполнения вернется в задержку.
ECCOsea вне форума   Ответить с цитированием Вверх
Старый 24.02.2012, 15:25   104
ABA
Модератор
 
Аватар для ABA
 
Регистрация: 25.02.2010
Последняя активность: 11.09.2013 18:36
Адрес: Москва СВАО
Сообщений: 2054
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от ECCOsea :
Вообще то вам правильно все объяснили. Если прерывание сработает, то у вас ТУТ ЖЕ программа ВЫЙДЕТ из той задержки. И начнет ВЫПОЛНЯТЬ ПРОГРАММУ ПРЕРЫВАНИЯ. А после выполнения вернется в задержку.
Хотел бы добавить: пока программа на прерывания не отработает - следующая не запустится (зависнит).

PS: если уровень ниже последующей.

[Исправлено: ABA, 21.05.2012 в 22:30].
ABA вне форума   Ответить с цитированием Вверх
Старый 25.02.2012, 17:14   105
Ryazanec
Переводчик
 
Регистрация: 04.05.2010
Последняя активность: 13.03.2019 20:23
Адрес: Рязань
Сообщений: 2389
Сказал(а) спасибо: 6
Поблагодарили 7 раз(а) в 6 сообщениях
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от us5mch :
Да это всё понятно, в прерывании я выполняю одну-две команды, возвращаюсь в delay, как из него экстренно выйти, ждать 8000ms нельзя, нужен экстренный стоп ну или запуск чего либо, а программа в задержке сидит. Как тут быть?
Либо не использовать delay а писать свою функцию, на цыкле например, и в случае чего выполнять return из него, либо по таймеру проверять значение флагов, и если что то изменилось, то выполнять первостепенное дело не дожидясь завершения delay.
Ryazanec вне форума   Ответить с цитированием Вверх
Старый 25.02.2012, 18:37   106
SviMik
Администратор
 
Аватар для SviMik
 
Регистрация: 26.02.2010
Последняя активность: 18.08.2015 19:47
Адрес: Tallinn, Estonia
Сообщений: 1101
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Используй спящий режим и команду sleep. При любом прерывании он выйдет из спящего режима, и после выхода из прерывания уже не продолжит спать.
__________________
e-mail: euro@hobbi.tv
jabber: shop@hobbi.tv
Сообщение: http://forum.hobbi.tv/sendmessage.php
SviMik вне форума   Ответить с цитированием Вверх
Старый 25.02.2012, 20:06   107
Ryazanec
Переводчик
 
Регистрация: 04.05.2010
Последняя активность: 13.03.2019 20:23
Адрес: Рязань
Сообщений: 2389
Сказал(а) спасибо: 6
Поблагодарили 7 раз(а) в 6 сообщениях
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от SviMik :
Используй спящий режим и команду sleep. При любом прерывании он выйдет из спящего режима, и после выхода из прерывания уже не продолжит спать.
Человеку как я понял нужна задержка, и если что то случилось, то прекратить эту задержку.
Из спячки он выйдет при любом прерывании, а задержку нужно прекратить не в любом случае.

Спячка идеальна, если нужно ждать какое то событие по прерыванию, тогда в обработчике прерывания можно вообще ничего не делать, просто будить контроллер.
Ryazanec вне форума   Ответить с цитированием Вверх
Старый 21.05.2012, 20:52   108
mib1
Лазеростроитель
 
Регистрация: 21.05.2012
Последняя активность: 23.05.2012 02:02
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Радость

Доброго дня, опыта слишком мало, Си уже давненько не видел, прошу помощи в этом коде, вырезал из текста ...

Код:
 typedef unsigned char byte;
 struct lcdSymbol {
    byte val;
    byte row;
    byte line;
    byte nbValues;
    byte maxLen;
    byte* caption; // 0 if unused; e.g. "ID "
    byte** line1Values; // e.g. "Full", "1/2", "1/4"
    byte** line2Values; // 0 if unused
 };

 struct lcdSymbol** lcdSymbols = txSymbols
 struct lcdSymbol* rxSymbols[ ] = {&groupSym, &deviceSym, &powerRxSym, 
    &blSym, &idSym, &modeSym };
  // и дальше есть строки
 main {
    prevVal = lcdSymbols[cursorPos]->val;
    currVal = (prevVal+1) % (lcdSymbols[cursorPos]->nbValues);
 }
1) не пойму
byte*
byte** ... что означают звздочки в описании структуры lcdSymbol

2) как используется lcdSymbols и уже две "**" сразу
mib1 вне форума   Ответить с цитированием Вверх
Старый 21.05.2012, 22:30   109
Ryazanec
Переводчик
 
Регистрация: 04.05.2010
Последняя активность: 13.03.2019 20:23
Адрес: Рязань
Сообщений: 2389
Сказал(а) спасибо: 6
Поблагодарили 7 раз(а) в 6 сообщениях
По умолчанию

это функция такая запись в ней то что со звездочками это указатель на позицию или номер символа. сам возился когда строку в последовательность символов превращал.
Ryazanec вне форума   Ответить с цитированием Вверх
Старый 22.05.2012, 12:03   110
AVSel
Глобальный модератор
 
Аватар для AVSel
 
Регистрация: 15.02.2010
Последняя активность: 26.05.2019 19:08
Адрес: Москва
Сообщений: 3138
Сказал(а) спасибо: 79
Поблагодарили 107 раз(а) в 76 сообщениях
По умолчанию

byte* - указатель на байт (физически - адрес одиночного байта в памяти, или адрес первого элемента массива байт)
byte** - указатель на указатель на байт (физически - адрес указателя на байт в памяти, или адрес первого указателя массива указателей на байт)
__________________
Чем бы дитя не тешилось - лишь бы не лазером...
AVSel вне форума   Ответить с цитированием Вверх
Старый 23.05.2012, 02:02   111
mib1
Лазеростроитель
 
Регистрация: 21.05.2012
Последняя активность: 23.05.2012 02:02
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Спасибо Вам за подсказки. Полистал Кернигана и Ритчи, много полезного, но как-то скомканно, без примеров (....
вот это почитал ...
Указатели на структуры
Многоуровневая адресация

теперь код понимаю следующим образом
Код:
typedef unsigned char byte;
struct lcdSymbol {
    byte val;
    byte row;
    byte line;
    byte nbValues;
    byte maxLen;
    byte* caption; // 0 if unused; e.g. "ID "
    byte** line1Values; // e.g. "Full", "1/2", "1/4"
    byte** line2Values; // 0 if unused
 };

static byte* blValues1[]   = { lampOff1, lampOn1 };	// массив указателей
static byte* blValues2[]   = { lampOff2, lampOn2 };	// ссылающихся на массивы "символов"
static byte* modeValues[]  = { codeTx, codeRx };	// возможных режимов

struct lcdSymbol powerASym = { 0, 1, 1, 8, 4, codeA, powerValues, 0 }; // codeA - указатель на первый символ в массиве
struct lcdSymbol powerBSym = { 0, 1, 2, 8, 4, codeB, powerValues, 0 }; // создаём структуры с типом lcdSymbol
struct lcdSymbol powerCSym = { 0, 1, 3, 8, 4, codeC, powerValues, 0 }; // powerValues - двойной указатель на массив указателей, разных режимов

	// массив указателей на адреса структур, 2 режима работы с разным набором структур
struct lcdSymbol* txSymbols[] = {&powerASym, &powerBSym, &powerCSym, &powerDSym, &blSym, &idSym, &modeSym};
struct lcdSymbol* rxSymbols[] = {&groupSym, &deviceSym, &powerRxSym, &blSym, &idSym, &modeSym };

struct lcdSymbol** lcdSymbols = txSymbols; // двойной указатель **lcdSymbols на первый указатель  в массиве txSymbols
					   // а тот в свою очередь на конкретную структуру 

  // и дальше есть строки
 main {
   .
   . 
   .
    prevVal = lcdSymbols[cursorPos]->val;
    currVal = (prevVal+1) % (lcdSymbols[cursorPos]->nbValues);
 }
если cursorPos = 0, то ссылка на первый адрес структуры &powerASym, элемент val
Вроде понял))
mib1 вне форума   Ответить с цитированием Вверх
Старый 09.06.2012, 01:46   112
Lum1noFor
Модератор
 
Регистрация: 14.02.2010
Последняя активность: 25.11.2018 13:03
Адрес: Москва
Сообщений: 874
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 7 сообщениях
По умолчанию

Ребят, расскажите, пожалуйста, как использовать АЦП, что такое разрядность, и, хотелось бы, пример. Что-то совсем не вкуриваю. И какое значение возвращает функция ADC_Read? Спасибо!
__________________
Внимание! Это сообщение сгенерировано автоматически, отвечать на него не нужно.

[Исправлено: Lum1noFor, 09.06.2012 в 02:46].
Lum1noFor вне форума   Ответить с цитированием Вверх
Старый 09.06.2012, 08:42   113
Ryazanec
Переводчик
 
Регистрация: 04.05.2010
Последняя активность: 13.03.2019 20:23
Адрес: Рязань
Сообщений: 2389
Сказал(а) спасибо: 6
Поблагодарили 7 раз(а) в 6 сообщениях
По умолчанию

Разрядность- точность его. допустим он 10 разрядный тогда эта функция возвращает значения от 0 до 1024. расчитывается оно относительно опорного напряжения. допустим опорное напряжение формируется внутренним источником. допустим это 2.55 вольта тогда мк делит это значение на разрядность - 2.56/1024=0,0025 вольта на 1 значение, иными словами АЦП может измерить напряжение с точностью в 0,0025 вольта. При замере напряжения мк сравнивает их и на выходе выдает значение . нужно учитывать что разрядность так же зависит от скорости ацп. чем медленнее тем точнее это в даташите есть.

Расчитывается напряжение так:
при источнике опорного напряжения 2,56 вольта имеем 1 значение в 0,0025 вольта.
Если входное напряжение у нас выше чем 2,56 то его нужно поделить резистивным делителем, что бы попасть в пределв 0-2,56, а при расчетах еще и умножать на коэффициент деления резистивного делителя. допустим мы меряем напряжение до 12 вольт, тогда резистивным делителем можно поделить его напрмиер на 5 - получим максимум 2,4 вольта.

в итоге расчет напряжения будет такой.

0,0025 * [значение которое вернула функция]*5

допустим получили на выходе функции 524, тогда
0,0025*524=1,31 вольта это на входе АЦП а 1,31*5=6,55 это напряжение до резистивного делителя.

[Исправлено: Ryazanec, 09.06.2012 в 09:35].
Ryazanec вне форума   Ответить с цитированием Вверх
Старый 09.06.2012, 13:35   114
Lum1noFor
Модератор
 
Регистрация: 14.02.2010
Последняя активность: 25.11.2018 13:03
Адрес: Москва
Сообщений: 874
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 7 сообщениях
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от Ryazanec :
Разрядность- точность его. допустим он 10 разрядный тогда эта функция возвращает значения от 0 до 1024. расчитывается оно относительно опорного напряжения. допустим опорное напряжение формируется внутренним источником. допустим это 2.55 вольта тогда мк делит это значение на разрядность - 2.56/1024=0,0025 вольта на 1 значение, иными словами АЦП может измерить напряжение с точностью в 0,0025 вольта. При замере напряжения мк сравнивает их и на выходе выдает значение . нужно учитывать что разрядность так же зависит от скорости ацп. чем медленнее тем точнее это в даташите есть.

Расчитывается напряжение так:
при источнике опорного напряжения 2,56 вольта имеем 1 значение в 0,0025 вольта.
Если входное напряжение у нас выше чем 2,56 то его нужно поделить резистивным делителем, что бы попасть в пределв 0-2,56, а при расчетах еще и умножать на коэффициент деления резистивного делителя. допустим мы меряем напряжение до 12 вольт, тогда резистивным делителем можно поделить его напрмиер на 5 - получим максимум 2,4 вольта.

в итоге расчет напряжения будет такой.

0,0025 * [значение которое вернула функция]*5

допустим получили на выходе функции 524, тогда
0,0025*524=1,31 вольта это на входе АЦП а 1,31*5=6,55 это напряжение до резистивного делителя.

Спасибо, с этим понятно. Буду пробовать!

[Исправлено: Lum1noFor, 09.06.2012 в 13:40].
Lum1noFor вне форума   Ответить с цитированием Вверх
Старый 09.06.2012, 17:45   115
INFERION
Старший модератор
 
Аватар для INFERION
 
Регистрация: 15.02.2010
Адрес: Украина, Полтава
Сообщений: 1498
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
По умолчанию

На первый взгляд всё просто, но у АЦП столько нюансов, что точность можно поднять на порядок, если подходить к этому делу с умом. Вообще вики в помощь: АЦП. Полезно ещё почитать за оверсемплинг. Чем выше скорость АЦП, тем он точнее (при равной разрядности), до поры до времени. Но чтоб пользоваться этим - недостаточно в лоб считывать данные, нужно проводить коррекцию, усреднять, подмешивать шум в измеряемый сигнал и т.п. К примеру у AVR (АЦП последовательного приближения) у меня более менее нормально считать в лоб получается на скорости всего лишь 9 килосемплов, это если пользуешься мультиплексором (каждый раз меряешь что-то новое). На более высоких скоростях устройство выборки-хранения не успевает полностью перезарядится до значения резко изменившегося уровня сигнала. Поведение похожее на RC-фильтр, этот эффект нужно учитывать и писать дополнительные корректирующие алгоритмы. Он так же и на АЧХ влияет, в некоторых задачах это может быть критичным (крутит амплитуду и фазу в зависимости от частоты). На более высоких скоростях растёт шум, да, но усреднение позволит получать разрядность и выше 10-ти бит, а со снижением частоты измеряемого сигнала - разрядность будет продолжать расти. Тут шум наоборот помогает. Особенно это актуально для сигма-дельта АЦП, они изначально за счёт шума квантования и работают...
В общем запас по частоте дискретизации позволяет получить более годный (мягкий) для многих задач сигнал. И на резкие изменения можно среагировать быстрее, и более точно померить на более длительных периодах, причём одновременно. Алиасинг тоже существенно меньше (из-за него желательно входной сигнал фильтровать, хотя бы простым RC-фильтром).

[Исправлено: INFERION, 09.06.2012 в 17:56].
INFERION вне форума   Ответить с цитированием Вверх
Старый 09.06.2012, 18:43   116
Ryazanec
Переводчик
 
Регистрация: 04.05.2010
Последняя активность: 13.03.2019 20:23
Адрес: Рязань
Сообщений: 2389
Сказал(а) спасибо: 6
Поблагодарили 7 раз(а) в 6 сообщениях
По умолчанию

Пришел Инф и распугал всех новичков
Ryazanec вне форума   Ответить с цитированием Вверх
Старый 09.06.2012, 19:18   117
INFERION
Старший модератор
 
Аватар для INFERION
 
Регистрация: 15.02.2010
Адрес: Украина, Полтава
Сообщений: 1498
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
По умолчанию

А что тут страшного? Я ведь не говорю что без всех этих моментов АЦП юзать невозможно? Возможно, просто тогда круг задач, или качество их выполнения, которые с его помощью можно решить, сужается. А новичку и не надо относится к этому настолько серьёзно, задачи у него, как правило, достаточно примитивные. Это я просто забегая на перёд описал некоторые моменты, которые в будущем могут пригодится, как пригодились мне...

Раньше я, к примеру, не верил что на AVR можно собрать достаточно качественный преобразователь, чтоб питать им такие нежные вещи как ЛД. А сейчас собираюсь собрать бек-буст на 4 ампера, на тиньке. И рассчитываю получить довольно высокую скорость реакции на помехи и довольно высокую точность установки заданного режима. Просто используя передискретизацию, коррекцию АЧХ, и сигма-дельта модуляцию слишком грубой ШИМ...
INFERION вне форума   Ответить с цитированием Вверх
Старый 09.06.2012, 19:38   118
SviMik
Администратор
 
Аватар для SviMik
 
Регистрация: 26.02.2010
Последняя активность: 18.08.2015 19:47
Адрес: Tallinn, Estonia
Сообщений: 1101
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Инф уже сам как ходячая википедия (если кто обратил внимание на ссылки на википедию в тексте).
SviMik вне форума   Ответить с цитированием Вверх
Старый 09.06.2012, 23:46   119
ABA
Модератор
 
Аватар для ABA
 
Регистрация: 25.02.2010
Последняя активность: 11.09.2013 18:36
Адрес: Москва СВАО
Сообщений: 2054
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от INFERION :
........ А сейчас собираюсь собрать бек-буст на 4 ампера, на тиньке. ...
Желаю тебе удачи с драйвером!
ABA вне форума   Ответить с цитированием Вверх
Старый 25.08.2015, 12:41   120
AVSel
Глобальный модератор
 
Аватар для AVSel
 
Регистрация: 15.02.2010
Последняя активность: 26.05.2019 19:08
Адрес: Москва
Сообщений: 3138
Сказал(а) спасибо: 79
Поблагодарили 107 раз(а) в 76 сообщениях
По умолчанию Re: Основы программирования контроллеров AVR на Си

Эту тему бы в "важные" поднять...
AVSel вне форума   Ответить с цитированием Вверх
Ответ


Здесь присутствуют: 2 (пользователей: 0 , гостей: 2)
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 01:56. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, vBulletin Solutions, Inc. Перевод: zCarot
Template-Modifications by TMS

Copyright ©2010 - 2015, Hobbi.TV & FONAREVKA.RU.

Если Вы не являетесь правообладателем того или иного контента размещенного на форуме (фото/видео/текст),
то при любом использовании материалов форума необходимо получить письменное разрешение
на использование того или иного материала у администрации форума.

При использовании материалов форума ссылка на Lasers.fonarevka.ru обязательна.

Украинский портАл CATALOG.METKA.RU
Каталог webplus.info Каталог сайтов Zabor.com