Сообщение от Prime
|
|
Но вобщем вся задача не видна. Ведь помимо просто передачи сигналов со входа на выход будут выполняться другие задачи? Вот здесь вы можете потерять такты и могут быть задержки. Что мешает вам задрать частоту на максимум?
|
Выкладываю полностью задание:
Тема: "эмулятор кратковременного пропадания сигнала"
1. Процессор имеет каналы D+ и D- (вход) каналы В+ и B- (выход)
и канал С (вход)
2. На каналы D+ и D- подаётся сигнал с частотой 1,5 Мгц. Этот сигнал
должен проходить на каналы В+ и B- с задержкой не более 1 мкс. На выходе,
между каналами, не должно быть задержки.
(появление сигнала строго одновременно)
3. К каналу С подключена кнопка. При однократном нажатии на неё (устранить дребезг)
сигнал с каналов D+ и D- не должен передаваться на выходные
каналы В+ и B- на длительность 1 / 1,5Мгц сек. (+- 1/12000000).
При этом на выходных каналах должны присутствовать прежние уровни.
Допускается подключение светодиода для индикации нажатии кнопки.
Напряжение питания 3,3 вольта.
Рекомендуемый кварц: см. в тех. задании.
Жирным выделил оставшуюся часть задания.
Вроде написал я програмку для
Atmega8515, частота кваца 10МГц.
Правда на ассемблере( а желательно на Си

)
Каналы D соответствуют проту D, а выходы В - проту В. Вход С с кнопкой, это на ножке PortD 4!
Вопросы:
1) "устранить дребезг"
Цитата: "Дребезг длится 20мс. А человек манипулирует кнопкой не быстрее чем 200мс."
то есть ставим задержку после нажатия на 20мс и все?
Но я сам пошел другим путем, сам такое придумал, еще нигде не встечал, поэтому не знаю правильно ли так делать?:
sbic PinD,4 ; проверяем нажатие кнопки
rjmp Start
sbis PinD,4 ; проверяем отжали ли кнопку
rjmp PC-1
Можно ли так "устранить дребезг"?
2) теперь про обработчик внешнего прерывания
я запустил прерывание по"нарастающему фронту", то есть получаестся когда на вход D подастся сигнал лог.1 только в этом случае будет записано зачение из порта D в В. Програмно я написал это так:
Vnesh0:
in signal, PortD ;
out PortB,signal ;
reti
Получается во всех остальных моментах на выходе должны быть записаны 0 в проту В ? как бы это сделать?
Прилагаю в файле програмку мою програмку