Например TDA7294

Форум РадиоКот • Просмотр темы - Вопрос по спящему режиму
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт июл 25, 2025 21:29:00

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Вопрос по спящему режиму
СообщениеДобавлено: Вт окт 18, 2016 16:06:30 
Родился

Зарегистрирован: Вт окт 18, 2016 16:02:54
Сообщений: 5
Рейтинг сообщения: 0
Есть пик 12f1822 . Первый вопрос такой - от чего может просыпаца данный пик? то все что его может разбудить?
Второе - задача чтобы пик спал и его будило от PIR сенсора - реально такое?

Перепробовал много, не просыпаеца пик и все тут. Но может я чето не так сделал, вот кароч настройки в код конфигураторе:
Изображение
У меня внешнее прерывание на пине РА0 по позитивному фронту (сенсор при появлении движения выдает 3 вольта длительностью 2 секунды примерно импульс).
Изображение
Вот тут я так понял активируется вектор прерываний, вот я поставил галку энаблед.
Вот сам код проги (эта прога не полная — только начинаю шаг за шагом):
Код:
void START_pause (void);
/*
                         Main application
 */
void main(void)
{
    // initialize the device
    SYSTEM_Initialize();

    // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
    // Use the following macros to:
    START_pause();
    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable();   --- я тут игрался и так и так

    // Enable the Peripheral Interrupts
    INTERRUPT_PeripheralInterruptEnable();  --- тут тоже вариировал и так и эдак

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();
   
    int b = 0;
    while (1)
    {
        SLEEP ();
        if ((b = SENS_GetValue ()) == 1)
        {
            __delay_ms (20);
            if ((b = SENS_GetValue ()) == 1)
            {
                KEY_SetHigh ();
                LED_SetHigh ();
                __delay_ms (500);
            }
        }
    }
}

void START_pause (void)
{
    int i = 70;
    int c = 0;
    while (i >= 10)
    {
        BEEP_SetHigh ();
        LED_SetHigh ();
        __delay_ms (200);
        BEEP_SetLow ();
        LED_SetLow ();
        for (c = 0; c < i; c++ )
            __delay_ms (10);
        i = i - 2;
    }
    BEEP_SetHigh ();
    LED_SetHigh ();
    for (i = 0; i <= 20; i++)
        __delay_ms (100);
    BEEP_SetLow ();
    LED_SetLow ();
}


вот мы заходим в цикл после функции подготовки к работе. И сразу укладываем пик спать. Далее по идее по приходу импульса от сенсора пик должен по первому же положительному фронту проснулся и перейти на следуюший оператор идуший за функцией слиип () также?
А там у меня идет проверка наличия импульса но ноге пика, потом малая пауза и потом перепроверка для фильтрации помех, так если положительный уровень установлен (то есть не помеха а тот самый импульс от сенсора) то включаем ключ и светик и держим так пол минуты.
Но в реале пик отпипикивается по функции начальной так сказать инициализации и потом замолкает и вродь внешне как ушел спать, но как я там руками не махаю перед сенсором — ноль реакции. То есть видимо не просыпаеца. Что же не так?
Вот снимок с осцила показывающий что сенсор импульсы кидает исправно, то есть проблема не в нем.
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по спящему режиму
СообщениеДобавлено: Вт окт 18, 2016 16:47:56 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
roman89 писал(а):
Есть пик 12f1822 . Первый вопрос такой - от чего может просыпаца данный пик? то все что его может разбудить?

Даташит, раздел 9 читали? Вряд ли.

П.с. Что это?
Код:
INTERRUPT_GlobalInterruptEnable();

Вернее я могу это понять, но поймет ли это пик? Что это за среда программирования?

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по спящему режиму
СообщениеДобавлено: Вт окт 18, 2016 17:24:17 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23910
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
roman89 писал(а):
Есть пик 12f1822 . Первый вопрос такой - от чего может просыпаца данный пик? то все что его может разбудить?
Второе - задача чтобы пик спал и его будило от PIR сенсора - реально такое?


