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

MicroC (Pro)


panther1

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

Всем Привет.

Предисловие:

Начну наверно как многие здесь - Я в PIC'ах новичек. Спаял программатор Extra-Pic, купил МК 16F73, Скачал программу MicroC Pro 2009 ну и поставил перед собой задачу, она конечно глобальная и пока целиком нехочу о ней рассказывать (всему свое время), самое главное что в ней затронется обучение с самого начала (помигать Светодиодом) потом что то вроде светодиодной шкалы из 4 светодиодов, далее использование кнопки для запуска работы и т.д. заканчивая подключением LCD и выводом на него информации. Надеюсь Вы мне поможете и подскажете, потому как информации и примеров программ на MicroC с хорошими комментариями в сети почти не нашел, а данная ветка поможет многим новичкам к тому же проект будет затрагивать многие интересные для начинающих вопросы.

Глава 1

Моргаем светодиодом.

Создал новый проект, задал в нем МК и частоту кварца, написал вот такую программку:

void main ()

{

TRISB.F3=0;

while(1)

{

PORTB.F3=1;

Delay_ms(500);

PORTB.F3=0;

Delay_ms(500);

}

}

Нашел этот пример где то на просторах интернета практически без описания, кроме Delay (ждать 0,5 сек.) ничего непонятно.

1 - Что такое TRISB

2 - что такое while (думаю начало цикла) и почему он (1)?

3 - PORTB 1 и PORTB 0 Это включить и выключить светодиод но на какой ноге порта B он должен висеть (F3 это и есть третя нога)?

Ну и последнее на сегодня - как скомпилировать программу в HEX?

С Уважением и надеждой на взаимопонимание!

P.S. Модераторы пожалуйста поменяйте название темы, торопился и допустил опечатку в слове Micro, и букву "С" в конце большую. "MicroC Pro"

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

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

Вы немного не с того начали. Слишком высокий шаг для начинающего.

Для начала покурите даташит, узнайте что может МК, какая у него структура и т.д.. А потом уже начинайте писать программы.

1 - Что такое TRISB

Это направление порта (вход/выход).

2 - что такое while (думаю начало цикла) и почему он (1)?

По Русски это будет так

пока(условие)

{

выполнять

этот

код

.....

}

В хелпе всё это есть.

(F3 это и есть третя нога)?

Это RB3.

REG.Fx = val ;

Это присвоить в регистре REG биту под номером х значение val

В хелпе всё это есть.

Ну и последнее на сегодня - как скомпилировать программу в HEX?

Читайте хелп на МикроСи, там всё есть.

PS: Тему не переименуешь в MicroC, не даст движок форума.

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

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

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

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

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

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

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

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

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

По поводу даташита и хелпа в английском я силен процентов на 70, а в техническом английском процентов на 20-30, так что в даташите понимаю не очень много. помигать светодиодом думаю можно на любом МК.

Хелп только что нашел от 6 версии MicroC, завтра буду разбираться. Дело в том что интернет у меня дома, а разбираюсь с МК на работе во время обеда ну и в редкие минуты перекура. Так что часа полтора в день всего, поэтому и создал эту ветку, чтоб помогли поскорее освоиться. Завтра буду пробовать компилировать и эмулировать в pic simulator'e, как получится поморгать буду двигаться дальше по намеченному плану. со временем и надеюсь отчасти с Вашей помощью начну более глубоко разбираться в струткуре МК.

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

угу, неплохой камень, можно еще 688, но насчет русского дш для него я хз...

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

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

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

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

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

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

Выпросил комп с интернетом на 5 мин на работе.

Ну пока нет 628, пытаюсь поморгать тем что есть. :) Скомпилировал программку в pic simulator загрузил, но функция delay не отрабатывает, зацикливается. Светодиод включается и все ждать хоть 0,5сек хоть 5 мин в режиме нормал или фаст все равно не моргает. Подскажите в чем проблема?

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

может компилятор левый какой-нить? по идее вышеприведенный код должен быть правильным...

