Arrays | Microcontrollers from scratch #9

Поділитися
Вставка
  • Опубліковано 6 вер 2024
  • Data arrays are used for orderly storage of one type of data. The use of data arrays allows you to structure the whole program code. Data sets will often be used to store the binary values ​​of the seven-segment indicator numbers. In contrast to the function, the array identifier is a square bracket, inside which the data is separated by a comma.
    Also in this video, the use of the for loop operator is considered. This operator, which is quite applicable in many programs of microcontrollers, allows solving several problems at a minimum amount of code.

КОМЕНТАРІ • 88

  • @user-li4xh9fi6w
    @user-li4xh9fi6w  3 роки тому

    Программирование микроконтроллеров. Полный курс для начинающих: diodov.net/programmirovanie-mikrokontrollerov-avr/
    Электроника для начинающих. Мощный курс. diodov.net/elektronika-dlya-nachinayushhih/

  • @ProgressiveChannel
    @ProgressiveChannel 3 роки тому +31

    выполнил бесценный труд и остался недооцененным, справедливая жизнь) какой то ***плёт набирает по 50 000 000 просмотров, который нихрена из себя не представляет, а только рожи корчит. Ну да, ну да расскажите мне после подобного, как в жизни всё на своих местах находится, расскажите как нужно трудится не покладая рук честным трудом, чтобы потом нихрена не иметь, сама жизнь нас толкает на поиски путей с наименьшим сопротивлением. Всем всего доброго, это был лишь поток моей мысли.

    • @nissren
      @nissren 2 роки тому

      Лучше иметь мало, но нормальных подписчиков. Чем стадо даунов отсталых, которую любую хуйню схавают

    • @sucker7032
      @sucker7032 Рік тому

      самый глупый комментарий. никто не обязан изучать микроконтроллеры, соответственно и просмотров так много не будет)

    • @ProgressiveChannel
      @ProgressiveChannel Рік тому

      @@sucker7032 и тут я понимаю, что спустя 2 года в моей голове почти ничего не поменялось. Да микроконтроллеры не все обязаны изучать, но смотреть всякую чепуху обязаны все)) Не ладно, я не претендую ни на что, просто как факт смешно немного)

    • @ProgressiveChannel
      @ProgressiveChannel Рік тому

      @@RetroJoin вот знаете, я сейчас живу в Норвегии в силу войны, так как я из Украины, вот про деньги, у них тут денег куры не клюют, на мусорках лежат рабочие приставки игровые последнего поколения, возможно с мизерной неисправностью, такой как просто расшатанный коннектор хдми или поврежденный жесткий диск, деньги есть, пошел купил новое, классно, но будучи честным, они тупые как валянки, по моему мнению. Я пришел к этому общаясь с их молодежью, более старшие, поумнее будут конечно же. Просто я к тому, что стоит ли оно того, коснись чего, они тупо вымрут, так как тут даже мастеров нет адекватных. Например, на войне мы выживали без света, воды, газа, скорых, полиции и тд и это произошло внезапно, если бы не скилл и понимание элементарного, то с голоду бы умерли, так как костер даже не развели бы.
      Я и так живу как нравится мне по факту, мне мир интересно изучать, всякие явления, любые.

    • @ProgressiveChannel
      @ProgressiveChannel Рік тому

      @@RetroJoin да они тут жалуются, что у них всё дорого, электроника дорогая очень тут, вообще, если соизмерять зарплаты на всё с нашими до войны, то это примерно как получать 25 тысяч гривен в Киеве или Харькове, жить можно, но если есть свой дом, если арендуешь, то конец)
      Аниме не смотрел, в химию вообще не получалось никогда, не шла она мне.

  • @wisetringmen2293
    @wisetringmen2293 5 років тому +11

    Ты гордость технического Ютуба. Твоя работа бесценна.

  • @postscriptum1667
    @postscriptum1667 6 років тому +38

    дребезг на реальной кнопке всё понятно, но в протэусе кнопка же идеальная, не имеющая дребезга. в протэусе значения прыгали не из за дребезга а и за долгова нажатия, программа за время нажатия успевала пройти несколько циклов что и давало большее количество инкремента/декремента нежели на еденицу

    • @Yarikkasl
      @Yarikkasl 5 років тому

      Как это реализовать программно?

    • @HybridWarARgungame
      @HybridWarARgungame 5 років тому +3

      @@Yarikkasl программно нужно отслеживать не только когда кнопка нажата, но и когда отжата. В конце нужно ставить задержку до тех пор пока кнопку не отожмут. И только после отжатия продолжать цикл.

    • @Yarikkasl
      @Yarikkasl 5 років тому

      @@HybridWarARgungame спасибо

    • @ogurezzz
      @ogurezzz 4 роки тому +3

      @@Yarikkasl Флажки нужно ставить. И добавить условие на инкремент только пока флажок опущен. При нажатии кнопки флажок поднимается и висит пока кнопку не отпустят.

    • @Yarikkasl
      @Yarikkasl 4 роки тому

      @@ogurezzzспасибо, с флагами я́ так и не разобрался, сделал задержку по времени.

  • @user-uj9rw9ty1e
    @user-uj9rw9ty1e 10 місяців тому +1

    Благодарю вас учитель за такое дозодчивое объяснение! Не мог и поверить , что начну программировать🎉❤🤝 Мирного неба над головой вам!!!

  • @Dmitrii82
    @Dmitrii82 5 років тому +5

    Так уж случилось что давно на вас подписан, но из-за того что вы редко выпускаете видео как то про вас забыл. Понадобились мне массивы и операции с ними и портами, долго копал инет искал инфу и по кускам нашел, а тут пересматривал и нашел это видео. Лучшее обьяснение! Все что искал в одном видео и обьяснено все четко. Спасибо огромное!!!

  • @ShomaAbd1991
    @ShomaAbd1991 6 років тому +18

    Многократное увеличение связано не с дребезгом контактов, а с многократным выполнением цикла и соответственно проверки условия IF на нажатое состояние. Для того, что бы не считывать много раз одно нажатие Вы и добавили задержку, т.е. что бы успеть отпустить кнопку прежде, чем контроллер прочитает состояние кнопки снова. Разве не так? В программе же нет вызова функции по прерыванию что бы дребезг контактов мог ее вызывать.

    • @user-ef2rr7kz4m
      @user-ef2rr7kz4m 5 років тому +4

      Правильно. А вот если добавить что бы условие срабатывало не по нажатию а по перепаду. То есть сперва нажатие а потом отжатие (по сути выполнение двух условий последовательно) то тогда в протеусе все бы работало без проблем из без задержки, а вот в реальной схеме могли бы наблюдать эффект дребезга!

    • @HemulMozyr
      @HemulMozyr 5 років тому

      ​@@user-ef2rr7kz4m На AVR я пока не программировал, только учусь. Но на ардуине по моему опыту дребезг проявляется если пин не подтянут к земле или потенциалу. Физически пин подтягиваю к потенциалу/земле и без проблем отслеживается состояние нажатия или отжатия кнопки.

    • @sasha88886
      @sasha88886 5 років тому +1

      Я тоже на AVR не ас. но в прошлом видео автор канала объяснял что кнопку он подключил на считывание на землю, а подтягивает сам микроконтроллер, поправьте если я не правильно понял

    • @HemulMozyr
      @HemulMozyr 4 роки тому

      @@isakneuman9995 Вы как в анекдоте: Почему бабы говорят что я плох в сексе, откуда они могут это понять за 40 секунд?
      з.ы. Согласен, если вы ГУРУ, то можете оставлять такие "диванные" комменты. А про многократные проверки состояния и их обработку я тоже, представьте себе, знаю.

    • @user-ob1jz8yl6x
      @user-ob1jz8yl6x 2 роки тому +3

      @@HemulMozyr Дребезг это НЕ наводка. Это физико-механический процесс. Любой механический контакт даёт дребезг в момент включения (как-бы включается и выключается десяток раз в милисекунду, пока подвижный контакт перестанет двигаться и не прижмется надёжно к не подвижному) и в момент выключения (особенно сильно проявляется, еще и благодаря индуктивности проводов и иногда нагрузки).

  • @avr_stm_pro2955
    @avr_stm_pro2955 6 років тому +13

    СПАСИБО ЗА ТРУД!!!

  • @NK-pg6im
    @NK-pg6im 2 роки тому +1

    Дмитрий, какой вы молодец! Я учился по данной профессии, нам объясняли ужасающе поверхностно. Спасибо Вам за Ваш труд!

  • @TrasherFCR
    @TrasherFCR 3 роки тому +5

    .
    11:11 А это не из-за того, что, пока кнопка нажата, контроллер производит много циклов?
    .

  • @ZestRise
    @ZestRise 4 роки тому +2

    Я немного вас поправлю, дабы не плодить неправильных утверждений. if - это условие, а оператор это то, что проводит действия ==, и тд. Операнд это, над чем проводятся какие либо действия. Соответственно в условии выражение (а == с) оператор сравнения == проверяет действительно операнды а и с равны между собой.

  • @panzerlo3418
    @panzerlo3418 4 роки тому +1

    Лучше чем в учебных заведениях.

  • @boukinist3899
    @boukinist3899 5 років тому +9

    У тебя в коде где-то ошибка: обратный отсчёт заканчивается, а бонба не взрывается. Исправь как надо и перезалей, пожалуйста.

  • @LoyalLuckyAngel
    @LoyalLuckyAngel 5 років тому +2

    Большое спасибо, очень интересное и понятное видео)

  • @user-yz2my6kp5i
    @user-yz2my6kp5i 5 років тому

    Както винаги отлично изложение! Благодаря! Успех!

  • @user-xz9dz3zm8e
    @user-xz9dz3zm8e 4 роки тому +1

    Не могу понять. Делаю все тоже самое. Правда Атмега168. Делаю ВХОД на пины PB0 и PB1. Кнопки не работают. Делаю все тоже с PB6,7 все работает. PB3,4,5 заняты программатором SCK,MISO,MOSI. Почему пины В 0 и 1 на вход не работают не понимаю.

  • @catfish_games
    @catfish_games 5 років тому +1

    Как по мне самый идеальный способ устранения дребезга это написать автомат для его устранения.

  • @dsh7264
    @dsh7264 4 роки тому +6

    Рабочий код , плюс третья управляющая кнопка .
    #define F_CPU 1000000L
    #include
    #include
    int z=0;// переменная объявленная до int main () будет видна в любой области программы .
    int el[]=
    {
    //распиновка 1-a,2-b,3-c,4-d,5-e,6-f,7-g,8-.,9- "-"
    0b00111111,//0
    0b00000110,//1
    0b01011011,//2
    0b01001111,//3
    0b01100110,//4
    0b01101101,//5
    0b01111101,//6
    0b00000111,//7
    0b01111111,//8
    0b01101111//9
    };
    int main(void)
    {
    /* Replace with your application code */

    DDRD=0b11111111;
    DDRB=0b00000000;
    PORTB=0b00000111;
    while(1)
    {
    if (PINB==0b00000110 && z0 )
    {
    z--;
    PORTD=el[z];
    _delay_ms(300);
    }
    // добавляем 3 ю кнопку в протеус для наглядности по анологии с первыми двумя
    if (PINB==0b00000011 ) // если две кнопки не зажаты ,то при зажиме 3й увидим работу цикла for
    {

    for(z;z0&&PINB==0b00000011;) // первый параметр пропущен так как переменная глобальная .К ней можно обратиться из любого места программы в том числе и из цикла FOR
    {
    z--;
    PORTD=el[z];
    _delay_ms(1000);
    }
    PORTB=0b00000111; //возврат исходного значения потенциала на входных выводах
    }
    }
    }

  • @x-comics4581
    @x-comics4581 6 років тому +1

    Нашел!!!! , а то на другом канале было смотрю там удалено, думал КАПУТ)))

  • @artemdavinci
    @artemdavinci Рік тому

    Замість умови (PINB == 0b00000010) краще застосовувати (PINB & 0b00000010). Не знаю як Дмитро, а я стискався на практиці з таким явищем як наведення ("наводки") на сусідні "вільні" піни. Тобто, якщо на порту є піни з високоімпендансним режимом, то на них може бути логічна одиниця, яка без проблем зчитається PINx. І в такому випадку, якщо і натиснута кнопка, але через наведення буде логічна одиниця хоча б на одному з пінів даного порту, то умова (PINB == 0b00000010) просто не виконається. Більше того, умова (PINB & 0b00000010) є універсальною, що підходить під інші умови. Коли, наприклад, інші піни даного порту зайняти іншими задачами.

  • @user-rq9zr4yd1t
    @user-rq9zr4yd1t 4 роки тому +1

    А зачем считывать данные всех 8 портов B? Если нужно остальные порты B сделать на выход, что тогда?
    Как можно считывать значения только на PB0 и PB1 ??

  • @aliaksandrkrasnoselskiy8401
    @aliaksandrkrasnoselskiy8401 3 роки тому

    Понять не могу), уже всю голову сломал)

  • @yuridk2842
    @yuridk2842 4 роки тому +1

    Хочется добавить, что цифра 9 появляется из второго цикла FOR так как в первом условии Z

  • @AntonContra
    @AntonContra Рік тому

    Вопрос, а если после установления параметра задержки дребезг контактов не ушел?

  • @CreedBaddog
    @CreedBaddog Рік тому

    Я вместо индикатора подключил 4 светодиода на порт B. PB0 PB1 PB2 PB3. Кнопку на PC0. Никак не хотела работать. Переделал программу для порта D и перенес туда светодиоды, только после этого начало переключать. Так и должно быть?

  • @user-ol1nk9ox7n
    @user-ol1nk9ox7n 5 років тому

    Присоединяюсь к Василию Пупкину. Я тоже в ступор попал в этом месте. До этого все было понятно. И вообще уроки превосходные.

    • @HemulMozyr
      @HemulMozyr 5 років тому

      смотрите ответ чуть выше.

    • @user-ol1nk9ox7n
      @user-ol1nk9ox7n 5 років тому

      Значит пауза после 9 относится уже ко второму циклу. Если так, то я стал что-то понимать. Было бы нагляднее, если во втором цикле сделать другую задержку, скажем 2 секунды. Попробовал бы, но неделю не могу студию установить, пишет чего-то в винде не так. Еще раз спасибо!

    • @HemulMozyr
      @HemulMozyr 5 років тому

      @@user-ol1nk9ox7n Да, когда на индикаторе 9 от первого цикла, ее отрабатывает задержка из второго цикла при первом прохождении. А когда на индикаторе 1 после работы второго цикла, ее держит пауза из первого цикла при первом прохождении.
      з.ы. Если проблема установки Amtel Studio из-за Visual Studio 2015 (isolated) , то попробуйте установить визуалстудию 2015 отсюда, а после устанавливать Amtel. visualstudio.microsoft.com/ru/vs/older-downloads/isolated-shell/?rr=https%3A%2F%2Fduckduckgo.com%2F
      Сам уже третий день пытаюсь разобраться почему на win7 такая беда. Обновляю винду и принудительно устанавливаю визуал студию, завтра узнаю результат. :)

    • @HemulMozyr
      @HemulMozyr 5 років тому +1

      @@user-ol1nk9ox7n логичнее ставить паузу в конце цикла. так меньше непоняток

    • @user-ol1nk9ox7n
      @user-ol1nk9ox7n 5 років тому

      Спасибо, будем пробовать

  • @user-uz1zf4cl6h
    @user-uz1zf4cl6h 3 роки тому

    Доброго времени суток! Очень помогает ваши видео! Хотел спросить , будет ли видео по подключению индикаторов через регистр 74HC595 (статика и динамика). И в какой версии Atmel Studio вы работаете? Есть ли какие то различие между ними

  • @alanalanov4125
    @alanalanov4125 2 роки тому

    1:00 Дмитрий, у порта "Д" нулевой бит отвечает за ресивер сериал-порта.
    Если его как у вас программировать в еденицу, т.е. на выход, разве это не нарушит его работу?
    Ресиверу принимать следует однако...

    • @staskyrychenko8319
      @staskyrychenko8319 9 місяців тому

      можно залочить микросхему?

  • @Jamal_Malik
    @Jamal_Malik Рік тому

    16:09
    А вы не подскажете, почему после прошивки меги, секунды идут не правильно? Т.е. (1секунда =1.5) каждой полтора секунды считает...1...2...3...
    Хотя в проге поставил #Define F_CPU 8000000L и даже поставил так: F _CPU 1000000L и даже UL не помогает.

    • @staskyrychenko8319
      @staskyrychenko8319 9 місяців тому

      возможно прошит неправильно фьюз SCKDIV8

  • @GrafKarlsonskiy
    @GrafKarlsonskiy 5 років тому +1

    Микроконтроллеры с нуля! 15:25, где два цикла и в начале while пока остаётся portD равно массив, было это перескакивание с двух сразу до нуля. Странно. Ведь пока выполняется цикл, программа не должна перескакивать и должна находиться внутри цикла. Вообще не понятно

    • @HemulMozyr
      @HemulMozyr 5 років тому +1

      Единица была, просто ее на индикаторе без задержки сменила на 0 команда "PORTD=go2[z]", так как второй цикл завершился и задержка в 1 секунду не произошла. Если "_delay_ms 1000" перенести в обоих циклах на строчку ниже (в конец цикла), то команда "PORTD=go2[z]" ни на что не повлияла бы, вы просто не заметили бы ее результат.

  • @user-or3ct6dx8f
    @user-or3ct6dx8f 3 роки тому

    А почему на порт С назначение кнопок не работает? Код один в один, только с портом С. Все заработало только когда кнопки перенёс на порт В. Или тут идет разделение на аналоговые и цифровые входы и выходы? МК Atmega328p.

  • @dron9257
    @dron9257 4 роки тому

    Ну ок, тут все понятно. Такой вопрос есть семисигментный индикатор с 2 сдвиговыми регистрами один включает индикаторы другой высвечивает число, создали массив один с цифрами 0-9 цифры, другой массив с битами на включение элементов 1,2,3,4. А теперь как из этого всего мне выводить числа которые выдает один из входов типа float, как разбить число на элементы 246,6 или 1,342 и вывести на дисплей. А?

  • @alexeyvert-miller3374
    @alexeyvert-miller3374 5 років тому +1

    В коде пресутствует ошибка. Т.к. кнопка срабатывает при низком потенциале то код должен выглядеть PINB == 0b11111101для первой кнопки и PINB==0b11111110 для второй. Удивляет как у вас это работало) Или я где-то не доглядел?

    • @evgenikutuzov132
      @evgenikutuzov132 4 роки тому

      Если подтягивать входные ножки к +5В, то всё, как Вы говорите. Но здесь входные ножки подтянуты следующим образом: DDRB = 0b00000011; .

    • @user-ig2jc8jx7f
      @user-ig2jc8jx7f 4 роки тому +1

      Доброго времени суток.Споткнулся на том же самом :)... И еще вопрос - у меня работает только при PORTB = 0b11111111, а при PORTB = 0b00000011,кнопки не реагируют. Может кто объяснит? (разница в "прошивальщике", у меня Sina Prog). Спасибо.

    • @user-ig2jc8jx7f
      @user-ig2jc8jx7f 4 роки тому +1

      @@evgenikutuzov132 ...так и в примере, и в видео подтянуты к плюсу, или я что-то путаю?

    • @BoooMMMs
      @BoooMMMs Рік тому

      @@user-ig2jc8jx7f Разобрался? Тоже голову ломаю. В протеусе все работает. На реальной атмеге, только если PORTB = 0b11111111.

  • @Dmitrii82
    @Dmitrii82 6 років тому

    есть лсд семисегментный индикатор (стекляшка), они строятся зачастую на HT1621. снимите пожалуйста для него , как пользоваться даташитом и написать программу.

  • @user-jc3is3gt8w
    @user-jc3is3gt8w 4 роки тому

    Спасибо!очень понятно. А где протеус можно скачать!)

  • @serg_tolstiy87
    @serg_tolstiy87 5 років тому

    Вялiкi дзякуй!

  • @KONARTIK1
    @KONARTIK1 5 років тому

    Здравствуйте. Может ли сама программа AtmelStudio подвисать .Когда программа доходит до операторов for и if она дальше перестает как бы работать ?

  • @Sweet-kc1oz
    @Sweet-kc1oz Рік тому

    Поддерживают ли контроллеры мультипоточность?

  • @user-fq4ug9cs6k
    @user-fq4ug9cs6k 4 роки тому

    У меня в proteus эта программа работает а на реальном микроконтролере нет. При нажатие на кнопки не считает. Подскажите в чем может быть причина.

  • @dammie2h
    @dammie2h 3 роки тому

    люди помогите, как мне поставить _delay_ms() значение на входе ADC. Программа не компилируется, работает только если сам ввожу нужные значения длительности.

  • @earthuser7372
    @earthuser7372 3 роки тому

    Вы можете помочь сделать таймер обратного отсчёта дней?

  • @alextar8489
    @alextar8489 3 роки тому

    при долгом нажатии все равно счет идет в ту или иную сторону. Надо чтобы счет шел
    независимо от времени нажатия , а от количества. Как сделать?

    • @user-ue2dp6so8g
      @user-ue2dp6so8g 2 роки тому

      z должен меняться не после нажатия кнопки, а после (нажали + отпустили) кнопку

  • @13Dimon666
    @13Dimon666 6 років тому

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

    • @GrafKarlsonskiy
      @GrafKarlsonskiy 5 років тому

      Дмитрий Коренев я не разбираюсь, но по идеи напряжение какое-то время задержки не подается на индикатор или в самом этом индикаторе должен быть режим отключения дисплея. Просто наверное в цикле ddrD=0b00000000 на задержку а потом включить, но это не точно

  • @incxxxx
    @incxxxx 4 роки тому

    super!!!

  • @user-ge7gm1ln3v
    @user-ge7gm1ln3v 6 років тому

    ждем 16 урок!!

  • @user-zw3dt4qx3i
    @user-zw3dt4qx3i 6 років тому

    В описании на сайте для оператора for переменная из двух символов
    for (z=0; z

    • @user-jr2wv4nj6x
      @user-jr2wv4nj6x 6 років тому

      Это опечатка, но смысл не меняется ,так как здесь переменная z просто заменена другой переменной zz.

    • @user-zw3dt4qx3i
      @user-zw3dt4qx3i 6 років тому

      @@user-jr2wv4nj6x Ясно, спасибо.

  • @prurieure775
    @prurieure775 5 років тому

    Ардуино язык проще!!! НО!!! этот вот C++ очень интересен, несколько светодиодов можно зажечь одной командой))) язык сложнее но куда интереснее)) спасибо что я тебя нашел) только вот атмел студио у меня при выборе МК не открывает новый проект(поле кодинга) хз чё делать

  • @magadan4626
    @magadan4626 6 років тому

    ээээм, а как же кнопки с циклом for?

    • @user-hq9yg2vc5k
      @user-hq9yg2vc5k 5 років тому

      Magadan при завершении цикла for, микроконтроллер ни куда не денется и прочитает значение с кнопки.

  • @user-jn4oy9yr3g
    @user-jn4oy9yr3g 2 роки тому

    Не будет массива, компилятор все оптимизирует и запишет все в команду...

  • @hekto_pyc9998
    @hekto_pyc9998 5 років тому

    )