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

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


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

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

а не пробовали строку на две части поделить,сделать выравнивание до половины количества символов?просто после первого столбика не писать завершение строки и все.

сделать вроде этого,только почитать про функцию printf в интернете и добавить заполнение строки до половины экрана

printf("%dC°  ", temperature);printf("%4d°\n",angle);

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

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

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

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

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

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

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

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

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

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

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

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

Подскажите пажалста.

Компилятор mikroc. Подключаю pic18f452 к дисплею мт-12864. Нашел на сайте производителя тестовую программу для запуска дисплея, доделал ее для этого мк, неделю промучался ничо не получалось, потом нашел соплю на плате, исправил, еще два дня промучился xD, потом загнал проект в протеус и увидел много коз) Пересмотрел проект, принцип его такой: отправляя на индикатор байт за байтом, мк каждый раз опрашивает индикатор готов ли он принять следующий байт. Для этого нужно перенастраивать каждый раз порт то на ввод то на вывод. Переделал программу - убрал опрос индикатора, поставил место них задержки - все заработало.

Вопрос. Как я все время думал за настройку порта ввод\вывод отвечает регистр TRIS (TRISx=0 вывод TRISx=0xFF ввод). Вначеле программы это работает. получается настроить его или туда или сюда(в протеусе порты, по крайней мере, становятся или серые или синие). А вот изменить это потом не получается, к примеру вот такой цикл не работает:

while(1){
  portc=0;         //все пины на 0
  trisc=0;         //порт на вывод
  delay_ms(2000);  //задержка 2 секунды
  trisc=0xFF;         //порт на ввод
}

Я вот хочу что бы этот порт в протеусе менял каждые 2 секунды конфигурацию ввод\ввывод становился то серым то синим. что не так?)))

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

Все свои проекты я тестирую на плате контроллера PIC32MX от CedarLab.

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

что не так?)))
Наверное то, что время между

trisc=0xFF;         //порт на ввод

и

trisc=0;         //порт на вывод

очень маленькое, и Вы просто не замечаете переключений.

У Вас получается, что порт всегда настроен на вЫход, за исключением пару тактов.

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

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

такой тогда вопрос. Ведь 0xFF = 255 = 0b11111111 = 1 почему TRISx=0xFF настраивает порт на ввод, а TRISx=1 не настраивает..Ведь TRISx=0 настраиват порт на вывод. как раз в проге с индикатором я писал просто 1, поэтому видимо и не работал опрос статуса..надо проверить

Все свои проекты я тестирую на плате контроллера PIC32MX от CedarLab.

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

переписал прогу и действительно - пишу 0xFF все работает, пишу просто 1, не работает и летят козы.

mikroC for pic Version 8.2.0.0

Все свои проекты я тестирую на плате контроллера PIC32MX от CedarLab.

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

компилятор MikroC

Создаю массив:

const char symbol[4] = {'А', 'а', 'Б', 'б'};

Не воспринимает кирилицу. С латинскими буквами все нормально. Как сделать, что бы воспринимал русские?

Текст ошибки:

g:/dropbox/Мк\Изернет/sdlcd/text.c:3: warning: Illegal multi-byte character sequence "'" in quotation

const char symbol[4] = {'А', 'а', 'Б', 'б'};

0,0x80,0x80,0x80,0x80,0x80,0xFF

from G:/Dropbox/Мк\Изернет/SDLCD/SDandLCD.c: 3: #include "text.c"

g:/dropbox/Мк\Изернет/sdlcd/text.c:3: warning: Illegal multi-byte character sequence "'" in quotation

const char symbol[4] = {'А', 'а', 'Б', 'б'};

0,0x80,0x80,0x80,0x80,0x80,0xFF

from G:/Dropbox/Мк\Изернет/SDLCD/SDandLCD.c: 3: #include "text.c"

Все свои проекты я тестирую на плате контроллера PIC32MX от CedarLab.

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

гм..как-то это все очень странно) нашел обсуждение на официальном форуме про эту проблему http://www.mikroe.com/forum/viewtopic.php?f=88&t=22519&p=139715&hilit=russian#p139715 пишут, что решения нет и не планируется..Я проигнорировал эту ошибку и увидел, что на самом деле все работает)

Все свои проекты я тестирую на плате контроллера PIC32MX от CedarLab.

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

Двигаемся, двигаемся дальше..жену заставил библиотеку символов писать, сам решил другими функциями занятся. Хочу сделать функцию рисования прямоугольника с параментром скругления углов. Сейчас есть это:

