DronVolk писал(а):не могу понять смысл OCR1A/B, OCR1C. OCR1A/B - 8 битные как я понял из даташита, а вот OCR1C 16 битный и в заголовке он разбит на 2-е 8 битные переменные OCR1CH и OCR1CL то есть H - high L - low ....
Всё, таймер, как миленький работает, всё хорошо. Вы не могли бы мне объяснить что и как происходит в нём? Вот в первой строчке - побитовый сдвиг вправо до 8 или на 8 я не понимаю. Во второй строчке побитовое И. Вот тоже это не понимаю. Чего уж таить. Если не трудно, объясните? А так, большое спасибо!
число в памяти занимает 16 бит это 2 байта. H-high старший бит L-low младный бит. Как было написсано выше обязательно нужно писать с начало один байт а потом другой но компилятор при обычном присваивании делает это наобород вот они и разбиты на 2-а 8 битных числа. Сдвиг q>>8 переводит значение старшего байта в область младшего байта получается 8 битное число, q&0xFF обрезает старшие биты и из 16 числа получается 8 битное.
Последний раз редактировалось DronVolk Вс сен 06, 2015 11:06:04, всего редактировалось 1 раз.
я повелитель электронов! Но иногда появляются электроны бунтари и делают, что им вздумается, например, прокладывают новые пути движения...
"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
ISR (INT1_vect) //Обработка прерываний по INT1 { _delay_us(200); // ВОТ ЭТО КРАЙНЕ ПЛОХОЙ ПОДХОД. НИКОГДА ТАК НЕ ДЕЛАЙТЕ, ЕСЛИ ЭТО НЕ ЯВЛЯЕТСЯ ВОПРОСОМ ЖИЗНИ ИЛИ СМЕРТИ. if(pwm<970) pwm += 50; //Увеличивая pwm, уменьшаем ширину импульсов }
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
ваша проверочная программка может помочь понять, как категорически не следует делать:
[img]file:///home/extract/Downloads/screen97.png[/img] Вот так эта програмка работает.А не посмотришь. Ваш "клёвый хостинг" img.radiokot.ru не берёт изображения. Но, поверь, программа рабочая на сто. У меня есть много поверочных программ - и просто на тупое прерывание, и на захват, и на быстрый ШИМ и т.д. А с _delay-ем что не в порядке? Стандартный приём. Типа защита от дребезга. Компилятор его разворачивает где-то на двадцаать тактов( если не набольше).
gavrasio писал(а):А с _delay-ем что не в порядке? Стандартный приём. Типа защита от дребезга. Компилятор его разворачивает где-то на двадцаать тактов( если не набольше).
вам следует подучиться, причем серьезно.
как на 20 тактов может быть развернут delay, если вы требуете задержки на 200 микросекунд?! допустим, тактовая частота у вас 1 МГц (что само по себе редкость), тогда очевидно, что компилятор развернет delay в 200 тактов! с учетом того, что обычно тактовая частота выше, то и тактов будет пропорционально больше
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Дилей в прерывании? В преферансе и за меньшее сразу канделябром по рогам без предупреждения.
Я с Вами согласен на все сто. Нечего в прерываниях подолгу сидеть, особенно с делаями.Но возможности современных микроконтроллеров таковы, что им наплевать на все ограничения, которые были раньше. Сейчас эта тема не актуальна. Сейчас объём мозга программиста катит в тему, но никак объём МК.
Подскажите, пожалуйста, есть ли в AVR возможность установить выход таймера (OCnx) в желаемое состояние (ноль), когда таймер выключен? Можно ли это сделать не меняя настройки и не переключая режим работы?
B@R5uk писал(а):Подскажите, пожалуйста, есть ли в AVR возможность установить выход таймера (OCnx) в желаемое состояние (ноль), когда таймер выключен? Можно ли это сделать не меняя настройки и не переключая режим работы?
Непонятный вопрос. Не меняя настроек и не переключая режим -- это как? Ничего совсем не трогая? Силой мысли? Нет, силой мысли пока нельзя.
Я разумеется понял, о чем Вы говорили, просто, космическая наглость, помноженная на космическую же пустоту, как-то не вызывают серьезного к ним отношения. ("патамуиникусают...")
Не понял при чём тут main, но проблема в том, что состояние OCnx хранится отдельно от соответствующего бита порта PORTxPxn, так как состояние OCnx является внутренним битом компонента таймера Waveform Generator и не выведен ни в какой регистр, доступный для модификации (во всяком случае я не нашёл таковой в даташите).