Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 02.11.2008, 23:55  
fawkes
Частый гость
 
Регистрация: 05.04.2008
Сообщений: 20
Сказал спасибо: 5
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
fawkes на пути к лучшему
По умолчанию Измерение длительности импульса

Правда название темы не совсем соответствует реальности. В общем проблема в следующем:
Есть контроллер ATmega48, хотя тип контроллера не суть важен, на его лапу приходит некоторая посылка в последовательном коде, начинающаяся на 0xAA (10101010) По длительности единиц в этой посылке, теоретически, можно определить длительность одного бита в последующих данных. Вопрос в том, каким образом можно определить длительность этого импульса, чтобы правильно отсекать данные?
Пробовал написать на задержках (с помощью осциллографа посчитал длительность)это примитивно, но работает.
Для избавления от конкретных величин пробовал написать с автоматически определяемыми задержками (что то не очень получилось), пробовал написать на прерываниях по лапе, которая является входом.
На прерываниях делал так:
ПРиходит импульс, который вызывает прерывание, это прерывание запускает 16ти разрядный таймер в 1мкс, ожидаем окончания импульса, останавливаем таймер. Значения из регистров таймера переписываем в регистр А этого же таймера, потом переключаем таймер на прерывание по совпадению с А, выжидаем несколько мкс, чтобы сдвинуть синхронизацию, читаем лапу, и стартуем таймер.
Соответственно ранее отключили прерывание по лапе, разрешение прерываний тоже сделал.
Но в общем не работает.

Буду благодарен за разъяснения, или же за пример программы, читающей с лапы последовательный код по синхропосылке.
Реклама:
fawkes вне форума  
Непрочитано 03.11.2008, 13:00  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Измерение длительности импульса

Сообщение от fawkes
Есть контроллер ATmega48, хотя тип контроллера не суть важен, на его лапу приходит некоторая посылка в последовательном коде, начинающаяся на 0xAA (10101010) По длительности единиц в этой посылке, теоретически, можно определить длительность одного бита в последующих данных. Вопрос в том, каким образом можно определить длительность этого импульса, чтобы правильно отсекать данные?
Пробовал написать на задержках (с помощью осциллографа посчитал длительность)это примитивно, но работает.
Для избавления от конкретных величин пробовал написать с автоматически определяемыми задержками (что то не очень получилось), пробовал написать на прерываниях по лапе, которая является входом.
На прерываниях делал так:
ПРиходит импульс, который вызывает прерывание, это прерывание запускает 16ти разрядный таймер в 1мкс, ожидаем окончания импульса, останавливаем таймер. Значения из регистров таймера переписываем в регистр А этого же таймера, потом переключаем таймер на прерывание по совпадению с А, выжидаем несколько мкс, чтобы сдвинуть синхронизацию, читаем лапу, и стартуем таймер.
Соответственно ранее отключили прерывание по лапе, разрешение прерываний тоже сделал.
Но в общем не работает.

Буду благодарен за разъяснения, или же за пример программы, читающей с лапы последовательный код по синхропосылке.
Делал приём POCSAG.
Прерывание таймера с периодом в 4(8,16) раза меьншим чем время бита.
Анализ принимаемых уровней.
При повторе 4 нулевых записываеш бит=0
При повторе 4 единычных записываеш бит=1
дальше анализ битов.

Прерывания по фронтам или спадам могут ловить помехи.
picavr вне форума  
Непрочитано 03.11.2008, 22:28  
fawkes
Частый гость
 
Регистрация: 05.04.2008
Сообщений: 20
Сказал спасибо: 5
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
fawkes на пути к лучшему
По умолчанию

Спасибо, будем пробовать.
fawkes вне форума  
Непрочитано 04.11.2008, 00:41  
fawkes
Частый гость
 
Регистрация: 05.04.2008
Сообщений: 20
Сказал спасибо: 5
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
fawkes на пути к лучшему
По умолчанию

Только вот прошу ответа правильным ли я способом считаю через прерывания?
Сегодня доделал, вроде даже читает, и вроде даже правильно.(судя по морганиям светодиода) У микрухи нет JTAG приходится отлаживаться в эмуляторе. Ну ладно, отвлекся.
Значит вопрос, если время делить на 4(8,16) сильно ли повлияет погрешность при делении, если время следования импульса нечетное?
И второй вопрос, велика ли ошибка при подобном способе чтения с порта при длинных(›32байт) посылках?
сейчас правда мне надо читать с порта 5 байт, но в дальнейшем возможно придется передавать длинные посылки.
(на второй вопрос можно не отвечать, проверю как только напишу нормальный алгоритм, просто хотел бы знать реально возможную длинну пакета)

Способ, которым у меня читается сейчас - прерывание по лапе запускает таймер 1000KHz, ждем окончания импульса, останавливаем таймер, пишем в регистр А таймера полученные значения, устанавливаем тип прерывания таймера по совпадению (кстати из показаний таймера приходится вычитать 3, чтобы быть более точным, смотрел в дебагере - пока происходят переходы на прерывания - теряется 3мкс),пауза для сдвига синхронизации(чтобы избавиться от попаданий в состояние перехода между уровнями), запускаем таймер (при запуске сразу происходит прерывание, хотя таймер в нуле, но мне пофиг, из-за этого предыдущий алгоритм не работал) и читаем с лапы уровень во время прерывания. Если получилось 0xAA то проходим дальше, если нет, иттить в начало.
fawkes вне форума  
Непрочитано 06.11.2008, 09:10  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от fawkes
И второй вопрос, велика ли ошибка при подобном способе чтения с порта при длинных(›32байт) посылках?
сейчас правда мне надо читать с порта 5 байт, но в дальнейшем возможно придется передавать длинные посылки.
POCSAG посылки это тон сигнал + заголовок + собщение закодированое, бывало и до килобайта, и более...

период таймера = 1/speed/4
1/1200/4=208 мксек
1/9600/4=26 мксек
picavr вне форума  
Непрочитано 06.11.2008, 12:31  
liza171
Прохожий
 
Регистрация: 12.09.2008
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
liza171 на пути к лучшему
По умолчанию

А стандартные протоколы почему не устраивают? Типа 1-wire?
liza171 вне форума  
Непрочитано 06.11.2008, 12:36  
liza171
Прохожий
 
Регистрация: 12.09.2008
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
liza171 на пути к лучшему
По умолчанию

При последовательной асихронной передаче ошибок всегда немеряно. Как минимум должен быть стартовый байт, тайм-аут на приёме и контрольный байт в посылке...
liza171 вне форума  
Непрочитано 06.11.2008, 21:04  
ra9mig
Прописка
 
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
ra9mig на пути к лучшему
По умолчанию

Цитата:
как только напишу нормальный алгоритм...
Мысль верная! Если не знаешь конечного результата, то как прогу то писать!
Цитата:
Как минимум должен быть стартовый байт...
Вероятно 0xAA оно и есть!?
Посмори AVR410: RC5 IR Remote Control Receiver, там тебе и таймауты, и стартовые биты, и пакеты. Переиграть можно "полюбому", главное идея!
__________________
Если мы вам не подходим, вы нам вовсе не нужны!
Услышал и забыл, увидел и запомнил, сделал и понял!
Нейрон - штука тонкая!
Чудес на свете не бывает!
ra9mig вне форума  
Непрочитано 07.11.2008, 02:54  
fawkes
Частый гость
 
Регистрация: 05.04.2008
Сообщений: 20
Сказал спасибо: 5
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
fawkes на пути к лучшему
По умолчанию

Да, про IrDa читал, правда там отсекается это дело по спаду/подъему. Пока не ясно как определить длительность импульса.
0xAA посылает сам передатчик. Его делал не я, не могу я изменить ни тайминги ни синхронизацию. Хоть тресни будет либо 1 раз 0xAA либо 2 раза 0xAA чтобы более точно определить время синхронизации.
fawkes вне форума  
Непрочитано 07.11.2008, 09:28  
ra9mig
Прописка
 
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
ra9mig на пути к лучшему
По умолчанию


а формат представления данных то какой?
что, собственно, есть 1, и что - 0.
я имею в виду как передается 1 и как передается 0?
формат пакета какой (скока данных и тд...)
__________________
Если мы вам не подходим, вы нам вовсе не нужны!
Услышал и забыл, увидел и запомнил, сделал и понял!
Нейрон - штука тонкая!
Чудес на свете не бывает!
ra9mig вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Измерение СО evgeny2006 Электроника средств транспорта 15 05.09.2010 15:11
Реализация селектора импульсов по длительности. IZEVS TTL и CMOS логика 6 06.02.2010 22:44
Как выделить срез импульса? vicselc Поиск схем. Делимся схемами 10 09.07.2007 01:27
О разложении импульса в ряд Фурье alexander70 Измерительное оборудование 16 31.08.2005 22:34
[Решено] способы определения длительности импульса waterfox Измерительное оборудование 1 14.06.2005 23:57


Часовой пояс GMT +4, время: 23:47.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot