Jump to content
NebsteR

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

Recommended Posts

Извините ещё раз, вчера жена всё торопила за покупками поэтому и в СИ и в АСМ набросал кучу ошибок:

Конечно для BCD нужно использовать не одноразовую функцию "if", а "while"

А здесь "if (C = 1)" должно быть "if (C == 1)",

ну и наконец - если дизасемблировать строку выше, то там естественно будет:

MOVLW        1            ;

ADDWF         XX,W    ;

и так далее... Потому что если делать через "INCF"  то бит "С" не установится, и далее смысл команды теряется...

Share this post


Link to post
Share on other sites

 

19 часов назад, ALEKS1102X сказал:

поверьте - преобразование для PIC18 с 8 МИПС пару мкс., и вот у меня в руках функция "BCD" которая даже если написана для PIC18 - с лёгкостью проглатывается и для пик10 - 16, т.е код типа:

басни не рассказывай

 

 

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

В 17.09.2017 в 09:19, IMXO сказал:

 

басни не рассказывай

 

 

Добрый день конфе! извините что долго не отвечал, сейчас просто решается вопрос с Али, где вроде нужно доплатить 4,9 $, и мне отправят другую партию из 10 PIC18F46K22... Ну что - я рискну, тем более что старыё (перемаркированные PIC18F46K20) я так понял - останутся мне в нагрузку.

А по поводу того что писал раньше - гляньте архивчик, набросал по быструхе - да, если переводить число 9999, то при частоте 8 Мипс для PIC18 это займёт 57 мкс., Но ведь это максимальное значение, и на индикатор если оно и будет выводиться - то в очень крайних и редких случаях. Давайте возьмём среднее значение - 5.000. Вот такое значение будет конвертироваться за 23 мкс.

А теперь давайте глянем там-же, в архиве) как это будет делаться с помощью функции "Dec2Bcd16(X)" - в общем, если запускать в Микро СИ, то мой код выполняется за 188 мкс (я там не правил конфиг, поэтому работа идёт с 2 Мипс), а функция Dec2Bcd16(X) выполняется за 77х (780) мкс, т.е.  по сути в 4,5 раза больше времени. Причём я сравниваю с макс. результатом: если в своём коде я буду перекодировать число 155, к примеру, то оно действительно займёт пару мкс, а в функции BCD оно так и останется - 780 мкс.

Если Вы это имели ввиду ( 2мкс и 23 мкс), то да - я чууууть Вас обманул.

Теперь по поводу перевода АСм кода из PIC18 в PIC16 - там всего-лишь одна команда не воспринимается корректно - это "SUBWFB" - вычитание с учётом бита Карри, все остальные: BC, BNC, BZ, BRA, и т.д. перевариваются нормально - что я собственно и мел ввиду, мож некорректно написал об этом.

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

Я в архиве сделал две папки - для Пик 16 и 18 - там увидите один и тот-же код для 16 и 18 серии, а ещё всё-таки проверил по новому - как простую функцию, инкремента четырёхбайтного числа производит Микро Си и ХС 8... Да..., те кто писали эти компиляторы однозначно в разных дурках нычкуются - вместо просящегося кода:

     MOVLW      1          ; 
     ADDWF      _dcab,F    ;
     BTFSC      STATUS,C   ;
     ADDWF   _dcab+1,F  ;
     BTFSC      STATUS,C   ;
     ADDWF   _dcab+2,F  ;
     BTFSC      STATUS,C   ;
     ADDWF     _dcab+3,F  ;

там.... Да короче сами увидите, чего повторно писать буду.!!!

Ну и последнее: Я ни в коей мере не хочу обидеть никого, и уж тем более развести новых халивар. Я просто делюсь мыслями... Вот к примеру - все говорят - что на Си проще писать - да одинаково писать - если не знаешь сам камень - то хоть на суахили пиши - ты его даже не проинициализируешь. И такая-же картина если переводить код с одного камня на другой - пока не будет инициализации камня, остальной код можно засунуть сзади и поглубже.

Но что меня привлекает в АСМ - это то что ты сам пишешь что знаешь,  и что хочешь получить на выхлопе, а не пользуешься чужими макросами. Вот сейчас многие чего-то там пишут под USB - а чего пишут по сути сами не знают! И могу гарантировать что 90 % этих написателей даже не знают что там и как в таблице Fat32, я уже не говорю про NTFSC...

Ну и правильно - а зачем - будет получиться глюконат - на китаяйцев спишем - нам что главное - запустилось, вроде работает - ну и пошли все в (|) - ну короче туда...

А потом: Ема-ё писал вроде простую вещь - всего один АЦП вход определяющий протечку (памперс), ну добавил ещё звоночек играющий мелодию _ А АРМ32 НЕ ХВАТАЕТ - ЧЕГО ТАМ ПРОИЗВОДИТЕЛИ Д*ОЧАТ - НУЖНО БЫ БЫЛО УЖЕ АРМ 9932 ВЫПУСТИТЬ...

СИ++ АСМ--.rar

Share this post


Link to post
Share on other sites

Высокая надежность SiC! Как они этого добились?

За несколько лет кропотливых исследований и совершенствования технологии компания Infineon смогла довести показатели надежности и стабильности параметров высоковольтных и быстродействующих карбид-кремниевых транзисторов линейки CoolSiC практически до уровня их кремниевых собратьев.

Подробнее

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

ещё всё-таки проверил по новому - как простую функцию, инкремента четырёхбайтного числа производит Микро Си и ХС 8..

1. Микрос сделал все правильно , оставив атомарный доступ к dcab , вы же не указывали, что она доступна только в main, она описана глобально...

2. а вот у вас Ашибко, команда  INCF  бит CARRY  не изменяет

3. восьмой хусым тоже сделал все правильно! создал атомарный доступ и к значению dcab прибавил 1 и занес полученный результат в dcab, что вы от него и требовали , команды dcab=dcab+1 и dcab++ это разные команды,  также как и команды dcab++ и ++dcab

Share this post


Link to post
Share on other sites

Вебинар «Практическое использование TrustZone в STM32L5»(10.12.2020)

Приглашаем на вебинар, посвященный экосистеме безопасности и возможностях, которые появились у разработчиков благодаря новой технологии TrustZone в микроконтроллерах STM32L5. Программа рассчитана на технических специалистов и тех, кто уже знаком с основами защиты ПО в STM32.

Подробнее

 1. Я такой-же доступ предоставил и хусымы... не ?

2. Ашибко я исправил в сообщении, архив лень было потрошить ... не ?

3. Если хусыме подсовываешь команду "x++", то он вообще ересь каку-та несёт, я сильно не разбирался, но Вы как знающий поправьте...

     3.1 Разницу между х++ и ++х я знаю...

4. Напишите мне на СИ так чтобы мне чётко нарисовало то что я хочу получить на АСМ для Микроса и Хусейна. А не нарисуете - потому как не Вы написатель этих       макросов...

 

Share this post


Link to post
Share on other sites

Снижена цена на AC/DC и DC/DC преобразователи Mornsun в Компэл!

Компэл и компания Mornsun снизили цены на преобразователи AC/DC-преобразователи семейств LS и LDE. По привлекательной цене также предлагаются DC/DC-преобразователи изолированных семейств поколений R2 и R3 различного конструктивного исполнения.

Подробнее

1. ну так в чем возмущения? еще раз если не доходит, dcab=dcab+1 и dcab++ это разные команды! поэтому и результат микроса и хусыма разный
4. легко,
 

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

 


2:                 
3:                 __CONFIG (RC & WDTDIS & PWRTDIS & UNPROTECT);
4:                 
5:                 void main (void)
6:                 { unsigned long decb=0;
7:                 
8:                 
9:                 while(1)
   3FF    2BF6     GOTO 0x3f6
10:                 {
11:                   NOP();	 
   3F6    0000     NOP
12:                   decb++;
   3F7    0A8C     INCF 0xc, F
   3F8    1903     BTFSC 0x3, 0x2
   3F9    0A8D     INCF 0xd, F
   3FA    1903     BTFSC 0x3, 0x2
   3FB    0A8E     INCF 0xe, F
   3FC    1903     BTFSC 0x3, 0x2
   3FD    0A8F     INCF 0xf, F
13:                   NOP();
   3FE    0000     NOP


 

 

Share this post


Link to post
Share on other sites
В 16.09.2017 в 13:27, ALEKS1102X сказал:

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

Какие впечатлительные!!!

Share this post


Link to post
Share on other sites
В 23.09.2017 в 14:33, ALEKS1102X сказал:

Но что меня привлекает в АСМ - это то что ты сам пишешь что знаешь,  и что хочешь получить на выхлопе, а не пользуешься чужими макросами. Вот сейчас многие чего-то там пишут под USB - а чего пишут по сути сами не знают! И могу гарантировать что 90 % этих написателей даже не знают что там и как в таблице Fat32, я уже не говорю про NTFSC...

Какая связь между Fat32 и USB  я, откровенно говоря, не понял...

Однако, любезный, писать самому стек USB на АСМе, мягко говоря, трудоемко. Мало того, полученный код будет дико неудобен при его интеграции в проект, поскольку объемен даже на Си,а уж на АСМе одни комментарии займут 2/3 текста исходника.

Я  сам почти все на продукции Микрочипа пишу на АСМе. За исключением сложных стандартных протоколов. 

Воспользоваться стандартным стеком USB, не понимая как он работает практически невозможно, особенно если учесть, что очень часто его надо править под себя, изменяя дескрипторы и  создавая свою функцию Application.

Share this post


Link to post
Share on other sites

1. Да не, я особо и не возмущаюсь, с чего возмущаться то ?

    С того что переменная заявленная вне рабочей вункции "main" как глобальная -  unsigned long  dcab = 1234 (это пример); Дальше я её инкрементирую в любом в     любой функции внутри "маин", и независимо от функции, в которой я использую эту переменную - на выходе я должен получить...:

dcab++; // ->

incf      dcab,f            ;

btfsc    STATUS,Z      ;

incf      dcab+1,f        ;

btsfc    STATUS,Z      ;

incf      dcab+2,f        ;

и т.д.

или же:

dcab = dcab+ 1 ; // ->

movlw  1                   ;

addwf   dcab,f            ;

btfsc    STATUS,C      ;

addwf    dcab+1,f      ;

btfsc    STATUS,C      ;

addwf    dcab+2,f      ;

и т.д.

И независимо от прерываний, или переходов из одного банка ОЗУ в другой (для Пик 18 компилирует корректно) - мне не нужно глобальную переменную зачем-то сохранять в регистрах 0х70 ... 0х7F (которые используются во всех банках ОЗУ) - я не использую эту переменную внутри какой-то функции, ну и уж ни как не видно по размеру кода - что я могу перескочить на другую страницу программной памяти (зачем промежуточные регистры?)  -  в любом случае на выходе я должен получить результат: dcab = 1235 ? Или не ?

 

4. А я и не говорил про переход через Зеро - через Зеро конечно легко... Не знаю - сколько лет назад - мож 60-70 когда фирма Микрочип откололась от какой-то релейной компании (если правильно помню) и стала независимой компанией, выпускающей чисто микроконтроллеры. И вот тогда один из её программистов решил, что переполнение некоего многобайтного регистра нужно делать через Зеро.

А мне как-то привычней переполнение через Карри, а сравнение с нулём через Зеро...

В любом случае - в данной ситуации переполнение мл. регистра вызывает установку бита Карри, а последующее обнуление этого регистра вызывает установку Зеро - по сути установятся два бита одновременно.

Но я не имел ввиду код с использованием Зеро...

 

Share this post


Link to post
Share on other sites
В 27.09.2017 в 08:32, my504 сказал:

Какая связь между Fat32 и USB  я, откровенно говоря, не понял...

Однако, любезный, писать самому стек USB на АСМе, мягко говоря, трудоемко.

 Ну про Fat32 и USB если честно - то первое что пришло в голову это флеш карточки (USB), да и то - так чисто символически.

А насчёт написать - так кто-то ж написал, перевёл в СИ из низкоуровневого... Тут вопрос в другом - когда ты просто любитель , то информации в интернете - куча, но один понос. И из этого поноса - полезной информации максимум 1%. Если проще - то проще будет проанализировать передачу TTL-USB чем найти аналогичную действительно полезную информацию...

А конкретно если мне понадобится тот USB - то проанализирую шину, почитаю инфу, и и выкину 90% из того Си кода, который сейчас универсальный и типа неприкасаемый. А как окажется - в 5 раз сложнее ИИС.

 

Share this post


Link to post
Share on other sites
1 час назад, ALEKS1102X сказал:

 Ну про Fat32 и USB если честно - то первое что пришло в голову это флеш карточки (USB), да и то - так чисто символически.

А насчёт написать - так кто-то ж написал, перевёл в СИ из низкоуровневого... Тут вопрос в другом - когда ты просто любитель , то информации в интернете - куча, но один понос. И из этого поноса - полезной информации максимум 1%. Если проще - то проще будет проанализировать передачу TTL-USB чем найти аналогичную действительно полезную информацию...

А конкретно если мне понадобится тот USB - то проанализирую шину, почитаю инфу, и и выкину 90% из того Си кода, который сейчас универсальный и типа неприкасаемый. А как окажется - в 5 раз сложнее ИИС.

 

Вы пишите невероятную чушь. 

Просто апокалиптическую пургу. 

Это я Вам заявляю как человек, который не только ЮСБ девайс реализовал, причем под свою задачу, со своими дескрипторами, но и ЮСБ хост стыкующийся с этим девайсом. 

Причем я пишу в основном на АСМе и в основном для 16-разрядных ПИКов. 

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

Прежде чем писать свой бред, возьмите за труд почитать спецификацию на ЮСБ в общем и спецификацию реализуемого класса. А потом поговорим на эту тему. 

Если у Вас останется желание говорить... 

Edited by my504

Share this post


Link to post
Share on other sites
В 28.09.2017 в 22:17, my504 сказал:

 

Если у Вас останется желание говорить... 

ОК! Если понадобится ЮСБ, и если будет что-то непонятно, то обращусь к Вам.

Хотя... пока за помощью ни к кому не обращался...

Share this post


Link to post
Share on other sites

Я Вам помощь и не предлагал.

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

Более всего меня развеселила Ваша идея снифферить протокол, совершенно не представляя его структуру, а так же его сравнение с I2C.

:))))

 

 

Share this post


Link to post
Share on other sites
8 часов назад, my504 сказал:

Я Вам помощь и не предлагал.

 

Да надо мне ваша помощь как собаке 40 ног... Ответил так что бы не грубить как Вы мне. Вы что думаете я не знаю приблизительную работу этого сраненького ЮСБ ?

Да все они : Усарт + 485, ЮСБ, заброшенный французами ВАН, и после подхваченный другими и переименованный в КАН - всё это вид одного и того же заднего места, только  с разных ракурсов. Все они имеют дифференциальную шину, но не имеют чёткой синхронизации, из-за чего ошибки сыплют пачками. Усарт частично спасают от рассинхронизации стартовые и стоповые биты, юсб и кан после определённого количества одинаковых бит передают бит другой полярности (что-то наподобие, давно уже читал), чтобы не потеряться в поносе информации, и т.д. А остальное VID (идентификатор производителя) - это передавай любое, PID - насколько помню - это предназначение устройства (программатор, веб камера, и т.д), и т.п. И в конце некой передаваемой пачки будет сыпать кучу CRC, а половина софта призвана решить проблемы железа из-за рассинхронизации - с какого места возобновить передачу, и т.п.. У кан равносильные устр-ва со всех сторон (в отличие от юсб), приоритет передачи информации, и т.д. И сравнительно большие расстояния передачи информации - а в конце та же CRC, вычисление ошибок, повторные передачи, и всё остальное что из этого вытекает. А на уровне железа они практически одинаковые...