void rectangle(int x, int y, int width, int height, int rounding) { //координаты XY верхней левой точки, длина, ширина, величина скругления
   int i;    
   for(i=x+rounding; i<=x+width-rounding; i++){ //верхняя сторона
      Pset(i, y, 1);  //функция рисование одной точки
   }
   for(i=x+rounding; i<=x+width-rounding; i++){ //нижняя
      Pset(i, y+height, 1);
   }
   for(i=y+rounding; i<=y+height-rounding; i++){ //левая
      Pset(x, i, 1);
   }
   for(i=y+rounding; i<=y+height-rounding; i++){ //правая
      Pset(x+width, i, 1);
   }    
}

пишем код:

rectangle(5, 5, 110, 50, 6);

получаем такое:

post-101747-0-80543300-1333908876_thumb.jpg

Никак не могу придумать формулу для рисования самого скругления..никому ничего в голову не прийдет?)

Все свои проекты я тестирую на плате контроллера PIC32MX от CedarLab.

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

поприсовав в этой программке, решил, что никаких формул выдумывать не надо и для таких размеров имеет смысл сделать всего два вида скругления с отступом в 3 клетки и 6 клеток:

post-101747-0-58947600-1333982895_thumb.jpg

для большого скругления левого верхнего угла координаты X точек от левого ыерхнего края получаются x+5 x+4 x+3 x+2 x+2 x+1, а y в обратном порядке y+1 y+2 y+2 y+3 y+4 y+5

для праого верхнего угла координаты x получаются x+длина-5 x+длина-4...y тот же

для левого нижнего X как левого верхнего, a y y+высота-1...

для правого нижнего X как у правого верхнего, а Y как у левого нижнего.

Соответственно был составлен массивы с координатами для маленького и большого скругления:

const char round2[7] = {5,4,3,2,2,1,1};   //скругление 2
   const char round1[2] = {2,1};             //скругление 1

и два цикла для рисования точек по этим массивам(можно было сделать один, но я не стал заморачиваться)

полный код функции:

void rectangle(int x, int y, int width, int height, int rounding) {
   int i,q,indent;         //для цикла, для цикла, отступ
   const char round2[7] = {5,4,3,2,2,1,1};   //скругление 2
   const char round1[2] = {2,1};             //скругление 1
   if(rounding==1){                          //скругление 1
       indent=3;                             // отступ сторон
       for(i=0; i<2; i++){                   //цикл рисования скругления 1
           Pset(x+round1[i],y+round1[1-i],1); Pset(x+width-round1[i],y+round1[1-i],1); 
           Pset(x+round1[i],y+height-round1[1-i],1); Pset(x+width-round1[i],y+height-round1[1-i],1);       
       }         
   } 
   if(rounding==2){                     //cкругление 2
       indent=6;
       for(i=0; i<7; i++){
           Pset(x+round2[i],y+round2[6-i],1); Pset(x+width-round2[i],y+round2[6-i],1); 
           Pset(x+round2[i],y+height-round2[6-i],1); Pset(x+width-round2[i],y+height-round2[6-i],1);       
       }        
   }
   if(rounding!=1&rounding!=2)indent=0;     //если параметр не 1 и не 2, то отступ сторон 0

   for(i=x+indent; i<=x+width-indent; i++){    //рисование верхней стороны
      Pset(i, y, 1);
   }
   for(i=x+indent; i<=x+width-indent; i++){     //нижжней
      Pset(i, y+height, 1);
   }
   for(i=y+indent; i<=y+height-indent; i++){     //левой
      Pset(x, i, 1);
   }
   for(i=y+indent; i<=y+height-indent; i++){    //правой
      Pset(x+width, i, 1);
   }
}

код вызова:

      rectangle(5, 5, 110, 50, 2); 
      rectangle(15, 15, 35, 25, 1);  

результат:

post-101747-0-46293600-1333984470_thumb.jpg

была идея, что бы вариант скругления сам выбирался в зависимости от размеров прямоугольника и что бы в вызове функции писать только TRUE или FALSE по скруглению..но я подумал, что слишком уже много времени я уделил этой функции)

Как думаете вообще комунибудь когданибудь пригодится то что я здесь написал и вообще ничо страшного, что я здесь сам с собой общаюсь?))xD

Все свои проекты я тестирую на плате контроллера PIC32MX от CedarLab.

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

Прикольная тема.

могу только посоветовать расчитать геометрически точку центра закругления.и сделать функцию рисования четверти круга.

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

Доброго времени суток.

Компилятор PIC C Compiler, микроконтроллер PIC12F629. Следующий код:

void main()
{

  output_high(PIN_A1);
  output_low(PIN_A2);

  while(TRUE)
  {
    output_toggle(PIN_A1);
    output_toggle(PIN_A2);
    delay_ms(200);
   }
}

По задумке светодиоды на А1 и А2 должны мигать поочередно, чего не происходит: "моргает" только с\д на PIN_A1, PIN_A2 "горит" все время. Почему это происходит? Это связано с особенностями аппаратной реализации микроконтроллера, или все-таки со спецификой использованных библиотечных функций? Буду, кстати, премного благодарен за отсылку на толковый справочник по этим функциям.

С уважением.

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

Здравсте.

Подскажите функцию , и есть ли она в MicroC for Pic (pic16f84) для выставления скважности ?

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

JohnQuincy я просто не знаю, что за функции в твоем компиляторе output_high, output_low и output_toggle, но вообще алгоритм такой:

что б работать pina1 и pina2 нужно отключить компараторы и настроить их цифровыми выходами, а потом что-то подавать на них. Даташит http://www.microchip.ru/files/d-sheets-rus/pic16f62x.pdf

Инженер!Туленков А цель-то вообще какая?

Все свои проекты я тестирую на плате контроллера PIC32MX от CedarLab.

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

прочитал про этот драйвер. тебе нужно написать обычный ШИМ. Алгоритм такой:

Настраиваешь таймер на нужное число в пике.

Включаешь прерывание по переполнению его.

далее такая конструкция:

прерывание{
  i++;
  if(i==q){ 
     porta.f1=1; //1 на драйвер  
     delay_us(1); //сколько держать 1 на драйвере
     porta.f1=0; //0 на драйвер
     i=0; 
  }
}

изменяя переменную q можно управлять скоростью двигателя.

если чо, извините, поправьте, ШИМ давно не настраивал))

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

Все свои проекты я тестирую на плате контроллера PIC32MX от CedarLab.

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

Книга вообще какая-то была, я натыкался на нее в интернете, но я ей не пользовался ниразу. В комплекте компилятора есть куча всяких примеров. Есть справка по библиотекам в которой на каждую функцию по примеру есть с комментами(правда на английском). Я когда начинал изучать МК все с этого смотрел. Где чо не понятно - тут на форуме спрашивал.

Все свои проекты я тестирую на плате контроллера PIC32MX от CedarLab.

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • Зачем выводить очередной разряд индикации в прерывании? Процессы вывода на индикацию и считывания клавиатуры - медленные процессы. В моей концепции: войдите в подпрограмму обслуживания индикатора, сделайте делитель на 2 и получите 2 мс на разряд, в этой же подпрограмме выведете очередной разряд на индикатор, и не надо отрывать время процессора на обработку прерывания. Для вывода на индикацию тогда вообще не нужно прерывания. Аналогично для кнопок. В моей концепции нужно лишь одно прерывание для таймера. Прерывания с обработкой в прерывании нужны в основном для УАРТА, для безпаузной передачи / приема на высоких скоростях. Ну может быть и2с или спиай, там тоже нужна высокая скорость обработки. вторичные таймеры / счетчики также прекрасно вписываются в предложенную концепцию. Самый большой ее плюс, то что время на прерывание минимально для медленных задач, и отсутствуют конфликты прерываний. А впрочем... у каждого свой путь... А зачем в блоке питания так часто измерять напряжение и ток, если это вывод на индикацию, то там и десяти измерений в секунду за глаза хватит. Резких скачков всеравно не отследить, выходной конденсатор все сгладит.    
    • Клещи, которые могут измерять постоянный и переменный ток, в том числе действующее значение TRUE RMS пульсирующего тока. Или как в статье, стрелочным прибором магнитоэлектрической системы. Наверное так, если для аккумулятора. 12.pdf RMS
    • Да точно, по этой схеме тут другая половинка R9/R10/R11 за напряжение отключения и R8/R12 за порог включения. На вторую половину компаратора сигнал от терморезистора приходит.
    • Хотел предложить купить что то готовое: типа такого - https://aliexpress.ru/item/1005002210385012.html .  Ведь пульт есть, AUX  и русский язык в наличии и мучиться не надо. Но боюсь экранчик маловат.  
    • Так он же пишет- Не пойму-зачем здесь  send_UART(0x0D); send_UART(0x0A); ведь надо отправлять  \ r \ n send_UART(0x5C); send_UART(0x72); send_UART(0x5C); send_UART(0x6E);  
    • Ток в выходной цепи тиристорного ЗУ - импульсный, однополярный, т.е., Direct Current (DC). Он характеризуется не одним параметром, а несколькими. Разные приборы просто показывают разные параметры, в зависимости от их схемы измерения. И конечно, надо измерять в режиме DC, постоянного тока, а не переменного. Переменным вы аккумулятор не зарядите. С целью контроля залитых ампер-часов нужно измерять средневыпрямленный ток, а не тру рмс. С целью контроля нагрузки на провода и теплового действия тока в аккумуляторе - тру рмс. А еще существует и амплитудное значение тока, которое может быть в несколько раз выше действующего. Представляю вашу реакцию, когда вместо 0,6 А вы увидите 6 ампер )) Короче, первые две картинки с точки зрения средневыпрямленного значения, скорее всего, верны
  • Похожий контент

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