Программирование микроконтроллеров. Полный курс для начинающих: diodov.net/programmirovanie-mikrokontrollerov-avr/ Электроника для начинающих. Мощный курс. diodov.net/elektronika-dlya-nachinayushhih/
Да. Хорошее объяснение. Всегда хотел понять как работают и программируются микросхемы и тп. Сейчас сижу и смотрю весь плейлист. Учитывая то что я программист, сне всё понятно и очень интересно. Спасибо.
Если внимательно посмотреть на работающую схему в Proteus-е, то можно увидеть неработающий светодиод №8. Просто добавьте задержку после строки: " LED = 0b11111111; ". Спасибо Вам огромное Дмитрий за Ваш труд и уроки!!!!
@Dmitriy Mod а потому что народ деградирует. Нет, чтобы к технологиям тянуться, изобретать что-то интересное, они вместо этого смотрят, как лизуна сделать в домашних условиях или желейного человечка..
Мне понравилось, как Вы четко и последовательно разъясняете. До этого смотрел других авторов и когда рассматривал таймеры то столкнулся с тем, что используют порт PIN, и задался вопросом, а почему нельзя считать с PORT. В youtube не нашел, пришлось много почитать и ели нашел в одном источнике. А тут сразу объяснили. Лайк.
Спасибо за видео. Но, правильно будет так на 3:37 - на нижней схеме надо рисовать не нормально замкнутый контакт , а просто замкнутый. Правильно ли я понимаю чтоб при одновременном нажатии двух кнопок ничего небыло -то надо прописать это в проге if(pinb==0b00000011) {LED=0b00000000 } ?
Логика в примере весьма простейшая, по правильному надо через else if. Как в примере будет работать не корректно схема, например при нажатии нижней кнопки светодиоды каждый цикл будут гаснуть на микросекунду, глазом не заметно но в рабочей схеме критично.
1:50 Значит всё равно установлен ли DDRx на вход или на выход, команда PORTx в любом случае будет выдавать 5 Вольт при заданной единице и Ноль при заданном нуле? Получается можно установить DDRx = 0, PORTx = 1 и светодиод из урока #4 всё равно будет светиться? То есть и при DDRx = 0 и при DDRx = 1, результат будет одинаковый если PORTx = 1?
Как помню там по разному питание подаётся. Если порт на выход настроен то через транзистор, который держит небольшой ток. Если на вход то через резистор. И его не хватит на светодиод. И кто вам не давал проверить это в железе. Если так интересно? Если порт не настроить на выход он не должен зажигать диоды. На истину не претендую, даташит не курил.
По факту это так, но режимы порта другие: 1. при DDRx=1 порт на выход, тут PORTx просто запись в порт 1 или 0 2. при DDRx = 0 порт на вход, тут PORTx настраивает порт: при 0 в высокоимпедансное состояние (10 мегаом примерно, чтобы на него не наводились всякие помехи и МК не тратил энергию на обработку этих сигналов - это если все упростить) при 1 подтягивает порт к плюсу питания (используется в том числе для передачи данных, когда ведомое устройство может посадить эту ножку на минус и МК поймет это, поэтому этот режим называется пушпул) Для светодиода это значит тока нет или ток есть, но суть другая
На порту D есть специальные пины Int0, Int1 для организаций внешних прерываний. Очень кстати на эти пины подключать кнопки и организовывать прерывания.
@@zamer_garage наверно потому, что после зажигания последнего светодиода не поставили задержку, он включается на 1 такт и сражу же начинается новый цикл и зажигается 1 й светодиод
Приветствую, спасибо за видеоуроки. Конкретно по этому ролику один вопрос. КОгда писали событие второй кнопки на последовательно включение лампочек, можно было бы использовать какой нибудь цикл для побитовой записи 1 вместо 0? Куча однотипных строчек все таки не самое удобное решение
Повторил все предоставленные Вами уроки. Жду с нетерпением видео о подключении светодиодов большего номинала с помощью транзисторного ключа. Скажите, а как сделать, чтобы светодиоды и микроконтроллер работали от 12 Вольт..? Заранее благодарен за ответ.
При проверке тестером при установке PORTx битов в 1 для случая DDRx 0x0 ток через кнопку 100мкА, т.е. стоит подтягивающий резистор около 43кОм. А вот для PORTx 0x0 вход действительно высокоомный и тока практически нет ни на +, ни на -, т.е. я к тому, что на 1:50 нарисован резистор на минус, но очень похоже, что его нет.
Спасибо.интересно👍. вопрос- приобретение отладочной платы для изучения MK atmel avr имеет смысл?в чём преимущество настоящего прибора перед виртуальным? спасибо.
Отладочная плата - это тот же МК, только с некоторым обвесом (светодиоды, индикаторы, интерфейсы и тд). Имхо, если МК есть в DIP корпусе - проще взять макетную плату (бредборд) и обвеса в россыпную
Безусловно хороший понятный урок! Но, по Вашей рекламе онлайн курса, цена в 230$ зашкаливает! Как говорится "будьте по проще и народ к Вам подтянется" Это секрет успеха многих высоко развитых стран и предприятий.
Тут кнопка работает так - 1 раз нажал - выполнился код. Т.е. если нажать и сразу отпустить вторую кнопку (PORTB1), то LED, согласно коду поочерёдно будут зажигаться. Т.е. для этого не нужно держать кнопку всё время. Вопрос: А как сделать так, что бы при отпускании кнопки прекращалось действие кода в {} оператора if?
Можно и через кейс. Мне проще через if. Писать меньше. Два варианта. Поочередное переключение кнопкой. Чуть поменять и можно включение сделат. Предполагаю есть вариант проще. int main(void) { DDRC |= 127; // 6 светодиодов на порт С //PORTC = 1; //можно не включать первый DDRB &= ~0x03; //кнопки на B0,B1 PORTB |= 0x03; // подтяжка к + while (1) { if (~PINB & 1) //переключает диоды по одному кнопка B0 { PORTC = PORTC
Сенсорные кнопки не пробовал делать на аналоговых входах? Читаешь напряжение на входе и если амплитуда помехи превышает порог значит состояние "нажата".
Первый светодиод не гаснет, а восьмой не светится! Присмотритесь внимательно. Исправьте код программы, скорее всего номера портов должны считаться с нуля, а не с единицы.
Кнопки работают, только если прописать единицы во все биты PORTB. Если прописать единицы только в нулевой и первый бит, а в остальные прописать нули, то кнопки работают только в Протеусе. В реальной схеме, кнопки в этом случае на работают.
Доброго времени суток! Мне показалось, что при нажатии 2 кнопки - 8 светодиод не загорелся. А в самом коде не установлен параметр Z после включения 8 светодиода.
8 светодиот загорался и сразу слишком быстро тух. Это маленькая ошибка автора, которую он как раз таки исправил, но не прокомментировал, поэтому вы на видео и не обратили внимание. А исправил он ошибку как раз таки тем что добавил нехватающую задержку. Это исправление он сделал молча после демонстрации.
Большое спасибо за Ваши уроки! Учусь, но столкнулся с проблемой: программа корректно работает в Протеусе, загружается в микроконтроллер без ошибок, но стоит мне отсоеденить программатор от компьютера как происходит какои-то сбой: диоды загораются частичо и перестают загораться по очереди. В автономном режиме после этого схема уже не работает: пара диодов светится частично, на нажатие кнопок реагирует хаотично. Вот такая пичалька. Не имею опыта и не могу понать что не так. Может что-то подскажите?
Вопрос , получается что к кнопкам , подтягивающий резистор цеплять не надо так как есть внутри мк резистор ? Во всех схемах что видел кругом к кнопкам цепляют всегда , резистор. Или я что-то путаю
Здравствуйте, подскажите, как сделать так, чтобы нажать кнопку и удерживать, и только в положении удержания этой кнопки нажать другую кнопку, чтобы включить светодиод. то есть мы можем включать светодиод второй кнопкой только в том случае, если нажата первая кнопка. я не прошу код, просто объясните каким образом можно реализовать?
А если представить что светодиодов не 8, а на всех возможных пинах и варианты мигания ещё разнообразнее. То можно ли использовать что то типа LED ++ вместо 0b00000001... 0b00000010…..
можете сделать баян из микроконтроллера :) Присоединить динамик, и выводить на него ШИМ необходимой частоты и длительности.Запрограммировать мелодию и наслаждаться музыкой!
@@splinterkab9007, быстрее, если нужно скопировать и вставить огромный блок текста, а не два слова по 5 букв. Кроме того, что напечатать будет быстрее, чем искать, копировать и вставлять, так еще и навык набора текста крепчает и мозг заставляешь работать на предмет запоминания слов и правильности их написания.
@@splinterkab9007 А вообще, претензии у меня начинаются с 13:47 . Он скопировал блок кода с задержкой и регистром, изменил один бит и заново скопировал этот же блок, но уже с измененным битом, дабы не мучаться с удалением и заново написанием этого бита, а можно было просто вставить один этот блок несколько раз и просто изменить нужные биты в каждом отдельном случае. задержка; регистр = 0б00000001; Копируешь блок и вставляешь его несколько раз, потом изменяешь нужные биты, в первом поменял один бит, во втором блоке два, в третьем три и т.д до 8(к примеру), а не копировать измененный блок, вставлять его и менять один бит, потом опять копировать, опять вставлять и опять менять только один бит. Как думаете, что из этого быстрее? А все потому, что человек привык копировать и вставлять, а не прописывать код, ибо это много букАв, хоть и одинаковые. Развиваться нужно, причем это не требует финансовых затрат, кроме временных. (хотя я не знаю для чего он так сделал, может он отлично печатает, но не хотел забивать звук в видео шумом от нажатий клавиш.. кто его знает, но коп/вст в глаза мне бросилось)
Программирование микроконтроллеров. Полный курс для начинающих: diodov.net/programmirovanie-mikrokontrollerov-avr/
Электроника для начинающих. Мощный курс. diodov.net/elektronika-dlya-nachinayushhih/
молодчик доступно и поятно четко вы единственный где нашел разумное и последовательное разяснение на си
Да. Хорошее объяснение. Всегда хотел понять как работают и программируются микросхемы и тп. Сейчас сижу и смотрю весь плейлист. Учитывая то что я программист, сне всё понятно и очень интересно. Спасибо.
Если внимательно посмотреть на работающую схему в Proteus-е, то можно увидеть неработающий светодиод №8. Просто добавьте задержку после строки: " LED = 0b11111111; ".
Спасибо Вам огромное Дмитрий за Ваш труд и уроки!!!!
Такие увлекательные и подробные уроки, что даже забываешь оставить комментарий или лайк! :) Я обязательно поставлю под все эти видео лайк!
@Dmitriy Mod а потому что народ деградирует. Нет, чтобы к технологиям тянуться, изобретать что-то интересное, они вместо этого смотрят, как лизуна сделать в домашних условиях или желейного человечка..
@@АртёмКапельцев или как выпивоха, делая кульбит, падает на голову
@Dmitriy Mod молодежь не смотрит программирование, им подавай как девки сисками трясут..
Коллеги, вы как никогда правы!!!
так просто обьеснеяете все понятно отлично спасибо за труд
Мне понравилось, как Вы четко и последовательно разъясняете. До этого смотрел других авторов и когда рассматривал таймеры то столкнулся с тем, что используют порт PIN, и задался вопросом, а почему нельзя считать с PORT. В youtube не нашел, пришлось много почитать и ели нашел в одном источнике. А тут сразу объяснили. Лайк.
Большое спасибо! Действительно понятно для не программиста на си!
Вы очень крутой человек , спасибо вам большое , всегда очень сильно помогаете разбираться в оазличных темах
Большое спасибо за отличные уроки !!
Великолепно ! Обяснение на специалист с висок професионализъм , кратко, точно и ясно изложение! Благодаря!
Спасибо за труд, комментарий в поддержку канала. Мне всё понятно, хорошо подан материал.
спасибо за труд!!!
Спасибо Вам за Ваши труды!!!!
Спасибо за видео.
Но, правильно будет так на 3:37 - на нижней схеме надо рисовать не нормально замкнутый контакт , а просто замкнутый.
Правильно ли я понимаю чтоб при одновременном нажатии двух кнопок ничего небыло -то надо прописать это в проге if(pinb==0b00000011) {LED=0b00000000 } ?
Логика в примере весьма простейшая, по правильному надо через else if. Как в примере будет работать не корректно схема, например при нажатии нижней кнопки светодиоды каждый цикл будут гаснуть на микросекунду, глазом не заметно но в рабочей схеме критично.
Благодарствую!!!
Лучшие видео в ютубе
Очень доходчиво,СПАСИБО!!!
Качественные лекции.
Спасибо.
Большое спасибо!
1:50 Значит всё равно установлен ли DDRx на вход или на выход, команда PORTx в любом случае будет выдавать 5 Вольт при заданной единице и Ноль при заданном нуле?
Получается можно установить DDRx = 0, PORTx = 1 и светодиод из урока #4 всё равно будет светиться? То есть и при DDRx = 0 и при DDRx = 1, результат будет одинаковый если PORTx = 1?
Тоже интересно, как вам ответят, дайте знать
Как помню там по разному питание подаётся. Если порт на выход настроен то через транзистор, который держит небольшой ток. Если на вход то через резистор. И его не хватит на светодиод. И кто вам не давал проверить это в железе. Если так интересно? Если порт не настроить на выход он не должен зажигать диоды. На истину не претендую, даташит не курил.
По факту это так, но режимы порта другие:
1. при DDRx=1 порт на выход, тут PORTx просто запись в порт 1 или 0
2. при DDRx = 0 порт на вход, тут PORTx настраивает порт:
при 0 в высокоимпедансное состояние (10 мегаом примерно, чтобы на него не наводились всякие помехи и МК не тратил энергию на обработку этих сигналов - это если все упростить)
при 1 подтягивает порт к плюсу питания (используется в том числе для передачи данных, когда ведомое устройство может посадить эту ножку на минус и МК поймет это, поэтому этот режим называется пушпул)
Для светодиода это значит тока нет или ток есть, но суть другая
Stm32 не планируется?
На порту D есть специальные пины Int0, Int1 для организаций внешних прерываний. Очень кстати на эти пины подключать кнопки и организовывать прерывания.
Доброго времени суток.
А почему при нажатии второй кнопки 8 светодиод не загорался?
Ведь вы его прописали.
@@zamer_garage наверно потому, что после зажигания последнего светодиода не поставили задержку, он включается на 1 такт и сражу же начинается новый цикл и зажигается 1 й светодиод
13:50 Не проще ли так: LED++ ?
Приветствую, спасибо за видеоуроки.
Конкретно по этому ролику один вопрос.
КОгда писали событие второй кнопки на последовательно включение лампочек, можно было бы использовать какой нибудь цикл для побитовой записи 1 вместо 0?
Куча однотипных строчек все таки не самое удобное решение
Дальше будут побитовые операции. Я этот плейлист вижу впервые, но покупал полный курс. Там все полностью и толково изложено. Своих денег стоит.
Спасибо за новые видео по авр
Повторил все предоставленные Вами уроки. Жду с нетерпением видео о подключении светодиодов большего номинала с помощью транзисторного ключа. Скажите, а как сделать, чтобы светодиоды и микроконтроллер работали от 12 Вольт..? Заранее благодарен за ответ.
@Dmitriy Mod понизит, только приличное выделение энергии на нем будет, легко выйдет из строя кренка
@@олегспирин-р4р ну это смотря какие диоды воткнуть. На мк кренки хватит. А диоды от 12 В через ключи питать.
При проверке тестером при установке PORTx битов в 1 для случая DDRx 0x0 ток через кнопку 100мкА, т.е. стоит подтягивающий резистор около 43кОм. А вот для PORTx 0x0 вход действительно высокоомный и тока практически нет ни на +, ни на -, т.е. я к тому, что на 1:50 нарисован резистор на минус, но очень похоже, что его нет.
Спасибо.интересно👍. вопрос- приобретение отладочной платы для изучения MK atmel avr имеет смысл?в чём преимущество настоящего прибора перед виртуальным? спасибо.
Отладочная плата - это тот же МК, только с некоторым обвесом (светодиоды, индикаторы, интерфейсы и тд). Имхо, если МК есть в DIP корпусе - проще взять макетную плату (бредборд) и обвеса в россыпную
@@cr00zили ардуину для ленивых)
Офигенный ролик
Безусловно хороший понятный урок! Но, по Вашей рекламе онлайн курса, цена в 230$ зашкаливает!
Как говорится "будьте по проще и народ к Вам подтянется" Это секрет успеха многих высоко развитых стран и предприятий.
Как говорится "сделай свой курс, и хоть за бесплатно раздавай, как раздаешь свои советы.".
@@BoooMMMs Сам то,, тоже с "заумными" советами поязвить, специалист.
Тут кнопка работает так - 1 раз нажал - выполнился код. Т.е. если нажать и сразу отпустить вторую кнопку (PORTB1), то LED, согласно коду поочерёдно будут зажигаться. Т.е. для этого не нужно держать кнопку всё время.
Вопрос: А как сделать так, что бы при отпускании кнопки прекращалось действие кода в {} оператора if?
/* кнопка подключена к PD7(13),светодиод к PB0(14)
* GccApplication15.cpp
*
* Created: 11.11.2018 19:01:13
* Author : денис
*/
#include
#include
bool last = true;
bool led = false;
bool a = true;
int main(void)
{
DDRD = 0b00000000;
PORTD = 0b11111111;
DDRB |= (1
Как частота 1млн герц будет влиять на потребление тока? Имеет смысл для этой задачи задать частоту например 1000гц?
Как сделать поочередное включение светодиодов с помощью кнопки? Вроде бы как нужно через switch(case), но я не особо понимаю как это сделать
Можно и через кейс. Мне проще через if. Писать меньше. Два варианта. Поочередное переключение кнопкой. Чуть поменять и можно включение сделат. Предполагаю есть вариант проще.
int main(void)
{
DDRC |= 127; // 6 светодиодов на порт С
//PORTC = 1;
//можно не включать первый
DDRB &= ~0x03; //кнопки на B0,B1
PORTB |= 0x03; // подтяжка к +
while (1)
{
if (~PINB & 1) //переключает диоды по одному кнопка B0
{
PORTC = PORTC
Так будет включать последователно
if (~PINB & 0x2)//включает диоды последовательно кнопка на B1
{
PORTC
Можно ли как-то в Proteus ввести сигналы с внешних источников ? Например, через звуковую карту ?
Сенсорные кнопки не пробовал делать на аналоговых входах? Читаешь напряжение на входе и если амплитуда помехи превышает порог значит состояние "нажата".
Первый светодиод не гаснет, а восьмой не светится! Присмотритесь внимательно. Исправьте код программы, скорее всего номера портов должны считаться с нуля, а не с единицы.
А первый не гаснет, потому что в начале (или в конце) тела второго условия нужно все диоды погасить.
Здравствуйте не устанавливается вторая кнопка , пишет ошибки, всё проверил!
Кнопки работают, только если прописать единицы во все биты PORTB. Если прописать единицы только в нулевой и первый бит, а в остальные прописать нули, то кнопки работают только в Протеусе. В реальной схеме, кнопки в этом случае на работают.
а почему перед включением светодиода задержка не работает?
Доброго времени суток!
Мне показалось, что при нажатии 2 кнопки - 8 светодиод не загорелся. А в самом коде не установлен параметр Z после включения 8 светодиода.
8 светодиот загорался и сразу слишком быстро тух. Это маленькая ошибка автора, которую он как раз таки исправил, но не прокомментировал, поэтому вы на видео и не обратили внимание. А исправил он ошибку как раз таки тем что добавил нехватающую задержку. Это исправление он сделал молча после демонстрации.
8 ой не горит почему ?
Привет всем
Не подскажете где можно бесплатно скачать proteus для win 10.
гуглю и каждый раз какой то мусор скачивает или не подходит для win10.
Большое спасибо за Ваши уроки! Учусь, но столкнулся с проблемой: программа корректно работает в Протеусе, загружается в микроконтроллер без ошибок, но стоит мне отсоеденить программатор от компьютера как происходит какои-то сбой: диоды загораются частичо и перестают загораться по очереди. В автономном режиме после этого схема уже не работает: пара диодов светится частично, на нажатие кнопок реагирует хаотично. Вот такая пичалька. Не имею опыта и не могу понать что не так. Может что-то подскажите?
Все. Разобрался. Всем спасибо.
спасибо
Вопрос , получается что к кнопкам , подтягивающий резистор цеплять не надо так как есть внутри мк резистор ? Во всех схемах что видел кругом к кнопкам цепляют всегда , резистор. Или я что-то путаю
Иногда и конденсаторы ставят чтоб не шумели кнопки.
скажите пожалуйста, как в протеусе открыть файл pdsprj?
забыл сказать про дребезг контактов
Здравствуйте. Почему-то у меня на 7 уроке при подключении кнопки при компиляции выходит ошибка
Здравствуйте, подскажите, как сделать так, чтобы нажать кнопку и удерживать, и только в положении удержания этой кнопки нажать другую кнопку, чтобы включить светодиод. то есть мы можем включать светодиод второй кнопкой только в том случае, если нажата первая кнопка. я не прошу код, просто объясните каким образом можно реализовать?
Логика такова.Если первая нажата и вторая нажата диоды горят. Если по другому, то ничего не горит.
Подскажите кто знает откуда скачать нормальную Протеус?
С рутрекера попробую, у меня получилось
Константе LED присвоим значение нулей. Константе.... Нулей! И тут я понял что меня накрыло)
присвоили не самой константе, а регистру порта, название которого объявлено как константа )
Никак не могу запустить программу, ошибки, хотя вроде 1 к 1.
спасибо!
нейминг переменнных конечно хромает
А если представить что светодиодов не 8, а на всех возможных пинах и варианты мигания ещё разнообразнее. То можно ли использовать что то типа LED ++ вместо 0b00000001... 0b00000010…..
Можно. В полном курсе есть полное объяснение.
Довольно таки очпуеть!
Здарова брат я из Армени .можеш ли зделот таимер на 3,7 волта
нет четкой последователности . Пронумерованности. Посмотрел второй урок а затем стоит 27. а гд 3.4.5... итд.
У вас в некоторых местах видео мутнеет , и не разборчиво видно .
+
Великолепноен решение!!! А можно им управлять баяном как в этом видео? th-cam.com/video/0TTXVMMWlbU/w-d-xo.html
можете сделать баян из микроконтроллера :) Присоединить динамик, и выводить на него ШИМ необходимой частоты и длительности.Запрограммировать мелодию и наслаждаться музыкой!
Лентяй, каждую запятую копирует и вставляет. Но, жить, наверно, хорошо, когда кнопки нажИл честным непосильным трудом?)
А так норм))
Так быстрее. Всегда так делаю.
@@splinterkab9007, быстрее, если нужно скопировать и вставить огромный блок текста, а не два слова по 5 букв. Кроме того, что напечатать будет быстрее, чем искать, копировать и вставлять, так еще и навык набора текста крепчает и мозг заставляешь работать на предмет запоминания слов и правильности их написания.
@@splinterkab9007 А вообще, претензии у меня начинаются с 13:47 . Он скопировал блок кода с задержкой и регистром, изменил один бит и заново скопировал этот же блок, но уже с измененным битом, дабы не мучаться с удалением и заново написанием этого бита, а можно было просто вставить один этот блок несколько раз и просто изменить нужные биты в каждом отдельном случае.
задержка;
регистр = 0б00000001;
Копируешь блок и вставляешь его несколько раз, потом изменяешь нужные биты, в первом поменял один бит, во втором блоке два, в третьем три и т.д до 8(к примеру), а не копировать измененный блок, вставлять его и менять один бит, потом опять копировать, опять вставлять и опять менять только один бит. Как думаете, что из этого быстрее? А все потому, что человек привык копировать и вставлять, а не прописывать код, ибо это много букАв, хоть и одинаковые. Развиваться нужно, причем это не требует финансовых затрат, кроме временных. (хотя я не знаю для чего он так сделал, может он отлично печатает, но не хотел забивать звук в видео шумом от нажатий клавиш.. кто его знает, но коп/вст в глаза мне бросилось)
@@ВладимирСамокиш-т6г ну это верно. Мелкие блоки лучше перетаскивать зажав CTRL. Если не очень далеко. Я то обычно большие части копирую.
спасибо
спасибо!!!