Если Вы имели ввиду что это совсем не похоже на и2с, то да - нужно было Вам спарку усарт+485 в пример привести. Только и2с в десятки раз лучше - я на софтовом и2с проверяю просадку обеих шин, и ошибки при передаче старт-стопов, а в результате в устр-во встраиваешь проверку на ошибки, через неделю проверяешь регистр на наличие битов ошибок - а он пуст, хотя шина общается к примеру с DS1307 2 раза в секунду.  А если на выход шины SCL повесить парочку доп транзисторов и подтянуть через 120 Ом к плюсу, и похожее сделать по шине данных (сделать что-то наподобие усилителя сигналов), то можно устройства на пару десятков метров друг от друга разносить, чего не сделаешь с юсб. Тоже можно сказать и про спи - из-за наличия шины синхронизации тоже неглючный. А Вы тут сразу на дыбы... Ну разобрались с юсб - молодец, купите себе медальку с закруткой на спине. Когда мне понадобится этот юсб я тоже разберусь...

Share this post


Link to post
Share on other sites

Вы продолжаете нести бред. Причем самоуверенно, не имея НИ МАЛЕЙШЕГО понятия об упоминаемых протоколах.

С какого перепуга Вы решили, что "ошибки сыплют пачками"? 

С какого перепуга Вы решили, что синхронный интерфейс устойчивее к помехам по сравнению с асинхронным?

Если Вы не знаете как работать с УАРТом, то не надо его критиковать. Лучше НАУЧИТЕСЬ использовать.

Могу Вас расстроить, что синхронные интерфейсы ни на что, кроме как в ЛОКАЛЬНЫХ (в пределах одной платы) коммуникациях не годны. Просто потому, что сама линия синхронизации такая же уязвимая к помехам, как и линия данных, есличо. Мало того, наиболее защищенной от полмех является ДИФФЕРЕНЦИАЛЬНАЯ ПАРА, а все эти SPI, I2C и прочая мутотень - это НЕСИММЕТРИЧНЫЕ физические протоколы. Именно поэтому в высоконадежной КАН и прочих ПРОФИБАС, ЭЗЕРНЕТ используется дифпары и асинхронный интерфейс.

 

Share this post


Link to post
Share on other sites

Здравствуйте уважаемые форумчане. Помогите решить проблему с прошивкой PIC16F676. Есть в наличии универсальный  программатор minipro tl866, к сожалению железного ком порта нету. При попытке загрузить в буфер прошивку выдает ошибку о несоответствии длины файла. Так же не могу вручную выставить правильную конфигурацию микроконтроллера, так как не нашел ручного переключения  для работы от внутреннего генератора. IC-Prog прошивку и конфигурацию открывает правильно. Может кто то помочь в подкорректировать прошивку для правильного определения конфигурационных бит в программаторе tl866 . Скрины и саму прошивку прилагаю.

Заранее спасибо за помощь.

ic-prog.jpg

tl866 config.jpg

tl866 error.jpg

FU_3i.HEX

Share this post


Link to post
Share on other sites

Что там с длиной файла я не знаю, с таким программатором дел не имел, а если хотите изменить конфиг-биты на внутренний генератор (зачем, кстати?), то отметьте FOSC2 (стр. 56 ДШ).

Share this post


Link to post
Share on other sites

Хочу изменить потому что в схеме микроконтроллер работает от внутреннего генератора. При ручном выставлении битов конфигурации как в  IC-Prog

у меня получается конфигурация 3FA7 или  3E58, а мне нужно получить конфигурацию  31CD. Может я плохо  поясняю суть проблемы, так как я не программист , а просто пользователь.

 

Zhuk72, есть готовый проект. У меня проблема прошить микроконтроллер а не переписать программу. Мне нужно просто адаптировать прошивку под мой программатор,который не хочет подгружать конфигурацию МК с файла прошивки.

Share this post


Link to post
Share on other sites

Я же не от балды дал ссылку на страницу в даташите, там расписаны все биты, с которыми вы воюете. Введите их в двоичный калькулятор слева направо и получите то самое слово. Заодно и принцип поймете.

