Jump to content
SergeyKa

Задачка про микроконтроллер.

Recommended Posts

и так имеется микроконтроллер Atmega8 с тактовой частотой внешнего кварцевого резонатора 16 МГц

допустим мы имеем переменную PLUS с бесконечным возможным числом.

while(1) { plus++; }

какое будет значение переменной PLUS за 1 микросекунду.

Share this post


Link to post
Share on other sites

Итак, операция выполняется МК за один такт, соответственно, время такта равно 1/16000000=0,0000000625, то есть, PLUS увеличится на 1 за такое время. За микросекунду PLUS увеличится на 16

Share this post


Link to post
Share on other sites

Это зависит, как компилятор переведет С в ассемблер мк. А там считаем команды и за сколько тактов выполняется каждая. И чтобы прерывания не мешали.

@Дмитрий Кузьмичёв это если без цикла 16 команд inc поставить. А так - еще jmp как минимум, т.е. 8

А если не просто jmp, а перед ним сравнить что-то с 1, тогда еще меньше.


Настоящему коту и в декабре март!

Share this post


Link to post
Share on other sites

Металл-композит как альтернатива ферриту: дроссели Panasonic семейства ETQP

Современные электронные устройства требуют все более компактных и эффективных компонентов. Новые металл-композитные дроссели обладают рядом преимуществ перед дросселями с ферритовым сердечником. Они не имеют ярко выраженного насыщения, обладают отличными частотными свойствами и способны работать при температурах до 150°C и выше. Все это делает их альтернативой стандартным дросселям с ферритовым сердечником в широком спектре автомобильных и промышленных приложений.

Подробнее

12 минуты назад, KomSoft сказал:

как компилятор переведет С в ассемблер мк.

это еще больше это зависит от типа переменной

 

Share this post


Link to post
Share on other sites
17 минут назад, KomSoft сказал:

Это зависит, как компилятор переведет С в ассемблер мк. А там считаем команды и за сколько тактов выполняется каждая. И чтобы прерывания не мешали.

@Дмитрий Кузьмичёв это если без цикла 16 команд inc поставить. А так - еще jmp как минимум, т.е. 8

А если не просто jmp, а перед ним сравнить что-то с 1, тогда еще меньше.

jmp это безусловный переход

Share this post


Link to post
Share on other sites
                     

Новые литиевые ХИТы Fanso работают даже при +150ºС!

Когда приходится учитывать работу в экстремальных условиях, к выбору электронных компонентов подходишь с особой тщательностью. Высокие температуры, большие перепады давления, труднодоступность – все это требует специальной продукции. Склад КОМПЭЛ пополнился новыми литиевыми ХИТами Fanso, стабильно работающими даже при температуре до 150 ºС. Батарейки имеют номинальное напряжение 3,6 В, обладают ёмкостью от 700 до 14000 мАч, работоспособны в широком температурном диапазоне -20…150ºС и имеют низкий саморазряд (не более 3% в год в нормальных условиях хранения).

Подробнее о высокотемпературной линейке

6 hours ago, Дмитрий Кузьмичёв said:

jmp это безусловный переход

Вот я и говорю, что от компилятора. "While (1) " это тоже бесконечный цикл. Зачем умному компилятору ставить jmp с условием, которого нет?

И @IMXO прав. Если plus четырехбайтовая, то может за 1мкс (16 тактов) и ни разу не успеть


Настоящему коту и в декабре март!

Share this post


Link to post
Share on other sites

Сделайте на таймере прерывание на 1 млсек и посмотрите сколько получилось с переменными разного типа

Share this post


Link to post
Share on other sites

А еще зависит это того, где эта переменная хранится: в регистре, озу или eeprom. :D


Настоящему коту и в декабре март!

Share this post


Link to post
Share on other sites
8 часов назад, SergeyKa сказал:

и так имеется микроконтроллер Atmega8 с тактовой частотой внешнего кварцевого резонатора 16 МГц

допустим мы имеем переменную PLUS с бесконечным возможным числом.


while(1) { plus++; }

какое будет значение переменной PLUS за 1 микросекунду.

Компилируете программу с приведенным кодом и считаете В ДИЗАСМЕ количество машинных циклов, заглядывая в даташит на предмет количества циклов на команду АСМа.

Но у меня смутные подозрения на ПРИЧИНУ Вашего вопроса...

Зачем сие знание Вам? Что Вы хотите тем самым реализовать?

Edited by my504

Share this post


Link to post
Share on other sites

Доп вопрос на экзамене.


Настоящему коту и в декабре март!

Share this post


Link to post
Share on other sites
2 часа назад, my504 сказал:

Но у меня смутные подозрения на ПРИЧИНУ Вашего вопроса...

я вспомнил как бы передачу кода от магнитной ленты до моего старенького zx-spectrum и вот когда я изучал этот код, там понятно были длинные импульсы единицы, короткие импульсы нули. Но что самое главное. Микросхема (специальная) которая считывала всё это, могла работать в разных режимах скорости. Т.е. понятное дело что двигатель магнитофона не мог выдать ровно ту скорость ленты которая нужна была, и эта скорость просто напросто плавала. Но сбой это в считывании программы не возникало. Сейчас создаю подобие устройство (ну как бы протокол передачи данных), и вот нужно что бы программа могла считывать данные согласно скорости устройства. Там уже плавающая не должна быть, но скорость разная. Т.е. например. на линии появился импульс и он длительностью как 8 бит информации, этот импульс был по времени 8 микросекунд. Значит на 1 бит уходит 1 микросекунда. Зная эту информацию можно осуществить безошибочное сканирование остальных битов (т.е. как бы подстроить тактовую частоту. А вот допустим пусть импульс 8,1 микросекунд, тут уже 1,0125 микросекунд. И вот у меня и встает задача. Как это реализовать на микроконтроллере. Что бы он сканировал пакет (который и служит для определения скорости передачи) а затем выбрал оптимальную скорость тактирования битов причем эта скорость должна варьироваться от 7,8 до 8,2 микросекунд. 

Придумал алгоритм такой. В Меге. Минимальная пауза это 1 микросекунда. Но команды он выполняет шустрее. Т.е. за время пока появляется этот 8 битный пакет определяющий скорость, врубается обычный счетчик, который считает. 1..2..3..4..5..6.. и т.д. как только пакет прошел. мы определяем число. зная это число можно разделить его на 8 и на 2. так как должен же быть тактовый импульс это пол бита 1 пол бита 0. Вот и получаем число. Которое дальше можно заставить считать микроконтроллер что бы отмерить нужную скорость. Для 8 микросекунд, это будет допустим число 0,5 микросекунд единица (число 8) и 0,5 микросекунд ноль (число 8) - при условии если за одну микросекунду он досчитал до 16.

Но задача видимо туго осуществимая.

Edited by SergeyKa

Share this post


Link to post
Share on other sites

А почему туго осуществимая? В этом месте делайте вставку на асме типа: прочитать регистр, что-то там, задержка (цикл или набор nop'ов) , снова прочитать. И вы отвяжетесь от компилятора и точно будете знать время выполнения. 


Настоящему коту и в декабре март!

Share this post


Link to post
Share on other sites
2 часа назад, SergeyKa сказал:

там понятно были длинные импульсы единицы, короткие импульсы нули

Привераете, там, был и есть манчейстер. Ноль и единица кодируются переходом уровня.

Он самосинхронизирующийся! Если скорость плавает плавно( во как), то оно не страшно, а если рывок в пределах одного бита( детонация), то ППЦ.

 

Edited by o_l_e_g

Errare humanum est. Коли людЯм позволено, что же о нас то говорить!
 

Share this post


Link to post
Share on other sites
18 часов назад, KomSoft сказал:

А почему туго осуществимая? В этом месте делайте вставку на асме типа: прочитать регистр, что-то там, задержка (цикл или набор nop'ов) , снова прочитать. И вы отвяжетесь от компилятора и точно будете знать время выполнения. 

я на си печатаю, там нет noop(

Share this post


Link to post
Share on other sites
В 18.06.2017 в 00:38, SergeyKa сказал:

допустим мы имеем переменную PLUS с бесконечным возможным числом.

Бесконечно возможное число потребует бесконечно возможного количества битов для своего представления. Инкремент такой переменной потребует бесконечно большое время. За 1 микросекунду переменная не изменится никак.


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites
12 часа назад, SergeyKa сказал:

я на си печатаю, там нет noop(

там есть ассемблерные вставки asm("nop");

11 час назад, ARV сказал:

Бесконечно возможное число потребует бесконечно возможного количества битов для своего представления. Инкремент такой переменной потребует бесконечно большое время. За 1 микросекунду переменная не изменится никак.

Что ж не довели мысль до конца? :) Бесконечно большую переменную компилятор не позволит создать так что за 1 мкс оно даже не запустится


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

nop - это "не операции", ассемблерная команда процессора, которая ничего не делает и выполняется за 1 такт. Из них делают (или ими дополняют) циклы для задержек.


Настоящему коту и в декабре март!

Share this post


Link to post
Share on other sites
22 минуты назад, COKPOWEHEU сказал:

Бесконечно большую переменную компилятор не позволит создать

Я исхожу из предположения, что если вопрос задан, это данность, т.е. есть такой компилятор и такая переменная. А вот про бесконечную разрядность АЛУ или хотя бы шины данных ничего сказано не было, и это я так же учел при ответе.

P.S. Вообще говоря, математическая бесконечность - это одна из тем высшей математики, которая повергает меня в уныние из-за противоречия бытового и научного понимания... Бесконечности могут быть больше или меньше друг друга, над ними можно делать математические действия (напр., умножать на бесконечность или складывать с нею), и результат получается достаточно непредсказуемым для неподготовленного ума... Худшим для моего мозга явилось откровение, что уравнение sin(x) = -2 имеет решение... с этого момента я с математикой перестал поддерживать тесные отношения и больше ушел в философию :)

Edited by ARV

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By LemonTV
      Есть картинка из сайта с фьюзами, есть программа avrdude_prog3.3 Как выставить правильно фьюзы чтобы не испортить мк? Незнаю как это сделать есть прямые и инверсные фьюзы, ГДЕ СТАВИТЬ ГАЛОЧКИ И КРУЖОЧЕК НА ПРЯМЫХ ИЛИ ИНВЕРСНЫХ?


    • By dron92
      Подскажите как вернуть к жизни контролер или в утиль!
      Решил собрать программатор AVRISP mkII купил микросхему собрал подключил а устройств нет в диспетчере и  Flip не видит его!
      Начал искать косяки в сборке не нашел решил спаять Отладочная плату
      тот же результат, попробовал подключить через ISP не отвечает !
      Решил пойти на крайние меры  подключил через FuseDoctor сигнатуру он не видел вел 1e9482 вроде увидел но результата сбросить не проучилось но теперь он начал видится в таком формате фото внизу




    • By Dima Silko
      Условие на русском:
      В перечне элементов к принципиальной электрической схемы РЭА имеется следующая информация:
      L1, L2  100 мкГн + 10%
      R1 С2-23- 0,125 Вт - 1 кОм +/- 10%
      Оценить численно и изобразить в таком же масштабе вид  U(t).  Фазовые сдвиги не учитывать. 

    • By Sl653
      Доброй ночи. Продам Segnetics SMH4 новый в упаковке. 14 т.р. и УПП Siemens Sirius 3RW4036 29т.р. тоже новый. Если кого заинтересовало то пишите на почту sl.s@inbox.ru
       
       


    • By Jesterary
      Здравствуйте. Подскажите, был ли у кого-то опыт отправки изображений с камеры (подключенной через UART или bluetooth-камеры) через GPRS (у меня модуль SIM800L, но в целом это не принципиально) на удаленный сервер? Средствами управляющего микроконтроллера, пусть даже ардуины какой-нибудь, но не малины. Возможно ли это вообще? Хотелось бы, конечно, использовать в проекте беспроводную камеру и общаться с ней, ибо камеры, подключаемые напрямую так себе качество дают. 
      Сразу скажу, что важна именно такая связь. Микроконтроллер + модуль связи + камера находятся в коробке и путешествуют по городу, в это время человек сидя дома на диване может смотреть фото с этой камеры. Смартфон для моих целей не подойдет, суть именно в микроконтроллере с модулями.
      Если у кого-то такое получалось - поделитесь, пожалуйста :)
      А то нахожусь в некоторой прострации и даже не знаю, в какую сторону думать.
  • Сообщения

×
×
  • Create New...