Страница 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 метра на улице и метр в комнате. Обычный градусник, без всяких регуляторов. Хотя и к регулятору претензий небыло. Визуально искажений не замечено НИ РАЗУ! Да и отчего искажаться, то.))