Зарегистрирован: Чт май 09, 2013 10:50:04 Сообщений: 135
Рейтинг сообщения:0
Использую Atmega8a. Из даташита стащил функцию отправки 8бит по USART. Всё работает нормально, в терминале на ПК символы приходят, но не могу сообразить как можно передать на ПК переменные типа integer?
Заголовок сообщения: Re: Как передать int по USART?
Добавлено: Вс апр 05, 2015 16:35:57
Встал на лапы
Зарегистрирован: Чт май 09, 2013 10:50:04 Сообщений: 135
Рейтинг сообщения:0
-=Vovka=- писал(а):
Например, так:
Код:
unsigned char x; unsigned int a;
x = a >> 8; // старший байт x = a & 0xFF; // младший байт
По такому же принципу можно передавать/принимать любую разрядность
В терминале будет всякая ерунда выводиться если так делать. Мне именно для терминала надо.
igor-x писал(а):
как вариант -передать в текстовом виде посимвольно : пример "123" три байта
Я понимаю что можно разбить число, но если цифры разные то как быть? например "1", "111", "555555555"? Получится какая-то сложная функция для преобразования сразу в unsigned char? Может быть есть готовые?
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Если я правильно понял условие, то просто преобразовать x в buf[5] не прокатит. Чтобы в терминале нарисовалось "12345" надо еще коды цифр в ASCII перевести, т.е. к номеру цифры добавить 0x30
_________________ Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Заголовок сообщения: Re: Как передать int по USART?
Добавлено: Пн апр 06, 2015 19:21:15
Встал на лапы
Зарегистрирован: Чт май 09, 2013 10:50:04 Сообщений: 135
Рейтинг сообщения:0
ARV писал(а):
вообще-то для этого есть функция itoa
Она принимает тип char, а мне нужен unsigned char. Как мне тогда преобразовать типы? В цикле каждый символ приводить к нужному типу uchr = (unsigned char)chr[i]?
вообще-то я не понял, что вы там натворили в коде... вам нужно получить строку из числа? itoa делает из числа строковое представление. после этого вам остается только вывести эту строку по USART. что у вас вызывает затруднения?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: Как передать int по USART?
Добавлено: Вт апр 07, 2015 09:04:52
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:2 Медали: 1
Ellissar писал(а):
Она принимает тип char
Ну вот откуда такие берутся, которые свои догадки выдают за реальность ? Ну неужели трудно набрать слово "itoa" в поисковик ? Первая же ссылка - https://ru.wikipedia.org/wiki/Itoa_(%D1%E8) Цитата из неё :
Цитата:
void* itoa(int input, char *buffer, int radix)
itoa принимает передаваемое целое число input и конвертирует его в число в основании корня radix. Полученное число (последовательность цифр основания radix) записывается в буфер вывода buffer.
Что тут может быть непонятного ? Русским по белому всё разжёвано.
Заголовок сообщения: Re: Как передать int по USART?
Добавлено: Вт апр 07, 2015 15:14:02
Встал на лапы
Зарегистрирован: Чт май 09, 2013 10:50:04 Сообщений: 135
Рейтинг сообщения:0
ARV писал(а):
что у вас вызывает затруднения?
Код для вывода по USART которым я пользуюсь:
Код:
void USART_Transmit( unsigned char *data, unsigned char sz) { cli(); for (unsigned char i = 0; i<=sz; i++) { /* Ожидаем когда буфер станет пустым */ while ( !( UCSRA & (1<<UDRE)) ); /* Поместить данные в буфер, отправка данных */ UDR = data[i]; } sei(); }
Здесь лучше заменить unsigned char на char и всё будет корректно выводиться в терминал? Я только учусь ещё и не знаю, может есть какие-то подводные камни если поменяю тип на char в этой функции.
Заголовок сообщения: Re: Как передать int по USART?
Добавлено: Вт апр 07, 2015 16:35:55
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Ellissar писал(а):
может есть какие-то подводные камни если поменяю тип на char в этой функции.
А Вы, когда писали в аргументе тип unsigned char, задумывались о подводных камнях ? Почему этот вопрос именно при переходе на char у вас возник ? Вы вообще в курсе чем они отличаются ?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения