StasRadeon Опубликовано 18 марта, 2017 Поделиться Опубликовано 18 марта, 2017 Здравствуйте, у меня вопрос, может кто знает. Мне нужно сделать прерывания на один раз на 1 секунду. прерывания на каждую секунду, работает должным образом; char led = 0; main(void) { ... (вместо while(1), поставил while(!led)) while(!led) T1CONbits.TON = 0; } void __attribute__ ((interrupt, no_auto_psv)) _T1Interrupt( void ) { led = 1; LATAbits.LATA0 = 1 - LATAbits.LATA0; IFS0bits.T1IF = 0; } 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 18 марта, 2017 Поделиться Опубликовано 18 марта, 2017 попробуйте еще раз сформулировать вопрос.... 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
StasRadeon Опубликовано 18 марта, 2017 Автор Поделиться Опубликовано 18 марта, 2017 Простите за мой русский Я хотел сделать прерывания только на один раз. Я сконфигурировал таймер на 1 секунду, после каждой секунды включаетса светодиод, сечйас. Но я желаю чтоба он включался только один рас , после того, как одну секунду прошлого, a потом выключить прерывание. Когда прошло именно одна секунда, светодиод включится и прерывания остоновилось . 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Гар Опубликовано 18 марта, 2017 Поделиться Опубликовано 18 марта, 2017 Ничего не понял. Нарисуйте ручкой на листе бумаги диаграмму работы светодиода. 0 Хочешь накормить человека один раз — дай ему рыбу. Хочешь накормить его на всю жизнь — научи его рыбачить. Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 18 марта, 2017 Поделиться Опубликовано 18 марта, 2017 8 минут назад, StasRadeon сказал: Я хотел сделать прерывания только на один раз. ну так что мешает запретить прерывание от таймера по истечении 1секунда в самом прерывании? или выключить таймер? 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
StasRadeon Опубликовано 18 марта, 2017 Автор Поделиться Опубликовано 18 марта, 2017 Прерывание делается , но очень быстро, не через одной секунды включаются лед, а через нескколько микросекунд , это значит что он сразу идиот в вечный цикл, это когда я зделал так : (вместо while(1), поставил while(!led)) while(!led) T1CONbits.TON = 0; а когда while (1) , он работает как прежде , через каждой одной секунду включается светодиод. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Vovka Опубликовано 18 марта, 2017 Поделиться Опубликовано 18 марта, 2017 5 часов назад, StasRadeon сказал: Прерывание делается , но очень быстро, не через одной секунды просто не правильно настроен таймер. В МК несколько таймеров, есть 8-битные, есть 16... Плюс в зависимости от тактовой частоты МК у него максимальное время срабатывания разное. Скачайте, например, pic timer calculator 0 На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 18 марта, 2017 Поделиться Опубликовано 18 марта, 2017 сдается мне вы не совсем понимаете как работает прерывание и таймеры. 1. при стандартной частоте 4МГц невозможно получить время переполнение таймера1 более 0,524288с 2. в обработчике прерывания отсутствует проверка флага от таймер1, МК может входить в прерывание по другим прерываниям , какие из них разрешены/запрещены в вашем коде не видно. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
StasRadeon Опубликовано 19 марта, 2017 Автор Поделиться Опубликовано 19 марта, 2017 я работаю сейчас с dspic33fj128mc802 . я хочю читать 8000 значения от ацп в секунду, это значит 1/8000 = 125us преаривание. Timer3 сконфигурирован чтобы делал преаривание каждые 125us. но я получаю около 3000 значения. может кто то посмотреть на код и скажет где я ошибся. Oscillator Configuration with PLL activ : 40Mhz Timer 3 Interrupt : 125 us ADC : 10 bit mode ; UART Baudrate : 128.000 Databits:8 Stop bits: 1 Voice.rar 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 19 марта, 2017 Поделиться Опубликовано 19 марта, 2017 как это Timer 3 Interrupt : 125 us соотносится с Цитата void initTmr3() { TMR3 = 0x0000; // Clear TMR3 PR3=49;//49;//99; IFS0bits.T3IF = 0; // Clear Timer 3 Interrupt Flag IEC0bits.T3IE = 0; // Clear Timer 3 interrupt enable bit T3CONbits.TON=1; } ????? и еще вы уверены что по дефолту компилятор воспринимает числа как десятичные???? 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
StasRadeon Опубликовано 19 марта, 2017 Автор Поделиться Опубликовано 19 марта, 2017 правильно -> PR3=4999; FCY = FOSC/2 = 40 Mhz T = PR3 * 1 / (FCY / Prescaler) FOSC = 80 MHz T = 1 s => PR3 ≈ 4999 Prescaler = 256 Таймер 3 устанавливается чтоба перезапустить преобразование АЦП через каждые 125 us 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 19 марта, 2017 Поделиться Опубликовано 19 марта, 2017 Только что, StasRadeon сказал: Prescaler = 256 где это видно? Только что, StasRadeon сказал: T = 1 s => PR3 ≈ 4999 ну а у тебя что в коде???? 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
StasRadeon Опубликовано 19 марта, 2017 Автор Поделиться Опубликовано 19 марта, 2017 (изменено) Правильно , я когда поставил код забыл что менял PR3 = 49; извените . Изменено 19 марта, 2017 пользователем StasRadeon 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 19 марта, 2017 Поделиться Опубликовано 19 марта, 2017 Т.е. всё работает ? 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
StasRadeon Опубликовано 19 марта, 2017 Автор Поделиться Опубликовано 19 марта, 2017 Работает , но неправильно, не знаю где смотреть, в чём я ошибся. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
StasRadeon Опубликовано 19 марта, 2017 Автор Поделиться Опубликовано 19 марта, 2017 Правильно , так : FCY = FOSC/2 = 40 Mhz T = PR3 * 1 / (FCY / Prescaler) FOSC = 80 MHz T = 1 s => PR3 ≈ 4999 Prescaler = 1:1 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 19 марта, 2017 Поделиться Опубликовано 19 марта, 2017 каким образом период Т =1s 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
StasRadeon Опубликовано 19 марта, 2017 Автор Поделиться Опубликовано 19 марта, 2017 правильно заметили , T = 0,125 us ; 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 19 марта, 2017 Поделиться Опубликовано 19 марта, 2017 ну так в чем проблема? 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
StasRadeon Опубликовано 19 марта, 2017 Автор Поделиться Опубликовано 19 марта, 2017 я просто сечйас работал на тот элемент , чтобъ зделать одно прерывания через одной секунды и всё, для тово чтобы посмотреть сколько преобозовании будет от ацп и попутался . Проблема в том , по моим расчетом, я должон принимать в hyperterminal (serial) , около 8000 преобозовании от ацп в одной секунды , но я получаю около 3000 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 20 марта, 2017 Поделиться Опубликовано 20 марта, 2017 Что то я не пойму, откуда Вы такие цифры берёте ? Частота периферии (аля тактовая для таймера) = 40 МГц. По Вашим цифрам : 40000000/256(prescaler) = 156250 Гц (частота инкремента таймера) 156250 Гц / 5000(PR2+1) = 31.25 В итоге, мы получили 31,25 Гц на выходе таймера. Причём тут 8 КГц ? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 20 марта, 2017 Поделиться Опубликовано 20 марта, 2017 (изменено) 9 часов назад, StasRadeon сказал: правильно заметили , T = 0,125 us ; А как это у Вас так все наивно? Получаете данные с периодом в 125 мкс (если конечно исправили PR3), а передаете через UART с рейтом в 9600, то есть два байта (одно слово) за 2 мс. Даже если Вы включите DMA, то на 8000 отсчетов его не хватит. В этом контроллере двухпортовая память DMA занимает только 1024 слова. Изменено 20 марта, 2017 пользователем my504 2 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 20 марта, 2017 Поделиться Опубликовано 20 марта, 2017 8 минут назад, my504 сказал: Итого время преобразования ПО МИНИМУМУ: 13*76=988 мкс 0.988мкс,,, или нет? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 20 марта, 2017 Поделиться Опубликовано 20 марта, 2017 Да именно так, но я сначала не посмотрел код, а потому исправил ответ. Товарисч имеет каждые 125 мкс два байта и тут же в ISR по АЦП шлет их у УАРТ с рейтом в 9600... 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 20 марта, 2017 Поделиться Опубликовано 20 марта, 2017 Ха, а слона то и не заметили Я, почему то, подумал, что он ежесекундно передаёт то, что насчитал. Т.к. в первом посте что-то про секунду проскакивало... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.