Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
Moyok
1

Передача сигнала

31.08.2011, 11:42. Просмотров 4791. Ответов 14
Метки нет (Все метки)

Здравствуйте. Задача - на вход поступает сигнал с частотой от 5кГц до 80кГц. Необходимо передать его на выход без задержки, т.е. чтобы нарастающий и убывающий фронты совпадали.
Делаю так: по прерыванию int0 меняю порт с 1 на 0 и наоборот. Но задержка все равно получается где-то 0,5мкс, за счет входа в прерывание и смены состояния выхода.
Подскажите как это правильно реализовать.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.08.2011, 11:42
Ответы с готовыми решениями:

Attiny 13 прием и передача ик сигнала
Здравствуйте форумчане,объясните пожалуйста не опытному , как принять ик сигнал ,то есть с тиньки...

Передача сигнала
Подскажите в чем проблема. Передаю ФМ импульс (кодом Баркера), т.е. стоят signal builder, PM...

Передача сигнала в mainwindow
Друзья! Подскажите, пожалуйста, следующее. У меня есть основной класс mainwindow. У меня также...

Таблица,передача сигнала
Добрый вечер,форумчане. Помогите найти ошибку в коде,пожалуйста. Проблема в передаче сигнала...

14
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 561
31.08.2011, 13:19 2
Цитата Сообщение от Moyok
Необходимо передать его на выход без задержки, т.е. чтобы нарастающий и убывающий фронты совпадали.
Это невозможно в принципе - переходные процессы в полупроводниках еще никто не отменял.
0
SWK
31.08.2011, 13:19 3
Цитата Сообщение от Moyok
Задача - на вход поступает сигнал с частотой от 5кГц до 80кГц. Необходимо передать его на выход без задержки, т.е. чтобы нарастающий и убывающий фронты совпадали.
Чудес не бывает. Даже простой инвертор имеет задержку, а тем более программируемая логика. Даже хороший коаксиальный кабель дает задержку, порядка 7 наносекунд на метр.
Так что совсем без задержки - невозможно.
В реальной жизни просто смотрят, какая величина задержки допустима и еще достижима, и соответственно выкручиваются...
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 37
31.08.2011, 13:26 4
нафига его через МК пропускать. пусти мимо и пусть себе идет. если в МК какая обработка его нужна, так подцепи его на вход МК.
0
Moyok
31.08.2011, 13:43 5
Спасибо. Наверное неправильно немного сказал. Нужно считать частоту, а потом ее синхронизировать (так это называется?). Чтобы на осциллографе входной и выходной сигналы совпадали.
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
31.08.2011, 13:46 6
Делаю так: по прерыванию int0 меняю порт с 1 на 0 и наоборот. Но задержка все равно получается где-то 0,5мкс, за счет входа в прерывание и смены состояния выхода.
Подскажите как это правильно реализовать.
Подключить библиотеку libastral-div, для предсказания фронта сигнала за 0,5мкс раньше.

Для чего его надо пропускать через МК, если нет обработки? Для коммутации можно взять обычную логику, задержки меньше будут, а уж ей рулить с МК.
0
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
31.08.2011, 13:47 7
Нужно считать частоту, а потом ее синхронизировать
Не понял... Считать и так её можно, а потом такую-же сгенерить? Или что-то еще?
0
0 / 0 / 0
Регистрация: 15.03.2010
Сообщений: 287
31.08.2011, 14:01 8
подсказываю.

человек делает обманку датчика скорости по всей видимости.

Во первых стоит она готовая 1200 руб.
Во вторых синфазность там никакой роли не играет.
0
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 2,550
31.08.2011, 18:30 9
Блин, как же это достало, что, проект мегасверхсекретный и нельзя никому рассказывать? Вот бы вам сейчас насоветовали три бочки, а на деле точность и синфазность нафиг не нужна и все старания псу под хвост...
0
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 37
31.08.2011, 19:50 10
на секретные вопросы надо давать секретные ответы :) чтобы шпионы заеб-сь
0
Moyok
31.08.2011, 23:12 11
Секретный ответ)) Я только начал программировать МК, электронику слабо знаю, в институте архитектура и ассемблер были в 1-м семестре фиг знает когда. В основном Делфи и ПХП.
Дали задание - поступает прямоугольный сигнал определенной частоты, надо выдать сигнал такой же частоты на выходе, но синхронизированный по фронтам, т.е. не обязательно с первого входящего бита один в один передавать, главное чтобы потом (после вычисления частоты) фронты совпали.
Затем этот сигнал по нажатию кнопки надо будет сдвигать вправо с определенным шагом на длительность импульса.
По нажатию второй кнопки надо будет менять ширину импульса (это вроде ШИМ называется).
Подскажите примерный алгоритм сего чуда.
P.S. Перелопатил кучу тем, вроде не встречал подобного.
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
01.09.2011, 07:00 12
А в качестве синхронизирующего импульса что будет?
0
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
01.09.2011, 10:45 13
1. Захватываешь сигнал, вычисляешь длительность импульсов/пауз
2. Вычисляешь предположительное время задержки (МК, логики др.)
3. Выдаёшь на выход импульсы, фронты которых на величину этой задержки пускаешь раньше.
0
Moyok
01.09.2011, 15:12 14
Делаю так:
- первый раз прерывание int0 по нарастающему фронту - включаю счетчик ТС1
- второй раз прерывание int0 по нарастающему фронту - останавливаю счетчик, сохраняю длительность периода минус время задержек в OCR1B, вычисляю и запоминаю длительность импульса минус время задержек в OCR1A
- третий раз прерывание int0 по нарастающему фронту - включаю TC1
- прерывание по сравнению OCR1B - разрешаю прерывания по сравнению OCR1A
- прерывание по сравнению OCR1A - меняю фронт, обнуляю счетчик и жду дальше прерываний OCR1A
Но все равно на осциллографе не то. Частота совпадает, а фронты нет.
Вот код:
Код
;***************************************************************************

;***************************************************************************
.include "m16def.yms"
.def temp=r16;
.def timeL=r17;
.def timeH=r18;
.def counter=r21;

.CSEG           ;начало сегмента
.ORG 0               ;вектор сброса
rjmp init;
.ORG INT0addr
rjmp Ext_INT0           ; (INT0) External Ymtirrupt Request 0
.ORG OC1Aaddr            ; Timer/Counter1 Compare Match A
rjmp Ext_OC1A
.ORG OC1Baddr
rjmp Ext_OC1B

;==========================
;      Прерывания
;==========================

Ext_INT0:
loop1:
cpi counter,1;      Захватываем начало периода по 1-му нарастающему фронту
brne loop2
ldi r16,0b00000001
out TCCR1B,r16
yms counter
rjmp exit
loop2:
cpi counter,2;      Захватываем конец периода по 2-му нарастающему фронту
brne loop3
ldi r16,0b00000000
out TCCR1B,r16
in timeL,TCNT1L;
in timeH,TCNT1H
subi timeL,3;      убираем задержку вычисления периода
sbci timeH,0
mov r23,timeH
mov r22,timeL
subi r22,51      ;устанавливаем задержку для совпадения фронта
sbci r23,0      ; и заносим ее в OCR1B
out OCR1BH,r23
out OCR1BL,r22
lsr timeH      ;Вычисляем длительность импульса
ror timeL
subi timeL,16      ; убираем задержку для смены фронтов
sbci timeH,0
out OCR1AH,timeH   ; длительность импульса в OCR1A
out OCR1AL,timeL
ldi r16,0
out TCNT1H,r16
out TCNT1L,r16
yms counter
rjmp exit
loop3:
ldi r16,0      ;включаем таймер тс1в
out GICR,r16
ldi r16,0b00001000
out TIMSK,r16
ldi r16,0b00000001
out TCCR1B,r16
ldi r16,0
out TCNT1H,r16
out TCNT1L,r16
exit:
reti

Ext_OC1B:
ldi r16,0b00010000   ; запускаем задержку для совпадения фронтов
out TIMSK,r16
ldi r16,0
out TCNT1H,r16
out TCNT1L,r16
reti

Ext_OC1A:         ; запускаем задержку для смены фронтов
in r16,PortD
ldi r17,0b00000001
eor r16,r17
out PortD,r16
ldi r16,0b00000000
out TCNT1H,r16
out TCNT1L,r16
reti

;=========================
;      Инициализация
;=========================
Init:
ldi r31,LOW(ROMEND)
out spl,r31
ldi r31,HIGH(ROMEND)
out sph,r31

ldi r16,0b11111011; Настройка портов
out DDRD,r16;
ldi r16,0b00000100;
out PortD,r16;
ldi r16,0b00000011;
out MCUCR,r16;
ldi r16,0b01000000;
out GICR,r16;
ldi r18,100
ldi r21,1
ldi r16,0b00000101;
sei;

risit:   ;RESIT

rjmp risit
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 65
02.09.2011, 16:00 15
Порекомендую задействовать вход таймера захвата ICP.
С его выхода сможете получать точные (в пределах таймера) значения времени прихода фронта
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2011, 16:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Дифференциальная передача сигнала
Есть некий импульсный сигнал, чем или точней как организовать передачу этого сигнала...

передача сигнала из потока
ребят, подскажите по сабжу. Есть такая реализация: // класс выполняющий некие действия (в...

Передача сигнала с помощью ИК светодиода
Добрый день! Делаю сильно упрощенную копию пульта для кондиционера, которая по сути должна уметь...

Передача сигнала Wi-Fi на расстояние 500м
Доброго времени суток. Условия: 1. Дом: дом-5этажей, живу на 5м; интернет adsl, длинк wifi...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.