• Как реализовать код для срабатывания нефиксированной Кнопки?

    @Mercury13
    Программист на «си с крестами» и не только
    UPD1. У вас опять игрушечное никогда не выполняющееся условие PINB &= 0b00000000.
    Если всё-таки сделаете работающее условие, то должно быть что-то вроде
    char oldState = 0, newState = 0
    ...
    oldState = newState;
    newState = PINB & 0b00000001;
    if (!newState && oldState) {
      // нажатие кнопки зарегистрировано.
      // 1. переключить состояние.
      // 2. Записать что надо в порт.
      // 3. Сделать задержку на дребезг.
    }

    Естественно, считается, что кнопка замыкается на землю и !newState — это как раз «прижата».
    Ответ написан
    3 комментария
  • Почему при параллельном подключении может перестать течь ток?

    У тебя цепи:
    10 - индикатор - диод - резистор - 1(общий)
    12 - резистор - 1(общий)

    Если подать напряжение на 12 контакт, то на резисторе будет падать напряжение, которое запирает диод и он не проводит ток, либо проводит ток, но его недостаточно для свечения индикатора.
    Ответ написан
  • Частота работы МК и передачи одно и то же?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Тактовая частота МК (ядра) и частота, используемая для передачи данных по какому-нибудь интерфейсу - разные вещи.

    Первая задается либо встроенным RC осцилятором (обычно, ниже максимально возможной и менее стабильна, чем от кварца), либо внешним кварцевым резонатором, а далее преобразуется делителями и/или PLL синтезаторами до нужных для конкретных блоков МК/периферии. Она означает только то, с какой скоростью ядро может выполнять отдельные инструкции или, точнее, сколько времени длится один такт (в некоторых архитектурах выполнение определенных инструкций занимает больше одного такта).

    Вторая задается, собственно, протоколом/стандартом интерфейса. Интерфейс - это не только договоренность о стартовых битах, маркерах и т.д. в передаваемых данных, но и об уровнях напряжений, видах модуляции, допустимых уровнях шумов и, в т.ч. "частотах". Только о последних принято говорить "тайминг", т.к. стандарты задают допустимую точность соблюдения временных интервалов, а уже какие для этого нужны частоты - вопрос производный. А все это, вместе взятое, принято называть интерфейсом. Кроме того, для передачи данных само понятие "частота" вторично - гораздо важнее понятие Baud rate, означающее (упрощенно!) "скорость передачи информации" по определенному протоколу, которая, согласно теореме Шеннона-Хартли, меньше или равна половине той самой реальной "частоты передаваемого сигнала"... кототрой, на самом, деле нет, как таковой. Попробую объяснить, что это значит.

    "Попадание в такт" урегулировано протоколом интерфейса и не зависит от момента, когда включили приемник или передатчик, а только от того, когда передатчик решит начать передачу. Если совсем на пальцах... В простейшем случае кто-то из них (например, передатчик) в какой-то момент времени изменяет уровень на своем выходном пине, например, с LOW на HI. К нему физически подключен входной пин приемника. Он "видит" изменение уровня и этот факт либо отлавливается программой, постоянно опрашивающей состояние этого входного пина, либо, еще лучше, изменение уровня вызывает прерывание, в коде которого принимающая программа может соответствующим образом на это отреагировать... например, принять один бит. А передатчик, тем временем, изменит HI на LOW, и потом все повторится. Минимальное расстояние во времени между такими изменениями, которые, при цифровой передаче происходят совсем не равномерно, (как, например, в радио с амплитудной модуляцией) и будет означать ту самую "частоту передачи". Но в реальности нет никакой конкретной постоянной частоты - есть импульсы разной длительности, т.е. изменения уровня напряжения с высокого на низкий и наоборот, следующие через разные промежутки времени. Так что, при цифровой передаче данных говорить можно только о теоретической максимальной частоте.

    Для того, чтоб приемник и передатчик могли стабильно соблюдать тайминг, определенный стандартом интерфейса (т.е. успевать распознать эти изменения, ничего не пропуская), их собственная тактовая частота должна это в принципе позволять, т.е. быть больше "частоты передачи данных" (если протокол реализован в виде программы для ядра, оно должно, как минимум, успеть выполнить какие-то инструкции прежде, чем может произойти следующее изменение уровня, на которое нужно будет реагировать). Иногда, особенно, в простых МК, она, кроме того, должна быть кратной этой частоте с определенным коэфициентом. Ядро МК может работать на разных тактовых частотах - вплоть до максимальной, ему, собственно, почти безразлично, на какой именно. Но т.к. большинство частот внутри (на входе счетчиков таймеров или других схемотехнических блоков) получаются из основной тактовой, то если она не будет кратной "частоте передачи", в какие-то моменты времени приемник и передатчик будут рассинхронизироваться, т.е. не успевать распознать и прореагировать на какие-то импульсы, т.к. их ядро в этот момент будет занято чем-то другим. Это, конечно, в большинстве случаев будет отловлено и исправлено самим протоколом (для этого их и придумывают), но, на практике будет означать либо медленную, нестабильную передачу, либо вообще невозможность передачи. Таким образом, для простеньких МК, если они должны работать с UART, особенно, на больших скоростях, подойдет не всякий кварц с частотой меньше или равной максимальной, а только с определенными частотами. (А если они, например, должны максимально стабильно отсчитывать календарное время без синхронизации с внешним источником точного времени, подойдет другой кварц с т.н. "часовыми" частотами...) Короче, в определении того, какая конкретно тактовая частота МК будет достаточной/необходимой в каждом конкретном случае, нет никакой магии - только простая арифметика и внимательное изучение даташитов и application notes.

    В современных МК периферия, реализующая стандартные интерфейсы (типа простых UART, USB, I2C, CAN и т.д.) давно уже отвязана от ядра. Именно для того, чтоб освободить пользователя, т.е. программиста МК, от всех этих заморочек... но "внутри" там все то же самое, только, конечно, сложнее, а в протоколах, типа Ethernet или Bluetooth, под чисто цифровым уровнем скрывается еще и навороченный физический, со всякими модуляциями и поляризациями, где понятие "частоты передачи" имеет прямой смысл... только туда без, хотя бы, поверхностных знаний физики, электро- и радиотехники, лучше вообще не соваться ))

    Однако, наличие в МК готовой периферии не исключает возможность взять и самостоятельно реализовать некоторые из этих протоколов, для которых достаточно тактовой частоты МК, в виде программы для ядра... например, для того же UART. Сделать это совсем не сложно, но совершенно необходимо для понимания их устройства. На эту тему есть тонны статей, туториалов и разжеванных примеров (от использования периферии, и вплоть до самостоятельной реализации).
    Ответ написан
    1 комментарий
  • Частота работы МК и передачи одно и то же?

    @pfg21
    ex-турист
    просто приемник синхронизирует свою частоту обмена с входными импульсами.
    для этого служит стартовый бит.
    точнее когда приемник находится в ожидании сигналов генератор не работает и только по спаду стартового бита запускает работу генератора, и он получается автоматически синхронизирован.
    Ответ написан
    2 комментария
  • Частота работы МК и передачи одно и то же?

    Им не нужно попадать в "такт".
    Частота обработки сигнала выше, чем частота передаваемого сигнала, так что приемнику не надо быть синхронизированным с передатчиком, достаточно поймать начало передачи, не обязательно с точностью до наносекунд. (тот же I2C на 400кГц, а МК ваш на 8МГц, он за время передачи одного бита еще что-нибудь успеет сделать)

    +сейчас интерфейсы реализованные на периферии МК могут работать независимо от ядра, порой со своим тактированием и своими буферами для приема и передачи данных, вам останется только проверять или загружать эти буферы, а периферия сама будет отправлять-принимать данные (например USB который от 48МГц фигачит, в то время, как сам МК от 12МГц тактируется, аппаратный UART)
    Ответ написан
    8 комментариев
  • Почему люди бесплатно выкладывают установщики программ и прочего ОС?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    у большинства трекеров есть партнерские программы. т.е. создатели популярных раздач получают за это деньги. ну и + какая-никакая известность автора, которая предоставляет ему заказы на различный софт по этой теме.
    Ответ написан
    3 комментария
  • Куда теряется 1 в цикле при работе с мк?

    hahenty
    @hahenty
    ('•')
    В части с переключение флага исчезли изменения счетчика, там терялось значение 0 для него.
    Ответ написан
    2 комментария
  • Куда теряется 1 в цикле при работе с мк?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В первом варианте у вас в цикле i получает значение 8, затем в начале следующего цикла сначала идёт попытка зажечь девятый светодиод и только потом i уменьшается до 7. Ну и программа написана неэффективно.
    int main(void)
    {
      DDRD = 0xFF;
      PORTD = 0x00;
      char position = 0;
      char step = -1;
      while(1) {
        PORTD = (1 << position);
        if (0 == position || 7 == position) {
          step = -step;
        }
        position += step;
        _delay_ms(200);
      } 
    }
    Ответ написан
    8 комментариев
  • Есть книжка для изучения Си с примерами на Микро Контроллерах?

    dio4
    @dio4
    team leader, system engineer, master of sports
    Я не спец по МК, но, мне кажется, что эта книжка будет вам интересна, наверное.
    Дэвид Гриффитс, Дон Гриффитс - Изучаем программирование на C 2013г.
    смотреть тут
    Прочитав ее, вы узнаете не только о мкконтроллерах, но и язык подтяните и сам процесс чтения должен доставить удовольствие.
    Вот один из отзывов:"В книге много иллюстраций и примеров доходчиво объясняющих основы языка Си. Отличная подача материала с пояснениями на примерах. Моя вторая книга по Си, изучаю в связке с микроконтроллерами. Рекомендую всем кто самостоятельно изучает Си."
    Ответ написан
    Комментировать
  • У всех мониторов соотношение 1.7, если ширину делить на высоту?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Подробный ответ на вопрос:

    раз

    два
    Ответ написан
    Комментировать
  • У всех мониторов соотношение 1.7, если ширину делить на высоту?

    Мониторы бывают разные. Единого стандарта нет. 16:9, 21:9, 16:10, 4:3
    Бывает, их поворачивают в портретную ориентацию.
    Ответ написан
    Комментировать
  • У всех мониторов соотношение 1.7, если ширину делить на высоту?

    Stalker_RED
    @Stalker_RED
    Бывают очень разные
    IsdzVmh.png
    Ответ написан
    Комментировать
  • У всех мониторов соотношение 1.7, если ширину делить на высоту?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Нет.

    https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%BE%D...

    Самые популярные сейчас 6:9 и 6:10, 4:3 практически ушел в небытие.
    21:9 набирает популярность в мониторах с диагональню 28" и больше.
    Ответ написан
    1 комментарий
  • Как сделать пропуск ошибки события, пока они не используются?

    Stalker_RED
    @Stalker_RED
    У вас что-то пошло сильно не так.

    Какое событие вы хотите отслеживать? Если нажатие кнопки, то как-то так:
    someElement.addEventListener('keydown', function(e){ // или keypress, или keyup, смотря что вам нужно
      if (e.keyCode == 27) {
        console.log("hello");
      }
    })

    И таймеры для этого совсем не нужны.
    UPD: https://jsfiddle.net/1pc18o2m/2/
    добавил убогий прыжок https://jsfiddle.net/t8t59Lcp/
    Ответ написан
  • Как отследить количество интервалов, которые наложились друг на друга?

    Bobert88
    @Bobert88
    Vice President of Javascript, very important guy.
    Можно, например, так:
    https://codepen.io/glebez/pen/WEpJZd?editors=0010
    Ответ написан
    Комментировать
  • Как отследить количество интервалов, которые наложились друг на друга?

    Stalker_RED
    @Stalker_RED
    var intervals = [] // массив, пока пустой
    function go() {
     var intervalId = setInterval("func", 1000);
     intervals.push(intervalId) // добавляем идентификатор таймера в массив
    }
    function stopAll() {
      intervals.forEach(id=>clearInterval(id))  // останавливаем все
      intervals = [] // опустошаем список
    }
    function getIntervalsCount(){
      return intervals.length // надеюсь, хоть это очевидно
    }
    Ответ написан
    Комментировать
  • Где в даташите пишется частота МК и как её правильно подобрать для программирования?

    @evgeniy_lm
    1. Частота МК указана в начале даташит в разделе "Features ", более подробно расписано в разделе System Clock.
    2. В примерах частота не имеет значения, а вот в реальных проектах дело другое. Выбор частоты определяется двумя факторами: 1. Быстродействие - чем выше частота, тем больше команд будет выполнено за единицу времени; 2. Энергопотребление - чем ниже частота, тем меньше потребляемый ток.
    3. На картинке плата программатора USBASP ATmega8 и там точно кварц 12МГц. Выбранная частота связана с тем, что именно на такой частоте погрешность аппаратной эмуляции USB 1.1 минимальна VUSB
    4. Частота работы МК программатора с частотой программируемого МК ни как не связана в этом программаторе МК вообще отсутствует.
    Ответ написан
    1 комментарий
  • Есть книжка для изучения Си с примерами на Микро Контроллерах?

    А смысл это совмещать? Пока не изучите основы Си, под микроконтроллеры Вы ничего не напишете. Так что берите K&R, читайте, решайте задачки, как хотя бы немного уверенно себя чувствовать начнёте (разберётесь в основном синтаксисе, в структурах, функциях, макросах, указателях, битовых опирациях) - смотрите туторы по микроконтроллерам уже.
    Ответ написан
    3 комментария
  • Где в даташите пишется частота МК и как её правильно подобрать для программирования?

    @Fixid
    Столько, сколько указано на подключенном кварце. Шансов что он работает от внутреннего генератора не много
    Ответ написан