Учимся читать даташит писал(а):
9.1 Wake-up from Sleep
The device can wake-up from Sleep through one of the
following events:
1. External Reset input on MCLR pin, if enabled
2. BOR Reset, if enabled
3. POR Reset
4. Watchdog Timer, if enabled
5. Any external interrupt
6. Interrupts by peripherals capable of running
during Sleep (see individual peripheral for more
information)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по спящему режиму
СообщениеДобавлено: Ср окт 19, 2016 07:58:59 
Родился

Зарегистрирован: Вт окт 18, 2016 16:02:54
Сообщений: 5
Рейтинг сообщения: 0
Кароч такая фишка. мой пик должен спать все время пока не придет импульс на ножку RA0. По приходу положительного фронта просыпаемся, проверяем действительно ли это испульс а не помеха и если все так то включаем релешку и диод. вот код который я написал:
Код:
void main(void)
{
    // initialize the device
    SYSTEM_Initialize();
   
    // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
    // Use the following macros to:
    //START_pause();
    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable();

    // Enable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();

    int b = 0;
    while (1)
    {
        SLEEP ();
        if (flag_PIR == 1)
        {
            INTERRUPT_GlobalInterruptDisable();
            __delay_ms (20);
            if ((b = SENS_GetValue ()) == 1)
            {
                KEY_SetHigh ();
                LED_SetHigh ();
                __delay_ms (500);
            }
            flag_PIR = 0;
            INTERRUPT_GlobalInterruptEnable();
        }
    }
}


Добавлено after 14 minutes 37 seconds:
Изображение
смотри картинку выше. кто пользовался код конфигуратором знает, какие он файлы генерирует.
я все там установил для прерывания по приходу положительного импульса. но трудность у меня в том что.вот спит пик. пришел положительный фронт - пошло прерывание. в функции обработки прерывания я поставил переменную флаг, в которой должна записаца единица, если пришло прерывание. и потом сразу возвращаемся в майн функцию и там смотрим стала ли единицей эта переменная ну и так далее - смотри код. но в реале ниче не работает - реакции устройства на импульс ноль. у меня сомнения в том - правильно ли я сделал этот флаг, типа область видимости или в си же передача по значению в функцию то происходит, кароч не понял я ничего. вот еще могу скинуть весь проект.

ну а вообще киньте мне проект с примером как реализовывать сон и обработку прерывания ( но чтоб сам код обработки прерывания в майн функции был) по импульсу. чтоб я понял как там правильно флаги ставить то сё.

Добавлено after 17 minutes 23 seconds:
и еще такой ворпос - у нас есть макрос - глобального разрешения прервыний, а также переферийные прерывания разрешение (к этим периферийным что именно относиться? все что внутри типа таймеры ацп и тд или что?)


Вложения:
light_control.X.zip [166.79 KiB]
Скачиваний: 147
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по спящему режиму
СообщениеДобавлено: Ср окт 19, 2016 09:41:30 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
Проект надо не скинуть, а выкинуть и писать с нуля, причем традиционным методом, а не понадеявшись на конструктор.
Хотите доказательств? Пожалуйста.

Программа начинается с SYSTEM_Initialize(). Находим ее и видим следующее:
Код:
void SYSTEM_Initialize(void)
{
   
    PIN_MANAGER_Initialize();
    OSCILLATOR_Initialize();
}

Ищем PIN_MANAGER_Initialize() и помимо всего прочего что мы видим? А вот что:
Код:
    // interrupt on change for group IOCAF - flag
    IOCAFbits.IOCAF0 = 0; // Pin : RA0

    // interrupt on change for group IOCAN - negative
    IOCANbits.IOCAN0 = 0; // Pin : RA0

    // interrupt on change for group IOCAP - positive
    IOCAPbits.IOCAP0 = 0; // Pin : RA0

    INTCONbits.IOCIE = 1; // Enable IOCI interrupt

Расшифровать? Без проблем. RA0, согласно вышеуказанному, НЕ БУДЕТ реагировать ни на положительный фронт, ни на отрицательный. И после этого разрешается прерывание по изменению неизменяемого.
Далее идут разрешения глобальных и периферийных прерываний, но это уже не имеет смысла, т.к. источник прерываний ОТКЛЮЧЕН.

Я не ас, я в некотором роде тоже начинающий, но эти ошибки просто бросаются в глаза. Мне хватило 5 минут, чтоб разобраться в исходниках и свериться с ДШ.
Так что забудьте про МСС, берите ДШ и пишите традиционным методом без лишнего мусора. Вот и все, что я могу посоветовать.

P.S. И вдогонку еще один совет. Для начала добейтесь того, чтобы ПИК реагировал на датчик в обычном режиме. А вот когда добьетесь этого, тогда и вводите SLEEP.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по спящему режиму
СообщениеДобавлено: Чт окт 20, 2016 11:48:21 
Родился

Зарегистрирован: Вт окт 18, 2016 16:02:54
Сообщений: 5
Рейтинг сообщения: 0
Я всетаки поставил себе конфигуратор но более старой версии. Действительно кривые руки микрочип сделали баг в конфигураторе. Теперь заработало. Но не все. Вот код который я написал по новому, тоже криво наверно — но хоть как то работает. Но после активации режима слип () пик по моему не просыпаеца, кароч со слип () не работает. И второй вопрос связанный с PIR датчиком — он дает слишком большой импульс — около 2 сек минимум. Подскажите как сократить импульс скажем до 200-300 мс. Я знаю там по моему RC цепочка, сокращением либо резистора либо емкости кондера можно уменьшить длительность так же? Только вот там не один кондер и резистор а несколько, так какие же надо сокращать? Вот новый файл проекта прикрепил.
Изображение


Вложения:
light_control.X.zip [150.34 KiB]
Скачиваний: 159
Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Вопрос по спящему режиму
СообщениеДобавлено: Чт окт 20, 2016 12:32:28 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23910
Откуда: Московская область, Фрязино
Рейтинг сообщения: 3
roman89 писал(а):
как сократить импульс[/url]

Зачем?
МК по барабану длина импульса. Прерывание выводящее из слипа должно быть сконфигурировано на необходимый активный фронт.
ЗЫ. Если честно, то лично у меня практически нет никакого желания Вам что либо объяснять, поскольку Вы упорно не желаете хоть что нибудь изучать...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по спящему режиму
СообщениеДобавлено: Чт окт 20, 2016 14:07:31 
Друг Кота
Аватар пользователя

Карма: 58
Рейтинг сообщений: 389
Зарегистрирован: Чт мар 20, 2008 01:06:40
Сообщений: 3271
Откуда: Севастополь
Рейтинг сообщения: 0
Цитата:
кривые руки микрочип
а есть смайл с завалившимся на спину котом в истошном приступе смеха ?

_________________
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по спящему режиму
СообщениеДобавлено: Чт окт 20, 2016 18:27:09 
Родился

Зарегистрирован: Вт окт 18, 2016 16:02:54
Сообщений: 5
Рейтинг сообщения: 0
Я прекрасно знаю что по положительно музыку фронту и длина импульса не здравствуйте значения. Но я хочу ууменьшить длину по другой причине. Вопрос в силе.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по спящему режиму
СообщениеДобавлено: Чт окт 20, 2016 19:30:59 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
Ставьте между ПИРом и ПИКом триггер какой нибудь, чтоб он давал короткий импульс при получении длинного.
Но я пока не вижу в этом никакого смысла. О какой силе идет речь?

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по спящему режиму
СообщениеДобавлено: Пт окт 21, 2016 17:16:11 
Родился

Зарегистрирован: Вт окт 18, 2016 16:02:54
Сообщений: 5
Рейтинг сообщения: 0
там по моему просто мне раньше показывали схему данного датчика и там есть RC цепочка от нее зависит длительность импульса, нужно лишь поменять номиналы, только нет у меня щас этого может кто скинет? триггер - излишний обвес. вопрос в силе- это такое выражение то есть вопрос еще имеет актуальность


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

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


Кто сейчас на форуме

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


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y