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

Обсуждаем контроллеры компании Atmel.
Ответить
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Сообщение 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()?
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Вопрос не понятен, что значит как вставить ? Так прямо и вставляйте :)
На сколько я понял, read_18b20 возвращает байт, send_UART принимает на входе тоже байт. В чём проблема ?
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Сообщение kotarnold »

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

Так?

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

while(1)
    {
		if (PINB==0b00000000)
			{
				send_UART(read_18b20()); 
			}
    }
Что-то сомневаюсь.
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

kotarnold писал(а):Так?
У Вас "в руках" инструмент (Протеус). Почему бы Вам метод тыка на нём не проверить ?
Пробуйте, экспериментируйте, мучайте ... Он не сломается :)
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Сообщение kotarnold »

Разобрался! Спасибо!
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

kotarnold писал(а):Термодатчик инициализируется и передает значения двух байтов:

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

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1407
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Да ладно! Я тоже так делаю. Просветите, пож.)
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

ARV, шутите? Он именно так данные и передает.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
OKF
Это не хвост, это антенна
Сообщения: 1407
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Это если температура измеряется в военное время.)
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

OKF писал(а):Это если температура измеряется в военное время
ну, если вам чихать на достоверность температуры в мирное время - на здоровье. только не понятно, зачем тогда вообще датчик нужен...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
OKF
Это не хвост, это антенна
Сообщения: 1407
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

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

Вернуться в «AVR»