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

Вопросы от начинающих по МК


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

  • Ответов 8,9т
  • Создана
  • Последний ответ

Топ авторов темы

Как например unsigned char = 0b00001010; преобразовать в int и послать в SerialPort. У меня получается посылать только как ASCII символ например UDR0 = ‘1’;
Остальные вариации выводят квадратики. Как в данном случае 10 вывести в сериал порт?

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

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

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

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

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

А с чего вдруг будут отображаться как символы коды, которые этими символами не являются. Преобразуйте 16-разрядный int в набор СИМВОЛОВ той формы представления, которую Вы хотите получить и тогда увидите искомое. Обычно в библиотеках этим занимается printf.

Чтобы увидеть 10, нужно вывести ASCII символ "1" и ASCII символ "0". Разница между ASCII символом цифры и ее количественным значением фиксирована. Смотрите таблицу - все цифры идут подряд.

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

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

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

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

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

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

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

@serega374 как то так 

void Send_hex(char a) //  Перевод и отправка НЕХ числа в ASCII кодировке
    {
	  char b;
	  b=a>>4; if (b<10) b+='0'; else b+='7'; Send_UART(b);
	  b=a&0x0F; if (b<10) b+='0'; else b+='7'; Send_UART(b);
    } 

 

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

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

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

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

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

Есть ли стандартная функция преобразования типов переменных.
Например в консольном приложении я делаю так

#include using namespace std;int main() {char a =0b00001010;int b = a;coutreturn 0;}


И вывожу «10» но для МК это не работает:

char a =0b00001010;int b = a;


И я уже пол дня бьюсь ищу в интернете как правильно типы переменных менять но что то толку пока нет. Мне это надо что бы отладку делать пытаюсь освоить I2C и нужно что то сыпать в сериал, а он сыплет квадратики, Только если как символ посылать отображает, а мне охота значение переменной смотреть считанной с другого устройства часов, еепрома и тд

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

4 часа назад, serega374 сказал:

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

@serega374 Число b=10 - это один байт. На мониторе строка "10" - это два байта, первый '1' и второй '0'. Вот и надо посылать в SerialPort эти два байта.

 

Для этого нужно преобразовать число в строку.

Определяем сначала - сколько десятков в числе.

d = b / 10

Получаем d = 1. Преобразовываем d в ASCII код  и посылаем

UDR0 = d + '0'

Затем вычисляем - сколько единиц в b

d = b % 10

Получаем d = 0. Преобразовываем d в ASCII код  и посылаем

UDR0 = d + '0'

 

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

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

@serega374 , скачайте себе какую-нибудь терминальную программу, с возможностью выбора способа вывода принятой информации - их много всяких. Чтобы ничего не рекламировать: https://yandex.ru/search/?lr=11230&clid=2236986&win=230&text=терминальная программа для com порта

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

Получаю температуру с DS3231 целую часть из 0х11 вывожу в UART затем посылаю точку. И она если перед её посылкой _delay_ms(100); не поставить не выводится в UART.
Ещё вопрос получаю дробную часть температуры из 0x12 она хранится в7и 8 байте.

unsigned char TempData=TWDR;
int CurrentTemp=(TempData&0b11000000)
switch (CurrentTemp)
case 0:
Посылка в UART ‘0’ ‘0’
case 1:
Посылка в UART ‘2’ ‘5’
case 2: ‘5’’ 0’ case 3: ‘7’’5’

Я как понял CurrentTemp будет либо 00 либо 01 либо 10 либо 11. Что соответствует сотым частям температуры с кратностью 0.25. Верно ли я switch case составил, у меня что то не то в Uart идёт не могу проблема в нем или во мне)

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

День добрый. Есть устройство на Atmega328p которое контролирует температуру в четырех точках  датчиками DS18B20, так вот в прототипной версии датчики подключены проводами от мышки, и того что попало под руку. Все работает почти идеально, изредка давая сбои по датчикам (на логику работы не влияет). Собрал второй прибор, подключил датчики, но в этом случае взял обычный многожильный(одиночный) провод нарезал три куска и скрутил их вместе дрелью, получив приемлемый для меня дешевый вариант 3-х жильного провода. Так вот в таком варианте (программный код один и тот же) много ошибок чтения показаний датчиков, в плоть до того, что при подключении 4-го датчика идут одни ошибки. Вопрос собственно, кто нибудь может знает какие нибудь особенности, требования к проводам или еще какие хитрости для увеличения стабильности чтения данных с датчиков. Длины проводов где-то около 1,5м на каждый датчик. Блок питания TSP-05 c алиэкспресс питает датчики ,контроллер, дисплей 2004 , по мультиметру выдает стабильно 5В.

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

Как запитаны DS? Паразитно или напрямую? Судя по тому что 3 провода - напрямую, но всё же уточню. Делал когда то витой парой, метров 30 точно было, ошибки были, но не много, правда один датчик только на шине был. Когда то находил рекомендации по 1wire тянуть витой парой, данные + земля, пиатние + земля. То есть получается две косы, по одной земле в каждой. Может питания проваливается, попробуйте возле каждой ds по конденсатору на 100 нан хотя бы. Какой номинал подтягивающего резистора? Может там проблема? Ещё, чисто из моего опыта, если адреса ds определять на ходу на шине, то при длинных линиях этот алгоритм у меня стабильно не особо работал, я правда этим сильно не заморачивался, но с первого взгляда, алгоритм определения адрес сам по себе муторный...

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

Все верно, DS запитаны на прямую. Резистор 4,7кОм, пробовал уменьшать, подымать в пределах 1кОм не помогает. Алгоритм таков: сначала я запоминаю адрес каждого датчика по отдельности в память мк. Затем в цикле  1 раз в сек. захожу  и делаю опрос последовательно каждого датчика на получение температуры, ну далее идет сравнение и дальнейший алгоритм. В конце всего этого посылаю команду на конвертацию всех датчиков с пропуском идентификации SKIP ROM, через секунду цикл повторяется. Разрядность датчиков установлена в 11бит. Есть прерывания по Int0, но там все быстро, зашли увеличили счетчик и вышли. Провода на датчики 0,5мм2, то что было под рукой, по плате натыканы конденсаторы по питанию на 100нан. неужто просадка может на датчике быть? После опроса я не проверяю байт CRC, считываю только данные , если пришли отличные от FFFF значит данные верны, нет -ошибка. В итоге подключая в систему четвертый датчик происходит частое выкидывание ошибки, либо температуры 85 град. 

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

1 hour ago, Demonrostov said:

Есть прерывания по Int0, но там все быстро, зашли увеличили счетчик и вышли.

У меня при опросе датчиков шли прерывания от таймера и были ошибки. Запретил прерывания на время опроса датчиков, ошибки исчезли.

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

Пробуй конденсатор хотя бы в конце линии. Ну и витая пара, как писал выше. Вообще почему-то многие недооценивают надобность блокирующих конденсаторов.

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

Ранее выкладывал выходной каскад для работы с данным типом датчиков

https://forum.cxem.net/index.php?/topic/183682-датчик-ds-18b-20-при-отключении-иногда-продолжает-показывать-старую-температуру/&tab=comments#comment-2685080

основным элементом здесь является MAX6314 - т.к. называемая активная подтяжка (помогает линии быстрее подтянуться к лог.1). В конце линии (у последнего датчика) необходимо ставить диод 1N5817-1N5819 между GND и DATA.
Также надо запрещать прерывания на время передачи и приёма одного бита данных. Ну и CRC обязательно.

При отладке на длинной линии и работе на емкостную нагрузку пришлось поиграться задержками, в итоге всё работает уже более 15 лет без замечаний.

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

запрещать прерывания на время передачи и приёма каждого бита надо ОБЯЗАТЕЛЬНО! так как время тайм-слота строго ограничено.

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

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

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

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

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

2 hours ago, Demonrostov said:

С запретом прерывания надо мыслить, т.к. на него идет синхронизация с сетевым питанием, ну и далее управление симистором.

Делал терморегулятор с DS18B20 и выход на симистор через MOC3083, у него встроенная схема определения перехода через 0. На время опроса датчика отключал прерывания. Работает нормально.

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

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

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

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

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

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

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

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

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

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

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

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