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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

#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 пользователей онлайн

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

  • Сообщения

    • @READART Конкретно с LOGO не сталкивался, но у всех других, с кем сталкивался, программа всегда лежала во флеше. Да и хранить именно програмный код в энегозависимой памяти просто нелогично. Ионистор, скорее, может использоваться для отработки отключения питания, что-бы программа штатно могла завершиться, сохранив свое состояние.
    • А тема офигенно интересная. Рассуждать логически, в варианте А в среднем проводнике тока вообще практически нет и он нафиг не нужен. Во втором варианте по этим двум проводникам фигачит полный ток туда и обратно. Если хорошо свить, то по помехам одно...нно, только омические потери.  Дальше однозначного понимания у меня тоже нет. Я не выдающийся математик, мне нужен эксперимент. Например попробовать разорвать средний провод. Посмотреть куда подключены остальные цепи. Возможно у БЖТ асимметрия. Посмотреть как идут крайние провода обмотки, возможно раздвоенный средний компенсировал помеху от крайних.  ......  Не надо в подушку плакать, просто не нужно лезть с сегнетоэлектрикой в (калашный) звуковой ряд. Только не забывать про тоненькие дорожки к ним на ПП, если вдруг их приходится делать, или дилетанты наделали. А так да, отсутствие выводов большой плюс. Особенно когда занимаешься полосковой технологией.
    • Да схема самая обычная, без всяких пиэфси . Вот примерная.  Но блочок все равно не заработал, при превышении нагрузки 50 ватт происходит перекос плечей и выброс. В одной клетке 50 вольт. Получается на одном плече 200 на другом 150.
    • @1960sae "Собирал когда то такой конструктор, запустился сразу....". блин. не могу управится с ним. все проверил. нашел пробитый конденсатор, поменял. питание от адаптера сделал 7,3в. регулятор четко 5,05 в держит. на ногах пика питание есть, на всех ногах тоже какая то напруга есть. ниче не греется, транзы холодные. но не работает и все. когда щупами проверял по выводам пика моргнули индикаторы один раз и все. осцилла нет. ума не приложу, интернет рою. пока нифига не смог победить. что смущает: по схеме (я выше здесь выложил) 8 резисторов (на индикаторы идут) по 220 ом, а в наборе они по 1 кОм (я их впаял).  может по прошивке другая частота запуска прописана, может с кварцем что не так. опыта не хватает, конечно, сообразить, куда рыть. буду перебором
    • Кто сказал? Откуда такие знания? Опишите механизм появления искаженного звука. Точно не надо.
    • Здравствуйте. Чтобы не открывать новую тему по примитивному вопросу. На фото выше справа вверху стоит ионистор. На этой плате никаких элементов памяти я не вижу, поэтому скорее всего питание с ионистора подается вверх - на плату с МК.   Правильно ли я понимаю, что ионистор нужен для хранения текущего времени, а рабочая программа хранится в eeprom или flash на плате с МК (или в кишках самого МК)? Вопрос связан с тем, что прежде чем чинить эту LOGO, надо знать, сохранилась ли в нем программа. А чтобы узнать, сохранилась ли в нем программа, надо иметь соответствующую приблуду. Приблуду можно сотворить и самому, но если программа все-таки хранится в sram с питанием от ионистора, то никакого смысла делать приблуду нет, как и чинить LOGO. Просьба просветить, кто в курсе месте хранения рабочей программы в siemens logo. LOGO само собой старый: 6ED1052-1MD00-OBA5  
  • Похожий контент

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