Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
10.05.2011, 17:44
|
|
Прохожий
Регистрация: 09.05.2011
Сообщений: 5
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ШИМ, синусоида на Мега8?
Здравствуйте,
возможно весьма нубский вопрос, но не смогла найти разжеванный материал по COM битам для ШИМ в регистре TCCR.
У меня Fast PWM.
Точно также нужно настроить вывод синусоиды.. Какой режим для этого нужен: нормальный, не-инвертированный, инвертированный? И в чем разница между нормальным и неинвертированным?
|
|
|
|
10.05.2011, 17:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: ШИМ, синусоида на Мега8?
Сообщение от KvitkaLavi
|
И в чем разница между нормальным и неинвертированным?
|
Представьте инвертор на выходе - это инвертированный. Без - прямой. ![Улыбка](images/smilies/icon_smile.gif)
От этого зависит коэффицент заполнения в зависимости от значения OCR регистра. При прямом ШИМ с увеличением значения OCR длительность высокого уровня в периоде растет. При инвертирующем ШИМ - падает. Для синуса в общем то все равно. Просто фаза перевернется на 180 градусов.
|
|
|
|
10.05.2011, 18:01
|
|
Прохожий
Регистрация: 09.05.2011
Сообщений: 5
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ШИМ, синусоида на Мега8?
kison,
тогда почему три режима? Если нормальный и неивертированный совпадают? или все таки не совпадают?
|
|
|
|
10.05.2011, 19:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: ШИМ, синусоида на Мега8?
Сообщение от KvitkaLavi
|
kison,
тогда почему три режима? Если нормальный и неивертированный совпадают? или все таки не совпадают?
|
Первый режим - когда ШИМ вообще влияния на вывод не оказывает.
Второй - меандр генерирует. ( там есть доп. условия работы)
Третий и четвертый - ШИМ неинвертирующий и инвертирующий.
|
|
|
|
11.05.2011, 19:26
|
|
Прохожий
Регистрация: 09.05.2011
Сообщений: 5
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ШИМ, синусоида на Мега8?
Спасибо. С этим теперь понятно.
А еще такой вопрос - как задать/рассчитать период полученной синусоиды?
У меня только одно прерывание - для ШИМ, считывание одного значения из таблицы происходит через заданное кол-во тактов. То мой период будет в тактах как произведение кол-ва точек из таблицы на кол-во тактов ожидания? А такт - это 1/частота подключенного кварца?
Или есть другие более адекватные способы подсчитать?)
Если непонятно объяснила, то прилагаю код..
|
|
|
|
12.05.2011, 02:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: ШИМ, синусоида на Мега8?
Сообщение от KvitkaLavi
|
Если непонятно объяснила, то прилагаю код..
|
Код:
|
T0_OVF:
ldi r18, 0x00
ldi ZL, low(sin*2) ;считывание значения из массива
ldi ZH, high(sin*2)
ldi tempz1,0
add ZL,tempz ;прибавление
adc ZH,tempz1 ;внутр. адреса
LPM
mov tempz1,R0 ;копирование
out ICR1L,tempz1
out ICR1H, r18
inc tempz
ldi temp, 0xD5
out TCNT0, temp
reti |
Зачем Вы отсчеты грузите в ICR? Логично было бы предположить что надо в OCR.
Дальше - таблица отсчетов у Вас на 80 значений. А читаете Вы со смещением расположенном в R19 (tempz) - причем после каждого чтения идет его инкремент. Представьте что в нем 79 содержится - увеличив на 1 Вы выйдете за пределы таблицы и вместо осмысленных отсчетов получите случайные значения. Но будете продолжать и дальше читать ерунду и выводить ее через ШИМ - пока tempz не переполнится и соответственно не обнулится. Красоты сигналу это не добавит однозначно.
Удобно делать размер таблицы кратным 2^N - например 32 значения, 64, 128, 256. Но можно и 80 оставить - только проверяйте tempz на выход за предел таблицы и если вышел то грузите туда 0.
Ну там и еще можно посокращать код. Например выводить можно прямо из R0, не копируя предварительно считанный из таблицы отсчет в tempz1.
Когда исправите то период рассчитать будет просто.
Сообщение от KvitkaLavi
|
То мой период будет в тактах как произведение кол-ва точек из таблицы на кол-во тактов ожидания?
|
Но в этом идете в правильном направлении.
|
|
|
|
12.05.2011, 03:21
|
|
Прохожий
Регистрация: 09.05.2011
Сообщений: 5
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ШИМ, синусоида на Мега8?
kison,
т.е. как я поняла, нужно проверять, что tempz всегда меньше кол-ва точек в моем массиве и при достижении последней обнулять адрес? Тогда почему пока что всё работает и синусоида имеется?..
А насчет ICR/OCR меня сбило в даташите, что есть режим, когда OCR - как выход, а ICR - для счета/занесения значения.. и подумалось мне, что OCR либо счет, либо выход. Пока сделала задачу, уже поняла, что там совсем другой принцип, не то что в голове накрутила...
Спасибо большое.
|
|
|
|
12.05.2011, 04:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: ШИМ, синусоида на Мега8?
Сообщение от KvitkaLavi
|
т.е. как я поняла, нужно проверять, что tempz всегда меньше кол-ва точек в моем массиве и при достижении последней обнулять адрес?
|
Угу, именно так.
Точно синус имеется? Вот с этой программой? На осциллографе два последовательных периода видно? Сомневаюсь я чего то..
И все же попробуйте переделать таблицу на кратную степени двойки. Вместо 80 значений на 64 или 128.
Тогда
Код:
|
inc tempz
// добавление
andi tempz,0x7F // для 128 значений
// andi tempz,0x3F // для 64 значений
//
ldi temp, 0xD5
out TCNT0, temp |
Ну или сравнивайте с 80 если оставите старую таблицу. И если совпадет обнуляйте tempz. Это курсовик?
|
|
|
|
12.05.2011, 18:36
|
|
Прохожий
Регистрация: 09.05.2011
Сообщений: 5
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ШИМ, синусоида на Мега8?
kison,
Нет, просто лабораторная.
И да, с 80 значениями почему-то жутко некрасивая была выходящая штука, периодическая, но не очень синусоидная. А вот как расширила таблицу до 200+ значений и о, чудо! вывелась красивая синусоида.
Спасибо Вам большое.
А то только начинаю заниматься и многие штуки не знаю - например, с andi
|
|
|
|
12.05.2011, 18:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: ШИМ, синусоида на Мега8?
Сообщение от KvitkaLavi
|
А вот как расширила таблицу до 200+ значений и о, чудо! вывелась красивая синусоида.
|
Расширьте до 256 значений и не придется ничего проверять-обнулять.
Сообщение от KvitkaLavi
|
А то только начинаю заниматься и многие штуки не знаю - например, с andi
|
Ну для того и существуют форумы - подсказать, указать на ошибки.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:32.
|
|