Genri 0 29 ноября, 2010 Опубликовано 29 ноября, 2010 · Жалоба Я полный чайник в программировании МК, это мой первый проект на avr, поэтому просьба сильно ногами не пинать. Пытаюсь решить задачу на tyny13. Задача: Организовать 2 канала АЦП (8 разрядов) независимо управляющих 2-мя каналами ШИМ (желательно Fast PWM). Алгоритм работы такой- устройство поочередно оценивает каждый входной канал и в зависимости от уровня сигнала управляет скважностью соответствующего канала ШИМ. На входы АЦП планирую подавать аудиосигнал. Проверяю проект в Протеусе, он показывает что работает только один канал ШИМ (OC0A). Своим г#внокодом вас грузить не буду только задам вопросы. Вопросы: 1.Поддерживает ли tyny13 Fast PWM по двум каналам одновременно? 2. Если нет то каким образом можно решить поставленную задачу? 3.Можно ли не использовать делитель тактового сигнала если я использую 8 разрядов АЦП? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 0 29 ноября, 2010 Опубликовано 29 ноября, 2010 · Жалоба 1. поддерживает 2. см. п.1 3. делитель тактового сигнала не связан с числом используемых разрядов АЦП - все равно он будет 10 бит насчитывать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 36 29 ноября, 2010 Опубликовано 29 ноября, 2010 · Жалоба 1.Поддерживает ли tiny13 Fast PWM по двум каналам одновременно? У нее же всего один таймер, поэтому на разных каналах можно только скважность разную установить, но частоту на каналах разной не сделаешь. 2. Если нет то каким образом можно решить поставленную задачу? Взять контроллер, у которого 2 или больше таймеров. 3.Можно ли не использовать делитель тактового сигнала если я использую 8 разрядов АЦП? А что мешает использовать все разряды? В крайнем случае можно сдвинуть число вправо на 2 разряда - вот и останется 8 бит (старших). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Genri 0 29 ноября, 2010 Опубликовано 29 ноября, 2010 · Жалоба 1. поддерживает 2. см. п.1 3. делитель тактового сигнала не связан с числом используемых разрядов АЦП - все равно он будет 10 бит насчитывать Спасибо за оперативный ответ. Значит буду дальше вправлять мозги МК и себе заодно :) У нее же всего один таймер, поэтому на разных каналах можно только скважность разную установить, но частоту на каналах разной не сделаешь. Взять контроллер, у которого 2 или больше таймеров. А что мешает использовать все разряды? В крайнем случае можно сдвинуть число вправо на 2 разряда - вот и останется 8 бит (старших). Вам тоже большое спасибо за ответ. Разная частота как раз и не нужна, нужна именно скважность зависящая от уровня входного сигнала. Не-е-е контроллер менять никак нельзя, я их что зря что ли 10 штук купил :) Кроме сильно ограниченных знаний и навыков ничто не мешает использовать все 10 разрядов АЦП, но для моих целей вполне достаточно 8 разрядов :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777777 0 30 ноября, 2010 Опубликовано 30 ноября, 2010 · Жалоба У нее же всего один таймер, поэтому на разных каналах можно только скважность разную установить, но частоту на каналах разной не сделаешь. Автору, как я понял, это и не требуется. Взять контроллер, у которого 2 или больше таймеров. Записывать значения в регистры OCR0A и OCR0B и получать два сигнала с разной скважностью. А что мешает использовать все разряды? В крайнем случае можно сдвинуть число вправо на 2 разряда - вот и останется 8 бит (старших). Если поставить бит ADLAR в регистре ADMUX то ничего сдвигать не нужно - старшие 8 бит будут в ADCH. В этом случае разрешается читать только ADCH, а ADCL игнорировать. Вот только назначение устройства не очень понято - нужно аналоговый сигнал преобразовывать в ШИМ? А потом? Фильтровать будешь? Кроме сильно ограниченных знаний и навыков ничто не мешает использовать все 10 разрядов АЦП Я полагаю, мешать может лишь разрядность таймера :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Genri 0 30 ноября, 2010 Опубликовано 30 ноября, 2010 · Жалоба Автору, как я понял, это и не требуется. Записывать значения в регистры OCR0A и OCR0B и получать два сигнала с разной скважностью. Если поставить бит ADLAR в регистре ADMUX то ничего сдвигать не нужно - старшие 8 бит будут в ADCH. В этом случае разрешается читать только ADCH, а ADCL игнорировать. Вот только назначение устройства не очень понято - нужно аналоговый сигнал преобразовывать в ШИМ? А потом? Фильтровать будешь? Я полагаю, мешать может лишь разрядность таймера :) Делаю все как вы сказали то есть записываю поочередно значения ADCH в регистры OCR0A и OCR0B (бит ADLAR установлен). Назначение устройства примитивное к выходам ШИМ подключаю аналоговые (стрелочные) индикаторы, поэтому думаю что фильтровать ничего не надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777777 0 30 ноября, 2010 Опубликовано 30 ноября, 2010 · Жалоба Делаю все как вы сказали то есть записываю поочередно значения ADCH в регистры OCR0A и OCR0B (бит ADLAR установлен). Назначение устройства примитивное к выходам ШИМ подключаю аналоговые (стрелочные) индикаторы, поэтому думаю что фильтровать ничего не надо. А зачем тогда вообще контроллер? Почему бы не подключить индикаторы сразу к аналоговым сигналам которые ты оцифровываешь? ЗЫ. У стрелочных индикаторов есть индуктивность, поэтому если подавать на них импульсное напряжение, то к ним еще диод нужен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Genri 0 30 ноября, 2010 Опубликовано 30 ноября, 2010 · Жалоба А зачем тогда вообще контроллер? Почему бы не подключить индикаторы сразу к аналоговым сигналам которые ты оцифровываешь? ЗЫ. У стрелочных индикаторов есть индуктивность, поэтому если подавать на них импульсное напряжение, то к ним еще диод нужен. Подключить индикаторы к аналоговым сигналам напрямую так это слишком просто и неинтересно.... А тут хочется хоть немного разобраться с АВРми, да плюс еще на свободные выводы tiny в перспективе пару аналоговых датчиков температуры повесить. С диодом проще будет разобраться :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Genri 0 30 ноября, 2010 Опубликовано 30 ноября, 2010 (изменено) · Жалоба Есть еще один вопрос к экспертам. Пытаюсь эмулировать работу устройства в AVR_Studio, устанавливая часть бит в регистре ADCH и ADCL (ADLAR=1). Пытаюсь загрузить ADCH в OCR0A (OCR0B) но он грузит только младшие два бита. Это так и должно быть? Если правильно перевел даташит в ADCH должен быть 8 битный результат преобразования АЦП. Или я не правильно понял? И еще не понятно почему в процессе эмуляции таймер не считает TCNT0=0. Изменено 30 ноября, 2010 пользователем Genri Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gretis 0 1 декабря, 2010 Опубликовано 1 декабря, 2010 · Жалоба С диодом проще будет разобраться :) Мне кажется, Вы не поняли, о чем Вам говорили. У стрелочных индикаторов существует назовем ее в данном случае "паразитная" индуктивность. Чтобы с ней бороться - следует включить в схему диод Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Genri 0 2 декабря, 2010 Опубликовано 2 декабря, 2010 · Жалоба Мне кажется, Вы не поняли, о чем Вам говорили. У стрелочных индикаторов существует назовем ее в данном случае "паразитная" индуктивность. Чтобы с ней бороться - следует включить в схему диод Да вы действительно правильно заметили я не о том подумал. Видимо имелось ввиду включение диода в обратном направлении параллельно катушке, аналогично диод включаются при подключении обмотки реле. Если не ошибаюсь поможет не спалить выходы МК. Теперь правильно понял? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gretis 0 2 декабря, 2010 Опубликовано 2 декабря, 2010 · Жалоба Теперь правильно понял? :) Да, именно так Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Genri 0 7 декабря, 2010 Опубликовано 7 декабря, 2010 (изменено) · Жалоба Не могу заставить работать выход OC0B в режиме Fast PWM. Подскажите пожалуйста как правильно настроить регистры? Изменено 7 декабря, 2010 пользователем Genri Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 8 7 декабря, 2010 Опубликовано 7 декабря, 2010 · Жалоба Не могу заставить работать выход OC0B в режиме Fast PWM.Вы не забыли настроить РВ1 на вывод? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Genri 0 7 декабря, 2010 Опубликовано 7 декабря, 2010 · Жалоба Вы не забыли настроить РВ1 на вывод? Да вроде нет. DDRB=(1<<DDB5)|(0<<DDB4)|(1<<DDB3)|(0<<DDB2)|(1<<DDB1)|(1 << DDB0); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться