Easyelectronics.ru

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

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



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

Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 23 апр 2017, 14:14 
Заглядывает иногда

Зарегистрирован: 22 мар 2017, 02:48
Сообщения: 51
Сильно не пинайте в сфере мк я недавно и поскольку у меня не вышло сделать передачу данных по spi и uart я попытался сделать свою, вот что вышло.Есть правда несколько проблем и вопросов.Есть подозрение что при включении мк идет срабатывание прерывания из за чего по ошибке выкидывает из цикла находящегося в функции "WaitingData", порой я с этого же цикла выйти и вовсе не могу, хотя должен выходить сразу же как сработает прерывание по INT0 или PCINT0.На цикл в функции "Time_Counter" вообще нет реакции такое впечатление что мк его попросту не видит.Правильно ли я делаю программную перезагрузку мк в функции "reboot"? Речь идет об мк AtTiny85



Show Много кода


Так же интересует такой вопрос, встречал кучу уроков по таймерам в этих уроках использовались таймеры мк, выполнялся их расчет и пр.Я вот сделал такой вот таймер.Он будет работать или нет?Если да то в чем отличие их.
Код:
total_number=total_number-1;
      _delay_ms(1000);
      if (total_number == 0){
         PORTB|=(1<<PB1);
         _delay_ms(5000);
         PORTB&=~(1<<PB1);   
         reboot();            
      }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 23 апр 2017, 14:48 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4357
Откуда: г. Липецк
Tebatsu писал(а):
...Правильно ли я делаю программную перезагрузку мк в функции "reboot"?...

Непонятно вы делаете программную перезагрузку, озвучте что вы хотели сделать?
Может по WDT у вас и перезагружается?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 23 апр 2017, 16:05 
Заглядывает иногда

Зарегистрирован: 22 мар 2017, 02:48
Сообщения: 51
Цитата:
Непонятно вы делаете программную перезагрузку, озвучте что вы хотели сделать?
Может по WDT у вас и перезагружается?

Мк должен работать следующим образом ожидание данных > их пересчет > запуск таймера > после истечения таймера включаем питание порта на 5 сек, спустя 5 сек выключаем питание на ноге и перезагружаемся обязательно сбрасывая значения переменных по дефолту.Перезагрузка должна происходить на программном уровне то есть без использования ножки мк.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 23 апр 2017, 16:27 
Старожил
Аватара пользователя

Зарегистрирован: 14 апр 2014, 11:06
Сообщения: 1659
Откуда: Курск
А в чём тайный смысл именно перезагрузки?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 23 апр 2017, 17:16 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4357
Откуда: г. Липецк
Убейте таймер WDT, уберите самиписный (и неизвестно откуда взятый) Reboot. И спросите по результату...
Вот накаркали что на С прогать просто, результат...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 23 апр 2017, 18:41 
Старожил

Зарегистрирован: 04 окт 2012, 00:23
Сообщения: 2745
Откуда: Москва
Простите уважаемый , но перед тем как писать что-то свое , позвольте спросить Вы хоть какую-то литературу почитали. Иначе не имеет смысла давать советы. Delays - это не таймер


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 23 апр 2017, 20:17 
Заглядывает иногда

Зарегистрирован: 22 мар 2017, 02:48
Сообщения: 51
ILYAUL писал(а):
Простите уважаемый , но перед тем как писать что-то свое , позвольте спросить Вы хоть какую-то литературу почитали. Иначе не имеет смысла давать советы. Delays - это не таймер

Согласен уважаемый, что deley это не таймер, но в сборе с обратным счетчиком и задержкой в 1 секунду выходит таймер.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 23 апр 2017, 20:19 
Заглядывает иногда

Зарегистрирован: 22 мар 2017, 02:48
Сообщения: 51
Cthulhu писал(а):
А в чём тайный смысл именно перезагрузки?

Если есть еще варианты буду рад услышать. Ребут не обязателен главное чтоб переменные были сброшены по дефолту и код начал работать с начала.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 23 апр 2017, 22:57 
Старожил
Аватара пользователя

Зарегистрирован: 14 апр 2014, 11:06
Сообщения: 1659
Откуда: Курск
Код:
main () {
while (true) {
//сброс переменныхъ по умолчанию

}
}


Код:
rjmp RESET


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 07 апр 2020, 20:11 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2445
Откуда: Киев
Сорри за некропостинг, просто тему плодить не хотелось.
Вообщем настраиваю для МК atmega328p таймер1:
Код:
cli();
    TCCR1B |= 0;    //timer off, clock select is divided by 64.
    TCNT1=0;
    TIMSK1= 1;     //Enable overflow interrupt
    sei();          //enable global interrupt

Прикол в том, что сразу же после sei, срабатывает прерывание. Я сначала думал, что это связано, с тем что пишется в ардуино IDE (но это ж прямой доступ к регистрам), потом что потому что реально это не мега, а ее клон китайский (lgt8f328p). Но потом, посмотрел аппноут от атмел, и увидел что они там сбрасывают флаги при инициализации. Вообщем добавление:
Код:
TIFR1=0x01;

полечило проблему.
Я программы пишу не часто, и подобные ньюнсы забываются. Но разве это нормальное поведение аврок, что флаг взводится уже при старте МК, если таймер даже не включался?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 07 апр 2020, 20:30 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:55
Сообщения: 5576
Откуда: Уругвайская АССР
Signaller писал(а):
Но разве это нормальное поведение аврок, что флаг взводится уже при старте МК, если таймер даже не включался?

Да, при активации любого прерывания надо сначала очистить уже возможно произошедшее. Поэтому при конфигурировании любой периферии желательно посмотреть в документации, где у неё флаг прерывания, очистить его и только затем разрешать прерывание.

_________________
Без гнева и жестокости, сегодня Смерть взмахнёт косой, и ангел тайными дорогами мой милый Кубик унесёт с собой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 07 апр 2020, 21:39 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4357
Откуда: г. Липецк
Вообще то если вы включаете прерывания в цикле начальной инициализации после RESET, такого быть не должно, все регистры инициализируются значениями по умолчанию. Но даже если и общие и частные прерывания отключены, логика возбуждения прерываний работает всегда и независимо включено прерывание или нет. Если нет, оно просто не вызовется и соответственно флаг не сбросится. И при включении с установленным флагом оно вызовется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 07 апр 2020, 21:44 
Старожил

Зарегистрирован: 10 мар 2012, 11:11
Сообщения: 220
Signaller писал(а):
Код:
    cli();
    TCCR1B |= 0;  //дурная операция, это не настройка
    TCNT1 = 0;
    TIMSK1 = 1<<TOIE1;     //Enable overflow interrupt
    sei();          //enable global interrupt


Код:
TIFR1 = 1<<TOV1;

Подправил.) Касательно TIFR1, да по сбросу должен быть в 0, но Вы же не знаете что Ардуино до Вас делало с этим таймером.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 07 апр 2020, 22:01 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3047
Из стандартных либ таймер1 толкьо либа Servo использует пишут. Но, Signaller, у вас же не мега, а китайский МК. Мало ли какие там отличия могут быть.

EDIT: А если в TCNT1 не писать ничего? Тоже будет прерывание?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 08 апр 2020, 00:38 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2445
Откуда: Киев
Всем спасибо за ответы. Буду впредь чистить флаги. Что интересно timsk1 при инициализации равен 7. То есть флаги ocr1a, ocr1b то же взведены.
NStorm не, невлияет вроде. Завтра перепроверю.
Но это вообще дичь будет, так как дальше мне надо очистить счётчик и перезапустить.
Жаль нельзя из ардуины для этого мк листинг ассемблерный вытянуть, так бы точно сказал трогает оно флаги или нет до моей инициализации.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 08 апр 2020, 01:49 
Старожил
Аватара пользователя

Зарегистрирован: 24 апр 2014, 04:58
Сообщения: 297
Tebatsu писал(а):
Если есть еще варианты буду рад услышать..

Код:
// на всякий случай
char ass=0;
// заебанное тело программы
int main(){
    while(1){
        if(ass)continue;
    }
    PORTB|=(1<<PB1);
    _delay_ms(5000);
    PORTB^=1;
     _delay_ms(5000);
}

ISR(INT0_vect) // по приходу 1
{
    ass=2;
}


ISR(PCINT0_vect) // по приходу 0
{
    ass=1;
}


Рабочий код программного "таймера"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 08 апр 2020, 03:47 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3047
Signaller писал(а):
Жаль нельзя из ардуины для этого мк листинг ассемблерный вытянуть, так бы точно сказал трогает оно флаги или нет до моей инициализации.

Почему нельзя? Можно хоть из хекса. Но лучше после компиляции перейти во временную папку где оно собиралось там и там elf найти. И натравить на него avr-objdump -d -S blablabla.elf.

Цитата:
Но это вообще дичь будет, так как дальше мне надо очистить счётчик и перезапустить.

Ну в ДШ написано, что флаг взводится в том же тике, когда TCNT1 становится равным нулю... по идее конечно это только когда оно после переполнения сбрасывается, но мало ли.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 08 апр 2020, 09:47 
Старожил

Зарегистрирован: 10 мар 2012, 11:11
Сообщения: 220
Signaller писал(а):
Но это вообще дичь будет, так как дальше мне надо очистить счётчик и перезапустить.
Жаль нельзя из ардуины для этого мк листинг ассемблерный вытянуть, так бы точно сказал трогает оно флаги или нет до моей инициализации.

