UART-RF модуль не работает

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Родился
Аватара пользователя
Сообщения: 12
Зарегистрирован: Ср июл 21, 2010 10:20:42

Сообщение vgorskih »

Написал программу, спаял в железе: 2 атмеги8 общаются по UART по проводам, на одной атмеге матричная клавиатура, на второй жк 2х16, нажимаем кнопку на клаве- на жк выводится цифра соответствующей клавиши. по проводам всё работает, припаяли RF модули 423, или 433 мГц не помню, (плата щас не у меня), (RF купили в промэлектронике). Пока клавишу не нажимаем, всё тихо, когда нажимаем клавишу, прилетает всякий мусор из набора случайных чисел. В чём может быть дело, помогите пожалуйста кто знает чего нибудь по этому поводу.
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 130
Зарегистрирован: Ср дек 29, 2010 17:30:34

Сообщение aleksey_gregul »

Просто уартом модулировать радиомодули не проканает. Нужно что-то типа манчестера. Постоянная составляющая выходного сигнала портит всю картину.
Хотя возможны некоторые ситуации, при которых передача пройдет почти правильно, если не забыли про инверсию/неинверсию сигналов при прохождении через сами модули. Но закладываться на это не стоит. Нужно менять модуляцию.
Реклама
Родился
Аватара пользователя
Сообщения: 12
Зарегистрирован: Ср июл 21, 2010 10:20:42

Сообщение vgorskih »

Ну что такое манчестерский код немного посмотрел, понял, что нужно разбивать каждый передаваемый бит на 2 части, программно реализовать можно, вот только ресурсов у мк хватит лишь на то, чтобы выполнять только ранее перечисленные действия, а это лишь эксперимент на пути создания системы в которой центральный прибор (например на атмеге 16, 32...) будет по УАРТ-Радиоканалу опрашивать периферийные(на атмеге8, а лучше на еще более дешёвом), которые по 1-wire, или с помощью АЦП получают информацию от датчиков (температура, задымлённость, влажность и т.д.) и по этому же каналу центральный прибор управляет исполнительными блоками (реле). Делаем систему "Умный дом". Может есть дешёвые средства аппаратной реализации этого дела (манчестерский код). Дело в том, что сам я закончил электрофак и мк знаю всего полтора года в программировании самоучка, в целом представляю, в тонкости не вдаюсь, программы писать научился в CVAVR поэтому объясните попроще пожалуйста.
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Просто уартом модулировать радиомодули не проканает.
Это если они без поддержки оного. А с поддержкой еще как работают. Последние и нужны автору.
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Аватара пользователя
Сообщения: 12
Зарегистрирован: Ср июл 21, 2010 10:20:42

Сообщение vgorskih »

Радиомодуль RTL DATA SAW поддерживают RS-232. Если между МК и радиомодулем поставить согласователь уровней MAX-232 будет рааботать?
Последний раз редактировалось vgorskih Ср фев 16, 2011 11:30:11, всего редактировалось 1 раз.
Реклама
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Если именно RS-232 то да, нужен согласователь уровней.
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 130
Зарегистрирован: Ср дек 29, 2010 17:30:34

Сообщение aleksey_gregul »

