|
2 кан. АЦП + 2 канала ШИМ (Fast PWM) на tyny13 такое возможно?, Может ли работать ШИМ (в режиме Fast PWM) сразу по двум каналам? |
|
|
|
Nov 29 2010, 18:24
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 28-04-05
Пользователь №: 4 598

|
Я полный чайник в программировании МК, это мой первый проект на avr, поэтому просьба сильно ногами не пинать. Пытаюсь решить задачу на tyny13. Задача: Организовать 2 канала АЦП (8 разрядов) независимо управляющих 2-мя каналами ШИМ (желательно Fast PWM). Алгоритм работы такой- устройство поочередно оценивает каждый входной канал и в зависимости от уровня сигнала управляет скважностью соответствующего канала ШИМ. На входы АЦП планирую подавать аудиосигнал. Проверяю проект в Протеусе, он показывает что работает только один канал ШИМ (OC0A). Своим г#внокодом вас грузить не буду только задам вопросы. Вопросы: 1.Поддерживает ли tyny13 Fast PWM по двум каналам одновременно? 2. Если нет то каким образом можно решить поставленную задачу? 3.Можно ли не использовать делитель тактового сигнала если я использую 8 разрядов АЦП?
|
|
|
|
|
Nov 29 2010, 19:28
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(Genri @ Nov 29 2010, 21:24)  1.Поддерживает ли tiny13 Fast PWM по двум каналам одновременно? У нее же всего один таймер, поэтому на разных каналах можно только скважность разную установить, но частоту на каналах разной не сделаешь. Цитата(Genri @ Nov 29 2010, 21:24)  2. Если нет то каким образом можно решить поставленную задачу? Взять контроллер, у которого 2 или больше таймеров. Цитата(Genri @ Nov 29 2010, 21:24)  3.Можно ли не использовать делитель тактового сигнала если я использую 8 разрядов АЦП? А что мешает использовать все разряды? В крайнем случае можно сдвинуть число вправо на 2 разряда - вот и останется 8 бит (старших).
|
|
|
|
|
Nov 29 2010, 21:03
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 28-04-05
Пользователь №: 4 598

|
Цитата(ARV @ Nov 29 2010, 22:14)  1. поддерживает 2. см. п.1 3. делитель тактового сигнала не связан с числом используемых разрядов АЦП - все равно он будет 10 бит насчитывать Спасибо за оперативный ответ. Значит буду дальше вправлять мозги МК и себе заодно  Цитата(Xenia @ Nov 29 2010, 22:28)  У нее же всего один таймер, поэтому на разных каналах можно только скважность разную установить, но частоту на каналах разной не сделаешь.
Взять контроллер, у которого 2 или больше таймеров.
А что мешает использовать все разряды? В крайнем случае можно сдвинуть число вправо на 2 разряда - вот и останется 8 бит (старших). Вам тоже большое спасибо за ответ. Разная частота как раз и не нужна, нужна именно скважность зависящая от уровня входного сигнала. Не-е-е контроллер менять никак нельзя, я их что зря что ли 10 штук купил  Кроме сильно ограниченных знаний и навыков ничто не мешает использовать все 10 разрядов АЦП, но для моих целей вполне достаточно 8 разрядов
|
|
|
|
|
Nov 30 2010, 06:47
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(Xenia @ Nov 29 2010, 22:28)  У нее же всего один таймер, поэтому на разных каналах можно только скважность разную установить, но частоту на каналах разной не сделаешь. Автору, как я понял, это и не требуется. Цитата(Xenia @ Nov 29 2010, 22:28)  Взять контроллер, у которого 2 или больше таймеров. Записывать значения в регистры OCR0A и OCR0B и получать два сигнала с разной скважностью. Цитата(Xenia @ Nov 29 2010, 22:28)  А что мешает использовать все разряды? В крайнем случае можно сдвинуть число вправо на 2 разряда - вот и останется 8 бит (старших). Если поставить бит ADLAR в регистре ADMUX то ничего сдвигать не нужно - старшие 8 бит будут в ADCH. В этом случае разрешается читать только ADCH, а ADCL игнорировать. Вот только назначение устройства не очень понято - нужно аналоговый сигнал преобразовывать в ШИМ? А потом? Фильтровать будешь? Цитата(Genri @ Nov 30 2010, 00:03)  Кроме сильно ограниченных знаний и навыков ничто не мешает использовать все 10 разрядов АЦП Я полагаю, мешать может лишь разрядность таймера
|
|
|
|
|
Nov 30 2010, 07:47
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 28-04-05
Пользователь №: 4 598

|
Цитата(777777 @ Nov 30 2010, 09:47)  Автору, как я понял, это и не требуется. Записывать значения в регистры OCR0A и OCR0B и получать два сигнала с разной скважностью. Если поставить бит ADLAR в регистре ADMUX то ничего сдвигать не нужно - старшие 8 бит будут в ADCH. В этом случае разрешается читать только ADCH, а ADCL игнорировать. Вот только назначение устройства не очень понято - нужно аналоговый сигнал преобразовывать в ШИМ? А потом? Фильтровать будешь? Я полагаю, мешать может лишь разрядность таймера  Делаю все как вы сказали то есть записываю поочередно значения ADCH в регистры OCR0A и OCR0B (бит ADLAR установлен). Назначение устройства примитивное к выходам ШИМ подключаю аналоговые (стрелочные) индикаторы, поэтому думаю что фильтровать ничего не надо.
|
|
|
|
|
Nov 30 2010, 08:52
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 28-04-05
Пользователь №: 4 598

|
Цитата(777777 @ Nov 30 2010, 11:25)  А зачем тогда вообще контроллер? Почему бы не подключить индикаторы сразу к аналоговым сигналам которые ты оцифровываешь?
ЗЫ. У стрелочных индикаторов есть индуктивность, поэтому если подавать на них импульсное напряжение, то к ним еще диод нужен. Подключить индикаторы к аналоговым сигналам напрямую так это слишком просто и неинтересно.... А тут хочется хоть немного разобраться с АВРми, да плюс еще на свободные выводы tiny в перспективе пару аналоговых датчиков температуры повесить. С диодом проще будет разобраться
|
|
|
|
|
Nov 30 2010, 10:45
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 28-04-05
Пользователь №: 4 598

|
Есть еще один вопрос к экспертам. Пытаюсь эмулировать работу устройства в AVR_Studio, устанавливая часть бит в регистре ADCH и ADCL (ADLAR=1). Пытаюсь загрузить ADCH в OCR0A (OCR0B) но он грузит только младшие два бита. Это так и должно быть? Если правильно перевел даташит в ADCH должен быть 8 битный результат преобразования АЦП. Или я не правильно понял? И еще не понятно почему в процессе эмуляции таймер не считает TCNT0=0.
Сообщение отредактировал Genri - Nov 30 2010, 11:25
|
|
|
|
|
Dec 2 2010, 08:38
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 28-04-05
Пользователь №: 4 598

|
Цитата(aspID @ Dec 1 2010, 19:08)  Мне кажется, Вы не поняли, о чем Вам говорили. У стрелочных индикаторов существует назовем ее в данном случае "паразитная" индуктивность. Чтобы с ней бороться - следует включить в схему диод Да вы действительно правильно заметили я не о том подумал. Видимо имелось ввиду включение диода в обратном направлении параллельно катушке, аналогично диод включаются при подключении обмотки реле. Если не ошибаюсь поможет не спалить выходы МК. Теперь правильно понял?
|
|
|
|
|
Dec 7 2010, 10:06
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 28-04-05
Пользователь №: 4 598

|
Не могу заставить работать выход OC0B в режиме Fast PWM. Подскажите пожалуйста как правильно настроить регистры?
Сообщение отредактировал Genri - Dec 7 2010, 10:27
|
|
|
|
|
Dec 7 2010, 12:26
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 28-04-05
Пользователь №: 4 598

|
Цитата(Палыч @ Dec 7 2010, 15:14)  Вы не забыли настроить РВ1 на вывод? Да вроде нет. DDRB=(1<<DDB5)|(0<<DDB4)|(1<<DDB3)|(0<<DDB2)|(1<<DDB1)|(1 << DDB0);
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|