Здравствуйте!...
приведу кусочек и спрошу потом
Все инициализировал...
дальше сам кучочек программы:
Код
if (!PIND.1) { //PD0 420Hz
do {
OCR2=0x94;
}
while ((PIND>>1)&0);
};
Ну так всё и повторяется дальше для различных частот.
Вопрос 1. Всю программу с вышеприведенным куском эмулировал в протеусе (принтскрин ниже)
Дословно код переводится ведь так???: если на PIND.1 НЛУ, то заносить в регистр сравнения OCR2 число соответствующее частоте до тех пор пока выполняется условие (есть НЛУ на PIND.1 ).
В протеусе почему-то еще не успев нажать кнопку уже выдается частота 420 (хотя следуя программе она должна появиться только при нажатии И удержании кнопки (т.е. НЛУ) на пине), а при отпускании пропасть (этого тоже кстати не происходит). Т.е. ситуация такая: вместо кнопок должны быть переключатели, и пока есть НЛУ - есть соответствующая частота, а когда нет НЛУ - ничего нет.
А у меня просто при кратковременном нажатии она появляется и так не пропадает при отпускании. Где собака...?
Вопрос 2. Дискретность установки частоты у 8-разрядного таймера оставляет желать лучшего даже при 1/8 кдел., т.е. получается допустим 420+-2Гц (иногда и больше) (многовато, нужно хотя бы +- 1Гц). Формула нахождения частоты : fOCn=fclk_/2*N(1+OCRn) почему-то не работает, нахожу не по ней...Как улучшить показатели? 16-разрядный для модулирующих у меня...
Вопрос 3. Самое интересное и самое непонятное пока для меня: Как мне вывести программно в какой-нибудь пин порта модуляцию 2-х частот (то бишь перемножить) логическое "И"???
В лоб не получается... Теории об этом не нашел...
Сообщение отредактировал MakFatum - Mar 24 2006, 16:24