Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Re: Програмирование pic на СИ.

Пт дек 01, 2017 11:58:44

Если для младших (12, 16), то - XC8. Если под 18-ые камушки, можно ещё присмотреться в сторону MCC18, тоже неплохой компилятор. Единственным, на мой взгляд, минусом у него является проблемы с объявлением массивов более 256 байт. Приходится скрипт линкера править.

Re: Програмирование pic на СИ.

Пт дек 01, 2017 17:31:49

Уважаемый dosikus, а можно поинтересоваться, откуда Вы узнали, что я "плаваю"? Из того, что пользуюсь CCS? Так я уже объяснил, в чем причина. Цена на лицензию XC8 является неприемлемой для тех, кто не зарабатывает деньги программами для PIC. А всякими "таблетками от жадности" для программ я не пользуюсь принципиально, у меня все программы купленные. Однажды мне не хватило бесплатной версии XC8 (по времени не укладывался в требования), переписывать на ассемблере особого желания не было, слишком много было уже написано. Поиск и дал вариант с CCS, которым я и стал пользоваться когда пишу на С. За неимением лучшего доступного варианта. О моем уровне знаний и опыта это никоим образом не говорит. Программированием и электроникой занимаюсь профессионально более 30 лет. Да, PIC занялся, для себя, а не для работы, три с небольшим года назад. Но, опять таки, уровень знаний Вы видеть просто не можете.

Вы говорите, что MikroC слишком ардуинообразен и далек от настоящего С? Да, могу согласиться, что от идеала он далек. CCS выбирают только из-за плюшек? Это почему же? Ими кто то заставляет пользоваться? Кодогенератор и оптимизатор там вполне приличные, а этого достаточно. Вы не заметили, что вопрос о С задал человек, который С еще и не знает практически? Насколько ему важно такое уж полное соответствие последним стандартам С? Да и Вы, в программа для PIC, а не для настольных ПК и серверов, так часто пользуетесь всеми возможностями С99, например? Базовый вариант языка все эти компиляторы поддерживают. Расширения языка и отступления от стандарта в документации на них описаны. Так ли уж важно, опишите Вы процедуру прерывания как void interrutp ISR() и в ней полностью обработаете прерывание определив его источник, или напишете #INT_TIMER0, например, а потом void ISR() и уже точно будете знать, что процедура получит управление только при прерывании от таймера (диспетчер прерываний скрыт внутри среды компилятора). Или чем так критично отличается TRISA=0x25, от set_tris_a(0x25)? Да, это обертка, но стандарта С это не нарушает ни разу. Я могу понять, что setup_adc у кого то вызывает отторжение тем, что ему больше нравится прописывать значения в регистры вручную, но новичку (автор вопроса новичек!) это облегчит жизнь. И опять таки, стандарта это не нарушает. Меня вот очень раздражает в CCS такое #bit TMR0IF=getenv("BIT:TMR0IF"), но я готов смириться, когда других вариантов нет. А вот серьезная засада в CCS то, что он не различает регистр букв, прямо как Pascal. Причем разработчик прямо заявляет, что включать case sensitive лучше не надо, так как он не гарантирует, что все библиотеки при этом будут работать нормально при компиляции.

Я за свою жизнь со столькими экзотическими языками и диалектами того же С работал, что поверьте, все эти отличия просто мелочи. Гораздо сложнее было на С писать в 90-е годы прошлого века для наших 1816ВЕ51 (MCS51 совместимые). Вот где был засада сидела на засаде. И мне не понятна такая вот позиция, что мол кроме XC нет ничего, а все не согласные дилетанты и плавают. Профессионалу, зарабатывающему программированием PIC, действительно нужен XC. И не только он. Но тратить, минимум 1000 USD только на компилятор, не каждый может себе позволить. И заявлять, что описывая возможные варианты я оказываю медвежью услугу, как минимум, неприлично. На мой взгляд, гораздо большие "гуру медвежьих услуг" те, кто заявляет, что без конкретного инструмента человек обречен на провал. Программы пишет человек, а не компилятор. Фотографирует фотограф, а не камера. Можно купить самый навороченный компилятор, да что там компилятор, IDE, и писать программы на уровне первоклассника. А можно чем то попроще и писать действительно профессиональные программы. А объявляя что то "единственно верным", мы просто встаем на путь очередной "священной войны", коих уже много было (windows vs linux, зеркальная vs беззеркальная, и тому подобное).

Повторю свою точку зрения, ну и groot почитав все это может что для себя решит.

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

- Гораздо важнее знать и понимать сам С. Причем не обязательно С89 или С99, достаточно уровня классики Кернигана и Ричи, на первом этапе. Все равно, на PIC10, 12, 16 Вы не будете пользоваться всеми возможностями современных стандартов С. Но понимание языка нужно обязательно.

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

- Язык программирования это лишь инструмент. Компилятор это лишь инструмент. Главное - человек, его знания и умения. Его способность подобрать, или придумать, алгоритм решения своей задачи.

Написал много, но не в плане наезда или повода для драки.

Re: Програмирование pic на СИ.

Сб дек 02, 2017 08:01:30

Цена на лицензию XC8 является неприемлемой для тех, кто не зарабатывает деньги программами для PIC. А всякими "таблетками от жадности" для программ я не пользуюсь принципиально, у меня все программы купленные. Однажды мне не хватило бесплатной версии XC8 (по времени не укладывался в требования), переписывать на ассемблере особого желания не было, слишком много было уже написано. Поиск и дал вариант...

Microchip продает на Директе помесячную лицензию на любой из XC компиляторов. Такая стоит 30 баксов.То есть около 1800 рублей.
К слову, полная лицензия на копилятор имеет ГОДОВОЙ срок действия и стоит около 1000 долларов на 3 компьютера, но одного пользователя. То есть даже при профессиональном использовании ее очень трудно "отбить". Такшта если Вы принципиальны в вопросе соблюдения авторских прав на ПО, то пишите в бесплатной версии до момента возникновения проблем, а затем покупаете месячную для завершения проекта. Вот и все.

Re: Програмирование pic на СИ.

Сб дек 02, 2017 09:26:30

Уважаемый dosikus, а можно поинтересоваться, откуда Вы узнали, что я "плаваю"?


Из вашей же писанины, ибо вы ни черта не знаете ни о компиляторах вами рекламируемыми ни о С вообще.

Добавлю еще вам "плюшек" :
в микроС закрытые либы, фрэймворк одинаков и в микроЕ паскрале и в микроС и в микросЕ барсике.
Догадываетесь что в ассемблерном листинге? Нет? Советую внимательней изучить...
Либы "универсальные", ардуино_подобные, раздутые и недоступные для изучения нутра.


CCS - извечные проблемы с указателями в флэш , да и вообще с адресацией в флэш .
Извечные проблемы с многофайловыми проектами.
Производители усердно добавляют новые "плюшки", все более отдаляющие CCS от стандарта.
К примеру -перезагрузка функций.

В итоге - вы советуете изучать новичкам "С для пЫк" , вместо вменяемого С.
Гуру медвежьих услуг?

Re: Програмирование pic на СИ.

Пт дек 08, 2017 20:29:42

Ребят, такая проблема:

Программу для PIC10F322 написал, которая запускает генератор и включает светодиод. МК должен запускаться/останавливаться при нажатых кнопках старт/стоп (останавливается так же, если нажаты или нет обе кнопки).

На деле МК работает не на нажатые клавиши, а при нажатии.

Вот код:



Вот disassembly listing:



Схема, если нужно:

Re: Програмирование pic на СИ.

Пт дек 08, 2017 20:48:04

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

Re: Програмирование pic на СИ.

Пт дек 08, 2017 20:59:36

В общем, я сделал так:
1. Поменял сопротивления резисторов R1 на R2, а R2 на R1.
2. Изменил сопротивление кнопки в разомкнутом состоянии на 500 МОм.

Теперь кнопки работают так, как должны.

Re: Програмирование pic на СИ.

Пт дек 08, 2017 21:18:19

Хорошо, когда дойдёт дело до реально спаянной схемы - возвращайтесь.

Re: Програмирование pic на СИ.

Пт дек 08, 2017 21:19:46

А можно узнать, почему такая реализация не годится? С точки зрения схемотехники.

