Страница 1 из 1

Отправка и получение данных UART

Добавлено: Сб май 26, 2018 09:10:09
kotarnold
Всем привет!

Я, пока что в Протеусе, запустил два контроллера и наладил связь между ними так, что при нажатии кнопки, подключенной к одному контроллеру, загорается светодиод, подключенный к другому контроллеру. Прикольно. Я решил пойти дальше и хочу научить загораться этот светодиод, если по нажатию все той же кнопки первый МК посылает во второй информацию об измеренной температуре термодатчиком. Отталкиваюсь от этой статьи.

Изображение

Простое нажатие кнопки я передаю так:

Код: Выделить всё

int main(void)
{
	DDRB = 0b00000001;
	PORTB = 0b00000001;

	init_USART();    //инициализация USART в режиме 9600/8-N-1
    while(1)
    {
		if (PINB==0b00000000)
			{
				send_UART('1'); 
			}
    }
}
И, соответственно, второй контроллер эту единичку у меня принимает. Тут, собственно, вопрос в чем? Термодатчик инициализируется и передает значения двух байтов:

Код: Выделить всё

Temp_L = read_18b20(); 
Temp_H = read_18b20();
Как мне передать их в UART? как в send_UART вставить значение read_18b20()?

Re: Отправка и получение данных UART

Добавлено: Сб май 26, 2018 10:07:25
Аlex
Вопрос не понятен, что значит как вставить ? Так прямо и вставляйте :)
На сколько я понял, read_18b20 возвращает байт, send_UART принимает на входе тоже байт. В чём проблема ?

Re: Отправка и получение данных UART

Добавлено: Сб май 26, 2018 10:19:27
kotarnold
[uquote="Аlex",url="/forum/viewtopic.php?p=3385872#p3385872"]Вопрос не понятен, что значит как вставить ? Так прямо и вставляйте :)
На сколько я понял, read_18b20 возвращает байт, send_UART принимает на входе тоже байт. В чём проблема ?[/uquote]

Так?

Код: Выделить всё

while(1)
    {
		if (PINB==0b00000000)
			{
				send_UART(read_18b20()); 
			}
    }
Что-то сомневаюсь.

Re: Отправка и получение данных UART

Добавлено: Сб май 26, 2018 11:28:46
Аlex
kotarnold писал(а):Так?
У Вас "в руках" инструмент (Протеус). Почему бы Вам метод тыка на нём не проверить ?
Пробуйте, экспериментируйте, мучайте ... Он не сломается :)

Re: Отправка и получение данных UART

Добавлено: Сб май 26, 2018 11:29:19
kotarnold
Разобрался! Спасибо!

Re: Отправка и получение данных UART

Добавлено: Сб май 26, 2018 22:00:19
ARV
kotarnold писал(а):Термодатчик инициализируется и передает значения двух байтов:

Код: Выделить всё

Temp_L = read_18b20(); 
Temp_H = read_18b20();
этот термодатчик не может так передавать значение температуры - в виде отдельных двух байтов. если вы так делаете - это неправильно

Re: Отправка и получение данных UART

Добавлено: Вс май 27, 2018 08:51:06
OKF
Да ладно! Я тоже так делаю. Просветите, пож.)

Re: Отправка и получение данных UART

Добавлено: Вс май 27, 2018 09:17:29
Мурик
ARV, шутите? Он именно так данные и передает.

Re: Отправка и получение данных UART

Добавлено: Вс май 27, 2018 17:31:58
ARV
Мурик писал(а):Он именно так данные и передает
датчик передает 9 байт, а не 2. и первые два из этих девяти на самом деле содержат значение кода температуры, но только при условии, что все девять дадут 0 при подсчете CRC по определенному алгоритму. поэтому вот так вот брать 2 байта и игнорировать остальные - верх безрассудства. как я говорил - так делать нельзя.

Re: Отправка и получение данных UART

Добавлено: Вс май 27, 2018 19:12:35
OKF
Это если температура измеряется в военное время.)

Re: Отправка и получение данных UART

Добавлено: Вс май 27, 2018 21:18:29
ARV
OKF писал(а):Это если температура измеряется в военное время
ну, если вам чихать на достоверность температуры в мирное время - на здоровье. только не понятно, зачем тогда вообще датчик нужен...

Re: Отправка и получение данных UART

Добавлено: Пн май 28, 2018 03:58:22
OKF
Ой, да ладно Вам. Какая там ещё недостоверность! Работает годами, как первый советский трактор. 3 метра на улице и метр в комнате. Обычный градусник, без всяких регуляторов. Хотя и к регулятору претензий небыло. Визуально искажений не замечено НИ РАЗУ! Да и отчего искажаться, то.))