Jump to content
NebsteR

Pic. Общие Вопросы

Recommended Posts

Решил создать и прикрепить такую тему, ибо по мелким вопросам создавать новые темы - плохой вариант, а в "Начинающим с нуля (PIC)" писать не совсем простейшие вопросы тоже не годится.

И открою я её собственным вопросом.

Контроллер 12F675. Кто может объяснить, почему при полнобайтном доступе к регистру GPIO все записывается нормально:

MOVLW 0xFF
MOVWF GPIO

А при атомарном доступе GPIO0 и GPIO1 не хотят меняться из нуля:

BSF GPIO, 0x0
BSF GPIO, 0x1

При этом в даташите нет ничего, что могло бы блокировать эти биты...

Скажу сразу, в железе 675 сейчас нет. Такая картина наблюдается в протеусе, в симуляторе mplab в watch регистра GPIO биты управляются нормально. Ни в одном из используемых мной до этого пиках такого не наблюдалось ни в железе, ни в симуляциях.

Кто-нибудь с таким сталкивался и чего можно ожидать от железа?

Edited by NebsteR

> Правила форума <

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

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Share this post


Link to post
Share on other sites

Как одна из версий, что компилятор не понимает номера битов, записанных в шестнадцатеричной форме вида 0xXX

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

bsf gpio,0

bsf gpio,1

- всегда работало без проблем (только не на этом контроллере и не на этом порте - мой контроллер попроще). Если не поможет, тогда ждем ответов.

Дополнение: судя по схеме этот вывод может использоваться для компаратора или ацп, вполне вероятно, что там где то может быть связь. На PIC16F628A столкнулся на началах с тем, что четыре бита занимали компораторы - которые по умолчанию подключены к шине и им всё равно, как я настраиваю TRIS. Выключил компараторы, и все заработало. Но правда в Вашем случае непонятно, почему тогда полнобайтная запись работает. Кстати содержимое регистра может отличаться от того что на выводах в зависимости от коммутации схем скорее всего.

Edited by tcoder

Share this post


Link to post
Share on other sites

Понимает, сцобака :(

Для остальных портов все нормально, а для GPIO3 не имеет смысла, ибо он input only:

BSF GPIO, 0x2
BSF GPIO, 0x4
BSF GPIO, 0x5


> Правила форума <

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

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Share this post


Link to post
Share on other sites

Время – деньги и наноамперы: применение часов реального времени Maxim Integrated

Зачем использовать внешнюю микросхему часов реального времени (RTC), а не внутренние RTC микроконтроллера? Хотя бы потому, что у RTC MAX31342 производства Maxim Integrated типовое потребление составляет 150 нА при 3 В и температуре 25°С, а у встроенных RTC одного из самых малопотребляющих микроконтроллеров при тех же условиях – примерно 370 нА.

Читать статью

Контроллер то необычный :) У него там какой то

скорее всего Вы наблюдаете read-modify-write эфект.
, связанный с медленным конденсатором каким то. Советуют изменять биты отдельного регистра, а потом целиком загружать в GPIO, и на Вашу проблему похоже - целиком то нормально записывается, а по отдельности походу там вообще неизвестно что получается.

Ссылочка на информацию

Edited by tcoder

Share this post


Link to post
Share on other sites

Угу, знаю про RMW в нем, однако это имело бы влияние на соседние биты, но не на целевой, который так или иначе явно устанавливается при modify...

Дополнение: судя по схеме этот вывод может использоваться для компаратора или ацп
Да, при инициализации отключаю всю периферию, ибо мне нужно минимальное потребление, 99.9% времени пик проводит в sleep, пробуждается по wdt. По расчетам выходит около 18мкА среднего потребления пика и около 250мкА потребление всей схемы, схема коммутации реле по событиям с автономным питанием.
Кстати содержимое регистра может отличаться от того что на выводах в зависимости от коммутации схем скорее всего.
Да, но нагрузки на портах нет, нечему настолько просаживать напряжение.

-----

Такс... Проблема действительно в RMW, я не учел то, что у меня в данный момент биты устанавливаются последовательно, из-за этого действительно предыдущий сбрасывается... Однако такое наблюдается только на GP0/GP1, странно...

Окей, значит будем сами использовать ram буфер, в данном случае сойдет... Однако надо будет что-нибудь придумать с этим в случае использования прерываний, а то может возникнуть очень плохая ситуация, когда прерывание, обрабатывающее порт через буфер, возникнет после считывания GPIO в буфер основным циклом и до записи модифицированных данных обратно в регистр... И в итоге, после короткого скачка, значение порта не будет учитывать изменения, внесенные прерыванием...

Как-же хреново без LAT регистров...

Edited by NebsteR

> Правила форума <

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

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Share this post


Link to post
Share on other sites
                     

Чип-резисторы Panasonic - технология мягких выводов и сертификация AEC-Q200

Технология мягких выводов чип-резисторов производства компании Panasonic. Обзор серий с оптимизированными параметрами: прецизионных тонкопленочных, токоизмерительных, антисерных, резисторов с повышенной стойкостью к статике и импульсным нагрузкам, резисторных сборок.

Читать статью

А если исключить чтение GPIO в буфер? (в том случае если "на вход" ничего нет). Т.е. работаем мы только с буфером всегда (в т.ч. и в прерываниях). А вот отдельная часть программы просто копирует ("отображает") буфер периодически в GPIO. Тогда что бы не случилось, если используются побитовые операции над буфером - всегда всё в норме будет.

Edited by tcoder

Share this post


Link to post
Share on other sites

Там видно будет, не всегда такое возможно, часто требуется мгновенное обновление по событию прерывания... И оно может произойти в момент уже происходящей модификации, это будет очень некстати :)

Да и в более новых пиках это решают регистры LAT, по сути дополнительные выходные защелки с изначально атомарным доступом...


> Правила форума <

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

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Share this post


Link to post
Share on other sites

поставте пару тройку нопов и все заработает....(от эффектов емкостной нагрузки это не спасает...)

Share this post


Link to post
Share on other sites

Да в моем случае лучше не тормозить пик, а делать через глобальный буфер... А на будущее - все равно обычно не использую пики ниже 18 семейства, а в них во всех такой проблемы уже не стоит...


> Правила форума <

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

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Share this post


Link to post
Share on other sites

ЧМЗ.

IMXO уже сказал - нопы спасут. На момент изменения второго бита, на первом ещё не сформировался нормально уровень. При доступе ко второму, процессор читает весь порт, модифицирует второй бит и выкидывает данные обратно в порт. А на первом, при чтении, реально не то значение, которое записали. Вот и происходит такая бяка )

Share this post


Link to post
Share on other sites

Именно :)

Вообще плохо, что этого пика нет в железе у меня, а то посмотрел бы порты и их фронты воочию осциллом, любопытно ж :)


> Правила форума <

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

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Share this post


Link to post
Share on other sites

в битовых ситуациях считаю лишней тратой времени писать пояснения системы исчисления типа "Н","х","D",".", "В". Всё работает без лишних пояснений ибо 0 и 1 будут везде 0 и 1.

Share this post


Link to post
Share on other sites

А причём тут 0-1 ? В коде написан через "x" номер бита.

Или я Вас не допонял ? :mellow:

Share this post


Link to post
Share on other sites

fuckir, это не булевое значение, а адресация к номеру бита... В данном контроллере до 0x07, а в 16-битных до 0x0F.

Ясен пень, что адрес 15 воспримется точно так-же, однако в hex удобней и привычней :)


> Правила форума <

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

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Share this post


Link to post
Share on other sites

Cогласен.

Я конкретно данного контроллера... записывая номер бита можно не пояснять компилятору систему исчисления. Есть конечно такие варианты как: в настройках среды программирования установить систему по умолчанию.

Может просто дело привычки. я 16-ричную в асме пишу не через "х" а "Н" а десятичную через точку.

