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

Язык СИ для микроконтроллеров


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

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

peremenaya=0b01010101;
PORTA=peremenaya & 0x0F;
PORTB=peremenaya & 0xF0;

Спасибо, то что нужно!

А ещё, подскажите, как можно два датчика ds18b20 на одну шину посадить. Вот здесь вроде что-то похожее на решение, но осилить это всё я так и не смог.

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

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

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

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

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

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

вопрос по компилятору hi-tech , как посмотреть в симуляторе состояние бита , обьявленого глобально как bit?

Не цитируите полностью предыдущее сообщение!!!

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

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

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

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

А как можно сделать, что бы выводились незначащие нули, ну например когда отображаются минуты, то выглядело бы так - "01"? Сейчас у меня сделано так:

if (min<10) printf(lcd_putc,":0%d",min); else printf(lcd_putc,":%d",min);
Но как-то это громоздко, наверняка ведь должен быть способ попроще?
Ссылка на комментарий
Поделиться на другие сайты

А ещё, подскажите, как можно два датчика ds18b20 на одну шину посадить. Вот здесь вроде что-то похожее на решение, но осилить это всё я так и не смог.

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

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

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

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

Да я уже это смотрел, но как-то воедино собрать не смог. МК я только начал заниматься, поэтому для меня всё не так просто. Было бы неплохо, если бы кто-нибудь привёл пример готовой программы или дал ссылку. По большому счёту мне не обязательно, что бы оба датчика были на одном порту, можно на разных, если так проще будет.

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

Да без проблем, вот тебе расписаны все функции с комментариями, плюс они уже скомпонованы в хедер и исходник, из них делаешь два файла с расширением .h и .c кидаешь в папку со своим проектом, подключаешь и получаешь удовольствие. Так же приведён пример программы считывания номера прибора и программа для считывания температуры по номеру прибора, короче всё, что тебе нужно. В конце есть вопросы для тренировки. Также в программах приведён пример динамической индикации. Всё это для HI-TEC компиля написано.

Дерзай и если, что спрашивай.

Вот учись : (1-Wire).rar

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

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

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

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

Привет всем!Вот решил писать программки на си,ASM так въелся,что туго этот си до меня доходит)

Ответьте пожалуйста на пару вопросиков.

1)Вот на первой странице темы выложен проект в протеусе для microC.Все работает,но не могу подключить исходник на С или ASM при попытке в Proteus его компилировать выдает кучу ошибок,а без компиляции в нем я так понял отслеживания работы проги не получится.Ошибки выдаются из за того что исходник написан в microC,а в Proteus стоит mpasm,и что делать если хочется по тексту отслеживать?

2)Разъясните пожалуйста про библиотеки в С,к ним идет обращение проги,как оно происходит?

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

В примерах самого microC .cof не нашол...

Всегда в проекте Proteus'a добавлял ASM файл как исходник и все работало,а тут...

В примерах Proteus'a 16pic-->PIC Calculator тоже .cof нету,но при нажатии на паузу и запуске source code пошаговая отладка идет :blink:

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

В microC создание .cof файла стало возможно в последних версиях компилятора и вроде только в про версии.

Кстати в microC есть свой встроеный отладчик, где можно посмотреть выполнение программы по шагам.

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

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

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

Вот неясность как будет PROTEUS реагировать на незнакомый код ведь в MicroC он отличается от mplab? И как этот cof присоеденить к PROTEUS?

Да я видел встроенный отладчик,но он все же в разы уступает Протеусу.

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

Если качали из первого сообщения, то там версия не самая последняя, а довольно старенькая, вот отсюда можно скачать http://www.mikroe.com/en/compilers/mikroc/pro/pic/ последнюю версию, конечно же ограниченную, кряк ищите сами если надо, но думаю Вам на первое время вполне хватит и ограниченной, тем более ограниений в функционале нет, а только на размер программы.

Вот описание, что в этой версии нового:

