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

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


NebsteR

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

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

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

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

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

val1 - 0000 0011 (3);

val2 -  0000 0001 (1); 

val3 - 0000 0101(5)

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

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

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

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

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

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

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

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

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

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

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

Реклама: АО КОМПЭЛ, ИНН: 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 пользователей онлайн

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

  • Сообщения

    • Как озвучили выше - мультиметр (это как глаза и уши) , паяльник или паяльная станция - ее конечно для серьёзного применения, осциллограф. А все там резисторы, конденсаторы, диоды, транзисторы, микросхемы - всё это по мере необходимости, а то будут лежать" мертвым грузом" - много лет без применения. 
    • Обычный кольцевой ...этот ещё с хорошим распределением ! У меня есть ещё один который реально способен ЭДС вырабатывать ... (типа с одного полюса) ;-)   Перекошенный насмерть! Когда их ставят в динамики то провалы не имеют большого значения т.к. в центре такой конструкции расположен керн из магнитомягкой стали , что и выравнивает общую характеристику МП . А вообще какая разница что крутить ?  ;-)  Диск куда безопаснее , а надёжность сьёма - индукционной катухой ...тогда и щйётки сами по себе не нужны ... Вообщем с этим "униполяром " - сплошная лапша с макаронами на ушах студентов ....;-) Вот вырезка из учебника : Как мотор - устройство работает за счёт взаимодействия магнитным полей (на рисунке , конечно - никак не указано) Как генератор - таки нет !  Но утверждается , что таки-ДА ...опятьже никаких доказательств не приводится ... ;-) Ну и ляд с ним! Мне хватило одного разрыва ! ;-) На втором снимке - амплитуда от работы такого шума около 0,3вольт,  сигнал положительный , однако к практике такие уровни и нах никому не нужны ....а так в теории конечно -ДА !  Но есть одна загигулина - применялось ПОЛНОЕ покрытие полюса магнита диском. В таком эксе полно всяких интересных проявлений индукции и одно самое главное - это НЕ униполяр по Фарадею , а работа ИНДУКЦИИ при неполном покрытии диска магнитным полем.... Другая песня !  Однако - НЕ НУНО крутить магнит!! Вон у людей обычный диск из камня разрывало!  Я когдато накие диски пропитывал эпоксидкой и они работали вплоть по почти полного износа камня (конечно и бытовка была обычная -1200 об/мин)
    • Для этого хоть бы знать что за датчик. А так из Wireshark выгрузить в CSV а потом Exel уже.
    • А че за магнит то, с торсионными синфазно-поперечными полями?  Дураков много, а стиралок выпущено еще больше, на всех хватит.
    • @AlexeyStudent Поставили стабилизатор, все работает.
    • В данном примере- конечно нет! Упор на ПЛАЗЬМУ!   Кондей брал типа МБГО (такой бурого цвета квадратик со стеклянными выводами). Думается, что если усложнить схему т.е. сделать хотьбы 5сек на разогрев спиральки Л. то она хлопнет не за 3 месяца , а подольше ...а вообще - дела "каменного века" ...наф-наф!  ;-)  , а схемка задержки уже в выключатель не влезет... В моей практике были вызовы по отключению вааще энергии в квартире ...как оказывалось  - КЗ от плазьмы вышибало центральный автомат , а хозяин , с перепугу от хлопка , больше не желал даже подойти к распред/щиту  ;-)    Увы - это основная ошибка гуру .  В однородном МП ЭДС не наводится!  Я с таким эффектом сталкивался когда сделал попытки с определением однородности материала магнита ....однородности -НИКАКОЙ ! У некоторых экземпляров неоднородность достигает до 50% !  А вот в учебниках об этом даже не заикаются  ...а теория - она без практики-ничто! ;-)  На фото : сьём ЭДС с полюса магнита индукционной катушкой . Такой сьём позволяет как бы "усилить" регистрацию эффекта и избежать шума от токосьёмов...
  • Похожий контент

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