Синхронизация МК по воздуху

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 317
Зарегистрирован: Чт июл 15, 2010 13:47:09
Откуда: Лютый Питер

Сообщение dr.faust »

Доброго времени суток всем радиокотам!

Встала передо мной задача - засинхронизировать десять ATtiny24 по воздуху, в распоряжении 9 приемников HM-R433 и один передатчик HM-T433. Приемники и передатчик понимают только UART.
Суть вот в чем - одна тинька будет "главным" контроллером, соответственно, будет отправлять синхронизирующие команды.
Остальные тиньки нужно заставить как-то эти самые команды принять.
А весь цимес ситуации в том, что внутренний генератор тинек совершенно нестабилен и примерно через 200 мс принять что-то невозможно в течение 800-1200 мс, снова 200 мс приема и далее по кругу.
Кварцы можно поставить, но это крайний случай, лучше всего обойтись без них.
Поглядываю на прерывания, но как-то не получается ничего.

Пишу индусятину в BASCOM, перевариваю C в AVR Studio при необходимости.
Господа, [url=http://google.ru/][b]это[/b][/url] - не стыдно.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20101
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Что, точности встроенного генератора не хватает для УАППа? Какие частоты? Какие параметры?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница

Сообщение urry »

да ну, когда его хватало... Наличие кварца - имхо - обязательное условие.
Скорость 9600 - причем приемник шумит очень сильно - я вставлял в пакет несколько байтов "преамбулы", затем стартовый байт, инфу и закрывал контрольной суммой.

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

interrupt void fnInterrupt(void)
{
	static unsigned char cReadComm;// прочитанная команда
	static unsigned char cModeRead=NO_MARKER;// переменная режима приема
	static unsigned char cTmp;// принятый байт	
	static 	unsigned char ind;// индекс поиска
	static unsigned char cBuf[3]={0xFF,0xFF,0xFF};
	// ошибки ком порта =============	
	#define serial_error()        OERR
	#define nostop()              FERR
	#define serial_fix()        {CREN = 0; CREN = 1;}	
	//=============
	if (TMR1IF && TMR1IE)
	{
		TMR1H=TMR1ALL>>8;
		TMR1L+=TMR1ALL & 0x00FF;
		TMR1IF=0;
		sFlags.bTick=true;
	}
	//-------------------------------------------------
	if (RCIF && RCIE)
	{
		// обработка ошибок ком порта
		if(serial_error()){serial_fix();cModeRead=NO_MARKER;} // переполнение буфера
		if (nostop()){cTmp=RCREG;cModeRead=NO_MARKER;}// отсутствие стопового бита	
		// ----------------
		cTmp=RCREG;
		cBuf[0]=cBuf[1];
		cBuf[1]=cBuf[2];
		cBuf[2]=cTmp;
		switch(cModeRead)
		{
		case NO_MARKER:
			if(cTmp == MARKER)
			{          // проверка вместе с преамбулой, в ней нули  
				if(!cBuf[1] && !cBuf[0]){cModeRead=ON_MARKER;}	
			}
			break;
		case ON_MARKER:
			if(cTmp < MIN_VALUE_COMM){cModeRead=NO_MARKER;break;}// уходим, невалидная команда	
			if(cTmp > MAX_VALUE_COMM){cModeRead=NO_MARKER;break;}// уходим, невалидная команда
			cReadComm=cTmp;
			cModeRead=READ_PACKET;
			break;
		case READ_PACKET:
			for(ind=0;ind<SIZE_ENUM_COM;ind++)// проверка всех возможных принятых команд
			{
				if(cArrComm[ind] == cReadComm)// поиск индекса прочитанной команды
				{
					if(cTmp == cArrCRC[ind])// по индексу сверили кс - 3 байт, он сошелся 
					{
						sFlags.bEfir=true;
						sFlags.cCommand=cReadComm;// передаем к выполнению
					}
				}
			}
			cModeRead=NO_MARKER;// чистим
			break;
		}
	}
}
//==
Последний раз редактировалось urry Ср мар 27, 2013 11:19:22, всего редактировалось 1 раз.
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 317
Зарегистрирован: Чт июл 15, 2010 13:47:09
Откуда: Лютый Питер

Сообщение dr.faust »

Нет, точности хватает, связь с компьютером устойчивая на 100%.
Частота 8 МГц, 9600 бод.

Я отправляю строку типа command_comm и отсекаю последние 4 символа, чтобы работать только с ними, почему то срань и помехи появляются ДО отпавленной строки, после нее их никогда нет.

Попробую уменьшить скорость, 1200 пойдет?

Да, еще, у 24 тини нет аппаратного uart, использую софтовый из bascom.
Последний раз редактировалось dr.faust Ср мар 27, 2013 11:22:08, всего редактировалось 1 раз.
Господа, [url=http://google.ru/][b]это[/b][/url] - не стыдно.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница

Сообщение urry »

до строки - отправь несколько нулей.
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 317
Зарегистрирован: Чт июл 15, 2010 13:47:09
Откуда: Лютый Питер

Сообщение dr.faust »

Попробую.
Сейчас слал несколько 255.

Итак, на 1200 работает намного стабильнее, но наблюдаются-таки пропуски случайных пакетов, примерно раз в 30-40 секунд.
Господа, [url=http://google.ru/][b]это[/b][/url] - не стыдно.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20101
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Сколько стоповых бит?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 317
Зарегистрирован: Чт июл 15, 2010 13:47:09
Откуда: Лютый Питер

Сообщение dr.faust »

1
Господа, [url=http://google.ru/][b]это[/b][/url] - не стыдно.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 20101
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Сделайте два, мне помогло однажды.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 317
Зарегистрирован: Чт июл 15, 2010 13:47:09
Откуда: Лютый Питер

Сообщение dr.faust »

Стабилизировал питание, 4,95 вольта. Практически стопроцентная стабильность.
Сейчас попробую потыкать стоп-биты.
Спасибо за помощь!

UPD: Стоп-биты потыканы, вполне бодро.
Господа, [url=http://google.ru/][b]это[/b][/url] - не стыдно.
Контактная информация:
Ответить

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