Jump to content
NebsteR

Pic. Общие Вопросы

Recommended Posts

#include <stdlib.h>

надо включать в проект, иначе будут ошибки.

 

 

 

Edited by GDK

Share this post


Link to post
Share on other sites
1 час назад, GDK сказал:

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

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

val1 - 0000 0011 (3);

val2 -  0000 0001 (1); 

val3 - 0000 0101(5)

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

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

Подробнее

                     

Материалы вебинара STM32G0 – новый лидер бюджетных 32-битных микроконтроллеров от STMicroelectronics

На вебинаре были продемонстрированы современные методы тестирования производительности микроконтроллеров на примере самых бюджетных 32-битных семейств общего назначения STM32G0 и STM32F0, проведено их подробное сравнение. Мы подготовили для вас материалы. Вы можете посмотреть видеозапись вебинара, ознакомиться с ответами на вопросы, загрузить код для тестирования, прочитать статьи по теме

Подробнее...

На вскидку :


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);

Share this post


Link to post
Share on other sites

С 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)

 

 

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

Share this post


Link to post
Share on other sites
7 минут назад, GDK сказал:

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

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

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

Share this post


Link to post
Share on other sites

Всё получилось. Давно на эти грабли наступал, и вот опять...

Памяти намного меньше на это ушло по сравнению с itoa.

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
В 02.03.2018 в 22:06, GDK сказал:

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

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

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

Share this post


Link to post
Share on other sites
В 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 на свой мк, там таких асм команд не нашёл. Значит не поддерживает?

Edited by GDK

Share this post


Link to post
Share on other sites
11 минуту назад, GDK сказал:

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

Edited by GDK

Share this post


Link to post
Share on other sites
1 час назад, солар сказал:

Или 4 бит?

Имелось в виду - весь диапазон цифр (0...9).

Share this post


Link to post
Share on other sites
17 часов назад, GDK сказал:

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

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

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

Edited by my504

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
3 минуты назад, mail_robot сказал:

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

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

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

Share this post


Link to post
Share on other sites

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

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

Edited by mail_robot

Share this post


Link to post
Share on other sites
16 часов назад, солар сказал:

Или 4 бит?

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
10 минут назад, Aleksandr1111 сказал:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Reptile
      Доброго времени суток. Пытаюсь восстановить работоспособность колонок Top Device TDE 261/2.1. Колонки не раз ремонтировалась по части УНЧ, при очередном ремонте по ошибке (одинаковые разъемы) с трансформатора было подано переменное питающее напряжение на входы (разъем AUX/MP3) аудиопроцессора PT2313L  (3,10,14 ноги - AGND, R_IN2 L_IN2). В результате чего выгорел сам аудиопроцессор PT2313L. PT2313L был заменен. Но колонка по прежнему не запускается. Как я понял, не запускается сам PT2313L, на его аудиовыходах (ноги 24, 25) сигнала нет. Передняя панель работает: индикация, кнопки, енкодер. Имеется подозрение, что вместе с процессором выгорели линии DATA и/или CLK на MCU, так как MCU и PT2313L соединены по этим линиям напрямую друг с другом. В МК и всей этой цифровой штуке не очень шарю, не знаю, как грамотно проверить работоспособность этой цифровой части, поэтому прошу помощи - Возможно ли какими-либо способами восстановить колонку или уже всё... 
      Из приборов, к сожалению, только мультиметр, осциллограф отсутствует.
      Ниже немного измерений.
      Напряжения на линиях: STD-BY-ждущий режим (в скобках рабочий режим):
      DATA - 2.31В (1.9В).
      CLK - 0.125В (0.135В).
      Сопротивление между выводами:
      CLK_MCU-DATA_MCU - 47 Ом. 
      CLK_MCU/DATA_MCU-GND - около 0.22 Ом и там и там. Звонится в обе стороны.
      Питание MCU 5В, (4.6В STD-BY-ждущий режим, 4.0В рабочий режим и со временем также почему-то может падать до 3.6В)
      MCU - не известен, нет маркировки. 18 Выводов, DIP.
      Ноги MCU, которые удалось опознать:
      1 - DATA
      18 - CLK
      3 - GND (?)
      5 - GND (?)
      ? - они соединены вместе
      14 - VCC
      17 - not used (n/a)
      15, 16 - OSC
      ET6202 - управление индикатором, Control LED drive circuit
      Фото плат (под сполером) и даташиты прилагаются.
      Схемы данных колонок не имеется. Все что удалось найти это схема чуть более старшей модели TDE280/2.1, с данными колонками она мало что общего имеет, лишь общий принцип, узлы довольно сильно отличаются, но прикреплю на всякий, для общей информации.
      PT2313L
      ET6202
      TDE280
       
    • By Илья Говжеев
      Поделитесь опытом , кто уже пробывал из arduino сделать программатор pic? 

    • By Терентенко Андрей
      Добрый день! Имею следующую ситуацию : на базе  PIC16f676  создал приблуду для "управления нештатной магнитолой с руля", а именно  сигнал с руля это 4,8в и в зависимости от нажатой кнопки падает дискретной до 0.8в мк с помощью АЦП отслеживает  на магнитолу паралельно кнопкам кинул оптрони которыми управляет МК. Питание от LM с фильтрующими конденсаторами. При тестових прогонах всё работало как надо (программно реализовано защиту от дребезга аж на 0.1 сек в поисках решений) и в машине  и от штатного БП . Но заметил закономерность сейчас на улице - 2 и при первом запуске минут 5, МК "шумит" несоотвецтвует нажатия на руле кнопке  на магнитоле ! Сигнал с руля смотрел стабильный без дребезга , притом когда тестил вынес магнитолу подключил всё работало гуд но пока устанавливал закручивал она остыла и начинались эти тацы . Кто что подскажет? МК или ЛМ могут так реагировать на температуру ? Прошу прощения у модераторов за повторение теми (может в этом разделе будет актуальней)
    • By Splav
      Речь пойдет о таймере цикличного включения вентиляции гаража.
      Стояла задача обеспечить принудительную вентиляцию гаража.
      Оставлять включенным вентилятор круглые сутки - неоправданно.
      Включать его периодически вручную... Неудобно и лишено смысла.
      Поэтому было решено включать его на определенное время через разные интервалы времени, в зависимости от субъективного восприятия наличия сырости в гараже.
      Вменяемых вариантов в продаже я не нашел.
      Можно, конечно, приобрести на Али программируемый суточный таймер или что-то подобное...
      Да, можно, но мне кажется, что собрать из подручных деталей тоже можно, ну и мозги потренировать.
      За основу был выбран PIC12F675, потому что он у меня был.
      По уму здесь должен стоять PIC12F629, он дешевле, в нем нет АЦП, который в конструкции не используется и отключен.
      Итак.
      Время работы выбрано фиксированным и неизменным - 1 час.
      Время простоя - в зависимости от режима.
      1 час - 2 часа - 3 часа.
      (Изначально я планировал другие задержки: 2-3-5 часов. На практике в моих гаражных условиях эти интервалы оказались слишком большими)
      Индикация осуществляется всего 1 светодиодом.
      Переключение режимов и управление - всего 1 кнопкой.
      Схема:

      Коротко о работе:
      Кнопка.
      Опрос кнопки 10 раз в секунду. Антидребезг и подавление помех 0,3с - 3 опроса подряд кнопка нажата.
      Короткое нажатие на кнопку(от 0,3 до 2 с) - переключение режимов по кругу. 1 - 2 - 3 - OFF - 1 - 2 -  ....
      Длинное нажатие на кнопку (дольше 2 с) - смена состояния реле.
      Если оно было включено - выключается.
      Если было выключено - включается. Интервалы работы реле при этом соответствуют режиму.
      В режиме OFF длинное нажатие ничего не меняет.
      Переключение режима или смена состояния реле происходят при отпускании кнопки.
      Светодиод.
      Индикация режимов светодиодом:
      1 - 1 раз в 2 секунды загорается, если реле не включено. Проблеск света.
            1 раз в 2 секунды гаснет, если реле включено. Проблеск тени.
      2 - 1 раз в секунду загорается, если реле не включено.
            1 раз в секунду гаснет, если реле включено.
      3 - 2 раза в секунду загорается, если реле не включено.
            2 раза в секунду гаснет, если реле включено.
      OFF - загорается раз в 5 секунд. Контроль того, что МК не завис.
      Режимы работы.
      Время работы циклического таймера по режимам:
      1 - 1 час работы / 3 часов отдых. 6/24
      2 - 1 час работы / 2 часа отдых.  8/24
      3 - 1 час работы / 1 часа отдых.  12/24
      Работа.
      При отключении питания, пока не разрядились конденсаторы фильтра, МК отключает все выходы, сохраняет текущие данные в память, ждет 15 сек в таком состоянии и возобновляет работу, если отключение было кратковременным и емкостей фильтра питания хватило.
      Если отключение питания было длительным то, при возобновлении питания, загружает сохраненные данные из памяти и продолжает работу.
      При первом включении, после программирования МК, устройство работает в 1-ом режиме.
      Программа писалась в MPLab X IDE v4.05.
      Прошивка:fan_cycle_timer.hex

      Плата для устройства не разрабатывалась. Все было собрано на макетке.
      В блоке питания использован стандартный трансформатор для монтажа на плату ТПК 2х9V с 2-мя вторичными обмотками на 9В.
      Использовал только одну из них. Вторая - не подключена, в "воздухе"
      Реле - HLS-14F1D-DC12V-C. С обмотка на 12В, и одной группой переключающих контактов на 10А/240VAC.
      Устройство собрано в корпусе щитка для автоматов на 8 модулей. Производитель VIKO.
      Закреплена плата на щиток через резьбовые дистанционные втулки с резьбой М3.
      В качестве вентилятора - вытяжной вентилятор диаметром 125мм ВЕНТС 125С
      Устройство на данный момент отработало в гараже все лето, температура воздуха в тени доходила до 32 градусов.
      Перегревов элементов и зависаний контроллера пока не было.
       
      Несколько фото для общего представления о конструкции.

×
×
  • Create New...