реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> 2 кан. АЦП + 2 канала ШИМ (Fast PWM) на tyny13 такое возможно?, Может ли работать ШИМ (в режиме Fast PWM) сразу по двум каналам?
Genri
сообщение Nov 29 2010, 18:24
Сообщение #1


Участник
*

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



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


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



1. поддерживает
2. см. п.1
3. делитель тактового сигнала не связан с числом используемых разрядов АЦП - все равно он будет 10 бит насчитывать


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Nov 29 2010, 19:28
Сообщение #3


Гуру
******

Группа: Модератор 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 бит (старших).
Go to the top of the page
 
+Quote Post
Genri
сообщение Nov 29 2010, 21:03
Сообщение #4


Участник
*

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



Цитата(ARV @ Nov 29 2010, 22:14) *
1. поддерживает
2. см. п.1
3. делитель тактового сигнала не связан с числом используемых разрядов АЦП - все равно он будет 10 бит насчитывать

Спасибо за оперативный ответ.
Значит буду дальше вправлять мозги МК и себе заодно smile.gif

Цитата(Xenia @ Nov 29 2010, 22:28) *
У нее же всего один таймер, поэтому на разных каналах можно только скважность разную установить, но частоту на каналах разной не сделаешь.


Взять контроллер, у которого 2 или больше таймеров.


А что мешает использовать все разряды? В крайнем случае можно сдвинуть число вправо на 2 разряда - вот и останется 8 бит (старших).

Вам тоже большое спасибо за ответ.
Разная частота как раз и не нужна, нужна именно скважность зависящая от уровня входного сигнала.
Не-е-е контроллер менять никак нельзя, я их что зря что ли 10 штук купил smile.gif
Кроме сильно ограниченных знаний и навыков ничто не мешает использовать все 10 разрядов АЦП, но для моих целей вполне достаточно 8 разрядов smile.gif
Go to the top of the page
 
+Quote Post
777777
сообщение Nov 30 2010, 06:47
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 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 разрядов АЦП

Я полагаю, мешать может лишь разрядность таймера smile.gif
Go to the top of the page
 
+Quote Post
Genri
сообщение Nov 30 2010, 07:47
Сообщение #6


Участник
*

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



Цитата(777777 @ Nov 30 2010, 09:47) *
Автору, как я понял, это и не требуется.


Записывать значения в регистры OCR0A и OCR0B и получать два сигнала с разной скважностью.


Если поставить бит ADLAR в регистре ADMUX то ничего сдвигать не нужно - старшие 8 бит будут в ADCH. В этом случае разрешается читать только ADCH, а ADCL игнорировать.

Вот только назначение устройства не очень понято - нужно аналоговый сигнал преобразовывать в ШИМ? А потом? Фильтровать будешь?


Я полагаю, мешать может лишь разрядность таймера smile.gif

Делаю все как вы сказали то есть записываю поочередно значения ADCH в регистры OCR0A и OCR0B (бит ADLAR установлен).
Назначение устройства примитивное к выходам ШИМ подключаю аналоговые (стрелочные) индикаторы, поэтому думаю что фильтровать ничего не надо.
Go to the top of the page
 
+Quote Post
777777
сообщение Nov 30 2010, 08:25
Сообщение #7


Профессионал
*****

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



Цитата(Genri @ Nov 30 2010, 10:47) *
Делаю все как вы сказали то есть записываю поочередно значения ADCH в регистры OCR0A и OCR0B (бит ADLAR установлен).
Назначение устройства примитивное к выходам ШИМ подключаю аналоговые (стрелочные) индикаторы, поэтому думаю что фильтровать ничего не надо.

А зачем тогда вообще контроллер? Почему бы не подключить индикаторы сразу к аналоговым сигналам которые ты оцифровываешь?

ЗЫ. У стрелочных индикаторов есть индуктивность, поэтому если подавать на них импульсное напряжение, то к ним еще диод нужен.
Go to the top of the page
 
+Quote Post
Genri
сообщение Nov 30 2010, 08:52
Сообщение #8


Участник
*

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



Цитата(777777 @ Nov 30 2010, 11:25) *
А зачем тогда вообще контроллер? Почему бы не подключить индикаторы сразу к аналоговым сигналам которые ты оцифровываешь?

ЗЫ. У стрелочных индикаторов есть индуктивность, поэтому если подавать на них импульсное напряжение, то к ним еще диод нужен.

Подключить индикаторы к аналоговым сигналам напрямую так это слишком просто и неинтересно.... А тут хочется хоть немного разобраться с АВРми, да плюс еще на свободные выводы tiny в перспективе пару аналоговых датчиков температуры повесить.
С диодом проще будет разобраться smile.gif
Go to the top of the page
 
+Quote Post
Genri
сообщение Nov 30 2010, 10:45
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
aspID
сообщение Dec 1 2010, 15:08
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714



Цитата(Genri @ Nov 30 2010, 14:52) *
С диодом проще будет разобраться  smile.gif


Мне кажется, Вы не поняли, о чем Вам говорили. У стрелочных индикаторов существует назовем ее в данном случае "паразитная" индуктивность. Чтобы с ней бороться - следует включить в схему диод
Go to the top of the page
 
+Quote Post
Genri
сообщение Dec 2 2010, 08:38
Сообщение #11


Участник
*

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



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


Да вы действительно правильно заметили я не о том подумал.
Видимо имелось ввиду включение диода в обратном направлении параллельно катушке, аналогично диод включаются при подключении обмотки реле.
Если не ошибаюсь поможет не спалить выходы МК. Теперь правильно понял? smile.gif
Go to the top of the page
 
+Quote Post
aspID
сообщение Dec 2 2010, 13:11
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714



Цитата(Genri @ Dec 2 2010, 14:38) *
Теперь правильно понял?  smile.gif


Да, именно так
Go to the top of the page
 
+Quote Post
Genri
сообщение Dec 7 2010, 10:06
Сообщение #13


Участник
*

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



Не могу заставить работать выход OC0B в режиме Fast PWM.
Подскажите пожалуйста как правильно настроить регистры?

Сообщение отредактировал Genri - Dec 7 2010, 10:27
Go to the top of the page
 
+Quote Post
Палыч
сообщение Dec 7 2010, 12:14
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Genri @ Dec 7 2010, 13:06) *
Не могу заставить работать выход OC0B в режиме Fast PWM.
Вы не забыли настроить РВ1 на вывод?
Go to the top of the page
 
+Quote Post
Genri
сообщение Dec 7 2010, 12:26
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 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);
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 18:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01495 секунд с 7
ELECTRONIX ©2004-2016