зы: советую скачать нормальный проверенный компилятор, это PCWH PICC... на него и библиотек/драйверов, и книг полно, например "Шпак Ю.А. - Программирование на языке C для AVR и PIC"...

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

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

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

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

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

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

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

скачал, установил просит регистрационный файл которого нет :(

Скомпилировал программу в mikroC 6, mikroC 9, MikroC Pro 2009 V2.5 Результат один и тот же. что то странно это. могу выложить Hex файл посмотрите может вы поймете почему не работает в PIC Simulator.

В общем вот файлик: http://slil.ru/28012402 , если будет время посмотрите кто разбирается в этом пожалуйста буду признателен.

p.s. Немогу на название темы смотреть, прям бесит омечатка. может создадите тему с нормальным названием как с бейсиком, я б утда свои вопросы выкладывал да и другим может быть было проще куски кода туда кидать на С, чем каждый раз новую тему создавать.

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

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

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

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

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

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

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

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

Мой тебе совет не парься с PIC Simulator, он работает нормально только если прога написана на его дибильном бейсике, скачай Proteus поставь и эмулируй в нем любые схемы с любыми МК.МикроСи отличный компилятор, особенно хелп на него, кроме этого хелпа в принципе ничего больше не надо, там описан и Си и все библиотеки и куча примеров, причем рабочих примеров.Если же хочешь все писать своими ручками т.е вникнуть в структуру всего, что скрыто за библиотеками от разработчиков тогда тебе нужен HITECH-PICC, но лучше не заморачивайся, а пользуй микроСи и не мечись в стороны.

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

Удачи.

Будьте проще и люди к вам потянутся.

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

В протеусе нет такого ПИКа, а ему нужен именно этот.

panther1, А зачем Вам симулятор ? Никак не пойму. У Вас есть железо, пробуйте на нём !

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

есть там такой пик)) 16C73B, почти полный аналог, работает отлично, пообщались с panther1 в аське, в итоге полку пиководов прибыло :D

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

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

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

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

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

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

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

угу)

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

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

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

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

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

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

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

Мой тебе совет не парься с PIC Simulator, он работает нормально только если прога написана на его дибильном бейсике, скачай Proteus поставь и эмулируй в нем любые схемы с любыми МК.МикроСи отличный компилятор, особенно хелп на него, кроме этого хелпа в принципе ничего больше не надо, там описан и Си и все библиотеки и куча примеров, причем рабочих примеров.Если же хочешь все писать своими ручками т.е вникнуть в структуру всего, что скрыто за библиотеками от разработчиков тогда тебе нужен HITECH-PICC, но лучше не заморачивайся, а пользуй микроСи и не мечись в стороны.

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

Удачи.

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

В протеусе нет такого ПИКа, а ему нужен именно этот.

panther1, А зачем Вам симулятор ? Никак не пойму. У Вас есть железо, пробуйте на нём !

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

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

  • 4 года спустя...

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

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

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

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

http://ehob.by/index...ikrokontrollery

П.С. Есть такой метод - от противного. Для начала можно, что то сделать, и после копать как это работает.

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

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

http://ehob.by/index...ikrokontrollery

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

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

Вопрос к знатокам "MikroC for PIC". У меня версия 4.60. Работают ли таймеры в симуляторе?

Вот фрагмент:

void izm () // измерение

{

out=1; Delay_us (10); out=0; TMR1L=TMR1H=0;

while (in==0) { } // ждем единицу

T1CON=0x01; // вкл таймер

while (in==1) { } // ждем нуль

T1CON=0;

Процесс идет нормально, но TMR1L и TMR1H остаются равны 0 и в процессе счета, и после остановки таймера.

Заранее благодарен за помощь.

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

1-й бит T1CON, т.е. TMR1CS = 0. Это значит: используется внутренний тактовый генератор Fosc/4. В ассемблере вроде бы больше я никаких регистров не настраивал?

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

А, Вы сразу в регистр T1CON пишите значение, не обратил внимание, смутил комментарий "вкл таймер".

Значит такая IDE "хорошая" :) Попробуйте в протеусе или на железе. Всё должно работать.

PS: У Микрочипа есть своя фирменная IDE (Mplab IDE) и свой Си-компилятор (XC8), советую ими пользоваться.

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

Спасибо. До железа еще далеко, устройство еще не всё сформировалось. MPLAB IDE 8.91 когда-то запускал, но мне что-то не понравилось или что-то не получилось. Уже не помню. Попробую еще...

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

  • 3 года спустя...

Всем привет! Подскажите кто-нибудь: в компиляторе mikroC pro for PIC пытаюсь запускать отладку (меню Run), но тут же открывается вкладка с другой программой (.с-файлом), в которой тоже недавно включал отладку. А в нужной проге никак, я уже перезапускал mikroC, не помогает, какие-то глюки, что ли?:help:

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • А как же вы квазар спаяли? Или ЛУТом не владеете? Можно даже маркером все прорисовать. А за осцил боятся не стоит, ему на вход будет приходить допустимое напряжение (указано в хар-ках осциллографа).
    • Релюхи не причём. При неисправности релюх симптомы были бы другие. И ИБП даже не клацает когда переходит в  "аварию".   Да. Аккум новый. Более того - 2 новых пробовал. И без АКБ тоже. Не влияет. Да мелкие особо не вздуваются ж. Хотя С21 под подозрением..   Спасибо. Буду иметь ввиду.
    • #include <Wire.h> #include <Oregon_TM.h> #include <BME280I2C.h> //////////////////////////////////////////////////////////////////////////////////////////////////////////// //Скетч для устройства, передающего данные датчика BME280 в формате Oregon Scientific THGN132N //Принципиальная схема прилагается. //Для работы необходима библиотека https://github.com/finitespace/BME280/ //Устройство работает от 3-ех пальчиковых батареек, для экономии электричества заливать скетч нужно через ISP //////////////////////////////////////////////////////////////////////////////////////////////////////////// //Также возможна передача данных в формате - THP (температура, влажность, давление, напряжение батареи) //Пример с приёмником поддерживает расшифоовку THP //////////////////////////////////////////////////////////////////////////////////////////////////////////// # define THGN_SEND 1 // Передавать ли данные в формате THGN132 # define THP_SEND 0 // Передавать ли данные в формате THP # define DEVICE_LOG 1 //Писать ли лог В Serial # define DONE_PIN 15 // вывод сигнала об окончании работы на таймер # define BME_WAIT 10 // Сколько мс ожидать датчик BME # define BATTERY_THR 3.5 // Порог напряжения для выставляения флага разряда батарейки (THGN) ///////////////////////////////////////////////////////////////////////////////////////////////// //Ниблы датчика THP //Во всех полях младшие ниблы идут вперёд!!! // 1-2 - тип (55) // 3 - канал (0-7) // 4-6 - (температура от -100С) * 10. Т.е. +25.1С = 1251 = 4E3h // 7-9 - Влажность *10 Т.е. 25.1% = 251 = 0FBh // 10-12 - (давление от 500ммртст) * 10. Т.е. 765мм = 2650 = A5Ah // 13-15 - данные с АЦП (A0) // 16-17 - CheckSUM // 18-19 - CRC8 (poly 0x07 start 0x00) ///////////////////////////////////////////////////////////////////////////////////////////////// Oregon_TM transmitter(4); BME280I2C bme; bool bme_present = false; float bme_temp(NAN), bme_hum(NAN), bme_pres(NAN); ///////////////////////////////////////////////////////////////////////////////////////////////// void setup() { digitalWrite(DONE_PIN, LOW); pinMode(DONE_PIN, OUTPUT); #ifdef DEVICE_LOG Serial.begin(115200); Serial.println("Waiting for BMEsensor..."); #endif //Обмен данными с BME////////////////////////////////// Wire.begin(); while(!bme.begin()) { if (millis() > BME_WAIT) break; } if (!bme.begin()) { #ifdef DEVICE_LOG Serial.println("No BME sensor found"); #endif bme_present = false; } else { switch(bme.chipModel()) { case BME280::ChipModel_BME280: bme_present = true; bme.read(bme_pres, bme_temp, bme_hum); #ifdef DEVICE_LOG Serial.println("Found BME280 sensor! Success."); Serial.print("Temperature = "); Serial.print(bme_temp, 1); Serial.println("C"); Serial.print("Humidity = "); Serial.print(bme_hum, 1); Serial.println("%"); Serial.print("Pressure = "); Serial.print(bme_pres * 0.75, 1); Serial.println("mmHg"); #endif break; default: #ifdef DEVICE_LOG Serial.println("Found UNKNOWN sensor! Error!"); #endif bme_present = false; } } //Напряжения батареи/////////////////////////////////////////// word battvotage = (word)(((float)(1.1 * 16368) / Vbg()) * 100); #ifdef DEVICE_LOG Serial.print("Battery voltage = "); Serial.println(battvotage,HEX); #endif //Подготовка и отправка данных THGN////////////////////////////////////// transmitter.protocol == 2; if (THGN_SEND) { transmitter.setType(THGN132); transmitter.setChannel(3); transmitter.setBatteryFlag(battvotage < BATTERY_THR); if (bme_present) { if (bme_hum > 98) bme_hum = 98; if (bme_hum < 2) bme_hum = 2; if (bme_temp > 70) bme_temp = 70; if (bme_temp < -50) bme_temp = -50; transmitter.setTemperature(bme_temp); transmitter.setHumidity(bme_hum); transmitter.setComfort(bme_temp, bme_hum); } else { transmitter.setTemperature(-49.9); transmitter.setHumidity(2); transmitter.setComfort(-49.9, 2); } transmitter.SendPacket(); } // Если отправляются оба формата пакетов, межу ними надо выдержать паузу if (THP_SEND && THGN_SEND) delay(100); //Подготовка и отправка данных THP////////////////////////////////////// if (THP_SEND) { transmitter.setType(THP); transmitter.setChannelTHP(1); transmitter.setBatteryTHP( battvotage); if (bme_present) { transmitter.setTemperatureTHP(bme_temp); transmitter.setHumidityTHP(bme_hum); transmitter.setPressureTHP(bme_pres * 0.75); // перевод Pa в mmHg } else { transmitter.setErrorTHP(); } transmitter.SendPacket(); } #ifdef DEVICE_LOG Serial.println(); Serial.print(millis()); Serial.println("ms"); Serial.println(); #endif //Команда на отключение питания digitalWrite(DONE_PIN, HIGH); } ///////////////////////////////////////////////////////////////////////////////////////////////// void loop(){} ///////////////////////////////////////////////////////////////////////////////////////////////// int Vbg() { ADMUX = (1<<REFS0)|(0<<REFS1)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(0<<MUX0); long buffersamp=0; for (int n=0x0; n<=0xff; n++ ) { ADCSRA = 0xc7; while (bit_is_set(ADCSRA,ADSC)); buffersamp += ADC; } buffersamp >>=4; //16368 full scale 14bit ADCSRA &= ~(1 << ADEN); // отключаем АЦП return buffersamp; } Вот код программы. Пробовал по разному и от 5в запитывал и всю систему от 3,3 в. Причем голая ардуинка с таймером работает в нормальном режиме некоторое время, но потом все равно слетает и начинает питать мк постоянно( Причем это происходит всегда через разный промежуток времени.
    • На фото может быть название , характеристики и т.д. И по этому фото я смогу выбрать такой же в инете.. самому мне не собрать..
    • А что даст фотка? Тот же щуп, только чуть крупнее и с проводами питания.
    • Для меня наверное лучше купить готовый.. цель повысить чувствительность до 1 mV.. Наверное на Авто стоит покупать , мне бы фотку какую нить..такого активного щупа..))
×
×
  • Создать...