Нужен оптимальный алгоритм RTC

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Нужен оптимальный алгоритм RTC

Сообщение МитяРа »

Мастер Ломастер писал(а): для часов - однозначно экзотика.
Для часов - просто "мозги размять", а например для программного многоканального ШИМа - в самый раз.. :wink:
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Реклама
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Нужен оптимальный алгоритм RTC

Сообщение ploop »

Чуть короче и без использования бита T
Engineer_Keen, опоздал немного :)
Реклама
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Нужен оптимальный алгоритм RTC

Сообщение Мастер Ломастер »

МитяРа писал(а):
Мастер Ломастер писал(а): для часов - однозначно экзотика.
Для часов - просто "мозги размять", а например для программного многоканального ШИМа - в самый раз.. :wink:
на счет ШИМ-а не уверен... да и по поводу разминки - тоже не уверен :) я сторонник простых и ясных методов, без высокохудожественных изысков (если, как уже было отмечено, высокохудожественность не причина, а следствие).
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Нужен оптимальный алгоритм RTC

Сообщение Engineer_Keen »

МитяРа писал(а):для программного многоканального ШИМа - в самый раз.. :wink:
Точно-точно, там и я некое подобие такого подхода использовал. Метод на самом деле больше для тренировки мозгов.
ploop писал(а):Engineer_Keen, опоздал немного :)
Просто целого куска для секунд-минут-часов не видел. Был кусок только с использованием T, а потом без T, но только для секунд :dont_know:
Кстати вариант для 51:

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

RTC:
	MOV	A,TS	; :)
	INC	A
	MOV	B,A
	CLR	C
	SUBB	A,#60
	CLR	A
	SUBB	A,#0
	ANL	B,A
	MOV	TS,B

	CPL	A
	ANL	A,#1
	ADD	A,TM
	MOV	B,A
	CLR	C
	SUBB	A,#60
	CLR	A
	SUBB	A,#0
	ANL	B,A
	MOV	TM,B

	CPL	A
	ANL	A,#1
	ADD	A,TH
	MOV	B,A
	CLR	C
	SUBB	A,#24
	CLR	A
	SUBB	A,#0
	ANL	B,A
	MOV	TH,B
	
	RET
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Нужен оптимальный алгоритм RTC

Сообщение ploop »

я сторонник простых и ясных методов, без высокохудожественных изысков (если, как уже было отмечено, высокохудожественность не причина, а следствие).
Не, ладно всякие финты на гране хакерства, которые понятны только автору, но ведь бывают простые и на столько очевидные решения, что иногда вызывают восторг. И рождаются они зачастую из таких вот "разминок"
Реклама
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Нужен оптимальный алгоритм RTC

Сообщение МитяРа »

Engineer_Keen писал(а):Кстати вариант для 51:
Кстати, хорош...

P.S. ploop, как думаешь, может завтра создать новую тему или в твоей пока "мозги поразминаем"?
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Реклама
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Нужен оптимальный алгоритм RTC

Сообщение ploop »

Да как удобней, мне всё равно. Моя то задача решена. Но если сможет кто-то предложить вариант короче - буду только рад :)
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Нужен оптимальный алгоритм RTC

Сообщение МитяРа »

ploop писал(а):Да как удобней, мне всё равно.
Ладно, к завтру энкодер с ограничителями доцарапаю и с него тему начну... :wink:
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Нужен оптимальный алгоритм RTC

Сообщение ploop »

Давай, помозгуем!
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: Нужен оптимальный алгоритм RTC

Сообщение Ser60 »

Как вам такой код на примере минут и часов для х51.

Инкремент минут:

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

mov A, minutes
inc A
mov B, #60
div AB
mov minutes, B
После этого фрагмента в B будет значение минут по модулю 60, а в A будет либо 0 (если значение минут после инкремента меньше 60) или 1 (если равно 60). Используем значение в A для инкремента часов:

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

add A, hours
mov B, #24
div AB
mov hours, B
Значение в А можно далее использовать для инкремента дней. По времени выиграша нет по-сравнению с кодaми выше (те-же 14-15 циклов), но занимает меньше места в памяти. Я-бы после первого фрагмента все-таки поставил JZ XXX чтобы нижеследующий код не вычислялся зря в случае непереваливания минут через 60.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Нужен оптимальный алгоритм RTC

Сообщение Мастер Ломастер »

Ser60 писал(а):Я-бы после первого фрагмента все-таки поставил JZ XXX чтобы нижеследующий код не вычислялся зря в случае непереваливания минут через 60.
так в том и фишка, чтобы сделать не проще и понятнее, а с переподвыподвертом :)))
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Нужен оптимальный алгоритм RTC

Сообщение ploop »

Мастер Ломастер, дык сами спровоцировали! Не получится, не получится.... :)))
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Нужен оптимальный алгоритм RTC

Сообщение Мастер Ломастер »

ploop писал(а):Мастер Ломастер, дык сами спровоцировали! Не получится, не получится.... :)))
не-не-не, не приписывайте мне разжигание чего-то там! :) поначалу я не уловил, как эта фишка реализуется и мне стало интересно. но когда понял - то понял и то, что это представляет исключительно "академический" интерес, и я потерял интерес к этой теме. признаю оригинальность идеи, но смысла ее как-то развивать не вижу. поэтому и немножечко посмеиваюсь над продолжающимися изысками, но так, капельку совсем :) как говорится, чем бы дитя не тешилось, лишь бы не кололось :)
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Нужен оптимальный алгоритм RTC

Сообщение МитяРа »

Мастер Ломастер писал(а):что это представляет исключительно "академический" интерес
Не всегда.. Чаще мя использую некую "комбинацию", где что-то делается линейно, а что-то с переходами..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Нужен оптимальный алгоритм RTC

Сообщение Мастер Ломастер »

:P
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Нужен оптимальный алгоритм RTC

Сообщение ploop »

Кто еще хочет размяться? :)

Алгоритм лучше словами. Свой тоже опишу.
Есть простой алгоритм декодирования команд пульта ДУ. Любой протокол кодирования передаёт биты только одним способом - длительностями импульсов. И отличаются длинный и короткий импульсы всегда в два раза.
Нам достаточно просто отличить длинный импульс от короткого и сохранить в виде битов. Запомнив результат, можно "обучить" своё устройство практически любому пульту ДУ подходящей несущей частоты.

Для чёткого определения длительности можно настроить любой таймер (даже уже работающий в режиме ШИМа) на такую частоту, чтобы период его переполнения был меньше длительности самого большого импульса. Прикинуть просто: самый короткий информационный импульс должен быть не менее 10 импульсов несущей частоты. На 36-38кГц получается 3.6-3.8кГц. Длинный, соответственно, в два раза больше: 1.8-1.9кГц. Это период (два импульса). Значит таймер может работать на частоте от 2 до 4 кГц, чем ближе к 3,8 тем лучше (предделителем точную частоту не установишь).

Длительность импульса определяем так: в прерывании замеряется длительности фронтов и спадов. Есть два регистра, предыдущее и текущее состояние счетчика. В прерывании копируем текущее в предыдущее, регистр счетчика - в текущее. Получаем разницу показаний. На рисунке это T1 или T2.

Из-за того, что они не могут быть каждый раз идентичны, их нельзя тупо сравнивать с эталонными. Нужно просто отличить один от другого. Для этого выводим их как-нибудь на глаза (в UART или на дисплей), и считаем середину между ними - Border. Запоминаем её как константу. Теперь если вычесть из результата Border, в флаге переноса получим ноль, есть это T1, и единицу, если T2. Дальше просто сдвигаем его в приёмники.

Изображение

После того, как насдвигали N бит (например 16), надо вырубить прерывания, иначе результат затрётся, и забрать его. Включить, например, через задержку.
Но вот как придумать, чтобы можно было отрабатывать повтор кнопки при удержании? Принимается ведь не полная посылка, а лишь безсмысленный кусок?

Для одиночных нажатий алгоритм работает как часы, проверен неоднократно.
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Нужен оптимальный алгоритм RTC

Сообщение МитяРа »

ploop писал(а):в прерывании замеряется длительности фронтов и спадов.
А если импульс типа "меандра", то где у него будет фронт, а где - спад? :)))
Ты походу кислое с пресным перепутал..

А по задачке: возьми за основу принцип "синхронизации" УАРТА при асинхронном приёме..

У твоего протокола ИК-последовательности, наверняка есть "стартовая посылка", которая чему-то равна..

Вот чему она равна?
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Нужен оптимальный алгоритм RTC

Сообщение ploop »

А если импульс типа "меандра", то где у него будет фронт, а где - спад?
Ну ты меня прям убил!
Меандр не импульс, а периодический прямоугольный сигнал, сто скважностью равной двум :)
Вот чему она равна?
Её приходится пропускать. У некоторых протоколов там инвертируется бит чётного и нечётного нажатия. Это сделано чтобы отличать, было ли новое нажатие, или сигнал пульта прервался препятствием, а кнопка удерживается.
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Нужен оптимальный алгоритм RTC

Сообщение МитяРа »

ploop писал(а):Меандр не импульс, а периодический прямоугольный сигнал, сто скважностью равной двум
Теперь ты мя тоже убил, наповал прямо.. :)))
Меандр, это "не рыба и не мясо" среди импульсов, т.к. у него нет фронта и нет спада, а у импульсов положительной или отрицательной полярности, и то и другое - есть..
ploop писал(а):Её приходится пропускать.
Вопрос был: Чему она равна?
В УАРТе стартовый бит - 1.5 бита данных, а у тя сколько?
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Нужен оптимальный алгоритм RTC

Сообщение ploop »

Меандр, это "не рыба и не мясо" среди импульсов, т.к. у него нет фронта и нет спада
У любого периодического сигнала нет ни фронта ни спада, т.к. нет начала и нет конца на данном промежутке времени.
И пусть нас похоронят вместе! :)
Вопрос был: Чему она равна?
Да не помню, гуглить надо конкретный протокол. Кажется с длинного импульса начинается, потом у каждого свои заморочки.

А фишка - сделать без привязки к протоколу!
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»