Перейти к содержанию

Общие вопросы по PIC-микроконтроллерам


NebsteR

Рекомендуемые сообщения

1 час назад, my504 сказал:

Я просто в недоумении... В этом МК есть только ДВА источника прерываний касающихся событий времени - внешнее прерывание и прерывание по TMR0.

Виноват,  в прерывание заходим при изменении регистров кнопками но это не меняет сути

Ссылка на комментарий
Поделиться на другие сайты

10 минут назад, legik сказал:

Виноват

Ну слава Богу, это выяснили...

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

Вообще то так это не делается. Во первых, нужна защита от дребезга кнопки. Это уже потребует интервала ее опроса. Иначе одно нажатие будет приводить к серии прерываний (и при нажатии и при отпускании) или потребует фильтра на входе.

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

Основной цикл освободится от циклов счета и позволит спокойно решать вопрос с перегрузкой параметров генерируемого сигнала...

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

да, может быть...

но  мне проще будет посчитать длительность имульса без таймера в цикле по моему мнению.

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

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Только что, legik сказал:

но  мне проще будет

Прикольно... Значит считать машинные циклы с учетом разного времени при ветвлениях вам проще, чем считать базовые интервалы таймера? :crazy:

Вы видимо плохо понимаете о чем я веду речь....

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

для таймера без предделителя шаг изменения 1маш.цикл

для циклов

lo_cyc        decfsz    ml_b_lo_tmp,1
        goto    lo_cyc    // для одного цикла 2маш.цикла
        decfsz    sr_b_lo_tmp,1
        goto    lo_cyc    // для двух циклов 4маш.цикла
        ;decfsz    st_b_lo_tmp,1
        ;goto    lo_cyc   // для трех циклов  6маш.циклов
        bsf        PORTA,4

Ссылка на комментарий
Поделиться на другие сайты

7 minutes ago, legik said:

не использую таймер а чисто цикл

Да нормально, нет проблем, делайте как делаете программный счётчик - и все будет хорошо.

У этих таймеров только 1-2 байта на весь период, у Вас же используется 3 байта, можно сделать длинный период с мелким шагом изменения.

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, Yurkin2015 сказал:

нет проблем, делайте как делаете программный счётчик - и все будет хорошо.

угу, при осцилляторе 4МГц , и формировании частот около 10КГц   аппаратный таймер даст шаг 200Гц , программный 1100Гц ,

а так да все будет хорошо...

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, legik сказал:

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

о как... а не беспокоит, что если на кнопки прилетит помеха, МК уйдет в прерывание и будет порушена работа цикла?

Ссылка на комментарий
Поделиться на другие сайты

 

5 минут назад, IMXO сказал:

legik - значит все в помойку...   меня интересовал один вопрос, который я озвучил в самом начале

IMXO - просто вы наступаете на детские грабли , которые многие уже прошли.

Как преподаватель с приличным стажем,  могу только озвучить  - такая "беда" :) совершенно неизбежна по любому предмету при возрастном обучаемом. Тут нельзя  "тыкать носом" в дилетантские ошибки. И совершенно "безболезненно" проходит разъяснение грамотного освоения основ предмета. Типа - что считать "дурным"  тоном в программировании и пути (как правило их не один) как возможно и правильно по "школе". Далее с "мелочами"  человек (чай не мальчик :) ) разберётся во всём сам.
legik, удачи вам в освоении программирования.

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, valentinovich сказал:

Как преподаватель с приличным стажем,  могу

Обучаемый "возрастной" категории в отличии от учеников школьного возраста утрачивает аргументацию связанную с авторитетом старшего. Но подобная аргументация и в школьном возрасте будет негодной. Это аргументация ПЛОХОГО преподавателя.

Зато с возрастом у людей обостряются качества "второй натуры". Но тут качество преподавания бессильно.Самоуверенность соединенная с упрямством и заправленная латентной ленью даст тот салат, который в лучшем случае даст фейковый результат, а в худшем злобу и отвращение к предмету занятий. Фейковым я называю результат. который работает на первый взгляд. но дает баги различной периодичности и фатальности.

ЗЫ. Смешно читать, когда автор пишет про "точность", ни разу не обозначив величины формируемого сигнала и обоснованное разрешение этого сигнала по времени. При трех байтах программного счетчика разрешение по времени составит 1/2^24 = 1/16 777 216. Что же это такой за процесс, которому требуется такое разрешение? Даже ума не приложу...  :crazy:

Тот факт, что разрешение еще не является точностью - это отдельная тема... :bye:

 

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

my504, по сути-то оно всё верно, но чего-то картинка у вас получилась мрачноватая. :(
Но мы всё же будем надеяться, что legik на нас не сильно обидится, всё поймёт правильно, внемлет призывному голосу познания и продолжит осваивать это увлекательное дело - логику программирования.

Ссылка на комментарий
Поделиться на другие сайты

    swapf    W_Temp,F    ; Поменять местами старший и младший полубайты
                    ; регистра W_Temp с сохранением результата
                    ; операции в нем же.
        swapf    W_Temp,W    ; Поменять местами старший и младший полубайты
                    ; регистра W_Temp с сохранением результата
        
        retfie

Подскажите, зачем дважды менять регистр "W_Temp" при выходе из прерывания? или это надо принять как должное?

Ссылка на комментарий
Поделиться на другие сайты

@legik Таким образом восстанавливается обратно содержимое рабочего регистра W из сохранённой копии W_Temp. Применять инструкцию MOVF нельзя, т.к. она изменяет STATUS регистр, который остаться таким как до прерывания. А инструкция SWAPF никак не влияет на STATUS, но она меняет полубайты местами. Поэтому приходится использовать её два раза.

Изменено пользователем Yurkin2015
Ссылка на комментарий
Поделиться на другие сайты

  • 6 месяцев спустя...

Доброго времени суток.
Помогите разобраться.
Начал изучать Си после Асм.
Возник вопрос.

Прерывания. Сохранение контекста, как с ним быть?

Микроконтроллер PIC16.

На асме все было понятно, сохранил контекст - опросил флаги - обработал - восстановил контекст и вернулся к главному циклу.
А как в Си?
В литературе не нашел примеров сохранения контекста в Си для PIC16.
Обработчик прерывания сразу делает работу и все.

Например, есть регулятор мощности на МК, по внешнему прерыванию считает ошибку по Брезенхему и принимает решение включать нагрузку в этот полупериод или нет.
Быстрый код, по крайней мере в асме.
В главном цикле занимается опросом АЦП, усреднением, и выводом информации на LCD - долгие процессы, особенно управление LCD.
Если не сохранить контекст при входе в обработчик прерывания, то возникнут проблемы в главном цикле после возвращения в него.

Как это правильно реализовать на Си?
Программа во время компиляции сама ведь не сгенерирует необходимый код для правильного сохранения контекста

Помогите разобраться, а лучше книжку посоветуйте где объяснения есть.

Изменено пользователем Splav
Ссылка на комментарий
Поделиться на другие сайты

37 minutes ago, Splav said:

сама ведь не сгенерирует

Компилятор всё сгенерирует, и вход и выход из прерывания, всё сохранится в лучшем виде, не надо ни о чём беспокоиться! Прерывайтесь в любом месте!

Ссылка на комментарий
Поделиться на другие сайты

@Yurkin2015 Спасибо. Вчера в книге С.Катцена все таки нашел вскользь от этом упоминание. Компилятор CSS все далает сам.
И в книге Уилмсхерста с компилятором C18 тоже вскользь об этом, но он PIC18 рассматривает, они от PIC16 отличаются.
А надо ли в PIC16 указывать адрес прерывания, как это делается в PIC18, для разведения по сторонам прерывания высокого приоритета и низкого?
Или будет достаточно написать
 

void interrupt isr(void)
 {
  ....//опросить нужные флаги, отреагировать
 }

и больше ничего?

Ссылка на комментарий
Поделиться на другие сайты

15 минут назад, Splav сказал:

А надо ли в

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

Скрытый текст

MPLAB® XC8 C Compiler User’s Guide

5.9.4
5.9.4.1 Context Switching
CONTEXT SAVING ON INTERRUPTS

Some registers are automatically saved by the hardware when an interrupt occurs. Any
registers or compiler temporary objects used by the interrupt function, other than those
saved by the hardware, must be saved in code generated by the compiler. This is the
context save, or context switch code.
See Section 5.7 “Register Usage” for the registers that must be saved and restored
either by hardware or software when an interrupt occurs.
Enhanced mid-range PIC devices save the W, STATUS, BSR and FSRx registers in
hardware (using special shadow registers) and hence these registers do not need to
be saved by software. The only register that can need to be saved is BTEMP11, a compiler temporary location that acts like a pseudo register. This makes interrupt functions
on Enhanced mid-range PIC devices very fast and efficient.

Other mid-range PIC processors only save the entire PC (excluding the PCLATH register) when an interrupt occurs. The W, STATUS, FSR and PCLATH registers and the
BTEMP1 pseudo register must be saved by code produced by the compiler, if required.

By default, the PIC18 high-priority interrupt function will utilize its internal shadow register to save the W, STATUS and BSR registers. All other used registers are saved in
software. Note that for some older devices, the compiler will not use the shadow registers if compiling for the MPLAB ICD debugger, as the debugger itself utilizes these
shadow registers. Some errata workarounds also prevent the use of the shadow
registers see Section 4.8.26 “--ERRATA: Specify Errata Workarounds”.
For the low priority PIC18 interrupts, or when the shadow registers cannot be used, all
registers that has been used by the interrupt code will be saved by software.
The compiler determines exactly which registers and objects are used by an interrupt
function, or any of the functions that it calls (based on the call graph generated by the
compiler), and saves these appropriately.
Assembly code placed in-line within the interrupt function is not scanned for register
usage. Thus, if you include in-line assembly code into an interrupt function, you can
have to add extra assembly code to save and restore any registers or locations used.
The same is true for any assembly routines called by the interrupt code.
If the W register is to be saved by the compiler, it can be stored to memory reserved in
the common RAM. If the device for which the code is written does not have common
memory, a byte is reserved in all RAM banks for the storage location for W register.
Most registers to be saved are allocated memory in the interrupt function’s auto area.
They can be treated like any other auto variable and use the same assembly symbols.
On mid-range devices, the W register is stored in BTEMP0, a pseudo register, see
Section 5.7 “Register Usage”.
If the software stack is in use, the context switch code will also initialize the stack
pointer register so it is accessing the area of the stack reserved for the interrupt. See
Section 5.5.2.2.2 “Software Stack Operation”, for more information on the software
stack.

 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...