Re: Програмирование pic на СИ.

Пт дек 08, 2017 21:27:49

Долго объяснять. Но на висячем выводе без подтяжки, потенциал может считываться какой угодно. И далеко не обязательно лог.0. Потом с резисторами - проверьте какие входы у того микроконтроллера с триггером Шмита или нет. В своё время был помучавшись с PortB.0 у pic16f84 - перепад уровня читался, а прерывания не было. Оказалось, что прерывание было заведено через ТШ - а для него чуть-чуть уровня "логической единицы", которого для порта хватало - немножечко не дотягивало. Так что может еще резисторы придётся покрутить. А вообще, вам в другой теме сказали - используйте АЦП (если оно в микроконтроллере есть) для контроля нажатия кнопок.

Re: Програмирование pic на СИ.

Пт дек 08, 2017 21:36:00

Хорошо, если АЦП, то тогда такие вопросы:

1. Про дребезг контактов:
1а. Нужно ли его обрабатывать?
2а. Можно ли обработать дребезг через макрос __delau_ms(30) или это признак дурного тона?

2. Как вообще работать с АЦП? Как подключить кнопки, я понимаю. А вот как считать значение с АЦП - нет.

Re: Програмирование pic на СИ.

Пт дек 08, 2017 21:56:06

1. Я дребезг обрабатываю всегда. Делайте как вам удобно. Сам никогда и ни разу не пользовался такой функцией или макросом. Обычно этим занимаются таймеры.
2. Я обычно читаю даташит и там написано.

Re: Програмирование pic на СИ.

Пн дек 11, 2017 15:41:16

Доброго времени суток. Нигде не могу найти кряк на XC8. Но нашел на HI-TECH (причем Pro). Что лучше, XC8 без всякой оптимизации, или HI-TECH с максимальной. Нашел еще кряк на MCC18, о котором выше писал Аlex, но как-то стремно его использовать, мало кто им пользуеться. Также нашел на ССS, но почитав понял, что он как CodeVision для AVR (галочки-кнопочки). Учусь на 16 ПИКах, в будущем возможны 18 ПИКи. Может кто поделится таблеткой от XC8 ? (можно в личку).

Re: Програмирование pic на СИ.

Пн дек 11, 2017 15:50:11

В личку ответил.

Re: Програмирование pic на СИ.

Пт дек 15, 2017 19:48:13

Кто может объяснить, почему не работает код (моделирую в протосе)?

Смысл кода:

Осваиваю АЦП микроконтроллера PIC18F25K80, учусь так скажем. При включении МК АЦП должен начать работать и, если на входе больше 1 Вольта, то включить светодиод. В протосе ничего этого нет.

Код:

Re: Програмирование pic на СИ.

Пт дек 15, 2017 20:08:40

А кто запускает преобразование?

Re: Програмирование pic на СИ.

Пт дек 15, 2017 20:37:16

Немножко переделал код:



Проблема, как я понял, в том, что условие chislo > 0 никогда не выполяется (если в этом условии поставить RC7 = 0, вместо 1, а внизу поставить RC7 = 1, то тогда светодиод горит).

Отредактировал!
Последний раз редактировалось SpeedFighter Сб дек 16, 2017 06:31:45, всего редактировалось 3 раз(а).

Re: Програмирование pic на СИ.

Сб дек 16, 2017 06:03:22

Откройте даташит в разделе АЦП и определите по нему состояние каждого регистра. Какое значение Tad выбрано у Вас?
А кроме того, запуск АЦП удобно производить с помощью таймера. Например 5-го.
Еще раз, читайте даташит.

Re: Програмирование pic на СИ.

Сб дек 16, 2017 06:31:09

Со старым разобрался.

Вот какой вопрос:

На вход поступает аналоговый сигнал < 1 В. Почему-то в таком случае я получаю после этого действия:

Код:
chislo = 5*ADRESH/(256);


что chislo = 0. Почему так?

Re: Програмирование pic на СИ.

Сб дек 16, 2017 17:15:38

Вы сами объявили его как unsigned char. Значит оно может принимать только целые значения от 0 до 255.
Все промежуточные результаты тоже будут ограничены этим диапазоном.
Ответить