Easyelectronics.ru

Электроника для всех
Текущее время: 22 янв 2021, 20:32

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 25 ] 
Автор Сообщение
 Заголовок сообщения: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 16:42 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 дек 2015, 01:57
Сообщения: 43
Откуда: Україна, Черкаси
В общем есть небольшая тривиальная задача - сделать свитюльку. Контроллер управляет светодиодиками, цвета меняются, людишки довольны.
Схема проста: Attiny44a -> 2n3904 x3 -> RGB-светодиод.
Собрал, протестил, всё норм, но!
Как только в коде я использую функцию задержки - _delay_ms (util/delay.h) - контроллер повисает!

Show Простыня кода

Т.е. если указать задержку в начале цикла, то светодиод не светится вообще.
Если задержку убрать - светодиод подсвечивает всеми цветами.
Код:
    while(1)
    {            
      _delay_ms( 100 ); // <--- ЗАДЕРЖКА ---
      
      VL_OCR0A = VL_OCR0A + 1;
      VL_OCR0B = VL_OCR0B + 1;
      VL_OCR1A = VL_OCR1A + 1;   
      
      if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; }
      if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; }
      if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; }
         
      OCR0A = VL_OCR0A;
      OCR0B = VL_OCR0B;
      OCR1A = VL_OCR1A;
    }


Где я накосячил?
З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает :(

_________________
Слава Україні!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 17:02 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 7238
А где простыня для "_delay_ms"?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 17:08 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 дек 2015, 01:57
Сообщения: 43
Откуда: Україна, Черкаси
_delay_ms из библиотеки <util/delay.h>, идет комплектом с Atmel Studio 6.2. Но если нужно...
Show delay_basic.h
Show delay.h

_________________
Слава Україні!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 17:17 
Старожил
Аватара пользователя

Зарегистрирован: 11 авг 2016, 20:52
Сообщения: 786
Откуда: GMT+6
Через 5 минут светодиод не начинает светится?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 17:26 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 дек 2015, 01:57
Сообщения: 43
Откуда: Україна, Черкаси
Kelvin писал(а):
Через 5 минут светодиод не начинает светится?
Изображение
А почему именно 5 минут?

_________________
Слава Україні!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 17:28 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
А где фьюзы, от чего тактируется?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 17:30 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 дек 2015, 01:57
Сообщения: 43
Откуда: Україна, Черкаси
NStorm писал(а):
А где фьюзы, от чего тактируется?
Тактируется кварцем 16МГц.
Вложение:
Безымянный.png
Безымянный.png [ 40.16 Кб | Просмотров: 928 ]

_________________
Слава Україні!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 17:33 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
WDTON уберите. У вас сброс по контроллера каждый раз происходит по ватчдогу, пока ждете дэлэя.

PS: VL_OCR0A = VL_OCR0A + 1; когда не ради байт кода индус пишет, то пишет как VL_OCR0A++; :P

EDIT: хмм... я хз как в студии инверсия бита есть или нет. Т.е. галка стоит - это включен или выключен вотчдог я не уверен.
EDIT2: Ну да, если 0xCF то он включен значит. Надо 0xDF бит, когда в WDTON 1 записано, это _выключает_ вотчдог.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 17:41 
Старожил
Аватара пользователя

Зарегистрирован: 11 авг 2016, 20:52
Сообщения: 786
Откуда: GMT+6
По SPIEN и RSTDISBL видно, что инверсия фьюзов есть, так что вачдог каждые 16 ms сбрасывает контроллер

_MrGauss_ писал(а):
А почему именно 5 минут?

Если бы фьюзы были по умолчанию, то период нарастания яркости составил бы 6,66 мин.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 18:47 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 дек 2015, 01:57
Сообщения: 43
Откуда: Україна, Черкаси
Хм... Сторожевой таймер вырубил. Но это не особо помогло.
Show FUSES

Если зашить это (в остальном код такой-же как в простыне в первом посте):
Код:
   while(1)
   {
      // DELAY = 300
      OCR0A = 0xFF;   OCR0B = 0;      OCR1A = 0;      _delay_ms( DELAY );
      OCR0A = 0;      OCR0B = 0xFF;   OCR1A = 0;      _delay_ms( DELAY );
      OCR0A = 0;      OCR0B = 0;      OCR1A = 0xFF;   _delay_ms( DELAY );
      OCR0A = 0xFF;   OCR0B = 0xFF;   OCR1A = 0xFF;   _delay_ms( DELAY );
   }
...то засвечивается один цвет светодиода. Т.е. который по коду первый.
Значит контроллер все же ребутится. О_о
Честно говоря, я нихр..на не понял.
Как вывести камень в "нормальный" режим?
Kelvin писал(а):
Если бы фьюзы были по умолчанию, то период нарастания яркости составил бы 6,66 мин.
Как Вы это считаете? Про 5 минут я вообще, подумал что шутка...

_________________
Слава Україні!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 19:08 
Старожил
Аватара пользователя

Зарегистрирован: 11 авг 2016, 20:52
Сообщения: 786
Откуда: GMT+6
Добавьте перед циклом отключение вачдога
Код:
wdt_reset();
wdt_disable();


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 19:12 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 дек 2015, 01:57
Сообщения: 43
Откуда: Україна, Черкаси
Блин, вот сколько я уже контроллеров прошил, такая борода впервые!
Установил сторожевой таймер на 8сек
Код:
wdt_enable( WDTO_8S );

И в главном цикле в конце добавил
Код:
      _delay_ms( DELAY );
      wdt_reset();

Получилось как-то так:
Код:
   wdt_enable( WDTO_8S );
   while(1)
   {
      // DELAY = 300
      OCR0A = 0xFF;   OCR0B = 0;      OCR1A = 0;      _delay_ms( DELAY );
      OCR0A = 0;      OCR0B = 0xFF;   OCR1A = 0;      _delay_ms( DELAY );
      OCR0A = 0;      OCR0B = 0;      OCR1A = 0xFF;   _delay_ms( DELAY );
      OCR0A = 0xFF;   OCR0B = 0xFF;   OCR1A = 0xFF;   _delay_ms( DELAY );
      wdt_reset();
   }

Kelvin писал(а):
Добавьте перед циклом отключение вачдога
Не помогло, только-что испытал.

_________________
Слава Україні!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 19:18 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 дек 2015, 01:57
Сообщения: 43
Откуда: Україна, Черкаси
Походу это или контроллер немного брак (кстати брал их на Али) или я хз. Буквально пару дней назад шил аналогичную светюльку на тини13а - никаких проблем, никакого сторожевого таймера.

Kelvin, NStorm спасибо за помощь!

_________________
Слава Україні!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 19:19 
Старожил
Аватара пользователя

Зарегистрирован: 11 авг 2016, 20:52
Сообщения: 786
Откуда: GMT+6
Уровень оптимизации у компилятора какой? -O3 ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 19:32 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 дек 2015, 01:57
Сообщения: 43
Откуда: Україна, Черкаси
Kelvin писал(а):
Уровень оптимизации у компилятора какой? -O3 ?
-O1

_________________
Слава Україні!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 19:41 
Старожил
Аватара пользователя

Зарегистрирован: 11 авг 2016, 20:52
Сообщения: 786
Откуда: GMT+6
Прочитайте фьюзы контроллера, убедитесь что на WDTON нет галочки.
Керамический конденсатор по питанию МК стоит?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 19:51 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 дек 2015, 01:57
Сообщения: 43
Откуда: Україна, Черкаси
Kelvin писал(а):
Прочитайте фьюзы контроллера, убедитесь что на WDTON нет галочки.
Керамический конденсатор по питанию МК стоит?

Фьюзы я скринил, нет галочки. По питанию стоит зенер, тантал, LC-фильтр, керамика прям возле ножки. SOIC, все на одной стороне, перемычек нет, длинных/запутанных дорожек тоже нет. Ресет подтянут к питанию.

_________________
Слава Україні!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 20:12 
Старожил
Аватара пользователя

Зарегистрирован: 11 авг 2016, 20:52
Сообщения: 786
Откуда: GMT+6
Похоже МК у Вас действительно зависает. Попробуйте увеличить время запуска кварца или перейти на внутренний тактовый генератор, т.к. при питании 3,3В не гарантирована работа на 16 МГц.
К стати, Вы ведь не забыли поставить резистор между ногой МК и базой транзистора?
Вложение:
Screenshot_9.png
Screenshot_9.png [ 30.42 Кб | Просмотров: 877 ]
Вложение:
Screenshot_8.png
Screenshot_8.png [ 9.59 Кб | Просмотров: 877 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 12 авг 2019, 22:59 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 дек 2015, 01:57
Сообщения: 43
Откуда: Україна, Черкаси
Kelvin писал(а):
...Попробуйте увеличить время запуска кварца или перейти на внутренний тактовый генератор, т.к. при питании 3,3В не гарантирована работа на 16 МГц.
Питание 9В -> 7805 -> 5B. Вроде должно хватать на 16 МГц.
Kelvin писал(а):
К стати, Вы ведь не забыли поставить резистор между ногой МК и базой транзистора?
Не забыл, 470 Ом.

_________________
Слава Україні!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 13 авг 2019, 10:58 
Старожил

Зарегистрирован: 04 окт 2012, 00:23
Сообщения: 2745
Откуда: Москва
_MrGauss_ писал(а):
Питание 9В -> 7805 -> 5B. Вроде должно хватать на 16 МГц.

У Вас на скрин 3.3V Плату сами делали?


Последний раз редактировалось ILYAUL 13 авг 2019, 18:33, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 13 авг 2019, 13:51 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
_MrGauss_ писал(а):
Фьюзы я скринил, нет галочки.

А вы точно их прошили? Просто на 1ом скрине в логе видно, что фьюзы с МК железного считаны, а на 2ом такого в логе нет. Ну мало ли, всякое бывает )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 13 авг 2019, 19:49 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 дек 2015, 01:57
Сообщения: 43
Откуда: Україна, Черкаси
ILYAUL писал(а):
У Вас на скрин 3.3V Плату сами делали?
Программатор - самопал. Прошиваемый камень находится также на самопальной плате. Всё ЛУТ.

NStorm прошил, перепроверил только-что.

_________________
Слава Україні!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 14 авг 2019, 10:29 
Только пришел

Зарегистрирован: 06 июн 2018, 14:12
Сообщения: 24
А SP ининциализирован?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 14 авг 2019, 12:32 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Попробуйте в фьюзах биты SUT поставить 10 (14CK + 64 ms). Может и правда по питанию что не стаканится.

EDIT: В симуляторе код рабочий. Разве что первый вариант, где OCR нарастает на 1 каждые 100 мс очень долго будете ждать загорания светика. _delay_ms(1) поставить и так смена яркости будет сразу видна. Второй пример где по 300мс на цвет дается работает тоже успешно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: _delay_ms вешает контроллер
СообщениеДобавлено: 29 авг 2019, 17:40 
Заглядывает иногда

Зарегистрирован: 16 июн 2019, 00:50
Сообщения: 40
Первое, что надо сделать при старте МК, обнулить бит WDRF в регистре MCUSR. Только потом выключать вачдог. Иначе не выключится. Читаем окончание 45-й страницы даташита: http://ww1.microchip.com/downloads/en/D ... oc8183.pdf


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 25 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB