РАДИОСХЕМЫ



СТАРЫЙ ФОРУМ

ФОРУМ НА ЭЛВО

РАДИОФОРУМЫ


СХЕМЫ И СТАТЬИ
  • БЛОГИ
  • НОВОЕ
  • СХЕМЫ
  • РАЗНОЕ
  • ТЕОРИЯ
  • ТЕЛЕВИДЕО
  • СВЕТОДИОД
  • МЕДТЕХНИКА
  • БЫТТЕХНИКА
  • ИЗМЕРИТЕЛИ
  • СПРАВОЧНИК
  • ТЕХНОЛОГИИ
  • РЕМОНТ СХЕМ
  • МОБИЛЬНИКИ
  • КОМПЬЮТЕРЫ
  • НАЧИНАЮЩИМ
  • ЗАРЯДКИ И АКБ
  • СИГНАЛИЗАЦИИ
  • АУДИОТЕХНИКА
  • АВТОВЕЛОМОТО
  • БЛОКИ ПИТАНИЯ
  • РАДИОПРИЁМНИКИ
  • МЕТАЛЛОИСКАТЕЛИ
  • МИКРОКОНТРОЛЛЕР
  • РАДИОПЕРЕДАТЧИКИ


  • Архив - только для чтения
    Бортовой компьютер на мотоцикл
    Чт, 02.03.2017, 22:06 | Сообщение # 31        
    msmmmm
    аватар
      Постов: 891   Друзья 
    Тёмыч, не вижу команды глобального разрешения прерываний.
    Чт, 02.03.2017, 23:15 | Сообщение # 32        
    Тёмыч
    аватар
      Постов: 759   Друзья 
    msmmmm, это разумеется в коде есть:

    // Global enable interrupts
    #asm("sei")


    и прерывания то работают, там в программе по ним ещё и импульсы считываются с датчика скорости. Но до того момента пока контроллер не заснёт.

    Вот код:

    Чт, 02.03.2017, 23:17 | Сообщение # 33        
    msmmmm
    аватар
      Постов: 891   Друзья 
    Пробуй в реале. Вроде бы косяков нет. Может Протеус балуется. Внешний инт должен асинхронно будить с любым тактовым генератором. Не пойдет - тогда будем ум морщить.
    Пт, 03.03.2017, 12:47 | Сообщение # 34        
    Тёмыч
    аватар
      Постов: 759   Друзья 
    msmmmm, хорошо, попробую потом отпишусь, спасибо smile

    Добавлено (03.03.2017, 10:45)
    ---------------------------------------------
    msmmmm, попробовал, в реале тоже работать не хочет, значит в чём то накосячил sad

    Добавлено (03.03.2017, 13:41)
    ---------------------------------------------
    msmmmm, попробовал отработать эту проблему, сделал минимально возможную программу и вот что получилось: работает только если внешнее прерывание настроено на срабатывание по низкому уровню, остальные три режима не функционируют (изначально у меня стоял режим "по переднему фронту").

    Добавлено (03.03.2017, 13:47)
    ---------------------------------------------
    проблема в том, что при включении зажигания будет подаваться плюс на вход МК, и если использовать INT0 Mode: Low level, то придётся сигнал инвертировать, а плата уже готова и на это не рассчитана sad

    Пт, 03.03.2017, 15:30 | Сообщение # 35        
    msmmmm
    аватар
      Постов: 891   Друзья 
    Тёмыч, собирался еще утром написать, но только сейчас до компа добрался - работа. В режиме Power-down МК отключен почти полностью, в т.ч. и его тактовый генератор, а прерывания по изменению уровня синхронизируются именно с ним. В даташите указано, что выход из режима Power-down возможен только прерывания по низкому уровню, но это не совсем так, по крайней мере из моего опыта. Просыпается МК и по остальным типам прерываний int, но само прерывание не обрабатывается. Происходит это потому, что выход из глубокого сна длителен и подобен сбросу, только программный счетчик не изменяется. Изменился уровень, пошла команда на включение МК, завелся генератор, выдержалось время стабилизации генератора и лишь затем такты пошли на АЛУ. Все это время даже флаг не может измениться - отсутствует тактовая частота. После просыпания МК не видит, что было прерывание (прерывание реагирует на изменения уровня, а оно уже произошло) и не обрабатывает его, а выполняет дальше программу. А вот при прерывании по низкому уровню все происходит точно так же, но проснувшийся МК реагирует просто на низкий уровень на входе и все работает по даташиту.
    Выход из ситуации:
    1. Использовать Idle. Кушать будет больше.
    2. Попробовать использовать прерывание без прерывания smile . Написать программу так, чтобы проснувшийся МК продолжал работу без перехода в прерывание. Учесть длительность просыпания из режима Power-down.
    Пт, 03.03.2017, 16:46 | Сообщение # 36        
    Тёмыч
    аватар
      Постов: 759   Друзья 
    Цитата msmmmm ()
    Просыпается МК и по остальным типам прерываний int, но само прерывание не обрабатывается. Происходит это потому, что выход из глубокого сна длителен и подобен сбросу, только программный счетчик не изменяется. Изменился уровень, пошла команда на включение МК, завелся генератор, выдержалось время стабилизации генератора и лишь затем такты пошли на АЛУ. Все это время даже флаг не может измениться - отсутствует тактовая частота. После просыпания МК не видит, что было прерывание (прерывание реагирует на изменения уровня, а оно уже произошло) и не обрабатывает его, а выполняет дальше программу. А вот при прерывании по низкому уровню все происходит точно так же, но проснувшийся МК реагирует просто на низкий уровень на входе и все работает по даташиту.


    это понял.

    Цитата msmmmm ()
    2. Попробовать использовать прерывание без прерывания . Написать программу так, чтобы проснувшийся МК продолжал работу без перехода в прерывание. Учесть длительность просыпания из режима Power-down.


    msmmmm, каким образом это осуществить? если можно по подробней про это, и желательно с примером, а то мозгов пока на это не хватает... smile
    Пт, 03.03.2017, 23:14 | Сообщение # 37        
    msmmmm
    аватар
      Постов: 891   Друзья 
    Для начала определи стоит ли на твоем контроллере этим заниматься (я уже не помню над которым издевался), а именно: все оставь как было, а после команды слип установи какой-нибудь маркер (зажигание светодиода и вход в бесконечный цикл, выдача в СОМ какой-то информации и т.д.) и посмотри: просыпается контроллер от синхронного прерывания или нет. По даташиту - нет. Но вот нашел еще любителя нестандартных применений:
    Re: Atmega 8. Выход из режима power-down.
    Пн мар 31, 2014 12:32:38
    Попробовал выводить контроллер из спящего режима по любому логическому изменению на INT1 - и все в порядке, выходит и работает.

    Шанс есть - это на меге8.

    А чем Idle не угодил? Потребление смешное, а питание ключом зажигания снимается полностью.
    Сб, 04.03.2017, 14:48 | Сообщение # 38        
    Тёмыч
    аватар
      Постов: 759   Друзья 
    msmmmm, если я тебя правильно понял, сделал вот так (правильно сделал или нет?):



    тут по идее, если контроллер не спит, всегда будет гореть светодиод.
    Попробовал на всех режимах, работает только при INT Mode: Low level.

    Цитата msmmmm ()
    А чем Idle не угодил? Потребление смешное, а питание ключом зажигания снимается полностью.


    Проблема в том, что ключом зажигания питание не снимается.

    Добавлено (04.03.2017, 15:48)
    ---------------------------------------------
    контроллер мега8.
    Сб, 04.03.2017, 22:12 | Сообщение # 39        
    msmmmm
    аватар
      Постов: 891   Друзья 
    Int теребил во время сна? Впрочем, попробую у себя, что получится отпишусь.
    Сб, 04.03.2017, 23:16 | Сообщение # 40        
    Тёмыч
    аватар
      Постов: 759   Друзья 
    Цитата msmmmm ()
    Int теребил во время сна?

    да, конечно.
    Поиск:

    Внимание! Форум переехал на Tehnodium.ru



    © 2010-2022 "Форум Радиосхемы". All Rights Reserved  Почта  PDA