Есть аппаратный ШИМ на атмега 8, который реализован PWM, Phase and Frequency, пункт 8 по даташиту. Как получить эту частоту ШИМ на любом другом выводе МК с инверсией. Коротко о программе. TCCR1A |= (1<<COM1A1); TCCR1A &= ~(1<<COM1A0); TCCR1A &= ~(1<<WGM10); TCCR1A &= ~(1<<WGM11); TCCR1B &= ~(1<<WGM12); TCCR1B |= (1<<WGM13); TCCR1B |= (1<<CS10); TCCR1B &= ~(1<<CS11); TCCR1B &= ~(1<<CS12); ICR1 = 645; OCR1A = 340;
Мега8 очень примитивный контроллер по нынешним меркам, никаких возможностей по переназначению портов для периферии там нет, так что на ЛЮБОЙ ДРУГОЙ вывод железно ШИМ не вывести. Вариант 1: инверсию можно вывести на OC1B, записав "11" в COM1B1:COM1B0 Вариант 2: в главном цикле тупо проверять OC1A и инвертируя его, выводить на требуемый пин, естественно, никакой Phase/Frequency Correct тут не будет, особенно если есть длинные прерывания или другие подпрограммы Вариант 3: попробовать сделать то же что и в В2, но через прерывания, отслеживать придется и OCR и OVF и переключать вывод в соответствии с алгоритмом режима 8. Результат будет немного получше чем в В2 Вариант 4: тупо поставить инвертор на OC1A (да хоть на транзисторе), сэкономив вывод контроллера и освободив его от лишних вычислений
_________________ Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Вариант 1: инверсию можно вывести на OC1B, записав "11" в COM1B1:COM1B0
Спасибо за ответ. Пробовал разные варианты, в том числе и такой, не прокатывает. У меня там Атмега 168, где надо шим с инверсией, но я хотел понять суть работы на 8. Неужели программный писать?
Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.
Есть заводской блок, у которого накрылся МК 168, у него несколько частот выход. На выходе 420, 480, 720, 780 Гц. Но с выхода портов PD3 и PD5, частота идёт на драйвера с инверсией и шимом регулируется выходное напряжение.
Ну так без переделки схемы восьмая мега туда и не пойдет, если ШИМ не программно делать, у нее на DP3/PD5 вообще ШИМ не выводится. Вот у 168 там да, выходы железной ШИМ, причем от разных таймеров.
Кстати, на эти выводы работают таймеры 0 и 2, у них нет режима Phase and Frequency Correct, он есть только у 16-битного таймера 1.
_________________ Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Я не собираюсь переделывать. Мне проще разбираться на 8 атмеге как это сделать, потом перенесу на 168. Он там по любому аппаратный, так как порты на выходе OC0B и OC2B.
Подскажи пожалуйста как это у тебя получилось? Если можно, какой кусок программы надо добавить? Я просто около года только занимаюсь программированием и то не каждый день, по наличию свободного времени. Извини. Но для меня понятный, это язык СИ. В ассемблере, я как баран.
Тут ничего сложного, программа 1 в 1 как в первом посте, только как я и говорил, добавлены "1" в биты COM1B1 и COM1B0, ну и вместо прямой записи констант в регистры, я их рассчитал заранее (частота ШИМ и процент заполнения). Если убрать макрос OUTI и далее вместо запятой разделяющей имя регистра и его значение поставить "=", то получится тот же код на Си.
_________________ Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Тут ничего сложного, программа 1 в 1 как в первом посте, только как я и говорил, добавлены "1" в биты COM1B1 и COM1B0.
Я этот вариант пробовал и ещё раз на всякий случай перепроверил. На СИ не прокатывает, чего-то не хватает. Вот чего, понять не могу. Ещё раз даташит посмотрю, может где что-то упустил и не прописал в регистре, чтобы СОМ1В заработал. А что означает команда SPL и SPH? SBI я так понял, это порты как выход, а Loop RJMP это возврат на адрес 0026? Всё остальное у меня на СИ прописано как у вас. У вас на ассемблере пашет второй канал, а у меня на СИ не хочет.
SPL-SPH это регистр указателя стека, в ассемблере его надо инициализировать, в Си оно само... SBI это установка бита в регистре, да в данном случае это порты на выход, LOOP - просто метка, RJMP PC это пустой вечный цикл (переход на адрес, а PC - это как раз текущий адрес), если ничего делать не надо. А вот чего у вас еще нет, так это загрузки во второй регистр сравнения OCR1B, он как раз определяет заполнение ШИМ на втором канале! Туда надо загрузить то же что и в OCR1A.
_________________ Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Всем огромное спасибо за помощь. Добавил равенство OCR и всё заработало. Но инверсия косая получается на 10 мГц, при WGM13=1, остальные в нулях. Даже если прописать WGM10 и 11 как выше указано, а 13=0, всё равно инверсия неодинаковая по длительности.
Добавлено after 1 hour 22 minutes 24 seconds: Выше указанный ШИМ в архиве zip только с частотой 8 мГц работает нормально. Если на 8 мГц я включаю WGM13, а отключаю 10 и 11, то длительность тоже нормальная, но идёт подёргивание сигнала на двух портах.Вечером на другом ноуте скомпилирую на 8 и 10 мГц и посмотрю, что получается. А то может на этом какой косяк лезет.
Спасибо разобрался. Нетбук у меня косячит, скорее всего из-за того. что пару дней назад разбирался с прошивками по восстановлению диагностического шнурка VCDS и загрузил инсталлер. который сделал мне 480 изменений реестра, еле удалил всё и почистил. Если кого интересует, то могу сказать, что в инете хрень, а не еепром выложены. Флеши с разными версиями там рабочие. Более подробно через личку. Возможно кривая чистка реестра. Теперь надо будет винду сносить. На ноуте никаких подёргиваний сигнала нет, даже при активированном WGM13, остальные в нулях. А мой косяк по длительности между портами из-за того, что при управлении кнопками плюс и минус заполнение ШИМ надо одинаково прописывать как OCR1A, так и OCR1B. А у меня было прописано только управление OCR1A. Тогда и длительность сигнала и пауза будет одинакова на двух портах в инверсии. veso74, Engineer_Keen, спасибо вам огромное. Без вашей помощи я бы точно не разобрался. Для таких как я, начинающих, выложу исходник с прошивкой и протеус.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения