-
Постов
2 048 -
Зарегистрирован
-
Посещение
-
Победитель дней
1
Тип контента
Профили
Форумы
Блоги
Весь контент tifaso
-
@bulat943,@korsaj Я так сейчас посмотрел и понял что тут ещё как завязана и эта таблица аски. Так что завтра буду пробовать дорабатывать свой код. Как только получится адекватно выводить всё полученные цифры можно уже будет продвигаться далее.
-
Самое то интересное я же пробовал сперва просто вывести напрямую содержимое массива на дисплей и оно выводит правильно, но когда начинаешь переводить число в десятичное и затем уже вывести, то тут уже на дисплее совершенно не то что хотел увидеть получаешь. Вот потому тут нужно понять как числа правильно переводить в десятичные. Чтобы и на дисплее потом правильно отобразилось и для дальнейшего пересчёта в случае с временем тоже.
-
я нигде не говорил что надо умножать на такое большое число,надо умножить на 16 Вот статья где говорится что нужно работать со степенями при переводе чисел с одного значения в другое, а 16 в степени как раз таки и получается что у меня в коде. Не будет оно так работать. Ведь в массиве hex число, а там могут появится и буквы и как тогда ты действовать будешь?
-
С этим без объяснений и подробнейших комментариев что и куда девается и откуда что берётся не разберёшься никогда. @korsaj, @bulat943 По поводу функции перевода попробовал записать, но ожидаемого результата я так и не получил. Вроде бы ничего сложного всё должно быть как то так, но оно по неизвестной причине не работает. Портянки под спойлер прячь
-
Ну всю логику написания понял. Завтра на свежую голову буду уже писать код, но никак не сейчас в 2 часа ночи.
-
В общем понятно тут уже как в этой статье действовать нужно при написании кода пересчёта.
-
А точно я как то и упустил это.
-
@bulat943 Теперь то всё вроде бы понятно стало. только почему восьмое число (1) так и остаётся без умножения? Тут есть какие то исключения что ли? Сразу всё это прояснить нужно чтоб пересчёт проводился правильно.
-
Кому как удобно, но я как называл их числами так и буду. Но так давай всё же по делу. А то всё около да рядом, а как перевести эти HEX числа в десятичные никто сказать не может.
-
Да сколько можно говорить что это именно hex число и никак иначе. Там могут быть разные числа "00000091" "00000C2E" "0000008D" "0000008C" "000000B2" и любые другие, но длинна строки всего числа всегда одна. Но всё же кто нибудь скажет как делать перевод этих hex чисел в десятичные?
-
Ну и зачем оно мне. Я принимаю от плеера вот такое вот hex число "00000091" по итогу то получится "145" это в десятичном виде. Мне числа нужно получить именно вот в таком формате. затем в некоторых случаях потребуется это число ещё дополнительно пересчитать и вывести на дисплей уже в некотором пересчёте так как там хранятся и данные о времени длины трека и другие цифровые данные. Так же десятичные числа нужны в самом микроконтроллере. Так как именно на них практически всё и основывается при работе с самим плеером.
-
Ну и толку то от этого что было то и получилось "00000091". это как было hex число так и осталось. Хорош уже круголями водить и увиливать от вопроса. Ответьте уже наконец как перевести hex число в десятичное? Правильного то десятичного числа так и не получилось. Ведь к примеру из этого hex числа "00000091" должно по итогу то получится "145" вот так вот, но как это сделать это ещё тот вопрос.
-
Я наоборот стараюсь отойти как можно дальше от ассемблера на си проще будет сделать в любом случае. В ассемблере заблудишся тут же. Я по справочнику один проект кое как переправил как мне нужно и всё. Пульт с приёмником когда делал. А так бы и вовсе в ассемблер не полез никогда. А где ты давал то чего то я не помню такого уже.
-
@bulat943 Из плеера то приходит именно hex число "00000091" может это и строка, но она содержит в себе hex число. Тебе то должно быть это известно раз ты с этими модулями уже работал. А теперь всё же порядок дальнейших действий хотелось бы узнать. Как дальше переводить hex число в десятичное?
-
@korsaj Ну ладно давай попробуем твой вариант решить. Возьмём строку, а точнее hex число "00000091". После перевода получится следующее "48 48 48 48 48 48 57 49". Только теперь что это даёт? Как дальше действовать?
-
Вообще замучился уже с этим. Уже с неделю сижу пытаюсь решить вопрос с переводом чисел их hex в десятичные. Все варианты которые я пробовал так и не заработали либо какие то ошибки либо вообще не работает. Мне нужен какой нибудь адекватный вариант перевода чисел, но пока что ничего не получается найти.
-
Смотря ещё какие библиотеки если это стандартные из пакета студии, то скажите просто что тут нужно подключить. А сторонние я ставить не буду.
-
Вот пожалуйста смотри.
-
Вот этот код ты предлагал. Я пробовал его он сплошные ошибки бьёт буквально на каждой строке. Не знаю даже что ещё пробовать.
-
Пробовал уже. Многодневные поиски ни к чему не привели. Собственно поэтому и спрашиваю как это сделать?
-
С числами тут всё намного сложней. 00000091. Как по калькулятору показывает 145 что и является правдой. Я знаю что я туда заслал и что должен получить, но числа то каждый раз разные. Поэтому тут прям в программе нужно высчитывать при переводе из hex в десятичное. Как преобразовать шестнадцатеричную систему в десятичную. Другого варианта я не вижу. Потому как в таблице далеко не все значения есть особенно на числа. Наверняка может и есть способы попроще это сделать, но больше ничего не знаю.
-
@korsaj tifaso там написано ну и смысл от этого. Ты мне хоть функцию подскажи как написать чтобы делать перевод чисел программно. От этого хоть польза будет, а не этот ребус, которым время лишбы занять и своё и моё.
-
@korsaj Это то понятно что таблицей нужно переводить. Но как это сделать кодом? Вот в этом и заключается вопрос. Каким образом код писать на эту функцию?
-
И всё же как не крути, а я всё равно стопорюсь на выводе чисел полученных по UART. К примеру приходит по UART следующее M2+00000091. Тут понятно что мы при получении обрабатываем принятые данные M2 это тип данных. Это уже нам известно. далее сами данные в виде hex числа 00000091. Это число нужно взять из массива как видно оно не с самого начала массива расположено и перевести в десятичное и только после этого с ним можно будет уже работать. Если это число времени трека, то там нужно ещё провести расчет на то чтоб из полученного десятичного числа высчитать минуты и секунды. Мне просто сейчас нужно понять каким образом вывести числа в нужном виде?
-
Да сейчас посмотрел. Вполне достаточно задержки _delay_us(1); Нет порядки не попутаны всё чётко. При выводе символа вызывается функция send_byte там и указан весь порядок отправки данных. void write(uint8_t n) { n<<=4; E1; //линию Е в 1 LCD_PORT&=~DATA; //удалить предыдущую отправку LCD_PORT|=n; //выставить значение на пины управления дата битами _delay_us(1); E0; //линию Е в 0 } void send_byte(uint8_t byte, uint8_t tip) { if (tip) //если тип данные на линии RS 1 { RS1; } else //иначе тип команда и на линии RS 0 { RS0; } write(byte>>4); //передача старшего полубайта _delay_us(250); write(byte); //передача младшего полубайта _delay_us(250); } Главное что всё это уже работает, а большего и не нужно.