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

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


NebsteR

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

Всем известно, что будет...............

- При выполнении табличного чтения вычисляемым переходом следует заботиться о том, чтобы значение PCL не пересекло границу БЛОКА памяти (каждый блок 256 байт)

Видимо все таки не всем известно.... :crazy:

При выполнении табличного чтения МОЖНО пересекать границу блока памяти. Просто нужно вычислять при этом ПОЛНЫЙ (двухбайтный) адрес в программной памяти. И сначала загружать старший байт в PCLATH, а лишь затем загружать младший в PCL.

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

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

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

с таблицей всё ОК она в рамках блока.

ага, бабушке расскажешь....

	   ;----- циклічний режим -----
L_sen_10   MOVF    Flag_N_T, w
	   XORLW   0x04		    ; перевірка флага на 4
	   BTFSC   STATUS , Z
	   CLRF    Flag_N_T	    ; сброс, якщо флаг = 4
	   INCF    Flag_N_T, f
	   MOVF    Flag_N_T, W
	   ADDWF   PCL, f
	   NOP
	   GOTO    L_sen_11	    ; t_1
	   GOTO    L_sen_12	    ; t_2
	   GOTO    L_sen_13	    ; t_3
	   GOTO    L_sen_14	    ; t_4

четвертый готу лежит четенько по адресу 0х100 и бодро шагаем на вектор ресета....

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

Спасибо IMXO за внимание к моему вопросу.

Что за магический адрес 0х100? Из даташита на PIC16F628A - 0005h - 03FFh - память программ без подводных камней.

Я наверное что-то пропустил?

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

По Вашим наводкам изучил "правила табличного чтения" и сейчас попробую перекомпоновать программу так, чтобы обойти адреса, кратные 256. О результате сообщу.

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

Спасибо IMXO. Действительно в моей программе при выполнении табличного чтения значение PCL пересекло границу блока памяти (значение 256 (0х100)).

После перекомпоновки программы все работает нормально.

Кому интересно, выкладываю схемку девайса - универсальный четырехточечный термометр-термостат-сигнализация. Исходник уже выложен.

4датч_Термостат_Сигналізація.pdf

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

  • 1 месяц спустя...

Здравствуйте все!

... все работает нормально.

...универсальный четырехточечный термометр-термостат-сигнализация. Исходник уже выложен.

Покупаю комплектующие, собираю без ошибок, подключаю 4 датчика (даже 1) и термометр-термостат-сигнализация не работает! Уникальные 64-битные коды датчиков прописаны в программе. Каким образом их узнать?

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

  • 2 месяца спустя...

Народ, объясните пожалуйста принцип параллельного исполнения подпрограмм в программе контроллера. Есть та же таблица символов, благодаря которой идет индикация на 4х сегментный индикатор - это одна подпрограмма (1), которая должна быть непрерывной, что бы изображение было всегда. Есть другая подпрограмма (2), например подпрограмма BIDEC преобразователя, которая все время преобразует постоянно меняющееся число N в двоичном регистре. Так вот, получается, что пока работает преобразователь - индикаторы отключаются, т.к подпрограмма 1 не работает во время преобразования. Как решается такая проблема? Я понимаю, что здесь это не очень страшно, преобразование происходит быстро и глаз даже не заметит отсутствие светодиодов в течение ~2мс, но что делать если нужно получить реально одновременную работу. Например, если помимо индикаторов есть подпрограмма CCP в режиме захвата (а в ней нужно зациклить опрос флага, случился ли фронт или нет). Спасибо!

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

Для поддержания горения сегмента в динамической индикации не требуется занимать ресурсы МК. МК лишь ПЕРИОДИЧЕСКИ ПЕРЕКЛЮЧАЕТ состояние сегментов.

А вообще псевдопараллельное исполнение реализуется через прерывания. Либо строго периодические, либо по окончании цикла активной на данный момент задачи.

Скажем, вместе с переключениями сегментов-разрядов можно запустить преобразование АЦП, а когда оно завершится, будет сгенерировано прерывание от АЦП и в нем данные выгружены в массив обработки.

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

Если строго, то https://ru.wikipedia....81.D1.82.D1.8C

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

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

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

  • 2 недели спустя...

Решение основных проблем многозадачности - использование прерываний таймера.

у меня в 16f877a нулевой таймер вызывает прерывание каждые 65536 циклов, и в прерывании происходит смена сегмента и установка в него очередного символа. Коды символов сегментов хранятся в глобальном массиве типа char [4], так что их не нужно вычислять каждый раз при смене сегмента. А все фоновые задачи выполняются в главном цикле, так что их выполнение не мешает индикации, ибо прерывание собственно, прерывает выполнение всех прочих задач.

Но нужно быть с этим аккуратным и не насиловать прерывание за зря. В нем нужно исполнять только наиболее высокоприоритетные задачи которые должны выполняться в реальном времени. У меня это кроме задачи смены сегментов только установка флагов активности подзадач.

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

  • 2 месяца спустя...

