Тёмный

Программирование avr микроконтроллеров в среде Atmel Studio "Урок7 аtmеga таймер " 

Microcontrollers
Подписаться 46 тыс.
Просмотров 71 тыс.
50% 1

www.pcbway.com - PCBWay изготовление печатных плат. Программирование микроконтроллеров avr для начинающих в среде Atmel Studio.Тема урока: Таймер Т0 нормальный режим и сброс при совпадении в Atmega 16.
Данные уроки нацелены на аудиторию начинающих программировать контроллеры avr фирмы Atmel. Уроки помогут разобраться с внутренней периферией микроконтроллера Atmega 16. Все примеры рассмотрены в программе Atmel Studio.
Плейлист • микроконтроллеры avr '...

Опубликовано:

 

3 сен 2013

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 200   
@gt540gfx
@gt540gfx 10 лет назад
Там микросекунды а не мили.
@KitayskyLet4ikSiNiCyn
@KitayskyLet4ikSiNiCyn 9 лет назад
Александр, спасибо Вам огромное! Очень доходчиво излагаете. Позвольте предложить вписать где-то в описании к видео, или добавить комментарий прямо на видео с данной настройкой Tools > Options > Tools > Mask interrupts while stepping = FALSE Я часа 3 потратил на то, чтобы понять что прерывание работает просто Atmel Studio 6.2 не показывает мне этого =) Но 3 часа прошли не даром, нашёл много интересного. И хорошо что в итоге нашел это решение в комментариях.
@antikiler76
@antikiler76 9 лет назад
Александр Х Человеческое Спасибо! Я только собраться по этому поводу гуглить...
@user-mj8ux1bn2c
@user-mj8ux1bn2c 9 лет назад
Александр Х Хорошо, лишним не будет.
@KitayskyLet4ikSiNiCyn
@KitayskyLet4ikSiNiCyn 7 лет назад
Для Atmel Studio 6 From the pull-down menu go to: Debug => Options and Settings... Select Debugger => Atmel Debugger Change "Mask interrupts while stepping" to False
@ARM_Core
@ARM_Core 6 лет назад
Большое спасибо. Также сидел часа 4, уже начиная сомневаться в своем психическом здоровье.
@Nyamchik-0_0
@Nyamchik-0_0 2 года назад
Спасибо тебе добрый человек
@Masik639
@Masik639 3 года назад
Браво Маэстро! Как всегда доходчиво наглядно и ни чего лишнего!!!!!
@ebjikkolu4757
@ebjikkolu4757 5 лет назад
Спасибо за труды.Вы внесли ясность многим людям своим уроком
@MrVernuk
@MrVernuk 10 лет назад
Александр, спасибо за уроки. Все доступно и просто рассказано)
@marafon119
@marafon119 11 лет назад
Очень благодарен Вам за Ваши уроки! Успехов и процветания...
@user-hv9yf7ps6c
@user-hv9yf7ps6c 7 лет назад
Жаль что нельзя поставить больше одного лайка. Грамотная речь, подробное объяснение. Пока что это самые толковые уроки по авр что я видел.
@barabucho
@barabucho 7 лет назад
Шикарный материал!Спасибо!
@user-mp6fk6ce4u
@user-mp6fk6ce4u 9 лет назад
СПС большое,Вы очень хорошо объясняете ))
@user-mj8ux1bn2c
@user-mj8ux1bn2c 11 лет назад
Спасибо всем за хорошую оценку моим трудам.
@menxxx1
@menxxx1 3 года назад
Спасибо, большое. Очень доходчиво.
@nagirich
@nagirich 11 лет назад
ОФигенно всё разжувал!!! Спасибо!
@_Iokanaan_Marusidze_
@_Iokanaan_Marusidze_ 11 лет назад
еще раз выражаю огромную благодарность за ваш сизифов труд !!! планируется ли в ваших видеообзорах раскрытие следующих тем: как рабротать с DS1307, ЖК индикатором, датчиком температуры, энкодером и т.д. ?
@InventionTherapy
@InventionTherapy 7 лет назад
What a cool use for an Arduino!
@JackSparrow-dn1cu
@JackSparrow-dn1cu 8 лет назад
Александр, очень ждем урок по TimerCouner1 с объяснением всех регистров. Спасибо!
@vladimirlee5928
@vladimirlee5928 4 года назад
в даташите наиболее подробно всё описано
@my-hobbies-is-guitar
@my-hobbies-is-guitar Год назад
Спасибо, полезное видео. Единственное замечание, время интервала указано в микросекундах, а не в мили.
@byk5555
@byk5555 11 лет назад
Спасибо за урок
@emad-alhutam4194
@emad-alhutam4194 2 года назад
Спасибо вам все понятно
@marsm6619
@marsm6619 9 лет назад
Все очень просто работает, когда знаешь Ждем TIMER1 и TIMER2. Там 4 вектора и куча настроек беда Попробую настроить через Code Vision
@user-no5oi3eh8v
@user-no5oi3eh8v 8 лет назад
Спасибо за видео
@kastets2
@kastets2 8 лет назад
Здравствуйте Александр! сделайте пожалуйста видео ""ТАЙМЕР в Режиме Захвата"", я уже кучу форумов даташит на МК прошустрил но проблема такая что непонятные значения берутся из регистра ICR...Спасибо!
@user-mj8ux1bn2c
@user-mj8ux1bn2c 11 лет назад
Планирую. Но пока не готов, темы довольно серьезные нужно к ним готовится тщательно
@user-xs9fu9ne2u
@user-xs9fu9ne2u 6 лет назад
Здравствуйте. В ATmega328P есть регистры OCR0B, OCR0A у меня вопрос, если будет установлен режим сброс при совпадении, а значения в регистрах будут разные, получается что счётчик не дойдёт до второго числа в котором число больше и будет всё время сбрасываться? Как они работают?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 10 лет назад
А флаги устанавливаются ? Когда заходишь в вектор прерывания сбрасуются ли флаги ?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 11 лет назад
У меня подобное тоже было(не с этим проектом). Попробуйте создать новый проект и скопируйте туда код из старого проекта. Мне помогло.
@user-uz3sn4tk3r
@user-uz3sn4tk3r 6 лет назад
Александр вот такой вопрос? в начале проекта объявляю #define F_CPU 8000000UL а таймер все равно на 1 MHz тикает????
@user-mj8ux1bn2c
@user-mj8ux1bn2c 6 лет назад
Не должно так быть на железе, так будет в режиме симулятора нудно указать частоту в окне.
@alexboldvin7442
@alexboldvin7442 9 лет назад
Александр, подскажите пожалуйста. У вас в уроке чтобы просмотреть время выполнения одного цикла программы(там где вы поставили точку останова) у вас в окне процессора указывается частота 1МГц.Скажите, мне нужен для этого кварц внешний? Дело в том, что у меня самодельный JTAG ICE I и в окне процессора мне частоту не показывает, ну и естественно, не считает время. На отлаживаемом Atmega16 я не ставил кварц. Что посоветуете?Надеюсь я правильно сформулировал вопрос
@user-mj8ux1bn2c
@user-mj8ux1bn2c 9 лет назад
Alex Boldvin Время показывает только в симуляторе, а так только сколько тактов выполнено.
@alexboldvin7442
@alexboldvin7442 9 лет назад
Александр Писанец А как по тактам посчитать время? это возможно? Появилась ещё одна проблема в 4-й Студии - при проходе одного цикла до остановки на векторе при совпадении - даже такты не считает, а выдаёт ошибку: Error reading memory : REGISTERS Address:0 Size:32. Однако дальше отладчик работает, единственно что, так это то, что не считает.
@Tiatron
@Tiatron 11 лет назад
У вас же на видео всё замечательно работает. Я предполагаю дело в настройках. Может быть что-то посоветуете?
@Minas__Morgul
@Minas__Morgul 10 лет назад
Вопрос: а если в векторе прерывания прописать TCNT0 = 0, тем самым обнулить счетчик руками?
@user-wf1cj1kj5f
@user-wf1cj1kj5f 8 лет назад
Здравствуйте почему у меня в программе не срабатывают прерывания, программу написал правильно как в примере, но в вектор прерывания не входит?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 7 лет назад
Оптимизацию поставе OS0
@user-mj8ux1bn2c
@user-mj8ux1bn2c 10 лет назад
Даже не знаю чем помочь. У меня реально все без проблем работает
@dmitriibannikovasx
@dmitriibannikovasx 7 лет назад
Александр, можно ли настраивать таймер, не включая отдельные биты, а сразу настроить, например TCCR0 = 0b00000101; ? ( выставил предделитель 1024) И ещё скажите чем отличается |= от &= и просто = ?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 7 лет назад
Можно. В нете почитайте основы программирования на си, и все станет понятно.
@Tiatron
@Tiatron 10 лет назад
Установил студию 6.1, отладчик в прерываниях заработал нормально, но проблема с ручным вводом значений таймера осталась. Т.е. если ввести в пошаговой отладке значение Timer0 к примеру 252 то при "прогоне" пошагово отладчик в прерывание не попадает.
@user-md1jl3nv8z
@user-md1jl3nv8z 6 лет назад
Здравствуйте! Я хотел спросить, а для реализации задержки на таймере/счётчике нужно использовать переменную? И если можно вкратце объясните как реализовать её.
@user-mj8ux1bn2c
@user-mj8ux1bn2c 6 лет назад
ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-9a8TskBNOPc.html
@dennisshurygin
@dennisshurygin 9 лет назад
Александр, здравствуйте! подскажите пожалуйста. при использовании 8ми битного таймера счетчика, если частота 1МГц, ии если поставить предделитель к примеру 256, то получается не ровное число (3906.25). это означает что счетчик таймера будет округлять?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 9 лет назад
Dennis Shurygin На сколько я помню, да. Еще учитывайте переход в вектор прерывания, это тоже время.
@dennisshurygin
@dennisshurygin 9 лет назад
Александр Писанец Спасибо. про переход вы говорили, помню. 4 такта вроде как на вход и на выход 4. надо математику вспоминать..)
@MrKr1k
@MrKr1k 8 лет назад
Александр, возможно ли измерить с помощью Atmega32 сигнал, который поступает от датчика скорости с частотой от 10 до 10000 Hz ? Какой алгоритм при замере сигнала использовать? Получается, что кварц должен быть больше этой частоты и работать нужно по внешнему прерыванию например по спадающему фронту на Int0, а потом через какой-то промежуток времени рассчитывать частоту? или же нет? При генерации все сигнала вроде все понятно, а вот чтении не очень. Ведь частота входящего сигнала может быть больше частоты тактирования (если например 8 Мгц кварц), то как быть в этом случае?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
+Nik RU42 В принципе вы все правельно описали. Таймер считает полученные импульсы от прерывания и зная количество импульсов за отведенный интервал времени можно посчитать частоту
@MrKr1k
@MrKr1k 8 лет назад
А как быть с тем, что приходящая частота 10 Mhz? Какая нужна частота тогда на микроконтроллере?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
Не внимательно прочитал. Такую частоту так не промеряете.
@anatoliyst1997
@anatoliyst1997 10 лет назад
Почему при достижении значения 100 желтая стрелка не переходит на строчку с прерыванием?
@MaksKzv
@MaksKzv 7 лет назад
Доброго времени суток. Видео подробное и понятное. У меня только возникла проблема. Вы не подскажете, почему может возникать такая ошибка в Studio 7 - static declaration of 'TIMER0_COMPA_vect' follows non-static declaration GccBoardProject2 main.c 57?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 7 лет назад
По ходу не нравится как объявлен вектор прерывания.
@MaksKzv
@MaksKzv 7 лет назад
Александр Писанец , спасибо ! Поменял с COMPA на COMP и все заработало.
@atomatom1693
@atomatom1693 9 лет назад
Добрый день объясните пожалуйста как вы редактируете биты, у меня не редактируются как у вас на видео.
@user-mj8ux1bn2c
@user-mj8ux1bn2c 9 лет назад
Atom Atom В принципе там и показывать то нечего, все просто. Компилируете проект и устанавливаете нужные биты.
@atomatom1693
@atomatom1693 9 лет назад
У меня в avr studio 6 так не редактируется...
@goodspeedmen
@goodspeedmen 8 лет назад
Здравствуйте. Почему не доступен debug в Atmel Studio 4? Пробовал ставить 6 (это же нужно было так умудриться написать программу что бы на неё влиял фаервол, интересно ребята из атмел что-то слышали о безопасность в интернете???) но даже после отключения фаервола отладчик не работает нормально, точней вообще не работает.
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
Странно. В 4 студии все нормально работает. У меня 4.19 стоит на трех компах и нормально.
@topollesnov7991
@topollesnov7991 9 лет назад
Интересный урок, хотелось бы посмотреть урок таймер с кварцем.
@user-mj8ux1bn2c
@user-mj8ux1bn2c 9 лет назад
Topol Lesnov ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-ETe5JZd5QXE.html
@topollesnov7991
@topollesnov7991 9 лет назад
Александр Писанец Это таймер с двумя кварцами, а мне желательно который подключается к талам, и как прописать фьюзы на внешний кварц, Написано CKSEL = 1100 SUT =01; как их подключать, плюс прочитал что можно спалить МК, вообще страшно стало.
@korobokinos
@korobokinos 7 лет назад
Atmel Studio 7, в режиме пошаговой отладки курсор не переходит в функцию с прерыванием, только если поставить точку останова или нажать на кнопку "выполнить до текущей позиции". Не знаю, может это оптимизация так работает или я до конца не разобрался. Скорей всего второе... Подскажите, есть ли какая-нибудь особенность при настройке симулятора? Заранее благодарен.
@user-mj8ux1bn2c
@user-mj8ux1bn2c 7 лет назад
Да особенности есть, компилятор пытается оптимизировать код. Вам нужно попробовать обявить переменные как volatile
@Tiatron
@Tiatron 11 лет назад
Спасибо за уроки. У меня проблема. При прогоне кода из примера по таймерам, в студии наблюдается глюк: отладчик только единожды заходит в подпрограмму вектора прерываний, дальше как ни старайся он будет проскакивать мимо. пробовал и точку останова ставить и значение таймера вручную устанавливать, бесполезно. Вот если из самой подпрограммы запускать с точки останова по F5 то отладчик остановиться в обработчике, но если выйти из подпрограммы пошагово, то всё, больше он туда не попадёт.
@egoleos
@egoleos 9 лет назад
В си команду "asm("sei");" можно заменить командой "sei();". и команды "asm(...);" советуют писать как "asm volatile (...)", чтобы при оптимизации команды "asm" не "терялись".
@user-mj8ux1bn2c
@user-mj8ux1bn2c 9 лет назад
Makarenko Alexander Спасибо за дополнение. Привык уже так.
@alexboldvin7442
@alexboldvin7442 9 лет назад
Александр, в уроке вы сказали, что подсчитанное время в миллисекундах, это точно? мне кажется там микросекунды были. ( us - микро; ms - миллисекунды?) Вот я выставил предделитель на 1024 и получилось у меня 260 миллисекунд(это ведь всего четверть секунды). А если я хочу например задержку 1 минуту, это к примеру. Можно так? И как насчёт регистра SFIOR? вы упоминали его где-нибудь ( или будете?)
@user-mj8ux1bn2c
@user-mj8ux1bn2c 9 лет назад
Alex Boldvin Насчет времени вы правильно поправили. На задержку в 1мин. нужно написать небольшую программу. Насчет SFIOR я вскользь упоминал. Когда программы писал на асм то флаги контролировал, на си это уже проще и не нужно рутину такую делать. Но вы наверное правы, надо будет пример реализовать и с данным регистром поработать.
@electronics_is_easy
@electronics_is_easy 10 лет назад
Так в студии подобных глюков еще пруд пруди. Будем надеяться что со временем ATmel все это вылижет и исправит. 4я версия в этом плане более стабильная и там все это четко работало.
@electronics_is_easy
@electronics_is_easy 10 лет назад
Да у меня тоже такая же проблема.
@Tiatron
@Tiatron 10 лет назад
Да, обратил на это внимание. При пошаговом режиме флаг переполнения устанавливается, далее перехода в вектор прерывания не происходит, флаг остаётся установленным. Это уже в новой версии (студия 6.1) при ручной установке значений регистра счётчика TCNTO. Ручная установка или сброс бита переполнения TIFR ничего не даёт.
@vladimirlee5928
@vladimirlee5928 4 года назад
вы глобально разрешили прерывания?
@vladimirlaiu7893
@vladimirlaiu7893 5 лет назад
Для того чтобы в режиме отладки на симуляторе в Atmel Studio 7 программа ушла в прерывание по вектору нужно сделать следующее : Debug->Options->Tools->Tool settings->Mask interrupts=FALSE ; И наслаждайтесь ! :-)
@Mike-cp5vy
@Mike-cp5vy Месяц назад
У меня такая ситуация AS 6.2 - обьявляю 3 глобальные переменые unsigned int a=0,b=0,c=0; и как видите присваиваю им сразу значение 0, дальше в цикле while переменая c инкрементируется. И проверяю программу пошагово и очень странно переменные a и b оби получают значение 37900 не могу понять что это за ерунда. Если же в функции main один раз прибавляю им по единичке то их значение будет 1. Я думаю что оптимизация при компиляци слишком высокая и приводит к таким ошибкам.
@user-md1jl3nv8z
@user-md1jl3nv8z 6 лет назад
И ещё вопрос вы по системе SCADA уроки будете делать?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 6 лет назад
Не готов пока, не успеваю.
@user-md1jl3nv8z
@user-md1jl3nv8z 6 лет назад
Не чего страшного! Когда дел много естественно и времени не хватает, на что то другое так что буду ждать с нетерпением уроков по SCADA системам, из-за это время я думаю нормально научусь программировать МК ))) . Так что могу только пожелать удачи и успехов вам!
@user-wy9jf2eb8o
@user-wy9jf2eb8o 8 лет назад
Приветствую! Во-первых, тут было сказано, что это первый урок по таймерам. значит будет и продолжение. Но продолжения я не нашёл. У Вас нет урока на тему "тахометр"? Почему-то все подают входные импульсы на INT0 и обрабатывают, как прерывание. Я вот думаю, нельзя ли настроить таймер считать со входа ICP1 в регистр TCNT и через полсекунды вычислить, сколько он насчитал и уже в прерывании арифметически вычислить обороты в минуту? Что ваще означате "захват"? Спасибо..
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
Здравствуйте. Тахометр мне не нужен был вот и не стал делать по нем урок. Насчет захвата нужно объяснять исходя режима работы таймера. В общем, как время будет и урок сделаю.
@user-pg2ht9st7u
@user-pg2ht9st7u 8 лет назад
Каждые какие то миллисекунды отвлекаться на прерывания это же должно сильно тормозить выполнение основной программы в main или я что то недопонимаю? Тогда в чем плюсы таймеров?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
+Max DПлюсы огромные, можно получить многозадачность выполнение программы.
@anatoliyst1997
@anatoliyst1997 10 лет назад
почему из-за оптимизации таймер прибавляет разные значения?
@CBET0MuP
@CBET0MuP 10 лет назад
на 11:00, там микросекунды а не мили :) спасибо за уроки!
@valovik
@valovik 8 лет назад
Подскажите пожалуйста. Сделал для изучения этой темы простейшую программу для мигания двумя светодиодами по очереди. Все получилось, и программа работает, а вот с отладкой не выходит. Отладчик топчется в бесконечном цикле и OCR0 не увеличивается. Ставлю точку остановки внутри прерывания и жму F5, программа туда заходит и выполняет прерывание, потом шагами она выходит обратно в бесконечный цикл и опять там топчется. Работаю в 4 студии с отладчиком JTAG ICE. Оптимизацию поставил -O0
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
+Valovik Мне трудно вам чем то вам помочь не видя происходящего, причин может быть много. Начните с оптимизации программы, установив пока минимальную. Затем можно понизить скорость в отладчике. У меня у самого семь штук JTAG ICE и все просто отлично работают, жаль новая студия данный отладчик не поддерживает.
@valovik
@valovik 8 лет назад
+Александр Писанец Да, оптимизацию я первым делом поменял, но не помогло. :((
@user-os3fr7gp8n
@user-os3fr7gp8n 9 лет назад
Позвольте задать вопрос. перенёс вашу прогу на мегу 48, АЦП И таймер прописал, вроде, как надо, Но прога В АВР студио висит в прерывании АЦП, В Протеусе в Прерывании таймера. Где правда пока не пойму
@user-mj8ux1bn2c
@user-mj8ux1bn2c 9 лет назад
Возможно есть некоторые отличие от atmega16. Atmega48 не разу не использовал не было надобности.
@user-os3fr7gp8n
@user-os3fr7gp8n 9 лет назад
проблему решил давно, забыл об этом сообщить. Здесь грешила связка - прога СV AVR пристёгнутая к "АВР СТУДИО 6". Сделал ту же прогу в "АВР СТУДИО" и всё пошло. Думаю то же получится и в СV AVR. Спасибо.
@user-mj8ux1bn2c
@user-mj8ux1bn2c 10 лет назад
Да действительно ,необратил внимание.
@ЧПУ
@ЧПУ 10 лет назад
Здравствуйте, у меня Atmega32a-pu. Возможно ли управлять и ЧАСТОТОЙ и СКВАЖНОСТЬЮ на ноге одновременно 30-300кГц?.. без прерываний 300000раз в секунду, надежно.
@user-mj8ux1bn2c
@user-mj8ux1bn2c 10 лет назад
Здравствуйте. Управлять частотой и скважностью на порту вполне реально, без прерывания. Насчет 300000 раз в секунду нужно посчитать с каким интервалом времени вам придется работать данным портом.
@vova9962
@vova9962 8 лет назад
Почему в режиме отладки и установленном делители 1 к 1, за одно нажатие счетчик увеличивается на 4 а не на 1?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
+Vova Homeniuk Тут много от чего зависит. как написана ваша строчка кода, далеко не все команды выполняются за один такт. Также важна оптимизация.
@user-mj8ux1bn2c
@user-mj8ux1bn2c 10 лет назад
Такая проблема возникает если не подключить avr/interrupt.h
@user-pg2ht9st7u
@user-pg2ht9st7u 8 лет назад
В режиме отладки не хочет уходить в прерывание, ниже о такой проблеме уже писали, это как то решается?
@user-pg2ht9st7u
@user-pg2ht9st7u 8 лет назад
+Max D проблема решена, кому актуально, заходим в debag --> Option and settings --> debugger --> mask interrupts while stepping - изменяем на false.
@user-by1ql4sm8q
@user-by1ql4sm8q 7 лет назад
СПАСИБО!!! очень помогло)!
@krendely0k
@krendely0k 7 лет назад
Как сделать активными регистры в окошке IO View? У меня все регистры неактивны. Версия Атмел Студио последняя.
@korobokinos
@korobokinos 7 лет назад
Насколько я понял, они становятся активными только в режиме пошаговой отладки. Ставите точку останова и смотрите на регистры.
@klalekseivik
@klalekseivik 10 лет назад
Кто нибудь разобрался с AVR Studio 6.1. У меня тоже с таймером проблема.
@rostuslavb3524
@rostuslavb3524 2 года назад
вопрос..почему у меня TCNT0 в эмуляции не инкрементируется а как-то прыгает на больше?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 2 года назад
попробуйте убрать оптимизацию кода
@vcjru4163
@vcjru4163 8 лет назад
Atmel Studio 7 / Сейчас обратил внимание тоже не уходит в прерывание, даже не считает TCNT если использовать attiny85 Simulator #define F_CPU 8000000UL #include #include #include ISR(TIMER1_COMPA_vect) { asm("nop"); } ISR(INT0_vect) { asm("nop"); } int main(void) { DDRB |= (1
@DmitryAvilkin
@DmitryAvilkin 9 лет назад
А как вы сами изучаете данные материалы, документацию на все эти регистры изучаете?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 9 лет назад
В основном из книг. Также из даташитов.
@user-cx2qr9sn9g
@user-cx2qr9sn9g 8 лет назад
Добрый день, Александр. Недавно делал "светилку" для ИК барьера на ATtiny13. Частота кварца задана 4.8 Мгц, делитель на 8 отключен. Выходную частоту в 36 кГц решил измерить с помощью Ардуино и неожиданно для себя обнаружил, что мои расчеты пределителя и регистра сравнения не совсем соответствовали тому, что получилось в реальности. Более того, измеренная одним и тем же способом выходная частота контроллера на БрэдБоарде и собранного на печатке тоже отличалась, в результате пришлось вносить поправки изменением значения регистра сравнения, что в итоге очень сильно отличалось от расчетного. Почему такое имеет место быть? Где тут узкое место?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
+Ватквиз Де Сад Если вы используете прерывания то нужно учитывать что прерывания занимают тоже время. Хотя в симуляторе все это уже учитывается и время должно совпадать с полученными в жизни.
@user-cx2qr9sn9g
@user-cx2qr9sn9g 8 лет назад
В прерывании у меня только установка начального значения счетного регистра. Вчера попробовал увеличить пределитель и обнаружил что на моей АТТини13 режим инверсии выхода работает только коэф.1/1 и 1/8. Это брак мк или там какие-то тонкости с частотами?
@Semmmys
@Semmmys 10 лет назад
Подскажите пожалуйста, как сделать так, чтобы после выполнения прерывания по таймеру выполнялось не снова с int main(void), а продолжалось с точки прерывания?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 10 лет назад
Такого не далжно быть , однозначно должно продолжатся с точки прерывания. С корей все го не правильно прописан сам вектор перериваний.
@Semmmys
@Semmmys 10 лет назад
Александр Писанец сколько примеров не смотрел, вроде все по одному принципу. ISR (TIM0_COMPB_vect) { PORTB ^= 0x01; } А по дебагингу получается что он уходит обратно туда откуда начал, но после этого почему то, уходит в начало main(void). в бесконечном цикле только asm("nop");
@user-mj8ux1bn2c
@user-mj8ux1bn2c 10 лет назад
Попробуйте ISR( TIMER0_COMP_vect )
@Semmmys
@Semmmys 10 лет назад
Александр Писанец Контроллер tiny13. Там по таблице векторов нету такого вектора. Да и компилятор не принимает. Залез в дисассемблер. Там в начале есть какой то кусок ассемблера под заголовком "No source file" Причем он есть даже если просто создать проект по умолчанию. Вот на него после возвращения с прерывания почему то уходит программа, там хаотично прыгает несколько тактов и уходит в начало программы (Main) Может быть нужны какие-то предустановки самого компилятора? Описание к ассемблеру там в основном какие-то "Relative jump"
@user-mj8ux1bn2c
@user-mj8ux1bn2c 10 лет назад
Вы не писали насчет tiny13 я думал что atmega16
@user-wu5hx1lo7j
@user-wu5hx1lo7j 10 лет назад
Извиняюсь, а уроки 5 и 6 одинаковые или у меня плеер подглючивает?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 10 лет назад
Исправил, действительно два одинаковых было.
@makebake7778
@makebake7778 9 лет назад
Доброго времени суток. Я начал изучать МК по вашим видеоурокам и хорошо получается у меня благодаря вам. но все же некоторые моменты не понятно мне как новичку. я поэкспериментировал кодом с урока таймеры и немного преобразовал. на симуляторе(протеус) сделал схему. после пятикратного нажатия на кнопку должно загореться лампочка на сек и погаснуть. т.к. ОСR=5....при TCNT=5 должно сработать прерывание.....но у меня после запуска на симуляторе прерывание срабатывает после 7-го нажатия последующие после 6....прощу помощи в решений для меня не легкой задачи....за ранее спасибо. #include #include #include ISR (TIMER0_COMP_vect) { PORTB|=(1
@user-mj8ux1bn2c
@user-mj8ux1bn2c 9 лет назад
Здравствуйте. В векторе прерывания вы реализовали задержку, так делать крайне не желательно. ISR (TIMER0_COMP_vect) { PORTB|=(1
@user-cu6tl7hg7u
@user-cu6tl7hg7u 8 лет назад
а следующие части?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
+Михаил Ду Делаю по мере свободного времени
@user-lm7iu6ni2y
@user-lm7iu6ni2y Год назад
Спасибо уже не раз обращаюсь как к азбуке
@temkapinchuk
@temkapinchuk 8 лет назад
Здравствуйте! Делаю все по данному видеоуроку, но у меня почему-то во время отладки не уходит в прерывание при сбрабатывании таймера. Ни в нормальном режиме, ни в режиме СТС. При этом в железе все работает правильно.
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
+Artem Pinchuk В отделке на микроконтроллере?
@temkapinchuk
@temkapinchuk 8 лет назад
+Александр Писанец вы хотели сказать "отладке"? Отладка происходит в симуляторе Atmel студии, программатора-отладчика у меня нет. В последующем, после заливки прошивки в микроконтроллер, все работает как надо. (МК - Atmega8, используется Timer2, названия регистров переписаны в соответствии с даташитом)
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
Мне в таких случаях помогало пересоздать проект заново.
@temkapinchuk
@temkapinchuk 8 лет назад
Александр Писанец не помогло. такое чувство что у меня какая-то настройка в Atmel studio, которая отключает выполнение прерываний
@vladimirlaiu7893
@vladimirlaiu7893 5 лет назад
@@user-mj8ux1bn2c Для того чтобы в режиме отладки на симуляторе в Atmel Studio 7 программа ушла в прерывание по вектору нужно сделать следующее : Debug->Options->Tools->Tool settings->Mask interrupts=FALSE ; И наслаждайтесь ! :-)
@_Iokanaan_Marusidze_
@_Iokanaan_Marusidze_ 8 лет назад
помогите пожалуйста настроить таймер ATmega328 T1 -16 разрядный частота тактирования - 16МГц режим - fastPWM - как сделать знаю мне надо чтобы период срабатывания по переполнению был равен ровно 2мс играюсь с предделителем но ничего не получается подскажите пожалуйста методику как правильно это сделать
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
Предделителем и значением в регистре сравнения.
@_Iokanaan_Marusidze_
@_Iokanaan_Marusidze_ 8 лет назад
дело в том что регистр сравнения мне нужен под другие нужды смотрите в чем дело мне надо управлять яркостью 6 семисегментных индикаторов делаю я это следующим образом в прерывании по совпадению я вывожу нужное мне число, на 1 разряд и зажигаю анод (семисегментники с общим анодом) в прерывании же по переполнению, которое должно быть через 2мс, я тушу первый разряд в следующем прерывании по совпадении я зажигаю 2 разряд и так далее регулирую значение OCR я тем самым произвожу регулировку яркости определенного разряда как в таком случае подогнать переполнение под 2 мс ?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
Так быстро не подскажу, нужно подумать )
@_Iokanaan_Marusidze_
@_Iokanaan_Marusidze_ 8 лет назад
+Александр Писанец, буду вам весьма признательным
@korobokinos
@korobokinos 7 лет назад
Вот (правда на английском) sites.google.com/site/qeewiki/books/avr-guide/timers-on-the-atmega328
@pytnik90
@pytnik90 10 лет назад
не могу найти 6 урок он существует?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 10 лет назад
Похоже что нет :)
@pytnik90
@pytnik90 10 лет назад
жизнь- боль, и здесь обман, спасибо за уроки, очень доходчиво объясняете,
@anatoliyst1997
@anatoliyst1997 10 лет назад
почему я не могу поставить "галочки" в окне на видео (фрагмент 2 мин 36 сек) у меня они просто выцветшие
@user-mj8ux1bn2c
@user-mj8ux1bn2c 10 лет назад
Попробуйте поставить оптимизацию Os. Трудно чем-то помочь невидя ваших действий. Также, по крайне мере у меня так было, саму atmel studio нужно устанавливать с выкл. антивирусом и название проекта и весть путь к данному проекту не должно содержать русских символов.
@makebake7778
@makebake7778 9 лет назад
Добрый вечер. Я по изменил программу как вы сказали. #include #include #include ISR (TIMER0_COMP_vect) { PORTB|=(1
@user-mj8ux1bn2c
@user-mj8ux1bn2c 9 лет назад
Не должно так работать. Специально зашил проц., все работает как надо через каждые 6 тактов.
@JackSparrow-dn1cu
@JackSparrow-dn1cu 8 лет назад
Алексанр, а как управлять сервоприводом с помощью таймера Т0. Может кусок кода где то завалялся. )) Спасибо.
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-V5hB1TsoloE.html
@JackSparrow-dn1cu
@JackSparrow-dn1cu 8 лет назад
Этот ролик я смотрел не однократно. И с помощью таймера Т1 все работает великолепно. А вот с помощью таймера Т0 возможно ли управлять сервой? Если да, то можно код получить. В своем проекте хочу использовать все 3 таймера. Спасибо.
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
Перепутал.Другой ролик с полной программой.
@user-nn3io7fy4x
@user-nn3io7fy4x 8 лет назад
таймер 0 работает при переполнении в CVAVR
@TheHishko
@TheHishko 9 лет назад
Добрый день, уже возненавидел эту программу, ужасно глюенная... Подскажите в чем может быть причина не срабатывают вектора на переполнение и совпадение, да и вектора прерывания тоже. Вот видео где видно, что не работает ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-ynfQvEHhQZg.html
@TheHishko
@TheHishko 9 лет назад
Уже более новую установил версию 6.1, та же история
@TheHishko
@TheHishko 9 лет назад
Хотя в Proteus при тестировании работает...
@Yolchikbal
@Yolchikbal 9 лет назад
Дмитрий, там я раньше написал. Настройки поменять. Попробуй, должно получиться...
@sssserya1
@sssserya1 8 лет назад
шим регулятор можно сделать на втором режиме ?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
+SergeyD Не понял что за второй режим?
@sssserya1
@sssserya1 8 лет назад
+Александр Писанец ну тот что вы сказали неудобный 8:00 . ну я не пробовал ну например так включаем светодиод при переполнении ( вектор COMP) и после переполнения до 255 выключаем (если можно конечно включить ).
@sssserya1
@sssserya1 8 лет назад
+Александр Писанец Я начинал на ардуино но вот теперь надо в С- разобраться. так хочу плавное включение лампы накала сделать на Атини-13 и Симисторе а у нее памяти мало для программной реализации . Да и вобще интересно только вот если б еще примеры выкладывали для скачивания было б удобно , а то лень переписывать .
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
Учту.
@user-uh9gc1fp2l
@user-uh9gc1fp2l 8 лет назад
Очень хорошее видео, правда пришлось немного все-же почитать предварительно, чтоб окончательно понять о чем там говорится). И автор слишком быстро говорит еще).
@toserg
@toserg 10 лет назад
Йо-ма-Ё.. В Step Debuggin в прерывания не заходит . Через Start Debuggin - уже заходит. ..но тут вылазит нюанс.-можно наблюдать несовпадения флагов TIFR и TIMSK - они наоборот 0-1 или 1-0.. хотя должно быть 0-0, 1-1.. но это скорей всего из-за проскакивания лишних тактов..
@Yolchikbal
@Yolchikbal 10 лет назад
контекстное мэню tools > options... > tools > mask interrupts while stepping = FALSE должно помочь.
@yurapavlenko6153
@yurapavlenko6153 10 лет назад
Александр Балякин Огромное спасибо. Такая же проблема. Воспользовался вашим советом исправил, заработало. Вопрос: данное исправление не повредит выходной программе? Или оно действует только на процесс отладки?
@JackSparrow-dn1cu
@JackSparrow-dn1cu 8 лет назад
+Александр Балякин Спасибо! А в крации что за галочка такая. Что обозначает? Перевод неначто не натолкнул
@user-qn3di8rl3q
@user-qn3di8rl3q 6 лет назад
+Александр Балякин СПАСИБОААФАПЫРНВГРНПЕКАУ
@user-mj8ux1bn2c
@user-mj8ux1bn2c 10 лет назад
Регистр TCNT0 конечно можно.
@topollesnov7991
@topollesnov7991 9 лет назад
Александр Писанец Учусь по вашим урокам, правда пытаюсь запрограммировать Attiny2313, происходят странности с отладкой, если у вас например таймер сбрасывается и переходит в вектор, то у меня просто виснет отладчик, тестирую в протеусе, у меня одну секунду 8 циклов вектор проходит, при отладки я жду 2 минуты когда один цикл в вектор в падет. Пользуюсь AS_V6.2 может другой кокой то поставить?, чет с ним не то(( написал код, естественно не правильно, но отладчик не пашет, такое ощущение что у меня все не правильно. в протеусе чтоб протестировать долго ждать нужно. #define F_CPU 12000000UL // на этом кварце если получиться хачу сделать так как МК предел 8МГц #include #include int b=1; int cek=0; int min=0; int shas=0; int But=1; ISR (TIMER0_COMPA_vect) { if(b==8) //8 тактов в секунду { PORTB ^=(1
@user-mj8ux1bn2c
@user-mj8ux1bn2c 9 лет назад
По своему опыту скажу. Когда пытаешься работать на частоте превышающей возможности микроконтроллера такие сбои и будут. Еще нужно обратить внимание на частоту обмена между микроконтроллером и программатором. Я пользуюсь Dragone там устанавливается.
@topollesnov7991
@topollesnov7991 9 лет назад
Александр Писанец Ну выносной кварц и нужен, для того чтоб заставить МК работать не на внутреннем кварце с частотой например максимальной 8 МГц, а например 12Мгц, если я ошибаюсь то зачем вообще нужны выносные кварцы, если можно на внутреннем кварце работать.
@user-mj8ux1bn2c
@user-mj8ux1bn2c 9 лет назад
Выносной стабильно работает с протоколами USART,ISP,I2C и т.д
@user-kq9gu4vb3t
@user-kq9gu4vb3t 8 лет назад
Доброго времени суток, тоже учусь по вашим урокам. Большое спасибо, очень доступно. Единственное µs это микросекунды, а не миллисекунды, я довольно долго потом с этим тупил) Тоже хочу спросить вас по поводу внешнего кварца... Хочу сделать тахометр, на множестве схем в интернете я вижу внешний кварц причем USART,ISP,I2C и т.д там вроде бы не предусматривается) Из каких еще соображений могут использовать внешний кварц? Еще вот так задаю таймер: OCR0=125; // 1 миллисекунда TCCR0=0b00001010;// сброс при совпадении, предделитель выставляем 8 TIMSK|=(1
@user-nn3io7fy4x
@user-nn3io7fy4x 8 лет назад
и в as7 тоже самое
@-sozdavatel-
@-sozdavatel- 9 лет назад
А где урок номер 6?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 9 лет назад
Данные уроки особо друг другом не связаны. Каждое видео отдельный материал. Поэтому я и не особо нумеровал. Хотя, учитывая мнение других, понял, что не так надо было делать. Но как говорится что сделано, то сделано
@-sozdavatel-
@-sozdavatel- 9 лет назад
Оки, спасибо за труды. Учусь помаленьку.
@user-cu6tl7hg7u
@user-cu6tl7hg7u 8 лет назад
а как вывести такую желтую стрелочку?
@user-mj8ux1bn2c
@user-mj8ux1bn2c 8 лет назад
+Михаил Ду Не помню уже, в настройках все выставляется
@scrypto
@scrypto 8 лет назад
VAssitsX->Visual Assist Options->Display->галочку на Highlight current line
@yaushev_s
@yaushev_s 10 лет назад
у тоже в прерывания не выходит вообще(
@user-nn3io7fy4x
@user-nn3io7fy4x 8 лет назад
или я ошибаюсь?
@pavelsterhov7964
@pavelsterhov7964 10 лет назад
Такая же проблема как у Олега
@FIRSTFIA
@FIRSTFIA 10 лет назад
TCCR0 |= (1
@user-mj8ux1bn2c
@user-mj8ux1bn2c 10 лет назад
Я обяснял уже подобное. Может это вам поможет ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-IUWTWqsi1rc.html
@FIRSTFIA
@FIRSTFIA 10 лет назад
TCCR0 |= (1
@user-mj8ux1bn2c
@user-mj8ux1bn2c 10 лет назад
Так веть все правельно вы разлажили, чего вам не понятно?. Первой командой вы установили 0бит в 1 TCCR0 |= (1
@FIRSTFIA
@FIRSTFIA 10 лет назад
Так зачем это нужно в вашем коде??? Установка одного бита регистра счетчика, и его же сброс в ноль 2 раза... Вот это и не понятно!
@user-mj8ux1bn2c
@user-mj8ux1bn2c 10 лет назад
Я для наглядности сброс делаю двумя командами. Сброс двух разных бит. Далека не все поняли, когда сбрасывал в ноль одной командой.
@Tiatron
@Tiatron 10 лет назад
Да нет, библиотека подключена.
@vladimirlee5928
@vladimirlee5928 4 года назад
Микросекунд!
@user-gd6be5jd4f
@user-gd6be5jd4f 2 года назад
Музыка отвлекает, можна убрать
@seppneimusser5723
@seppneimusser5723 4 года назад
Beatiful video tutorial^^ Could you tell me the name of your background music, please. I speak and understand russian but I can not write in russia, because my keyboardlayout is in germany...^^ You have an abo + like + chare to facebook!
@user-mj8ux1bn2c
@user-mj8ux1bn2c 4 года назад
Я уже и не помнью какой трек использовал
@seppneimusser5723
@seppneimusser5723 4 года назад
@@user-mj8ux1bn2c schalka nu okay, spasiba^^
@anatoliyst1997
@anatoliyst1997 10 лет назад
квадратики красятся
@krass3863
@krass3863 6 лет назад
Уроки разбросаны. Трудно в кучу собрать по названиям. Некоторые вообще найти не удаётся...
@anatoliyst1997
@anatoliyst1997 10 лет назад
путь с русскими буквами был все теперь порядок
@XAngelsLifeX
@XAngelsLifeX 8 лет назад
Спасибо за видео
Далее
Beautiful game!😍
00:20
Просмотров 3,2 млн
Atmel Studio
15:22
Просмотров 68 тыс.
Программный UART
35:33
Просмотров 9 тыс.