по-моему вы или кто-то другой буквально день назад уже наступали на эти же грабли: нельзя делать main без вечного цикла: при "выходе" из main запрещаются прерывания и происходит зацикливание, т.е. прерывания разрешены у вас ровно 1 машинный такт.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
я тут уже советовал другим, посоветую и вам: используйте макросы, типы и т.п., являющиеся "стандартными" для WinAVR - это позволит вам иметь более читаемый другими любителями WinAVR код, да и сами будете лучше понимать, что делаете.
-==MAXCELERON==- писал(а):Хорошо, буду иметь ввиду.
Не имей ввиду, все ты правильно делаешь, записывая в регистр конкретное число. Просто в коментах укажи какие биты в единицу, какие в ноль и все.
Почему? Потому что,
#define _BV(bit) (1 << (bit))
Это означает сдвиг единицы на определенное число, тем самым требуя на каждый сдвиг один такт. Если вы хотите установить седьмой бит в регистре, то знайте, уйдет семь тактов. А если просто 0x80 то всего один.
Эт я так, рекомендую.
А еще лучше, написать свои макросы типа
SET_ADC_ACIE = ACSR |= 0x80;
__Alexander, я вам очень настоятельно рекомендую прежде чем давать рекомендации, хорошенько изучить язык Си... иначе вы можете попасть в глупое положение, когда ваши рекомендации не имеют ничего общего с реальностью...
в данном случае, вы забываете, что Си - это не бейсик, и все вычисления, которые могут быть сделаны на этапе компиляции, будут сделаны именно на этапе компиляции.
то есть все сдвиги сделает компилятор, а в код запишется только результат этих сдвигов. ведь не думаете же вы, что с = 2 * 8 + 16 / 4; приведет к генерации команд умножения, деления и сложения?! на самом деле в с сразу будет записано число 20.
кроме того, ваш совет на счет макросов - от него волосы поднимаются... в регистре 8 битов, устанавливать которые можно в разных комбинациях, т.е. всего 256 комбинаций... вы для каждой предлагаете написать макрос?! мой совет касался в соновном использования символьных имен битов для управляющих регистров, что имеет смысл - наглядность кода резко повышается... а ваш метод что дает?! только хуже сделает...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мда, согласен, совет данного макроса был не совсем уместен.
Но вот когда в макросе происходят арифметические действия который будет получен после вызова функции... хотя, короче, чего это я. Это дело компилятора, я хотел сказать что макрос, это просто подставление его в код программы. А че с ним сделает компилятор - это другой вопрос.
Добрый день уважаемые. У меня тот же вопрос написал простой код для работы компоратора. В котором при изменении значения выхода ACO зажигается или тухнит светодиод PD7, а при изменении значения с 0 на 1 вызывается прерывание комп. Только вот почему то прерывание не вызывается, а PD7 горит не тухнит, при изменении значения входов с 0 до 2,5В.
Пробую пример в Proteuse 7 SP3
У Вас все нормально работает. Просто Вы неверно подключили приборы. Резистором RV2 устанавливается порог срабатывания компаратора, а срабатывание компаратора определяется движком резистора RV1 (или наоборот, это как Вам больше нравиться). Исправленная схема во вложении.
siamds писал(а):У Вас все нормально работает. Просто Вы неверно подключили приборы. Резистором RV2 устанавливается порог срабатывания компаратора, а срабатывание компаратора определяется движком резистора RV1 (или наоборот, это как Вам больше нравиться). Исправленная схема во вложении.
Спасибо за ответ, действительно не правильно собрал схему.
Ваша схема у меня работает, только почему то с 55 секунды, тоесть до 55 с меняю значения на сопротивлениях и все молчит. Вы меняли что нибудь в коде?(Просто мой код прошивки тот который я привел не работает, а ваш работает)..... или может просто очередной баг Proteusa.
EmDmAl писал(а): с 55 секунды, тоесть до 55 с меняю значения на сопротивлениях и все молчит.
Вероятно это происходит потому что у Вас между портом и светодиодом не стоит токоограничительное сопротивление. Светодиоды нельзя напрямую подключать на выход порта. Поставьте резистор порядка 300ом и проблема должна исчезнуть.