Добрый день. Не получается считать/записать, ячейку памяти EEPROM. МК PIC18f46k20. Что я упустил?

_Код_

LIST P=PIC18F46K20 ; list directive to define processor

#INCLUDE <P18F46K20.INC> ; processor specific variable definitions

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Конфигурации

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

CONFIG FOSC = INTIO67, FCMEN = OFF, IESO = OFF

CONFIG PWRT = OFF, BOREN = SBORDIS, BORV = 30

CONFIG WDTEN = OFF, WDTPS = 32768

CONFIG MCLRE = ON, LPT1OSC = OFF, PBADEN = ON, CCP2MX = PORTC

CONFIG STVREN = ON, LVP = OFF, XINST = OFF

CONFIG CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF

CONFIG CPB = OFF, CPD = OFF

CONFIG WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF

CONFIG WRTB = OFF, WRTC = OFF, WRTD = OFF

CONFIG EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF

CONFIG EBTRB = OFF

RADIX DEC

ERRORLEVEL 1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

UDATA_ACS ; БАНК ОЗУ

Reg_1 RES 1

Reg_2 RES 1

Reg_3 RES 1

HOKS RES 1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

CODE 0X0000

GOTO START__CODE ;Вектор RESET

ORG 0X0008

BRA HIGHINT ;Вектор прерывания

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Обработчик прерываний

HIGHINT

RETFIE

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

START__CODE

;Настройки

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Настройка внутреннего генератора

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

MOVLW B'00111100' ; - 1 МГц

MOVWF OSCCON

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Настройка портов

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

CLRF LATA

CLRF LATB

CLRF LATC

CLRF LATD

CLRF LATE

MOVLW B'00000000'

MOVWF TRISA

MOVLW B'00000000'

MOVWF TRISB

MOVLW B'00000000'

MOVWF TRISC

MOVLW B'00000000'

MOVWF TRISD

MOVLW B'00000000'

MOVWF TRISE

;Настройка аналоговых выводов AN0-AN12

MOVLW B'00000000' ;AN7-AN0(RE2-RA0

MOVWF ANSEL

MOVLW B'00000000' ;AN12-AN8(RB0-RB4)

MOVWF ANSELH

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Запись в EEPROM

MOVLW 0X01

MOVWF EEADR

MOVLW 0X00

MOVWF EEADRH

MOVLW 0X05

MOVWF EEDATA

BCF EECON1,7,0

BCF EECON1,6,0

BSF EECON1,2,0

MOVLW 0X55

MOVWF EECON2

MOVLW 0XAA

MOVWF EECON2

BSF EECON1,1,0

NOP

BCF EECON1,2,0

NOP

;Чтение с EEPROM

MOVLW 0X01

MOVWF EEADR

MOVLW 0X00

MOVWF EEADRH

BCF EECON1,7,0

BSF EECON1,0,0

MOVF EEDATA

MOVWF HOKS

NOP

STOP_1 GOTO STOP_1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

END

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

выкладываете код , пользуйтесь тегами [CОDE][/CОDE] кнопка <> панели управления

что не понятно в примерах 7-1 и 7-2 даташита?

это что за магические числа:

BCF EECON1,7,0

BCF EECON1,6,0

BSF EECON1,2,0

на х подключен инклюд?

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

1. BCF EECON1,7,0

BCF EECON1,6,0

BSF EECON1,2,0

Тоже само, что и в даташите:

BCF EECON1,EEPGD

BCF EECON1,CFGS

BSF EECON1,WREN, что вам здесь не нравится?(указывать банк доступа в команде не возбраняется)

2. Все сделал как в даташите, но при моделировании кода записи в ячейку не происходит!

3. на х подключен инклюд? -- я вас не понял.....

С чтением из ячейки я разобрался, все получается, с записью так и не получилось.

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

1. 3. лично мне не нравится сверять магические числа с названиями битов, для этого существует инклюд....

2. вы ее просто не дождались, время записи 4мс параметр D122 даташита таблица 26-10

контролируется или ожиданием сброса бита WR или установки флага EEIF вы не делаете ни первое ни второе , а сразу начинаете чтение ячейки

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

  • 1 месяц спустя...

Доброго времени всем! Имеется вопрос к знающим, в процессе исполнения программы необходимо уходить в прерывания, но в подпрограмме прерываний после выполнения неких операций надо вернуться к началу (START), но переходя к началу через GOTO, я не использую RETFIE и у меня переполняется стек. Просто мне не надо возвращаться в точку ухода в прерывания, а применять прерывания дает хорошую скорость. Имеется ли какой-то другой способ? Или как-то можно очищать стек?

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

такое поведение кода говорит о кривой, недоработанной логике программы , для этого существуют флаги событий , стек программно не очищается.

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

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

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

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

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

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

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

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

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

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

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

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

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

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