Чему вы удивляетесь? Уберите прослойку в виде Ардуино с загрузчиком и всё будет кристально чистым.) Ардуино настраивает все таймеры. Таймер0 использует для системных целей, таймер1 и 2 при необходимости - для формирования PWM и tone. Но в этом нет ничего страшного. Просто делайте настройку полностью, не полагаясь на дефолтные значения. Только и всего.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 08 апр 2020, 18:13 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2445
Откуда: Киев
Та я покупал ардуино нано, как раз с целью писать в авр студии как обычно.
Просто avr+ usb-uart мост на али выходит дешевле чем отдельный мк тут (особенно с учетом, что платка сразу готова к работе).
Но, проглядел, и заказал этого клона.
Он конечно по параметрам покруче будет (таймеров больше, частота выше, цап есть). Но, я выходит привязан с ним к ардуине. Приходится мучатся местами. (вот прерывания по пинам криво работают, надо будет еще разобраться почему).
Но, ниче у меня он всего один остался, добью и забуду.
NStorm писал(а):
Signaller писал(а):
Жаль нельзя из ардуины для этого мк листинг ассемблерный вытянуть, так бы точно сказал трогает оно флаги или нет до моей инициализации.

Почему нельзя? Можно хоть из хекса. Но лучше после компиляции перейти во временную папку где оно собиралось там и там elf найти. И натравить на него avr-objdump -d -S blablabla.elf.

Цитата:
Но это вообще дичь будет, так как дальше мне надо очистить счётчик и перезапустить.

Ну в ДШ написано, что флаг взводится в том же тике, когда TCNT1 становится равным нулю... по идее конечно это только когда оно после переполнения сбрасывается, но мало ли.

Проверил, не зависит оно от установки счетного регистра.
Блин, насчет elf вы правы, я и забыл что ардуина билдит проект где-то там в appdata. Я просто попробывал в IDE експортнуть хекс, а оно пишет - не совместимое ядро...
Посмотрю еще вечером, что там в итоге собирается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 08 апр 2020, 18:19 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3047
А что мешает писать для этого МК без ардуины? Можно даже бут оставить и шить через дудку напрямую. Только код под barebone железо писать, без arduino core.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 09 апр 2020, 01:35 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2445
Откуда: Киев
Ну я предполагаю, что у этого мк все же есть нюансы в конфигурировании некоторых регистров ( а они точно есть).
И я надеялся (зря), что в ардуине это все уже учли и мне разбираться не надо будет. Так-как я не намерен использовать этот мк дальше.
Возможно, именно в части инициализации там ничего такого нет (ардуиновский сетап) , но это надо копатся в коре ардуины что бы доказать или опровергнуть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 09 апр 2020, 14:40 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3047
В ардуине-то учли. Только ардуина предполагает (чтобы не разбираться самому), что никаких прямых работ с регистрами не будет в принципе. Только функции ардуины и библиотек. Не таймеры юзать а millis() и micros().


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 09 апр 2020, 16:16 
Старожил

Зарегистрирован: 04 окт 2012, 00:23
Сообщения: 2745
Откуда: Москва
Цитата:
Ну я предполагаю, что у этого мк все же есть нюансы в конфигурировании некоторых регистров ( а они точно есть).
И я надеялся (зря), что в ардуине это все уже учли и мне разбираться не надо будет. Так-как я не намерен использовать этот мк дальше.
Возможно, именно в части инициализации там ничего такого нет (ардуиновский сетап) , но это надо копатся в коре ардуины что бы доказать или опровергнуть.


Можно пойти простым путем и совсем простым
http://arduino.ru/forum/apparatnye-vopr ... -lgt8f328p
https://drive.google.com/file/d/1mRlRiS ... jwk9J/view


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 09 апр 2020, 20:22 
Старожил

Зарегистрирован: 10 мар 2012, 11:11
Сообщения: 220
NStorm писал(а):
В ардуине-то учли. Только ардуина предполагает (чтобы не разбираться самому), что никаких прямых работ с регистрами не будет в принципе. Только функции ардуины и библиотек. Не таймеры юзать а millis() и micros().

Не, таймеры образованным, а не всем кому непопадя.)
Кстати, не знаю какой загрузчик использует LGT, а в оптибутовском используется таймер1. Кто там интересовался от что взведён TOV1?)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Срабатывание прерывания при пуске мк и прочие вопросы
СообщениеДобавлено: 09 апр 2020, 20:53 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3047
В лгт тоже оптибут, только модифицированный. Так пишут во всяком случае.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу 1, 2  След.


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


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

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


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

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

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