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.
Программирование микроконтроллеров. Полный курс для начинающих: diodov.net/programmirovanie-mikrokontrollerov-avr/
Электроника для начинающих. Мощный курс. diodov.net/elektronika-dlya-nachinayushhih/
выполнил бесценный труд и остался недооцененным, справедливая жизнь) какой то ***плёт набирает по 50 000 000 просмотров, который нихрена из себя не представляет, а только рожи корчит. Ну да, ну да расскажите мне после подобного, как в жизни всё на своих местах находится, расскажите как нужно трудится не покладая рук честным трудом, чтобы потом нихрена не иметь, сама жизнь нас толкает на поиски путей с наименьшим сопротивлением. Всем всего доброго, это был лишь поток моей мысли.
Лучше иметь мало, но нормальных подписчиков. Чем стадо даунов отсталых, которую любую хуйню схавают
самый глупый комментарий. никто не обязан изучать микроконтроллеры, соответственно и просмотров так много не будет)
@@sucker7032 и тут я понимаю, что спустя 2 года в моей голове почти ничего не поменялось. Да микроконтроллеры не все обязаны изучать, но смотреть всякую чепуху обязаны все)) Не ладно, я не претендую ни на что, просто как факт смешно немного)
@@RetroJoin вот знаете, я сейчас живу в Норвегии в силу войны, так как я из Украины, вот про деньги, у них тут денег куры не клюют, на мусорках лежат рабочие приставки игровые последнего поколения, возможно с мизерной неисправностью, такой как просто расшатанный коннектор хдми или поврежденный жесткий диск, деньги есть, пошел купил новое, классно, но будучи честным, они тупые как валянки, по моему мнению. Я пришел к этому общаясь с их молодежью, более старшие, поумнее будут конечно же. Просто я к тому, что стоит ли оно того, коснись чего, они тупо вымрут, так как тут даже мастеров нет адекватных. Например, на войне мы выживали без света, воды, газа, скорых, полиции и тд и это произошло внезапно, если бы не скилл и понимание элементарного, то с голоду бы умерли, так как костер даже не развели бы.
Я и так живу как нравится мне по факту, мне мир интересно изучать, всякие явления, любые.
@@RetroJoin да они тут жалуются, что у них всё дорого, электроника дорогая очень тут, вообще, если соизмерять зарплаты на всё с нашими до войны, то это примерно как получать 25 тысяч гривен в Киеве или Харькове, жить можно, но если есть свой дом, если арендуешь, то конец)
Аниме не смотрел, в химию вообще не получалось никогда, не шла она мне.
Ты гордость технического Ютуба. Твоя работа бесценна.
дребезг на реальной кнопке всё понятно, но в протэусе кнопка же идеальная, не имеющая дребезга. в протэусе значения прыгали не из за дребезга а и за долгова нажатия, программа за время нажатия успевала пройти несколько циклов что и давало большее количество инкремента/декремента нежели на еденицу
Как это реализовать программно?
@@Yarikkasl программно нужно отслеживать не только когда кнопка нажата, но и когда отжата. В конце нужно ставить задержку до тех пор пока кнопку не отожмут. И только после отжатия продолжать цикл.
@@HybridWarARgungame спасибо
@@Yarikkasl Флажки нужно ставить. И добавить условие на инкремент только пока флажок опущен. При нажатии кнопки флажок поднимается и висит пока кнопку не отпустят.
@@ogurezzzспасибо, с флагами я́ так и не разобрался, сделал задержку по времени.
Благодарю вас учитель за такое дозодчивое объяснение! Не мог и поверить , что начну программировать🎉❤🤝 Мирного неба над головой вам!!!
Так уж случилось что давно на вас подписан, но из-за того что вы редко выпускаете видео как то про вас забыл. Понадобились мне массивы и операции с ними и портами, долго копал инет искал инфу и по кускам нашел, а тут пересматривал и нашел это видео. Лучшее обьяснение! Все что искал в одном видео и обьяснено все четко. Спасибо огромное!!!
Многократное увеличение связано не с дребезгом контактов, а с многократным выполнением цикла и соответственно проверки условия IF на нажатое состояние. Для того, что бы не считывать много раз одно нажатие Вы и добавили задержку, т.е. что бы успеть отпустить кнопку прежде, чем контроллер прочитает состояние кнопки снова. Разве не так? В программе же нет вызова функции по прерыванию что бы дребезг контактов мог ее вызывать.
Правильно. А вот если добавить что бы условие срабатывало не по нажатию а по перепаду. То есть сперва нажатие а потом отжатие (по сути выполнение двух условий последовательно) то тогда в протеусе все бы работало без проблем из без задержки, а вот в реальной схеме могли бы наблюдать эффект дребезга!
@@user-ef2rr7kz4m На AVR я пока не программировал, только учусь. Но на ардуине по моему опыту дребезг проявляется если пин не подтянут к земле или потенциалу. Физически пин подтягиваю к потенциалу/земле и без проблем отслеживается состояние нажатия или отжатия кнопки.
Я тоже на AVR не ас. но в прошлом видео автор канала объяснял что кнопку он подключил на считывание на землю, а подтягивает сам микроконтроллер, поправьте если я не правильно понял
@@isakneuman9995 Вы как в анекдоте: Почему бабы говорят что я плох в сексе, откуда они могут это понять за 40 секунд?
з.ы. Согласен, если вы ГУРУ, то можете оставлять такие "диванные" комменты. А про многократные проверки состояния и их обработку я тоже, представьте себе, знаю.
@@HemulMozyr Дребезг это НЕ наводка. Это физико-механический процесс. Любой механический контакт даёт дребезг в момент включения (как-бы включается и выключается десяток раз в милисекунду, пока подвижный контакт перестанет двигаться и не прижмется надёжно к не подвижному) и в момент выключения (особенно сильно проявляется, еще и благодаря индуктивности проводов и иногда нагрузки).
СПАСИБО ЗА ТРУД!!!
Дмитрий, какой вы молодец! Я учился по данной профессии, нам объясняли ужасающе поверхностно. Спасибо Вам за Ваш труд!
.
11:11 А это не из-за того, что, пока кнопка нажата, контроллер производит много циклов?
.
Я немного вас поправлю, дабы не плодить неправильных утверждений. if - это условие, а оператор это то, что проводит действия ==, и тд. Операнд это, над чем проводятся какие либо действия. Соответственно в условии выражение (а == с) оператор сравнения == проверяет действительно операнды а и с равны между собой.
Лучше чем в учебных заведениях.
У тебя в коде где-то ошибка: обратный отсчёт заканчивается, а бонба не взрывается. Исправь как надо и перезалей, пожалуйста.
Большое спасибо, очень интересное и понятное видео)
Както винаги отлично изложение! Благодаря! Успех!
Не могу понять. Делаю все тоже самое. Правда Атмега168. Делаю ВХОД на пины PB0 и PB1. Кнопки не работают. Делаю все тоже с PB6,7 все работает. PB3,4,5 заняты программатором SCK,MISO,MOSI. Почему пины В 0 и 1 на вход не работают не понимаю.
Как по мне самый идеальный способ устранения дребезга это написать автомат для его устранения.
Рабочий код , плюс третья управляющая кнопка .
#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; //возврат исходного значения потенциала на входных выводах
}
}
}
Нашел!!!! , а то на другом канале было смотрю там удалено, думал КАПУТ)))
Замість умови (PINB == 0b00000010) краще застосовувати (PINB & 0b00000010). Не знаю як Дмитро, а я стискався на практиці з таким явищем як наведення ("наводки") на сусідні "вільні" піни. Тобто, якщо на порту є піни з високоімпендансним режимом, то на них може бути логічна одиниця, яка без проблем зчитається PINx. І в такому випадку, якщо і натиснута кнопка, але через наведення буде логічна одиниця хоча б на одному з пінів даного порту, то умова (PINB == 0b00000010) просто не виконається. Більше того, умова (PINB & 0b00000010) є універсальною, що підходить під інші умови. Коли, наприклад, інші піни даного порту зайняти іншими задачами.
А зачем считывать данные всех 8 портов B? Если нужно остальные порты B сделать на выход, что тогда?
Как можно считывать значения только на PB0 и PB1 ??
Понять не могу), уже всю голову сломал)
Хочется добавить, что цифра 9 появляется из второго цикла FOR так как в первом условии Z
Вопрос, а если после установления параметра задержки дребезг контактов не ушел?
Я вместо индикатора подключил 4 светодиода на порт B. PB0 PB1 PB2 PB3. Кнопку на PC0. Никак не хотела работать. Переделал программу для порта D и перенес туда светодиоды, только после этого начало переключать. Так и должно быть?
Присоединяюсь к Василию Пупкину. Я тоже в ступор попал в этом месте. До этого все было понятно. И вообще уроки превосходные.
смотрите ответ чуть выше.
Значит пауза после 9 относится уже ко второму циклу. Если так, то я стал что-то понимать. Было бы нагляднее, если во втором цикле сделать другую задержку, скажем 2 секунды. Попробовал бы, но неделю не могу студию установить, пишет чего-то в винде не так. Еще раз спасибо!
@@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 такая беда. Обновляю винду и принудительно устанавливаю визуал студию, завтра узнаю результат. :)
@@user-ol1nk9ox7n логичнее ставить паузу в конце цикла. так меньше непоняток
Спасибо, будем пробовать
Доброго времени суток! Очень помогает ваши видео! Хотел спросить , будет ли видео по подключению индикаторов через регистр 74HC595 (статика и динамика). И в какой версии Atmel Studio вы работаете? Есть ли какие то различие между ними
1:00 Дмитрий, у порта "Д" нулевой бит отвечает за ресивер сериал-порта.
Если его как у вас программировать в еденицу, т.е. на выход, разве это не нарушит его работу?
Ресиверу принимать следует однако...
можно залочить микросхему?
16:09
А вы не подскажете, почему после прошивки меги, секунды идут не правильно? Т.е. (1секунда =1.5) каждой полтора секунды считает...1...2...3...
Хотя в проге поставил #Define F_CPU 8000000L и даже поставил так: F _CPU 1000000L и даже UL не помогает.
возможно прошит неправильно фьюз SCKDIV8
Микроконтроллеры с нуля! 15:25, где два цикла и в начале while пока остаётся portD равно массив, было это перескакивание с двух сразу до нуля. Странно. Ведь пока выполняется цикл, программа не должна перескакивать и должна находиться внутри цикла. Вообще не понятно
Единица была, просто ее на индикаторе без задержки сменила на 0 команда "PORTD=go2[z]", так как второй цикл завершился и задержка в 1 секунду не произошла. Если "_delay_ms 1000" перенести в обоих циклах на строчку ниже (в конец цикла), то команда "PORTD=go2[z]" ни на что не повлияла бы, вы просто не заметили бы ее результат.
А почему на порт С назначение кнопок не работает? Код один в один, только с портом С. Все заработало только когда кнопки перенёс на порт В. Или тут идет разделение на аналоговые и цифровые входы и выходы? МК Atmega328p.
Ну ок, тут все понятно. Такой вопрос есть семисигментный индикатор с 2 сдвиговыми регистрами один включает индикаторы другой высвечивает число, создали массив один с цифрами 0-9 цифры, другой массив с битами на включение элементов 1,2,3,4. А теперь как из этого всего мне выводить числа которые выдает один из входов типа float, как разбить число на элементы 246,6 или 1,342 и вывести на дисплей. А?
В коде пресутствует ошибка. Т.к. кнопка срабатывает при низком потенциале то код должен выглядеть PINB == 0b11111101для первой кнопки и PINB==0b11111110 для второй. Удивляет как у вас это работало) Или я где-то не доглядел?
Если подтягивать входные ножки к +5В, то всё, как Вы говорите. Но здесь входные ножки подтянуты следующим образом: DDRB = 0b00000011; .
Доброго времени суток.Споткнулся на том же самом :)... И еще вопрос - у меня работает только при PORTB = 0b11111111, а при PORTB = 0b00000011,кнопки не реагируют. Может кто объяснит? (разница в "прошивальщике", у меня Sina Prog). Спасибо.
@@evgenikutuzov132 ...так и в примере, и в видео подтянуты к плюсу, или я что-то путаю?
@@user-ig2jc8jx7f Разобрался? Тоже голову ломаю. В протеусе все работает. На реальной атмеге, только если PORTB = 0b11111111.
есть лсд семисегментный индикатор (стекляшка), они строятся зачастую на HT1621. снимите пожалуйста для него , как пользоваться даташитом и написать программу.
Спасибо!очень понятно. А где протеус можно скачать!)
Вялiкi дзякуй!
Здравствуйте. Может ли сама программа AtmelStudio подвисать .Когда программа доходит до операторов for и if она дальше перестает как бы работать ?
Поддерживают ли контроллеры мультипоточность?
У меня в proteus эта программа работает а на реальном микроконтролере нет. При нажатие на кнопки не считает. Подскажите в чем может быть причина.
люди помогите, как мне поставить _delay_ms() значение на входе ADC. Программа не компилируется, работает только если сам ввожу нужные значения длительности.
Вы можете помочь сделать таймер обратного отсчёта дней?
при долгом нажатии все равно счет идет в ту или иную сторону. Надо чтобы счет шел
независимо от времени нажатия , а от количества. Как сделать?
z должен меняться не после нажатия кнопки, а после (нажали + отпустили) кнопку
подскажите, как можно заставить мигать цифру на семисигментном дисплее. у меня в программе они вызываются при помощи переменной по нажатию кнопки, можно ли сделать что бы по нажатию второй кнопки цифра мигала?
Дмитрий Коренев я не разбираюсь, но по идеи напряжение какое-то время задержки не подается на индикатор или в самом этом индикаторе должен быть режим отключения дисплея. Просто наверное в цикле ddrD=0b00000000 на задержку а потом включить, но это не точно
super!!!
ждем 16 урок!!
В описании на сайте для оператора for переменная из двух символов
for (z=0; z
Это опечатка, но смысл не меняется ,так как здесь переменная z просто заменена другой переменной zz.
@@user-jr2wv4nj6x Ясно, спасибо.
Ардуино язык проще!!! НО!!! этот вот C++ очень интересен, несколько светодиодов можно зажечь одной командой))) язык сложнее но куда интереснее)) спасибо что я тебя нашел) только вот атмел студио у меня при выборе МК не открывает новый проект(поле кодинга) хз чё делать
ээээм, а как же кнопки с циклом for?
Magadan при завершении цикла for, микроконтроллер ни куда не денется и прочитает значение с кнопки.
Не будет массива, компилятор все оптимизирует и запишет все в команду...
)