У вас в ICProg выставлен тот самый 31CDh, но у него помимо внутреннего генератора еще и такты на RA4 выводятся (CLKOUT). Вам это правда нужно?

Если нет, то ваш конфиг - 31CCh, как я и сказал, с выставленным битом FOSC2 и очищенными FOSC1 и FOSC0. Остальные стоят правильно.

Share this post


Link to post
Share on other sites

Так не работает. Я НЕ МОГУ вручную выставить конфигурацию не 31CDh, не 31CCh. У меня серые окна BG1 BG0 не поддаются изменению(защита от дурака). Я все комбинации перепробовал. Нужно только автоматом с прошивки подтянуть. Понимаю, что это проблема программатора, но другого нет.....

Share this post


Link to post
Share on other sites

FU_3i.HEX

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

Там и так стоял внутренний генератор, только с выводом тактов, как и на первом вашем скрине. Я только вывод тактов отключил.

Edited by Zhuk72

Share this post


Link to post
Share on other sites

Хух. Запустилось. Спасибо  Zhuk72 за помощь. Оказалось что нужно галочки инверсно ставить.

Но Config Word все равно "не стреляет"..... хотя как то работает.....

Последняя ячейка у меня в программаторе не читается и не пишется- еще одна защита от дурака. Константу никак не увидеть.

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

 

1111.HEX

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...

  • Сообщения


  • Аккумулятор 18650 с высокой токоотдачей Liitokala HG2, емкость 3000мАч

  • Similar Content

    • By Ilya Gray
      Доброго времени суток!
      В целом, имеется опыт разработки малых устройств, что-то понимаю, в общем, старательно читаю даташиты, даже понимаю их, но на звание серьёзного инженера (пока что) не претендую.
      Я пытаюсь использовать I2C на 8-битном PIC16F18326. Сижу в даташитах. Всё понимаю, всё делаю, на мой неопытный взгляд, правильно. Даже копирую полностью рабочие примеры (я даже купил такой же микроконтроллер, как в примере, скопировал код, контролируя, что он делает. Но всё равно не работает - SCL/SDA на 5в и всё тут).
      Так вот: PIC16F18326 on breadboard (прошу прощения, я хз как это по-русски) на внутреннем 32мгц кристалле. Чип пашет, без проблем моргаю LEDкой. Ну, думаю, щас быстренько подниму I2C. В итоге SCL SDA сидят на 5в без движения. Я использую LED для отладки. Судя по LED, код заloopливается в месте, где проверяется while PIR1bits.SSP1IF==0. Я уже везде был, кучу форумов перерыл. Уже попробовал всё, что мог представить. Я довольно новый в мире PIC, хотел попробовать их, а они ужасно сопротивляются. Уже 2 недели долблюсь безуспешно.
      Подтяжки 10к, проблем с ними никогда не было.
      Собственно, вот код (я уже там попробовал повыключать ADC, вычитал про баг, что сначала I2C пины надо делать OUTPUT LOW, а потом уже INPUT из-за бага MSSP, но ничего не помогло).
      // PIC16F18326 Configuration Bit Settings // 'C' source line config statements // CONFIG1 #pragma config FEXTOSC = OFF // FEXTOSC External Oscillator mode Selection bits (Oscillator not enabled) #pragma config RSTOSC = HFINT32 // Power-up default value for COSC bits (HFINTOSC with 2x PLL (32MHz)) #pragma config CLKOUTEN = OFF // Clock Out Enable bit (CLKOUT function is disabled; I/O or oscillator function on OSC2) #pragma config CSWEN = ON // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed) #pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled) // CONFIG2 #pragma config MCLRE = ON // Master Clear Enable bit (MCLR/VPP pin function is MCLR; Weak pull-up enabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config WDTE = OFF // Watchdog Timer Enable bits (WDT disabled; SWDTEN is ignored) #pragma config LPBOREN = OFF // Low-power BOR enable bit (ULPBOR disabled) #pragma config BOREN = ON // Brown-out Reset Enable bits (Brown-out Reset enabled, SBOREN bit ignored) #pragma config BORV = LOW // Brown-out Reset Voltage selection bit (Brown-out voltage (Vbor) set to 2.45V) #pragma config PPS1WAY = ON // PPSLOCK bit One-Way Set Enable bit (The PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle) #pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable bit (Stack Overflow or Underflow will cause a Reset) #pragma config DEBUG = OFF // Debugger enable bit (Background debugger disabled) // CONFIG3 #pragma config WRT = OFF // User NVM self-write protection bits (Write protection off) #pragma config LVP = ON // Low Voltage Programming Enable bit (Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored.) // CONFIG4 #pragma config CP = OFF // User NVM Program Memory Code Protection bit (User NVM code protection disabled) #pragma config CPD = OFF // Data NVM Memory Code Protection bit (Data NVM code protection disabled) // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. #include <xc.h> #include <htc.h> #include <stdio.h> #include <stdint.h> #define _XTAL_FREQ 32000000 void i2c_is_idle(void){ //while(!PIR1bits.SSP1IF); //while(SSPCON2bits.SEN==1 || SSPCON2bits.RSEN==1 || SSPCON2bits.PEN==1 || SSPCON2bits.RCEN==1 || SSPCON2bits.ACKEN==1 || SSPSTATbits.R_nW==1){}; while(PIR1bits.SSP1IF == 0){ PORTCbits.RC2=1; }; // SSP1IF is set when operation complete PORTCbits.RC2=0; PIR1bits.SSP1IF = 0; // clear interrupt flag } void i2c_start(void){ i2c_is_idle(); SSPCON2bits.SEN = 1; } void i2c_rep_start(void){ i2c_is_idle(); SSPCON2bits.RSEN = 1; } void i2c_stop(void){ i2c_is_idle(); SSPCON2bits.PEN = 1; } void i2c_write(uint8_t i2c_data){ i2c_is_idle(); SSPBUF = i2c_data; while(SSPSTATbits.BF != 0); while(SSPCON2bits.ACKSTAT != 0); } uint8_t i2c_read(uint8_t ack){ uint8_t recieve =0; i2c_is_idle(); SSPCON2bits.RCEN = 1; while(SSPSTATbits.BF != 1); recieve = SSPBUF; SSPCON2bits.ACKEN = ack; return recieve; } void i2c_init(void){ TRISCbits.TRISC0 = 1; TRISCbits.TRISC1 = 1; SSPSTATbits.SMP = 1; SSPSTATbits.CKE = 0; SSPCONbits.SSPM = 0x08; SSPADD = 79; SSPCONbits.SSPEN = 1; } void main(void) { ANSELCbits.ANSC0 = 0; //ADC RC0 OFF ANSELCbits.ANSC1 = 0; //ADC RC1 OFF TRISCbits.TRISC2=0; //LED PIN TRISCbits.TRISC0=0; //MSSP bug counter TRISCbits.TRISC1=0; //MSSP bug counter //__delay_ms(5); LATCbits.LATC1=0; //MSSP bug counter LATCbits.LATC0=0; //MSSP bug counter //__delay_ms(5); INTCONbits.GIE=1; //global interrupt en INTCONbits.PEIE=1; //peripheral interrupt en ADCON0bits.ADON=0; //unpower adc just in case i2c_init(); //THIS SETS TRISC BITS FOR SCL SDA while(1){ i2c_start(); i2c_write(0x3C); i2c_stop(); } return; } Задача: просто увидеть коммуникацию на SCL SDA, я уже потом по даташитам таргет девайсов без проблем напишу дрова. Не получается именно осуществлять коммуникацию.
      Подскажите, пожалуйста, я не понимаю, где я дурак, а между тем волос на голове становится всё меньше, а те, что остались, стремительно приобретают серый окрас, ибо 2 недели я долбаюсь с одной проблемой. Благодарю за ваши советы. Спасибо.
       
    • 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. Не могу найти похожий
×
×
  • Create New...