Раньше пользователи при отладке могли использовать только симулятор встроенный в компилятор или же аппаратный отладчик на базе mikroICD от mikroE, продукты от mikroE никак не интегрировались в среду разработки MPLAB IDE и невозможна была симуляция в Proteus-е. По неоднократным просьбам пользователей команда mikroE включила в компилятор возможность генерации COFF файлов, используя которые теперь можно проводить отладку в среде MPLAB IDE ( как при помощи симулятора MPLAB SIM, так и при помощи программатора-отладчика ICD2 (ICD3)), а как известно в симуляторе MPLAB уже работают таймеры и т.д. Все это можно найти в help-файле.

П.С. Может уже и новее вышла. :)

Ещё для тех кто пользуется микроСи. Данный компилятор не очень дружит с выводом русских букв на ЖКИ, вот программа, которая поможет решить данную проблему.

Ссылка: http://narod.ru/disk/17508096000/MikroCStringTranslate.rar.html

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

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

Благодаря вам разобрался!Как включить генерацию cof файла написано в хелпе,я просто в нем нажал НАЙТИ и ввел cof.Сделал как написано и он стал появляться после каждой компиляции.

В Протеусе я его лепил в исходники как делал с ASM файлами,ничего не работало.Но потом поставил cof файл вместо hex и пошло поехало.

Теперь дело за малым,въехать в этот С :)

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

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

Появился очередной вопрос. Как записать в eeprom 16-битную переменную?

В таком виде записываются только младшие 8 бит:

write_eeprom(0x12, t);

А в таком читаются эти же младшие 8 бит:

t=read_eeprom(0x12);

Сейчас просто делю 16 битную переменную на две 8 битовых и записываю побайтно, но может есть способ попроще?

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

Всё правильно делаешь, что ещё проще можно придумать ? Сделай данную процедуру в виде двух функций, одна разбивает и записывает, вторая наоборот читает и соединяет.

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

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

Разбитие переменных (все способы хороши, Выбирай себе на вкус :D)

char a, b;

int c;

Вариант 1:

a= c & 0xff; // младший
b= (c>>8) & 0xff // старший

Вариант2:

a=*((char *)&c);
b=*(((char *)&c)+1);
или
а = (char)c;
b= (char)(c >> 8);

Вариант3:

#define BYTE(in) ((char *) & (in))
...
void fun(void)
{
char a, b;
int c;
...
a = BYTEс[1];
b = BYTEс[0];
...
}

Вариант4:

// структуры для манипуляции с байтами 
typedef union 
{
WORD w;
BYTE b[2];
} TWOBYTEPACK ;

typedef union
{
unsigned long l;
BYTE b[4];
} FOURBYTEPACK; 

typedef union
{
float f;
BYTE b[4];
} FLOATPACK; 

TWOBYTEPACK Dat;

И спокойно работать с Dat.w, Dat.b[0] - младший байт, Dat.b[1] - старший байт.

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

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

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

Подскажите пожалуйста!

Изучение си я начал с книги " Как программировать на С" Х. М. Дейтел, П. Дж. Дейтел.Ребята все доступно объясняют,паралельно решил почитывать Шпака что бы хоть как то понимать процедуру написания прог для PIC микроконтроллеров.Компилятор же выбрал microC.К ниму я уже привык и он меня устраивал до недавнего времени,пока не нашол такого отличия от CCS_PICC.Оно в том,что у MicroC нет функций ввода вывода таких как printf,scanf и getchar,putchar.По мне это оказалось неудобным следовать примерам из книги Шпака.Назовите пожалуйста достоинства и недостатки MicroC,и стоит ли с него начинать изучение этого языка для программирования Pic'ов.Может мне лучше перейти на CCS_PICC?

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

ИМХО:

А если в начало программы добавить #include <stdio.h>, появляются функции printf итд ?(посмотрите их наличие в файле stdio.h) Если нет, то в топку такой компилятор. Хотя считаю, что пользоваться этими функциями для программирования МК плохой тон, но если производитель не написал для своего творения стандартную библиотеку ввода вывода... я выше написал куда такой компилятор.

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

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

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

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

Нету в хелпе этих функций,а пользоваться ими я хочу для удобства изучения си.А именно ввод и вывод данных я хочу арганизовать через virtual terminal Proteus ,так ведь легче общатся с программой.

Только что запустил CCS-PIC создал проект с кодом первой программы Шпака,подключил к Proteus и все работает.Функция putchar выводит в терменал все что дам.Жаль microC так не может.

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

Не знаю где Вы смотрели. А я нашел функцию sprintf

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

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

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • Все предложенные к рассмотрению источники питания работают примерно по одному принципу: сетевое напряжение выпрямляется, фильтруется (получаем чуть больше 300 вольт постоянного), затем преобразуется снова в переменное, но уже на частотах в несколько десятков килогерц, понижается на трансформаторе и снова выпрямляется. За счёт высокой частоты преобразования используется трансформатор на ферритовом, а не на стальном, сердечнике, гораздо меньших габаритов и стоимости. Минусы: значительное усложнение схемы блока и вероятность возникновения различных помех от него. Модули управления (кроме первого) также являются импульными преобразователями, с теми же достоинствами и недостатками. Если нужно по быстрому собрать некое подобие ЛБП, то уж лучше брать модуль вроде этого. Ну и блок питания к нему соответствующий. Но не очень понятно, какой практический опыт можно получить от соединения готовых модулей парой проводов.  
    • У меня больше всего вопросов вызвала необычная схема обеспечения отрицательного питания. Автор этой обстоятельной заметки пишет: For this supply to work correctly, the transformer must have a secondary voltage of at least 18V RMS.  Почему? Что будет не так с отрицательным питанием, если напряжение на трансформаторе будет меньше 18В?   https://tinyurl.com/23mlwxtt - я в простейшей эмуляции ставлю 12В пикового напряжения для трансформатора и на стабилитроне все как положено: -5.6В.
    • Согласен, очень криво объяснил. Это работа трёх вольтовой линии, просто на диод шотки сдвоенный, на один анод приходит сигнал напрямую с трансформатора, а на второй через дроссель. Вольт/деление 5 вольт в клетке, тайминг по моему 10 МС. Третья фотография это сигнал на катодах уровень земли ровно по центру экрана. Но все линии по итогу в порядке 3.3 в, 5, в, 12 в и -12 в. Нагрузить все линии не могу сразу ,так как тут же выгорают транзисторы (имеется нагрузка 250 ватт по 10 ампер на каждую линию за исключением-12в), поэтому нагружаю 3.3 вольтовую линию на 10 ампер,  подключаю переменный резистор 50 ватт на 15 ом на 5 вольтовую линию и постепенно довожу до той той картины с перекосом (это гдето  50 ватт общее). По поводу микросхемы, вверху имеется скрин где между импульсами проскакивает мини импульс, если так можно сказать, он проскакивает и на одной  и на второй ноге (7,8). Микросхема не tl 494, а lw4933/abx942.1/c9421646. Далее они приходят на базы транзисторов 945g  коллекторы этих транзисторов соединены с  выводами трансформатора. Просто схема типовая, легче мне кажется просто привести фото самого блока, для тех кто разбирается будет гораздо информативне.  Диод шотки по 12 вольтовой линии был подгоревший, заменил на донора. Приводить скрины не буду что бы не захламлять тему. В итоге, пока все так же, при достижении определенной нагрузки суммарно где-то 50 ватт, появляется этот "выброс и перекос". По этому имеются мысли на два варианта, это микросхема , этот мини импульс между периодами, на низкой нагрузке особо не влияет, но при достижении определенной приводит с самовозбуждению входной цепи и непроизвольному открытию транзистора нижнего плеча. Либо дело в "горячей части", плавающий дефект в обвязке силовых ключей.  Спасибо за ответ.
    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
  • Похожий контент

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