Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
04.03.2012, 21:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: И снова ШИМ
Сообщение от SAHA_T
|
в материнке ведь пзу толком нет кроме биоса
|
Ну да. В современных 0,5-1Мб памяти, причём с интерфейсом SPI и частотой клока до 80 с лишним МГц. 8к-16к-шагов для эффектов. Можно, конечно, и псевдорандомные сделать.
|
|
|
|
04.03.2012, 22:04
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: И снова ШИМ
Сообщение от SAHA_T
|
Так теперь я начинаю немного понимать, а тогда в коде leartis каким образом реализован шим ? не аппаратным ?
|
Гы... Про что и толкуем с самого начала . Только софтовый .
__________________
Осторожно , злой кот
|
|
|
|
04.03.2012, 22:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: И снова ШИМ
Сообщение от SAHA_T
|
Вы мне объясните в while(1){ какая будет частота ? 100гц ?
|
Имеется в виду это?
Чтоб это узнать, надо пересчитывать все задержки, которые там сделаны. Да и важно ли это? От этого зависит только скорость изменения коэффициента заполнения ШИМ(изменение яркости).
Само "моргание" происходит в прерывании по переполнению таймера1.
Другой вопрос - зачем было использовать 16-ти битный Timer1, переменные типа integer при верхнем значении счётчика тиков 127?
При указанных в ините параметрах частота ШИМ для такта 16МГц будет ((16000000/8 )/65536)/127=0,23 герц... Мерцать точно будет...
|
|
|
|
04.03.2012, 22:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: И снова ШИМ
Сообщение от omercury
|
При указанных в ините параметрах
|
Блин, соврал насчёт частоты, там же перезагрузка счётчика (-156).
Примерно 100 герц (таймер на ~12,82кГц).
UPD. Кстати, там будет не ровно Плюсом пойдёт вход в прерывание и сохранение контекста. Лучше использовать режим таймера CCP.
Последний раз редактировалось omercury; 04.03.2012 в 22:48.
|
|
|
|
04.03.2012, 22:40
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: И снова ШИМ
я просто подумал что если частота в в основной программе будет 100гц тогда формула будет считаться 2 дня а потом уж и что то засветится
*переменные типа integer * неужели объявление переменных сильно влияет или это влияет на заполнение памяти ?
*Ну да. В современных 0,5-1Мб памяти, причём с интерфейсом SPI и частотой клока до 80 с лишним МГц. 8к-16к-шагов для эффектов. Можно, конечно, и псевдорандомные сделать.* можно по подробней как можно задействовать матери от компов.
*Гы... Про что и толкуем с самого начала . Только софтовый .* млин так я изначально думал что типа аппаратный это при помощи выставления фузов точней задержек фузов а получается что я с самого начала ошибался и это меня вводило в заблуждение
*частота ШИМ для такта 16МГц будет ((16000000/8 )/65536)/127=0,23 герц* если не трудно разжуйте мне плиз эту формулу я просто не понимаю что на что влияет
|
|
|
|
04.03.2012, 22:46
|
|
Прописка
Регистрация: 04.12.2010
Сообщений: 243
Сказал спасибо: 9
Сказали Спасибо 51 раз(а) в 32 сообщении(ях)
|
Re: И снова ШИМ
...и чё велосипед изобретаете? ...есть же готовые конструкции, ну вот к примеру:
12-ти канальный генератор эффектов на ATtiny2313
..12 каналов правда, но не беда, можно и спаралелить. И как пособие для изучения для ТС по моему тож совсем даж покатит..
|
|
|
|
04.03.2012, 23:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: И снова ШИМ
Сообщение от SAHA_T
|
формула будет считаться 2 дня
|
В данном случае примерно так и будет...
Сообщение от SAHA_T
|
неужели объявление переменных сильно влияет или это влияет на заполнение памяти ?
|
В данном случае это сильно влияет на время работы в прерывании - там много сравнений, а 16-битные выполняются значительно дольше 8-битных.
Сообщение от SAHA_T
|
можно по подробней как можно задействовать матери от компов.
|
В память забивается таблица яркостей каналов ШИМ, а МК их с определённой периодичностью считывает. Достаточно кропотливый метод, но позволяет реализовать любые желаемые эффекты и делает весь прибор много гибче - простой сменой таблицы меняются все эффекты без перепрограммирования МК.
Сообщение от SAHA_T
|
просто не понимаю что на что влияет
|
PHP код:
|
TCCR1B |= 0x2; //включить таймер 1 с делителем 8
|
Здесь задаётся предделитель 8, то есть тактовая частота до таймера делится на 8 - на входе счётчика таймера получится 16МГц/8=2МГц.
Далее идёт сам счётчик. Он имеет ширину 16 бит, т.е. считает от "0" до (2^16)-1=65535. То есть 65536 отсчётов( наверху уже написал, что ошибся). На самом деле в самом прерывании в счётчик записывается число 65380 (65536-65380=156). таймер переполнится через 156 тиков на входе уже после предделителя.
На эти цифры и делим.
16000000/8/156=12820,512820512820512820512820513 Гц.
В прерывании используется переменная , которая делит эту частоту на 128. В результате получим примерно 100Гц...
Последний раз редактировалось omercury; 04.03.2012 в 23:14.
|
|
|
|
05.03.2012, 00:30
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: И снова ШИМ
*В память забивается таблица яркостей каналов ШИМ, а МК их с определённой периодичностью считывает.* Я так понимаю что создается массив(матрица) значений который забивается в память (строка столбец и каждый светодиод имеет свой порядковый номер в данной матрице) я как то видел табло в котором было всего 2 микры но видел из далека и я так понимаю что это оно и есть, стоит МК и вся основа находится в внешней памяти и по определенному алгоритму эти значения вытаскиваются из памяти и получается готовая буква но при этом нужно еще сделать прогу которая будет в определенном порядке заносить данные значения в память. Наверное как то так
Все остальное я понимаю с большим трудом, единственно я знаю точно, нужно поэкспериментировать с кодом и посмотреть как что работает.
Опыта маловато
Pajatel Хочу заметить что велосипед никто не изобретал, просто я в данной сфере очень слаб. А за ссылку огромное спасибо я обязательно посмотрю
|
|
|
|
05.03.2012, 00:41
|
|
Частый гость
Регистрация: 04.10.2007
Адрес: Запорожье
Сообщений: 43
Сказал спасибо: 8
Сказали Спасибо 14 раз(а) в 13 сообщении(ях)
|
Re: И снова ШИМ
Сообщение от omercury
|
Другой вопрос - зачем было использовать 16-ти битный Timer1
|
Да как бы не важно. На самом деле просто не помню на память флаги и регистры для таймера0
Цитата:
|
переменные типа integer при верхнем значении счётчика тиков 127?
|
Тут не спорю, незачем. Ну, блин, вчера по-быстрому перевел кусок программы в Си - для примера. Понятно, что-то упустил, но не принципиально
|
|
|
|
05.03.2012, 02:01
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: И снова ШИМ
Сообщение от SAHA_T
|
Все остальное я понимаю с большим трудом
|
Мне кажется, для начала нужно понять что такое софтверный ШИМ.
Вот, к примеру, картинка.
Микропроцессор регулярно каждые 78мкс выполняет кусочек программы, который называется обработчик прерывания таймера. В этом обработчике переменная Counter увеличивается на +1, изменяясь от 0 до 127 (синий график). Как только Counter ›127, сразу делаем Counter=0. Таким образом, весь подъём синего графика составляет 128*78мкс = 10мс.
Ещё eсть переменная Kanal_0, которая, например, равна 92. В обработчике сравниваем Kanal_0 и Counter. Если Counter‹Kanal_0, то на выход порта POARTA.1 выставляем 1, если Counter›=Kanal_0, то выход = 0.
Вот и весь ШИМ. Получается, что наш выход порта 92 шага равен 1 и (128-92=36) 36 шагов равен 0. И всё это повторяется каждые 10мс, или, другими словами, с частотой 100Гц. То есть, часть периода светодиоды горят на полную мощность, определяется резистором, другую часть - выключены. Моргают с частотой 100Гц, для глаза незаметно. Из-за того, что включены-выключены, 92 и 36, в среднем яркость получается процентов 70 от максимума.
Если переменную Kanal_0 медленно увеличивать до 127, то время включённого состояния будет увеличиваться, и время выкл. состояния уменьшаться соответственно. Средняя яркость светодиодов, таким образом, будет медленно расти. Вот изменяя эту переменную Kanal_0 больше-меньше, и получаются всякие световые эффекты, типа плавное нарастание-спадание света.
Последний раз редактировалось Yurkin2007; 05.03.2012 в 02:55.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:53.
|
|