Share this post


Link to post
Share on other sites

Дело привычки :) В си де-факто (а может и де-юро) принято 0x для hex и 0b для bin :)


> Правила форума <

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

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Share this post


Link to post
Share on other sites

Надеюсь, обратился по теме. Имеется довольно мощный коллекторный двигатель, обороты которого регулируются большим блоком управления с тиристорами на 25А. Теоретически, этот блок можно выкинуть и поставить PWM-управление и полевой транзистор Power MOSFET. Для данных параметров двигателя имеющиеся в наличии транзисторы слабоваты. Не хватает мощности, сильный перегрев во время эксперимента.

Идея запуска двигателя заключается в распределении мощности на три транзистора, каждому поровну. Но у МК имеется только один выход PWM. Как наиболее правильным образом осуществить распределение мощности, когда каждый транзистор работает какое-то время, потом переключается на следующий?

Если взять МК с двумя ПВМ, не облегчит ли это задачу?


Слава антисионистам Владимиру Путину и Владимиру Квачкову!

Share this post


Link to post
Share on other sites

Параллельте МОСФЕТы - это полевые транзисторы и не требуют уравнивающих сопротивлений. Сток-сток, исток-исток, затвор-затвор. Если драйвер управления не стоит - надо поставить. Емкости затворов складываются и в момент переключения будет большой ток.


Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

Share this post


Link to post
Share on other sites

Драйвер управления - МК. Поэтому-то и интересуюсь алгоритмами перераспределения мощности. Может можно затворы отдельно, а исток-сток - параллельно?


Слава антисионистам Владимиру Путину и Владимиру Квачкову!

Share this post


Link to post
Share on other sites
Имеется довольно мощный коллекторный двигатель, обороты которого регулируются большим блоком управления с тиристорами на 25А. Теоретически, этот блок можно выкинуть и поставить PWM-управление и полевой транзистор Power MOSFET.

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

Share this post


Link to post
Share on other sites

Драйвер управления полевыми транзисторами - гуглим :use_search: ! Параллельное подключение ПТ - :use_search: ! Потом все внимательно читаем! Если блок промышленный - не лезь туда! Советская техника сделана на века и в улучшениях такого плана не нуждается!


Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

Share this post


Link to post
Share on other sites

В том то и дело, что эта советская техника уже едва дышит. В оригинальном идёт согласование с тахогенератором, но эта проблема решаема с помощью входа АПЦ. Предполагаю использовать простой PIC16F716, без наворотов. И потенциометры для прецизионирования рабочего режима.

Можно разбить на три полевика, которыми будут управлять три пина без ПВМ, но за счёт задержек возможна потеря мощности, пока происходит переключение логических единиц на пинах. Поэтому будет лучше поделить ПВМ на три части. Идея о параллельном соединении 3-х транзисторов мне тоже приходила, однако может сказаться разброс параметров.

Что думаете о сдвиговом регистре, подсоединенном к выходу PWM?

Не лезь туда! Советская техника сделана на века!

Блок БУДЕТ выброшен. Это не обсуждается. Насчёт веков я бы так не горячился, смотря какой уход и какие условия эксплуатации.


Слава антисионистам Владимиру Путину и Владимиру Квачкову!

Share this post


Link to post
Share on other sites
однако может сказаться разброс параметров.
Какие параметры? Какие разбросы? Почитайте литературу о полевых транзисторах, особенно в плане параллельного подключения.

Что думаете о сдвиговом регистре, подсоединенном к выходу PWM?

Ничего! Я даже не представляю его назначение в ШИМ! Затея мутная - а знаний у вас маловато. Сделайте http://electronics-lab.ru/blog/82.html Эта схема рабочая!

Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

Share this post


Link to post
Share on other sites
Затея мутная - а знаний у вас маловато. Сделайте http://electronics-lab.ru/blog/82.html Эта схема рабочая!

их там просто нет... а по схеме стоило бы поинтересоваться что в понимании тридцать-третего "довольно мощный" и уточнить количество фаз сети...глядишь вопросы о применении ШИМ отвалятся сами собой.... а ломится товарисч в сторону ШИМов по причине полного непонимания работы тиристоров и "точках естественной коммутации"

Share this post


Link to post
Share on other sites

Вот вот! Если ему надо действительно высокомоментный привод на три фазы мощностью до 10кВт - у меня есть почти новый ЭПУ-1М. Продам по сходной цене! ;)


Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

  • Similar Content

    • By Николай кол
      Привет, у меня есть вопрос, как передать данных с микроконтроллера pic через блютуз модуль HC-05 на телефон в виде графика.Не могли бы вы показать скрипт или статю.Про Arduino много а про pic не (нужно передать данные с микроконтроллера на телефон а не на оборот).У же есть приложение на app inventor 2.Нужно примерно как тут https://www.youtube.com/watch?v=WzoCQ2fRsRQ
    • By duty
      Привет, участникам форума! Подскажите, пожалуйста, как можно реализовать связь микроконтроллера pic с адресным ключом (ds2405 или ds2408) по 1-wire (на шине будут висеть несколько ключей)  для считывания pio ключа, во входном режиме, т.е на pio поступает сигнал  с магнитоконтактного датчика о срабатывание его или нет.    Datasheet читал, но мало чего понял.  Тестирование произвожу в proteus 8.6
    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Reptile
      Доброго времени суток. Пытаюсь восстановить работоспособность колонок Top Device TDE 261/2.1. Колонки не раз ремонтировалась по части УНЧ, при очередном ремонте по ошибке (одинаковые разъемы) с трансформатора было подано переменное питающее напряжение на входы (разъем AUX/MP3) аудиопроцессора PT2313L  (3,10,14 ноги - AGND, R_IN2 L_IN2). В результате чего выгорел сам аудиопроцессор PT2313L. PT2313L был заменен. Но колонка по прежнему не запускается. Как я понял, не запускается сам PT2313L, на его аудиовыходах (ноги 24, 25) сигнала нет. Передняя панель работает: индикация, кнопки, енкодер. Имеется подозрение, что вместе с процессором выгорели линии DATA и/или CLK на MCU, так как MCU и PT2313L соединены по этим линиям напрямую друг с другом. В МК и всей этой цифровой штуке не очень шарю, не знаю, как грамотно проверить работоспособность этой цифровой части, поэтому прошу помощи - Возможно ли какими-либо способами восстановить колонку или уже всё... 
      Из приборов, к сожалению, только мультиметр, осциллограф отсутствует.
      Ниже немного измерений.
      Напряжения на линиях: STD-BY-ждущий режим (в скобках рабочий режим):
      DATA - 2.31В (1.9В).
      CLK - 0.125В (0.135В).
      Сопротивление между выводами:
      CLK_MCU-DATA_MCU - 47 Ом. 
      CLK_MCU/DATA_MCU-GND - около 0.22 Ом и там и там. Звонится в обе стороны.
      Питание MCU 5В, (4.6В STD-BY-ждущий режим, 4.0В рабочий режим и со временем также почему-то может падать до 3.6В)
      MCU - не известен, нет маркировки. 18 Выводов, DIP.
      Ноги MCU, которые удалось опознать:
      1 - DATA
      18 - CLK
      3 - GND (?)
      5 - GND (?)
      ? - они соединены вместе
      14 - VCC
      17 - not used (n/a)
      15, 16 - OSC
      ET6202 - управление индикатором, Control LED drive circuit
      Фото плат (под сполером) и даташиты прилагаются.
      Схемы данных колонок не имеется. Все что удалось найти это схема чуть более старшей модели TDE280/2.1, с данными колонками она мало что общего имеет, лишь общий принцип, узлы довольно сильно отличаются, но прикреплю на всякий, для общей информации.
      PT2313L
      ET6202
      TDE280
       
    • By Илья Говжеев
      Поделитесь опытом , кто уже пробывал из arduino сделать программатор pic? 

×
×
  • Create New...