roboforum.ru

Технический форум по робототехнике.

Преобразование int В char

Преобразование int В char

EasyTech » 06 янв 2012, 16:00

ПОмогите пожалуйста, напсал прогу для чтения температуры. на LCD всё работает. Решил отправить температу по уарту. Тут начались проблемы.
У меня есть функция для отправки данных по уарт.
Код: Выделить всёРазвернуть
void USART_SendChar(unsigned char sym)
{
  while(!(UCSRA & (1<<UDRE)));
  UDR = sym;
}

и есть переменная содеражащая температуру:
Код: Выделить всёРазвернуть
uint16_t temp;

Пишу я в while(1) такую шнягу.
Код: Выделить всёРазвернуть
if (symbol == 't') {USART_SendChar((char)temp);}

МК не шлёт эту команду. Я не знаю как быть, мне кажется что я не правильно перевожу переменную int в char :(
Может как то через указатели сделать, дайте пожалуйста просто совет.
И вообще как числа (не char) посылать по уарту ? а то много проектов стоит из за этого.

Добавлено спустя 3 минуты 30 секунд:
И вот ещё, можно ли давать МК обрабатывать сразу несколько команд(обработка температуры, вольтметр, прием команд по уарт и т.п.) или нужно ставить для этого rtos или какую нибудь событейную система (типо чтобы по очереди обрабатывалось всё).
Последний раз редактировалось EasyTech 06 янв 2012, 21:23, всего редактировалось 1 раз.

Re: Некие проблемы

Duhas » 06 янв 2012, 19:56

про детали типов на Си вам расскажут другие лучше меня, а вот чтобы выполнять много мелких задач не надо чего-то ставить, надо включить мозг и разобраться как работает МК, а следом - написать программу которая все это делает..

Re: Некие проблемы

Romikgy » 06 янв 2012, 20:00

если есть в протеусе ... выкладывай ... с исходниками конечноже

Re: Некие проблемы

Scorpio » 06 янв 2012, 20:05

А каким компилятором пользуешься? Вот тут http://proavr.narod.ru/z5.htm посмотри.

Re: Некие проблемы

Myp » 06 янв 2012, 20:18

для начала неплохо бы зашить в МК чисто программу которая отсылает обратно то что получает по усарту.
тогда ты убедишься что у тебя оно вобще работает и всё правильно инициализированно и провода не перепутаны

Re: Преобразование int В char

EasyTech » 06 янв 2012, 21:26

на Американском сайте ответили мне :)
Сказали использовать itoa();
проверил :) работает :) :D

Re: Преобразование int В char

Aseris » 06 янв 2012, 23:37

Так эт не в сhar Itoa... адрес переменной в си берется "&переменная"... а как ты передаешь 2 байта 1 ... это отдельный вопрос...

Re: Преобразование int В char

EasyTech » 07 янв 2012, 10:54

Aseris писал(а):Так эт не в сhar Itoa... адрес переменной в си берется "&переменная"... а как ты передаешь 2 байта 1 ... это отдельный вопрос...

int8_t. problem?))

Re: Преобразование int В char

Aseris » 07 янв 2012, 16:28

А это уже экзотика.. и не ANSI C ...

есть

CHAR/BYTE int8/uint8 1 байт
int/WORD int16/uint16 2 байта
long/SWORD int32/uint32 4 байта

Я так понял, задачей было перевести бинарное значение в строку...

Re: Преобразование int В char

EasyTech » 08 янв 2012, 10:55

Aseris писал(а):А это уже экзотика.. и не ANSI C ...

есть

CHAR/BYTE int8/uint8 1 байт
int/WORD int16/uint16 2 байта
long/SWORD int32/uint32 4 байта

Я так понял, задачей было перевести бинарное значение в строку...

Да, кстати и не надо было писать int8_t. функция itoa(); спокойно переводит в char любое целое число не важно long long или short, или int :)
Правда не переводит числа с плавающей точкой, обидно. там уже нужна функция sprintf();
Я вот что хотел спросить. ПОдскажите пожалуйста хорошие алгоритмы или протоколы передачи данных по уарт.

Добавлено спустя 31 секунду:
и вот что лучше, как вы думаете... использовать crc8 или modbus?

Re: Преобразование int В char

elmot » 09 янв 2012, 11:03

crc8 - это не протокол, а алгоритм подсчета контрольной суммы. Можно применять как детектор искажений передачи и часть протокола.
А для чего протокол-то? Стоит ли городить совместимость со сложными протоколами? Лично я сам для себя использую модем-подобный протокол (AT).

Re: Преобразование int В char

Aseris » 12 янв 2012, 02:56

EasyTech писал(а):Правда не переводит числа с плавающей точкой, обидно. там уже нужна функция sprintf();


А в чем проблема передавать бинарное значение и интерпретировать его на второй стороне?

Напр передать значение типа DWORD

DWORD a;

a=0x12131415;

UART_Send((BYTE*)&a,4); // передача битового массива первый аргумент адрес масива, второй размер..
так же передаем хоть флоат, тока интерпретируем потом правильно и размер пишем правильно.

В чем сложность то?

Или тему переименовать нужно преобразование числа в строку? int to string например, ибо в сhar помещается 1 символ, СИМВОЛ


Rambler\'s Top100 Mail.ru counter