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

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


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

Реклама: ООО ТД Промэлектроника, ИНН: 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?

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

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

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

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

Выбираем схему 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 пользователей онлайн

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

  • Сообщения

    • А лучший вариант предложил Огонек:
    • PS Я слепой определенно. Проглядел что было на графике в стартовом посте - температура Но тем не менее, симуляции микрокапа у меня доверия в этом плане ноль. Я про реальные испытания  
    • И в чем же хрень? Вполне соответствует предложенному ТЗ - от насоса поступает постоянное напряжение 10 вольт. Видимо, это не напряжение питания мотора насоса, а от какой-то управляющей схемы. Или это насос от аквариума, маломощный, или еще что-то. "Есть в мире многое такое, друг Горацио, что и не снилось нашим мудрецам!" 
    • @beggar Учитывая, что Вам влом читать статьи, ща я вкратце поясню (но было бы лучше, Вам прочитать учебники). DCA режим мультиметра - это измерение среднего значения тока. в этом режиме, мультиметр измеряет - какой заряд, протёк за одну секунду, через поперечное сечение проводника. ЗЫ имеет значение, какое число электронов, прошло через поперечное сечение, за одну секунду, и не важно: с какой скоростью они двигались, быстро, медленно, толпами или строем,  главное - сколько. Это среднее значение тока. Действующее значение тока - это вовсе не ток, а его мощностной эквивалент. Здесь важна и скорость электронов, чем быстрее движутся электроны, тем больше потери энергии. Когда по проводнику протекает какой-то ток, на проводнике выделяется тепловая энергия, мощностью P=I*I*R. Рассмотрим случай, когда ток в 1 А протекает в течении 1 секунды, через проводник сопротивлением 1 Ом, тогда мощность равна P=I*I*R=1*1*1=1 Вт. Теперь рассмотрим другой случай, когда тот же ток в 1 ампер (среднее значение), протекает импульсом тока величиной 10 А, продолжительностью 0.1 секунды и паузой продолжительностью 0.9 секунды. тогда мощность выделяющаяся в течении 0.1 секунды P=I*I*R=10*10*1=100 Вт, а в течении 0,9 секунды, т.е. ещё 9 раз по 0,1 секунды 0 Вт, таким образом, мощность выделяющаяся в течении секунды 100/10=10 Вт. Получается, что ток, который покажет амперметр среднего значения - одинаковый, а теплота, выделяющаяся на проводнике, во втором случае, в 10 раз больше. Это какой же ток должен протекать через проводник, чтоб выделялась такая же мощность на проводнике? - получается 3.16 А, P=I*I*R=3.16*3.16*1=10 Вт. Вот амперметр среднеквадратичного значения, в первом случае, показал бы 1 А, а во втором 3.16 А. Получается, что заряд таким током (второй вариант - с импульсным током), заряжал бы аккумулятор током 1 А, а: проводники трансформатора, провода, предохранители, шунты амперметров... грелись бы, как будто по ним проходил бы постоянный ток 3.16 А. при этом, амперметр среднего значения, показывал бы ток 1 А, а амперметр действующего значения 3.16 А. ЗЗЫ хочется верить, что Вам не придётся объяснять, чем отличается - емкость конденсатора, от емкости аккумулятора…
    • что нужно изменить и в какую сторону чтобы повысить напряжение? сейчас 12В хочу попробовать сделать 18-20В, что изменить в делителе?  
    • Окончание заряда сигнализируется красочным свето-дымовым шоу )) 
    • так в видео - есть...   ферритовый стержень диаметром 8-10 мм и длинной 100-120 мм (400-600НМ).. от любой антенны от радиоприемника.. на стержень надевается гильза склеенная из плотной бумаги в несколько слоев..  на гильзу наматывается плотно виток к витку 50 витков провода в один слой... дальше эта намотка сверху изолируется тонкой прочной бумагой или скотчем...  поверх наматывается также плотно (виток к витку) еще один слой провода 50 витков..  обе катушки мотаются в одном направлении, конец одной соединяется с началом другой - это будет отвод (средний вывод по схеме)..  после намотки выводы - подклеить клеем, а всю обмотку с гильзой покрыть лаком... гильза с катушками должна плотно передвигаться по стержню.. так рекомендуют от автора.. я если бы делал, то увеличил бы общее количество витков до 200-240, а отвод (средний вывод) сделал бы от 50 витка (если считать снизу по схеме).. мотал бы проводом 0,32 - 0,36 мм диаметром.. 
  • Похожий контент

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