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

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


NebsteR

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

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

Напр. значение в переменной val - 000 0001  0011 1011 (315 decimal).

  Из неё нужно получить в переменных :

val1 - 0000 0011 (3);

val2 -  0000 0001 (1); 

val3 - 0000 0101(5)

Дак это обычное деление с остатком. Математику в школе пропускали ? :)

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

Про деление понятно, я думал это уже есть во встроенных вариантах. Тогда городить код не нужно будет. Нашёл utoa, пока фигня получается, разбираться пытаюсь.

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

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

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

На вскидку :


void func(unsigned char* p_arr, unsigned short val){
  while(val){
    *p_arr++ = val%10;
    val/=10;
  }
}

......................
unsigned char out_arr[5]; // Выходной массив
unsigned short in_val;

......................
  
in_val=123;
func(out_arr, in_val);
Ссылка на комментарий
Поделиться на другие сайты

С itoa не вышло. В буфер какая то ерунда заносится. Так и придётся делением или ещё как делать.

2 часа назад, Alex сказал:

На вскидку :

тоже не вышло.
 

unsigned char out_arr[5]; // Выходной массив
unsigned short in_val;


void main(void) {
   
init();

in_val=123;
func(out_arr, 123);


while (1){
    LATCbits.LATC2 = 1; //set channel2 is closed state
    LATAbits.LATA2 = 0; //set channel1 is closed state  
}
    
    return;
}

void func(unsigned char* p_arr, unsigned short val){
  while(val){
    *p_arr++ = val%10;
    val/=10;
  }
}

 

newmain.c:24: warning: (361) function declared implicit int
newmain.c:35: error: (984) type redeclared
newmain.c:35: error: (1098) conflicting declarations for variable "func" (newmain.c:35)

 

 

Но принцип понятен. У меня так коротко не получится, но как-нибудь сделаю. Спасибо.

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

7 минут назад, GDK сказал:

newmain.c:24: warning: (361) function declared implicit int

Функция не определена. Она у Вас в коде находится ниже вызова.
Поднимите её выше вызова, либо сделайте сверху её объявление.

PS: Я в своём примере не зря именно такую последовательность привёл.

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

13 часа назад, GDK сказал:

С itoa не вышло. В буфер какая то ерунда заносится. Так и придётся делением или ещё как делать.

 

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

char buff [4];
unsigned char val = 1;
unsigned char val_BCD[3];

utoa(buff,val1,10);        
utoa(buff,val,10);
size_buff=strlen(buff);
i=sizeof(val_BCD);

while (i--)
{
  if(size_buff)
     {
	  size_buff--; 
      val_BCD[i]=buff [size_buff]-'0';
     }
    else
     {
      val_BCD[i]=0;
     }
}  

@Alex мне кажетцо 

void func(unsigned char* p_arr, unsigned short val){
  while(val){
    *p_arr++ = val%10;
    val/=10;
  }
}

это не работает

при повторном применении

func(out_arr, 123);
func(out_arr, 4);

результат будет :124

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

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

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

В 02.03.2018 в 22:06, GDK сказал:

Здравствуйте.

Есть ли в MPLABX,  XC8  встроенные библиотеки для преобразования чисел.  PIC16LF1823.  Я собираюсь на трёхзначный семисегментный экранчик выводить целые значения от 0 до 512.   Стоит ли для этого велосипед творить или есть готовые решения?

Самым компактным будет АСМ-вставка из известной микрочиповской аппноты с математическими функциями. Как раз для восьмибитников. Лет так 12 собираюсь вникнуть в теорию этого метода - все времени не хватает. Хотя алгоритм элементарно масштабируется на ЛЮБУЮ наперед заданную разрядность. В аппноте приведен код для 16 разрядов.

戦う前に相手のベルトの色に注目

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

В 04.03.2018 в 03:22, IMXO сказал:

вы просто не умеете его готовить,

Мда, про ASCII понял, а вот конец строки - не знал... В BCD не обязательно, всё равно переводить в 7сегм код, без разницы в чём там цифири исполнены, всё равно через таблицу переводить.

В 04.03.2018 в 10:52, Alex сказал:

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

:) Главное переводит, коротенький, и память не сильно занимает. А с очисткой - ну да, долго м-дохался. Я с ацп пытался верхний/нижний байт на индикаторе смотреть. А там... делаю кз на входе, - ноль. Отсоединяю, становится 255 и назад - ни в какую. Ну думаю, переполняется почему то ацп. И засада такая, отладку не запустить - все ноги заняты. В итоге всё таки всё повыключал и запустил, нашёл причину. Бедный PICkit...  Зато потренировался  и поудобнее работу с ацп переделал. @Alex, спасибо большое.  Очистку буфера прямо в ф-ю добавил.

 

В 04.03.2018 в 14:06, my504 сказал:

АСМ-вставка

Не особо хотелось бы с вставками возиться, компактность и быстрота не особо напрягали, а на Си проще.

В общем всё получилось, вопрос решён.

Ещё один вопросик, где лучше узнавать поддерживает ли МК аппаратное деление/умножение. Хоть быстрота и не требовалась, но всё время в голову лезет скорость выполнения и какой код выдаст компилятор.  Я смотрел а datasheet на свой мк, там таких асм команд не нашёл. Значит не поддерживает?

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

11 минуту назад, GDK сказал:

В BCD не обязательно, всё равно переводить в 7сегм код, без разницы в чём там цифири исполнены, всё равно через таблицу переводить.

разница есть... в размере таблицы. для BCD jn 0..9 , размер = 10 для ACSII от 0..9, размер =57

24 минуты назад, GDK сказал:

Ещё один вопросик

в ДШ , аппаратное умножение с ПИК18

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

BCD - мы по разному наверное понимаем. У меня - это упакованный формат дес. цыфр. В одном байте, таким образом, 2 цыфры помещаются. Т.е. для 0-9 надо 5 байт. Ну сэкономлю я  один-два байта на буфере... По моему оно того не стоит, да и лишние вычисления из за этого.

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

17 часов назад, GDK сказал:

где лучше узнавать поддерживает ли МК аппаратное деление/умножение.

PIC18 поддерживает умножение 8*8->16 причем ненативного вида, то есть результат в специальных регистрах блока умножения, что может и не поддерживаться компилятором в определенных случаях.

PIC24/dsPIC30/dsPIC33 поддерживают умножение в один машинный цикл  16*16->32  всех комбинаций знаковых и беззнаковых аргументов и деление в 19 машинных циклов  16/16 и 32/16 с 16 разрядным частным и 16 разрядным остатком тоже всех комбинаций знаковых и беззнаковых аргументов.

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

戦う前に相手のベルトの色に注目

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

он спрашивал - где узнать, а не кто тут больше всех знает

узнается это из даташита на камень. В разделе про ядро обычно пишется. Еще частенько в аннотации. Обычно это дело на первый план куда нить выпячивают, если проц хоть что-то аппаратно делать умеет кроме сложения 2+2

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

3 минуты назад, mail_robot сказал:

он спрашивал - где узнать, а не кто тут больше всех знает

узнается это из даташита на камень.

Т.е. человек, чтобы узнать какие камни поддерживают умножение/деление, должен качать все подряд даташиты и читать их ? Что за бред...
@my504 чётко указал, какие серии это могут. Что в его посте Вам не понравилось ?

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

а если ему в руки попадет не пик?

чем мой пост конкретно хуже предыдущего в плане корректности и информативности, если отбросить ваш адвокатирующий бред?

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

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

16 часов назад, солар сказал:

Или 4 бит?

Да, на одну цифру.

11 час назад, mail_robot сказал:

а если ему в руки попадет не пик?

Ну, я выводы всё таки сделал, что "искай описание на семейства", да ещё с уже готовым результатом поиска ) , что - очень неплохой ответ.

Про даташиты и "передний план" тоже полезная информация.

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

  • 1 месяц спустя...

Подскажите, пожалуйста, по такому вопросу. Надо использовать компаратор в Pic12f675 с источником опорного напр. По даташиту ИОН потребляет около 140 мкА. Для меня (для батарейного питания) это многовато. Что если в качестве ИОН использовать просто делитель из 2 резисторов около 68 и 100 кОм? Тогда и ток будет поменьше

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

10 минут назад, Aleksandr1111 сказал:

просто делитель

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

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

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

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

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

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

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

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

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

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

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

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

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