Программирование микроконтроллеров. Полный курс для начинающих: diodov.net/programmirovanie-mikrokontrollerov-avr/ Электроника для начинающих. Мощный курс. diodov.net/elektronika-dlya-nachinayushhih/
Вот хорошая серия роликов... но не без ложки дегтя в этом ролике. В начале у нас в PORTD записано число 0001 1100. Рассмотрим пример: PORTD = PORTD | (1
@@olegrusski8646 вводит в заблуждение то, что все сразу пытаются сокращённый вариант записи использовать. Продолжая пример из моего первого комментария. Если заменить PORTD после равно, например на число, логические операции на привычные арифметические (+,-,/,*) и запись (1
@@bozhkou Я уже после вашего объяснения понял, что эта запись и есть арифметическая операция, где данные порта - это одно число, элемент ИЛИ - это сложение, а выражение в скобках - это второе число))) Пересмотрел второй раз, после того, как понял всю суть, и видео стало еще понятнее. По вашему примеру я даже расписал себе в тетради арифметические операции с ноликами и единичками, чтобы осмыслить, как получается конечный результат. Теперь все встало на свои места!
Не совсем тогда понятна запись ноля во все биты ...&=~..., например было PORTB=00001111; 00001111 & 11111111 = 00001111 ~ 11110000 (вместо желаемых 00000000)
Вы эти светодиоды установите в трафарет из картона например. И подпишите х0, х1 .... не надо будет считать каждый раз и нам наглядно будет!. но так чтобы они не торчали высоко. А то засвечивает друг друга.
if и while не взаимозаменяемы. if выполняется один раз, а while будет проверяться каждый раз, как только указатель доберется до конца тела while в коде. Т.е. в постоянном цикле. if в коде используется для разветвления программы, а while для ее зацикливания.
Странно, у меня код со знаком инверсии работает, а с "восклицательным знаком и равно" - не работает! Считывает сходу как будто кнопка уже нажата. Почему так? (причем в Протеус все варианты работают корректно, а в реальном железе нет; вместе с тем, в реальном железе знак инверсии и просто восклицательный знак выполняются корректно)
Спасибо за уроки, очень хорошо объясняете.Но по моему тут ошибка в разборе ожидания сброса или установки в цикле while . Вам не кажется что нужно наоборот.while (~PINB & (1
Здравствуйте! Очень хорошо все объясняете. Не могу только разобраться, как сделать операции с несколькими кнопками , чтобы команды с них не влияли друг на друга. У меня от нажатия мигают по частоте, видимо кольцуются команды. Что делать не подскажете? К слову я совсем новичок, только по видео и научился.
Дмитрий Цветов вот то то и непонятно, зачем сдвиг, если он ничего не сдвигает. А оператор ИЛИ какую роль играет? Как я понял, он должен сравнивать два бита и если в одном из них 1, то на выходе должна быть единица. Но непонятно что и с чем он сравнивает
Дмитрий Цветов то есть при помощи оператора ИЛИ мы сравниваем текущее значение порта D 0b00010000 со значением 0b00000001, при этом в результате получаем 0b00010001. Значит при записи PORTD &=(1
Дмитрий Цветов по поводу того, какой код прочесть легче, я бы поспорил. Я сейчас только при помощи бумаги и ручки записав значения 0b1000000 | 0b00000100, вычислив результат и произведя над ним инверсию, смог понять что это тоже самое что записать (0b00000000 | 0b01111011). Во втором случае всё более наглядно и понятно
Привет. Я не совсем понял, а как реализовать. Одна кнопка и один светодиод. Нажимаю один раз на кнопку, светодиод горит постоянно, нажимаю второй раз на кнопку, начинает мигать светодиод с частотой 1секкнла. Ещё раз нажимаю на кнопку, светодиод тухнет.
Здравствуйте, у меня порт B при считывание положительного потенциала, при нажатии кнопки подаётся +5, ни одна из команд не работают, на протеусе, и на камне. А при другом варианте работы порта, когда заземляется ножка порта, всё отлично, работает. Почему так?
Не знаю актуально ли ещё, открываете проект и включается пустое окно Atmel Studio. Справа есть окно вертикальное, в нём есть меню где надо выбрать Solution Explorer и тогда появятся файлы из проекта, далее выбираете программу main.c и работаете дальше
Здравствуйте. А я не совсем понял логику действий программы со сдвигом нулевого бита влево и логического или. Ну сдвигаем мы нулевой бит влево, там как был ноль, так и остается и в изначально сконфигурированном порту тоже ноль там, откуда единица берется?
Здпавствуйте, автор. Очень благодарен Вам за подробные уроки, включительно по 10-й. И вот пошли первые подводные камни. Не совсем понятно (нет - вру, совсем не понятно) как воспринимать запись PORTD =PORTD | (1
& это не ИЛИ, это И. if будет выполняться только в том случае если в () будет 1 или по другому true, если в () 0 подругому false, будет выполняться else. Если нет else то ничего выполняться не будет. Коряво но как-то так.
Я понял тему с логическими и побитовыми операциями.Но одно я не понял точно.Если у меня PORTD = 0b11111111 и я хочу потушить один из битов,я не могу сделать так PORTD = (0
так ты "сдвинеш" весь порт,на то количество которое ввел.и с той стороны "куда",то количество битов что ввел/сдвинул,станет тождественно введенному "пожеланию".а если нужно чтобы другие биты не изменили своего состояния?то что "хочеш" ты,в двух словах,"ввести справа ноль три раза",при этом сдвигается весь регистр,с "выбрасыванием" трех левых битов.и если третий был единицей то она сдвинется на три влево,и если шестой был ноль,то станет единицей.
У меня схема работает только когда подключу все подтягивающие резисторы ко входному порту. Если резистор подключен только к нулевому порту как у автора, всё висит без изменений и в Протеусе и на макетке. Контроллер ATmega16A.
Для того, чтобы установить нулевой, шестой и седьмой биты, достаточно логически сложить "портД" и 11000001. И это короче и понятней чем нагромождение >> и
Да, но если вы не знаете какие биты вам надо установить? Допустим вначале вы определили константу, которая определяет бит в порту, на который установлен диод. Допусти назвали ее const. И теперь вы можете сделать, допустим, так: DDRD = DDRD | (1
автору бы изучить немного си для начала, путает логические операторы с побитовыми, вводя зрителей в заблуждение, кажется он сам не знает суть этих строк.
@@finskiymaster если у человека есть мозг (а по дефолту он есть), если человек умеет этой частью организма пользоваться (по дефолту умеет, но как-то не у всех эта способность сохраняется да же до подросткового возраста, иногда до окончания вуза...), материала изложенного в серии этих уроков, достаточно, для реализации всего и вся, если слушатель умеет юзать мозг по прямому предназначению. Главное чему учит автор, читать даташит, и делает это на конкретном примере и делает это на довольно хорошем уровне.
Сразу чувствуется огромный недостаток в педагогическом плане, аналогии и примеры не используются автором вообще, и где мне понадобятся эти сдвиги в реальной схеме с датчиками и моторами, совсем не понятно. А эти пресловутые светодиоды, никому не нужные, уже достали до такой степени, что кажется, это единственный элемент который мы можем использовать в работе с МК. И к чему эти сдвиги, если можно просто назначить тот или иной СД на 1 или 0, совершенно не понятно, к чему такие сложности, не объясняется! Сто раз пересмотрел, и ничего понять не могу, для чего эти операнты и сдвиги в реальной схеме с датчиками, никак не понятно.
Программирование микроконтроллеров. Полный курс для начинающих: diodov.net/programmirovanie-mikrokontrollerov-avr/
Электроника для начинающих. Мощный курс. diodov.net/elektronika-dlya-nachinayushhih/
Вот хорошая серия роликов... но не без ложки дегтя в этом ролике.
В начале у нас в PORTD записано число 0001 1100.
Рассмотрим пример: PORTD = PORTD | (1
Вот теперь я понял как это работает.
@@olegrusski8646 вводит в заблуждение то, что все сразу пытаются сокращённый вариант записи использовать. Продолжая пример из моего первого комментария. Если заменить PORTD после равно, например на число, логические операции на привычные арифметические (+,-,/,*) и запись (1
@@bozhkou Я уже после вашего объяснения понял, что эта запись и есть арифметическая операция, где данные порта - это одно число, элемент ИЛИ - это сложение, а выражение в скобках - это второе число))) Пересмотрел второй раз, после того, как понял всю суть, и видео стало еще понятнее. По вашему примеру я даже расписал себе в тетради арифметические операции с ноликами и единичками, чтобы осмыслить, как получается конечный результат. Теперь все встало на свои места!
Не совсем тогда понятна запись ноля во все биты ...&=~..., например было PORTB=00001111;
00001111
&
11111111
=
00001111
~
11110000 (вместо желаемых 00000000)
Или 0 принудительно не записать в бит независимо от имевшегося значения? Если 0 уже был то при попытке записи 0 получим 1?
Друг ты не представляешь на сколько ты красавчик!! :))
Очень прошу выпустить 2-ю часть этого урока. Ибо идти дальше не вижу смысла. Это база. Судя по комментам тема актуальна для многих.
ВО! Теперь я понял почему на авто делают управление по массе! А то встречались какие-то невнятные объяснения. Спасибо за полезную инфу.
Самые лучшее объяснение для начинающих. Все остальные многое упускают.
Спасибо огромное!Самые толковые и понятные уроки по микроконтроллерам Удачных Вам проектов..
Огроомное вам спасибо за предоставленный вам подробный урок!!!!
Автор просто молодец !!! Долго я искал такое понятное видео.
вот как надо объяснять!! Автор, спасибо!
Здравствуйте. Спасибо Вам за ваши труды. Всё очень подробно объясняете.
Алгоритмика очень увлекательная дисциплина. С детства ее обожаю..
Гутт!!!
Хоть кто-то рассказал как менять один бит
Красавчик! Всё четко и ясно!!!! Восхищаюсь!))))
автор молодец. всё понятно даже мне.
спасибо за уроки хорошие. может что и упустили, как нам про сброс в ноль, но мне очень все нравиться
Совершенно непонятно откуда вдруг берется выражение 1
Предыдущая тема. У него кнопка на 0 бите порта PORTB. Хотя можно было просто 1 написать вместо (1
Разобрались?)
@@sergeyrink3003 нет, нельзя было. Такая запись означает «установить единицу на нулевой бит». А просто 1 установит единицу на весь порт б
Вы эти светодиоды установите в трафарет из картона например. И подпишите х0, х1 .... не надо будет считать каждый раз и нам наглядно будет!. но так чтобы они не торчали высоко. А то засвечивает друг друга.
if и while не взаимозаменяемы. if выполняется один раз, а while будет проверяться каждый раз, как только указатель доберется до конца тела while в коде. Т.е. в постоянном цикле. if в коде используется для разветвления программы, а while для ее зацикливания.
Странно, у меня код со знаком инверсии работает, а с "восклицательным знаком и равно" - не работает! Считывает сходу как будто кнопка уже нажата. Почему так? (причем в Протеус все варианты работают корректно, а в реальном железе нет; вместе с тем, в реальном железе знак инверсии и просто восклицательный знак выполняются корректно)
Спасибо за урок!!
Спасибо за уроки, очень хорошо объясняете.Но по моему тут ошибка в разборе ожидания сброса или установки в цикле while . Вам не кажется что нужно наоборот.while (~PINB & (1
Я не силен в C, но по логике и той и той записью можно любое значение проверять, например:
while (PINB & (1
Спасибо за труд!!!!
Здравствуйте! Очень хорошо все объясняете. Не могу только разобраться, как сделать операции с несколькими кнопками , чтобы команды с них не влияли друг на друга. У меня от нажатия мигают по частоте, видимо кольцуются команды. Что делать не подскажете? К слову я совсем новичок, только по видео и научился.
if(0 !=(PIND &(1
Доброе время суток. Спасибо за ваш труд. if(~PINB & ((1
Вообще ничего не понял. Какая связь между И, ИЛИ, НЕ, искл. ИЛИ и тем кодом на видео?
Как расшифровывается PORTD =PORTD | (1
PORTD это 0b0010000 (для примера),
(1
Дмитрий Цветов вот то то и непонятно, зачем сдвиг, если он ничего не сдвигает.
А оператор ИЛИ какую роль играет? Как я понял, он должен сравнивать два бита и если в одном из них 1, то на выходе должна быть единица. Но непонятно что и с чем он сравнивает
@@КириллДенисов-ю3р ,
Оператор "ИЛИ" сравнивает два бита в каждом разряде двоичных чисел. В примере выше:
8 7 6 5 4 3 2 1 - номер разряда,
0b 0 0 0 1 0 0 0 0 - PORTD (установлен бит в пятом разряде в 1),
0b 0 0 0 0 0 0 0 1 - (1
Дмитрий Цветов то есть при помощи оператора ИЛИ мы сравниваем текущее значение порта D 0b00010000 со значением
0b00000001, при этом в результате получаем
0b00010001.
Значит при записи
PORTD &=(1
Дмитрий Цветов по поводу того, какой код прочесть легче, я бы поспорил. Я сейчас только при помощи бумаги и ручки записав значения 0b1000000 | 0b00000100, вычислив результат и произведя над ним инверсию, смог понять что это тоже самое что записать
(0b00000000 | 0b01111011). Во втором случае всё более наглядно и понятно
Привет. Я не совсем понял, а как реализовать. Одна кнопка и один светодиод. Нажимаю один раз на кнопку, светодиод горит постоянно, нажимаю второй раз на кнопку, начинает мигать светодиод с частотой 1секкнла. Ещё раз нажимаю на кнопку, светодиод тухнет.
Здравствуйте, у меня порт B при считывание положительного потенциала, при нажатии кнопки подаётся +5, ни одна из команд не работают, на протеусе, и на камне. А при другом варианте работы порта, когда заземляется ножка порта, всё отлично, работает. Почему так?
Не понимаю почему бы не записать в порт нужный байт и не извращаться с логическими операциями? Ведь одинаковое процессорное время это займет? Или нет?
В данный момент это не очень нужно. Но постепенно с усложнением программ это будет становится всё полезней и полезней
как открыть сохраненный проект в Atmel и изменить его?
Не знаю актуально ли ещё, открываете проект и включается пустое окно Atmel Studio. Справа есть окно вертикальное, в нём есть меню где надо выбрать Solution Explorer и тогда появятся файлы из проекта, далее выбираете программу main.c и работаете дальше
Подскажите пожалуйста а как проверить одновременно несколько битов? Ну к примеру нажатие сразу двух и более кнопок? while (~PINB & (1
Здравствуйте. А я не совсем понял логику действий программы со сдвигом нулевого бита влево и логического или. Ну сдвигаем мы нулевой бит влево, там как был ноль, так и остается и в изначально сконфигурированном порту тоже ноль там, откуда единица берется?
Здпавствуйте, автор. Очень благодарен Вам за подробные уроки, включительно по 10-й. И вот пошли первые подводные камни. Не совсем понятно (нет - вру, совсем не понятно) как воспринимать запись PORTD =PORTD | (1
Надо понять последовательность действий. Сперва выполняются действия в скобках. Результат (1
Всё отлично. Одно не могу понять( когда на PORTB подключён потенциал 5В):
В начальный момент времени
PORTB=0b00000000;
далее
if(PINB&(1
& это не ИЛИ, это И. if будет выполняться только в том случае если в () будет 1 или по другому true, если в () 0 подругому false, будет выполняться else. Если нет else то ничего выполняться не будет. Коряво но как-то так.
Я понял тему с логическими и побитовыми операциями.Но одно я не понял точно.Если у меня PORTD = 0b11111111 и я хочу потушить один из битов,я не могу сделать так PORTD = (0
тоже такой вопрос
Я разобрался, если мы будем сразу писать PORTD = (0
так ты "сдвинеш" весь порт,на то количество которое ввел.и с той стороны "куда",то количество битов что ввел/сдвинул,станет тождественно введенному "пожеланию".а если нужно чтобы другие биты не изменили своего состояния?то что "хочеш" ты,в двух словах,"ввести справа ноль три раза",при этом сдвигается весь регистр,с "выбрасыванием" трех левых битов.и если третий был единицей то она сдвинется на три влево,и если шестой был ноль,то станет единицей.
@@sergeysergeev8678 Думаю, врядли тут(у Вас) можно что-то разобрать.
@@codefinder2232 тогда забей
У меня схема работает только когда подключу все подтягивающие резисторы ко входному порту. Если резистор подключен только к нулевому порту как у автора, всё висит без изменений и в Протеусе и на макетке. Контроллер ATmega16A.
Спасибо!!!
Скажите пажалуйста, можем ли обратимся к конкретном пином так: PORTB.0=1; вместо PORTB I= (1
В AVR Studio так обращаться к конкретному пину нельзя, только вторая запись. А вот в CodeVisionAVR - можно и первым способом.
Для того, чтобы установить нулевой, шестой и седьмой биты, достаточно логически сложить "портД" и 11000001. И это короче и понятней чем нагромождение >> и
Да, но если вы не знаете какие биты вам надо установить? Допустим вначале вы определили константу, которая определяет бит в порту, на который установлен диод. Допусти назвали ее const. И теперь вы можете сделать, допустим, так: DDRD = DDRD | (1
какая разница между этими командами если по сути они ставят на PC1 +5в.
portc=(1
portc= (1
portc|=(1
Спасибо
Класс
как отключить рекламу ?
AdBlock
Купить подписку. На авито можно дешевле найти наверное
@@DS-ls7ck Пчёл, какая подписка? Предлагаешь деньги платить? AdBlock бесплатен и делает свое дело.
Какой это язык ?
Fortuna Alex си
Русский
Зачем ты показываешь на реальном микроконтроллере и в пртэусе
автору бы изучить немного си для начала, путает логические операторы с побитовыми, вводя зрителей в заблуждение, кажется он сам не знает суть этих строк.
Добрый день.
#include
int main(void)
{
DDRC &= ~(1
Вместо PIND поставь PINC
Или нужно вначале DDRC и PORTC заменить на ...D
Если же это маркетинговый ход и получить ответы на этот и последующие ответы можно только за 230$, то можете пропустить этот коммент.
интересно, а за 230$ автор вливает в головы ученикам такую же ересь, или все-таки что то полезное?
@@finskiymaster если у человека есть мозг (а по дефолту он есть), если человек умеет этой частью организма пользоваться (по дефолту умеет, но как-то не у всех эта способность сохраняется да же до подросткового возраста, иногда до окончания вуза...), материала изложенного в серии этих уроков, достаточно, для реализации всего и вся, если слушатель умеет юзать мозг по прямому предназначению. Главное чему учит автор, читать даташит, и делает это на конкретном примере и делает это на довольно хорошем уровне.
Сразу чувствуется огромный недостаток в педагогическом плане, аналогии и примеры не используются автором вообще, и где мне понадобятся эти сдвиги в реальной схеме с датчиками и моторами, совсем не понятно. А эти пресловутые светодиоды, никому не нужные, уже достали до такой степени, что кажется, это единственный элемент который мы можем использовать в работе с МК. И к чему эти сдвиги, если можно просто назначить тот или иной СД на 1 или 0, совершенно не понятно, к чему такие сложности, не объясняется! Сто раз пересмотрел, и ничего понять не могу, для чего эти операнты и сдвиги в реальной схеме с датчиками, никак не понятно.
1