vgorskih писал(а):Радиомодуль RTL DATA SAW поддерживают RS-232.
Я конечно извиняюсь, но похоже Вы заблуждаетесь.
Нету там поддержки RS-232. http://www.promelec.ru/UPLOAD/xml/pdfba ... (full).pdf
Поскольку отсутствует кодер-декодер оного.
Об кодировании-декодировании, боюсь придется заботиться самому. :(
Если используете предложенный производителем метод кодирования, скорость будет не выше 2400.
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Тогда я бы вообще не советовал его использовать. Полно ведь готовых модулей с поддержкой UART'а.
Родился
Аватара пользователя
Сообщения: 12
Зарегистрирован: Ср июл 21, 2010 10:20:42

Сообщение vgorskih »

вот он написано что RS-232 поддерживает

http://www.abacom-tech.com/assets/data_ ... AWuser.pdf
Последний раз редактировалось vgorskih Ср фев 16, 2011 14:33:37, всего редактировалось 1 раз.
Родился
Аватара пользователя
Сообщения: 12
Зарегистрирован: Ср июл 21, 2010 10:20:42

Сообщение vgorskih »

просто куплены уже, обидно что просто так
Встал на лапы
Аватара пользователя
Сообщения: 130
Зарегистрирован: Ср дек 29, 2010 17:30:34

Сообщение aleksey_gregul »

vgorskih писал(а):вот он написано что RS-232 поддерживает
http://www.abacom-tech.com/assets/data_ ... AWuser.pdf
Дык, ведь там же чистейшим аглицким языком да черным по белому написано:

For intermittent signals consisting of single words or short strings of words with a relatively long no-signal
time, this method of generating a digital output is entirely adequate. However, it can cause problems
when the long-term mark/space ratio of the received signal moves too far away from unity. When faced
with long strings of non-encoded RS-232 words containing only 0s or 1s as data bits, the mean detector
output voltage stored on C will change, as the RC time-constant of around 10ms is not infinite. If the
string is long enough, detection errors will eventually occur.
This problem can occur whenever AC amplification is used when processing non encoded RS-232 data.
There is a way around this problem using Manchester encoding, which will be described later.

Об чем я и раньше говорил. Могут быть ситуации, когда оно передастся почти без ошибок. но закладываться на это не стоит.
И ситуации эти будут тем чаще, чем передаваемый сигнал ближе к 0x55 или 0xAA. Чем больше данные будут отличаться от указанных - тем выше вероятность ошибок!
Я уже не говорю об 0x00 и 0xFF.
Раньше нужно было знакомиться с покупкой.
Теперь придется ломать голову над методами кодирования. :(
Родился
Аватара пользователя
Сообщения: 12
Зарегистрирован: Ср июл 21, 2010 10:20:42

Сообщение vgorskih »

а что думаете вот об этой штуке пойдёт для вышеперечисленных целей или нет

http://cxem.net/rmodem/rmodem14.php

а то на форумах и хорошее и плохое пишут, сам баги паял на 90-108 МГц , настраивал с помощью осциллографа (благо был таковой под руками, FLUK вроде), а это чудо 400 с лишним, а осциллографа под руками нет вобще никакого не то чтобы на 400-500, вот и сомневаюсь в надежности, простоте настройки и пр. о чём там написано.
Это не хвост, это антенна
Сообщения: 1318
Зарегистрирован: Чт янв 27, 2011 21:57:53

Сообщение Алёша. »

vgorskih писал(а):а что думаете вот об этой штуке пойдёт для вышеперечисленных целей или нет
Но это же стандартный радиомодуль скопированный из даташита и сделанный на рассыпухе во времена их дефицита. Сейчас то зачем этим заниматься?
Да и не так просто их сделать, как кажется.
Вот в этой теме бились над неизвестным модулем, т.к. не нашли даташита который в конце концов оказался как раз такой, что Вы на рассыпухе собрались делать.

http://radiokot.ru/forum/viewtopic.php?p=588447#p588447
Контактная информация:
Родился
Аватара пользователя
Сообщения: 12
Зарегистрирован: Ср июл 21, 2010 10:20:42

Сообщение vgorskih »

в общем хрен с ними с купленными радиомодулями может ктонибудь посоветовать уже проверенные радиомодули работающие c UART на скоростях 1200-9600 без всяких манчестерских кодов, или такого в природе нет?
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Всё есть. Вопрос в цене :)
Вот несколько модулей с описаниями/тестами: http://easyelectronics.ru/tag/radioperedacha
Открыл глаза
Сообщения: 41
Зарегистрирован: Вс фев 06, 2011 16:18:39

Сообщение svd71 »

vgorskih писал(а):в общем хрен с ними с купленными радиомодулями может ктонибудь посоветовать уже проверенные радиомодули работающие c UART на скоростях 1200-9600 без всяких манчестерских кодов, или такого в природе нет?
Такие есть, но стоит соответственно (один модуль от 29Евро со скоростью до 11500). Про манчетерский код не знаю, но использую кодировку хемминга. Ничего сложного в нем нет. правда передача и прием всех данных проводится дважды.
Если интресно, могу поделиться кусками кода.

Из-за громоздкости этих модулей (да и стоимости тоже), использую модули fm12. Это аналоги SI4420. Кода на них в сети море, но правда есть еще и, уже известные, заморочки. Стоимость в России от 7 дол. Правда обмен ведется по SPI. Эти модули уже протестировал, передают стабильно.
[url=http:///]:-)[/url]
Родился
Сообщения: 5
Зарегистрирован: Пт апр 20, 2007 12:22:27

Сообщение Atlant »

To svd71
если не трудно поделитесь исходником
Открыл глаза
Сообщения: 41
Зарегистрирован: Вс фев 06, 2011 16:18:39

Сообщение svd71 »

Atlant писал(а):To svd71
если не трудно поделитесь исходником
Здесь только работа с кодами Хэмминга:

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

unsigned char hamminge[16]={0x15,0x02,0x49,0x5E,0x64,0x73,0x38,0x2F,0xD0,0xC7,0x8C,0x9B,0xA1,0xB6,0xFD,0xEA};
unsigned char hammingd[256]={
0x01,0x00,0x01,0x01,0x00,0x00,0x01,0x01,0x02,0x02,0x01,0x03,0x0A,0x02,0x03,0x07,
0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x00,0x06,0x02,0x03,0x0B,0x02,0x00,0x03,0x03,
0x04,0x0C,0x01,0x05,0x04,0x04,0x05,0x07,0x06,0x06,0x07,0x07,0x06,0x07,0x07,0x07,
0x06,0x04,0x05,0x05,0x04,0x00,0x0D,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x07,
0x00,0x02,0x01,0x01,0x04,0x00,0x01,0x09,0x02,0x02,0x03,0x02,0x02,0x02,0x03,0x03,
0x08,0x00,0x01,0x05,0x00,0x00,0x03,0x01,0x02,0x02,0x03,0x03,0x03,0x02,0x03,0x03,
0x04,0x04,0x05,0x05,0x04,0x04,0x04,0x05,0x06,0x02,0x0F,0x07,0x04,0x06,0x07,0x07,
0x04,0x05,0x05,0x05,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x05,0x06,0x0E,0x03,0x07,
0x08,0x0C,0x01,0x09,0x0A,0x08,0x09,0x09,0x0A,0x0A,0x0B,0x0B,0x0A,0x0A,0x0A,0x0B,
0x08,0x08,0x09,0x0B,0x08,0x00,0x0D,0x09,0x0A,0x0B,0x0B,0x0B,0x0A,0x0A,0x0B,0x0B,
0x0C,0x0C,0x0D,0x0C,0x0C,0x0C,0x0D,0x0D,0x0E,0x0C,0x0F,0x0F,0x0A,0x0E,0x0F,0x07,
0x0C,0x0C,0x0D,0x0D,0x0D,0x0C,0x0D,0x0D,0x06,0x0E,0x0F,0x0B,0x0E,0x0E,0x0D,0x0F,
0x08,0x08,0x09,0x09,0x08,0x09,0x09,0x09,0x0A,0x02,0x0F,0x0B,0x0A,0x0A,0x0B,0x09,
0x08,0x08,0x08,0x09,0x08,0x08,0x09,0x09,0x08,0x0A,0x0B,0x0B,0x0A,0x0E,0x03,0x0B,
0x0C,0x0C,0x0F,0x0D,0x04,0x0C,0x0D,0x09,0x0F,0x0E,0x0F,0x0F,0x0E,0x0E,0x0F,0x0F,
0x08,0x0C,0x0D,0x05,0x0C,0x0E,0x0D,0x0D,0x0E,0x0E,0x0F,0x0F,0x0E,0x0E,0x0F,0x0E};
Эти два массива служат для кодирования и декодирования данных. Какой из них для каких целей - догадайтесь сами. Лучше, конечно их разместить во флэше, но тут что то много любителей CV, а там вроде другая система декларирования.

Функция отправки.

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

void rf12_txdata(unsigned char * data, unsigned char number)
{	unsigned char i, checksum;
	LED_TX=1;
	rf12_trans(0x8238);			// TX on
	rf12_ready();
	rf12_trans(0xB8AA);                 //5 байт синхронизации. АА - за счет чередования нулей и единиц помогает приемнику "тактироваться" в переданном пакете
	rf12_ready();
	rf12_trans(0xB8AA);
	rf12_ready();
	rf12_trans(0xB8AA);
	rf12_ready();
	rf12_trans(0xB82D);
	rf12_ready();
	rf12_trans(0xB8D4);
	rf12_ready();
	rf12_trans(0xB800|(pgm_read_byte(&hamminge[number/16])));	// передается размер буфера данных
	rf12_ready();
	rf12_trans(0xB800|(pgm_read_byte(&hamminge[number&15])));
	if (number<=_MAX_BUF)		// если это подтверждение получения, то данных отправлять не нужно
	{	checksum=id;
		rf12_ready();
		rf12_trans(0xB800|(pgm_read_byte(&hamminge[id/16])));	// Paket ID
		rf12_ready();
		rf12_trans(0xB800|(pgm_read_byte(&hamminge[id&15])));
		for (i=0; i<number; i++)
		{	rf12_ready();
			rf12_trans(0xB800|(pgm_read_byte(&hamminge[*data/16]))); //каждый байт кодируется и посылается 2 раза. один так
			rf12_ready();
			rf12_trans(0xB800|(pgm_read_byte(&hamminge[*data&15]))); //второй раз так
			checksum+=*data;
			data++;
		}
	}
	else
	{	checksum=number;
	}
	checksum=256-checksum;
	rf12_ready();
	rf12_trans(0xB800|(pgm_read_byte(&hamminge[checksum/16])));	// Контрольная сумма для проверки
	rf12_ready();
	rf12_trans(0xB800|(pgm_read_byte(&hamminge[checksum&15])));
	rf12_ready();
	rf12_trans(0xB800);			// dummy data
	rf12_ready();
	rf12_trans(0x8208);			// TX off
	LED_TX=0;
}
теперь прием:

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

unsigned char rf12_rxdata(unsigned char *data, unsigned char *id)
{	unsigned char i, number,checksum;
	LED_RX=1;
	rf12_ready();
	number =(pgm_read_byte(&hammingd[rf12_trans(0xB000)&255])*16);	// Размер переданного буфера
	rf12_ready();
	number|=(pgm_read_byte(&hammingd[rf12_trans(0xB000)&255]));
	if (number>_MAX_BUF)				// Если это не подтверждение, то
	{	rf12_ready();
		*data[b] =[/b](pgm_read_byte(&hammingd[rf12_trans(0xB000)&255])*16); //прием первого байта
		rf12_ready();
		*data[b]|=[/b](pgm_read_byte(&hammingd[rf12_trans(0xB000)&255])); //прием второго байта
		rf12_trans(0xCA81);			// restart syncword detection:
		rf12_trans(0xCA83);			// enable FIFO
		LED_RX=0;
		return number;
	}
	rf12_ready();
	*id =(pgm_read_byte(&hammingd[rf12_trans(0xB000)&255])*16);		//  Paket ID
	rf12_ready();
	*id|=(pgm_read_byte(&hammingd[rf12_trans(0xB000)&255]));
	checksum=*id;
	for (i=0; i<number; i++)
	{	rf12_ready();
		*data =(pgm_read_byte(&hammingd[rf12_trans(0xB000)&255])*16);
		rf12_ready();
		*data|=(pgm_read_byte(&hammingd[rf12_trans(0xB000)&255]));
		checksum+=*data;
		data++;
	}
	rf12_ready();
	i=(pgm_read_byte(&hammingd[rf12_trans(0xB000)&255])*16);		// Контрольная сумма
	rf12_ready();
	i|=(pgm_read_byte(&hammingd[rf12_trans(0xB000)&255]));
	checksum+=i;
	rf12_trans(0xCA81);			// restart syncword detection:
	rf12_trans(0xCA83);			// enable FIFO
	LED_RX=0;
	if (checksum)
		return 255;				// checksum error
	else
		return number;			// data ok
}
хардварные функции rf12_xxxx могут быть различной реализации. Поэтому смысла не вижу их приводить. В rfmXX работа ведется по SPI, поэтому первым байтом в слове идет команда, вторым данные. Естественно, кто будет это применять к UART, должны это учитывать и просто выкинуть байт команды.
[url=http:///]:-)[/url]
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский

Сообщение phanis »

В свое время как-то занимался изучением Приемопередатчик AT86RF211 400-950 MHz
Может что-то и пригодится http://www.radioscanner.ru/forum/topic32273.html
Исходники http://www.radioscanner.ru/uploader/200 ... rf211s.zip
Контактная информация:
Родился
Сообщения: 5
Зарегистрирован: Пт апр 20, 2007 12:22:27

Сообщение Atlant »

Ответить

Вернуться в «Периферия»