ibiza11 писал(а):и? в чем проблема то? Вы привлекаете на тот форум?
Нет, ни кого я не привлекаю, дал ссылку для наглядности чего я хочу. Проблема в том что только начал изучать МК. программу для оброботки принятых данных написал, а вот как мне зашифровать, отправить, принять, расшифровать и разложить по переменным увы пока не разобрался. Вот и прошу помощи.
Спасибо.
нужно выбрать протокол обмена. Пусть будет UART (как у Вас в заголовке)
Но UART подразумевает обмен байтами, а Вам нужно передать пакет.
Вот и начните обдумывать состав пакета и характеристики передачи:
1) количество байт в пакете
2) последовательность байт в пакете (например: 0-скорость старший байт, 1-скорость младший байт, 2-температура)
3) средства защиты от ошибок приема (например: CRC8)
4) продолжительность передачи пакета и промежуток между пакетами.
далее пишете функцию передачи байта. встраиваете эту функцию в функцию побайтовой передачи пакета. Аналогично прием.
в приемнике отводите массив в который будете складывать принятые данные. как проходит время приема пакета - взводите флаг приема и обрабатываете пакет. тут много можно писать. проще поискать уже готовые проекты.
ibiza11 писал(а):и? в чем проблема то? Вы привлекаете на тот форум?
Нет, ни кого я не привлекаю, дал ссылку для наглядности чего я хочу. Проблема в том что только начал изучать МК. программу для оброботки принятых данных написал, а вот как мне зашифровать, отправить, принять, расшифровать и разложить по переменным увы пока не разобрался. Вот и прошу помощи.
Спасибо.
Шифруйте КСОРОМ - логический оператор XOR - исключающий ИЛИ.
z = x ^ y;
где
z - зашифрованный байт
x - незашифрованный
y - ключ
Тогда более правильным термином будет не шифрование, а скорее кодирование или структура данных. Передавайте свои байты в пределенном порядке, а в приемнике (приняв их в том-же порядке) раскладывайте по соответствующим переменным. Например, первый байт в первую переменную с тем-же именем, что в передатчике, второй - во вторую и т.д.
как я понимаю за раз можно передать только 1 байт или 8 бит. То есть можно так представить пакет <1xxxxe
где
< - начало пакета
1 - переменная (1- скорость, 2- 1 банка, 3-2 банка, и т.д.)
xxxx - сама переменная (от 0 до 1023)
e - конец пакета
Я выше писал о передаче всех данных сразу. Но если будете передавать каждый раз по одной величине, то достаточно передать 3 байта: первый байт как у Вас будет говорить какая величина передается, а последующие 2 байта - значение самой величины (из 16 переданных бит будет исползовано лишь 10, в приемнике потом соберете оба байта в одну переменную). Начало и конец пакета отмечать не нужно, т.к. протокол UART уже включает посылку стартового и (как опцию) стопового битов для каждого из байтов, а пакет у Вас будет фиксированной длины (3 байта).
Странный вопрос, учитывая, что ATmega 16 битных чисел даже не знает. В ней все числа в 8 битном виде хранятся, следовательно нужно просто взять и младший и старшие байты числа, передать их, а на принимающем контроллере положить в соответствующие ячейки памяти. Или вопрос в конкретном языке программирования? Если адреса неизвестны (язык высокого уровня, работа с переменными), можно тупо сделать логическое "и" с числом 255 - это младший байт, логическое "и", и сдвиг вправо на 8 бит - это старший байт. Наоборот: старший байт сдвинуть влево на 8 бит и прибавить младший.