0
Дык 257 положений никто и не просил. 257 получается именно из-за косяка, что 0 это 1 у Атмел. Если бы 0 был 0, то было бы 256 и все так чинно, благородно.
0
О, спасибо за подсказку, учту.
0
Боюсь, отец русской демократии будет не доволен отсутствием 100% заполнения в таком случае. Но как рабочий вариант годится, согласен.
0
Короче, получается так: в МК значению 0 в ШИМ регистре соответствует 1-й коэффициент заполнения на выходе. Т.о. мы получаем 256 уровней через 8 битный регистр с коэффициентами 1/256 — 100%. Что бы получить на выходе 0, нужно отключить ШИМ, т.е. это ещё один уровень, что дает в сумме 257. В итоге мы действительно получаем 257 уровней на выходе — 256 через регистр (1-257 на выходе) и PWM_OFF (0 на выходе).
Таким образом, проблема не в том, что
что 8-битный шим имеет 257 «положений»
и не в количестве «ступенек», а в том, что получаемое значения ШИМ сдвинуто на 1 относительно задаваемого через регистр. И поэтому 0 значение приходится получать дополнительным образом.
0
Найдите любой конвертер hex->dec (хоть калькулятор в винде) и посмотрите что он выдаст для 0xFF.
0
Опять же ошибка: не 0/256,256/256 — а 0/255,255/255. Максимальное значение 8-ми битного регистра и переменной — 255 (что в сумме с 0 дает 256 вариантов). Возможных заполнений вообще в принципе — бесконечное множество, но заполнений которые может сгенерировать конкретный МК, в конкретном случае — именно столько, сколько значений в регистре — и не больше.
0
Не понимаю вас. Откуда вы взяли какие-то промежуточные значения? Откуда они берутся? Да и это ничего не меняет — все равно каждому значению регистра должно соответствовать какое-то значение ШИМа. И если бы значений ШИМа было больше, то это значило бы, что они берутся из ниоткуда.
0
Если это, как вы утверждаете, ШИМ двухбитный — проставьте двухбитные значения каждому из указанных значений ШИМ.
0
Ну вот давайте просто подумаем логически: значений счетчика у нас 256 (с этим вы вроде согласны). Значений коэффициента, как вы говорите 257, т.е. на 1 больше. Тогда одному из значений счетчика, должно соответствовать 2 значения коэффициента. Вопрос: какому значению счетчика? И какие это коэффициенты?
0
вы оперируете какими-то неведомыми понятиями. Что такое и где описано
количество возможных коэффициентов заполнения, которые может генерить шим
И где написано, что их 257 ???
Вообщем, пусть нас рассудят более опытные и авторитетные товарищи.
0
Вы, извиняюсь, однозначно что-то путаете. Как это
В переменную влезает меньше
Переменная 8 бит, так же как и регистр и значений у неё ровно столько же. А причину проблемы я описал в статье — при старте таймера с 0 выход выставляется в 1, по-моему это даже в даташите написано.
0
Что значит
значений заполнения шима
?
У меня значение ШИМ хранится в переменной unsigned char, которая тоже может имеет 256 значений. Т.е. все соответствует полностью.
0
Имелось в виду 257 возможных установок — от 0/256 до 256/256
боюсь, вы ошибаетесь — значений в регистре может быть ровно 256 — от 0 до 255
0
255/256 или 256/256 — в большинстве случаев один фиг...
Что-то рассинхрон пошёл, если охота продолжать, то давайте вернемся к фразе
проблема тут в том, что 8-битный шим имеет 257 «положений»
— что имелось ввиду, какое 257-е положение?
Значение OCR запоминается в BOTTOM и используется в течении цикла
значение то может и запоминается, я говорю о моменте, когда выполняется сравнение этого значения — по-видимому это происходит в момент когда режим меняется. Как бы то ни было, эффект был, и исправить его удалось с помощью указанного кода.
0
Мастер CodeVision во второй версии генерил код инициализации в таком духе, в 3-й версии переделали.
0
Ну тогда пардон. Просто привычка со 2-го CodeVision осталась, в новых проектах на 3-м уже будет нормально, там из коробки подобный синтаксис.
0
Не очень удобно, конечно, что 2-й бит вынесен в TCCRB (т.к. добавлен позднее)
собсно, об это и речь
Тогда не получишь полной яркости
как ни кинь — всюду клин
Регистры OCR буферизованы, для одного цикла таймера используется строго одно значение.
буферизация наверное только для таймера, выход выставляется, следующее сравнение нас ждет в BOTTOM
А это что за вырвиглазие?
эээ… ну это как бы так короче, хотя так понятней. А кстати, любопытно, код генерится одинаковый? Или второй вариант преобразуется буквально