Страница 1 из 2

аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Ср июл 25, 2012 22:33:02
c2n
Уважаемые коты!
Пожалуйста помогите разобраться с Аппаратным ШИМ в Attiny2313. в частности теории. Сам я ITшник, и местами пейсатель на Delphi/C++, а вот электроникой недавно увлекся ^_^, в институте проходили. но тогда не зацепило.

Есть учебная граната задача... (Hello world доделал недавно, это второй проект)
Есть тинька2313, есть 3 семисегментника (можно и 2 заюзать, но в HEX читать дисплей - не привычно), есть 3 кнопки и один RGB светодиод.
Задача: при помощи ШИМа заставить светодиод выдавать определенный цвет, задавая параметр R/G/B от 0 до 255

Как я вижу решение этой задачи: присуседить 3 семисегментника (как из примера в обучалке - "Динамическая индикация"), используется 10 ног ("точки" нафиг не нужны)
Прикрепить 3 кнопки, 2 из которых будут отвечать за установку количества каждого цвета. 3я кнопка - ввод R/G/B

Соответственно диод должен будет менять свой цвет, изменяя R/G/B параметр.

Итого задействовано 19 ног, включая обвязку питания и адскую кнопку РЕСЕТ.

Для того что бы у меня диод светил, я интенсивность задаю через ШИМ.
Программно задача описывается так: крутить счетчик для каждой ноги, считая от 0 до 255 и если текущее значение меньше установленного, то на порт выводить 1, если больше выводить 0 (можно и на оборот, как надо установим методом научного тыка).

Хочется "усложнить" задачку, и понять как можно реализовать через аппаратный ШИМ.

в ДШ сказано, что ШИМ в аттини - Есть, и вроде как 2 штуки!.
Уважаемые форумчане, подскажите:
1) на сколько реально использовать аппаратный ШИМ для данной задачи, и хватит ли?
2) Схемотехника - на какие ноги вешается LED-RGB
3) Ваше видение решения данной задачи (экспертное мнение)

PS за схему не бить, рисовал в обед на работе...
ЗЫЫ Сильно в википедию, Хоровица-Хилла и ДШ носом не тыкать :)))))))

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Ср июл 25, 2012 22:50:40
ploop
1) на сколько реально использовать аппаратный ШИМ для данной задачи, и хватит ли?
Реально, хватит, там 4 канала аппаратных ШИМа, но придётся задействовать оба таймера
2) Схемотехника - на какие ноги вешается LED-RGB
Смотрите на первой странице краткое описание функций: ноги OC0A/B (таймер 0, 8-битный) и OC1A/B (16-битный). Вот на три из этих четырёх.
3) Ваше видение решения данной задачи (экспертное мнение)
Любая аппаратная вещь намного проще и надёжнее её программной реализации. В данном случае вам надо только настроить таймеры, и они сами будут всё делать. Вам останется только изменять числа в регистрах сравнения, когда это необходимо, и пропорционально будет меняться яркость.
ЗЫЫ Сильно в википедию, Хоровица-Хилла и ДШ носом не тыкать
Ну а как вы хотели? Всех котят носом в молоко тыкают по началу :)))
Токоограничивающие резисторы нужно на каждый вывод светодиода, а не один на все. Анод жестко на плюс сажайте, а на катоды - резисторы. То же касается и индикатора: на каждый из семи выводов.

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Ср июл 25, 2012 23:18:47
c2n
ну про резисторы, было нарисовано "тут где-то должен быть резистор".... про то что резюк перед ногой сажать надо - был научен пока игрался с "HelloWorld" :(((
ноги OC0A/B (таймер 0, 8-битный) и OC1A/B (16-битный). Вот на три из этих четырёх
не просеку фишку... как оно работает.

Если кто может, обЪясните по принципу:

OC0A каждый такт от внутреннего генератора/XTAL1,2 за такт(количество тактов) делает 256 отсчетов и если некая переменная в памяти МК := True тогда на ногу OC0A выдается логическая "1" в противном случае "0", состояние переменной проверяется при каждой итерации приросте некого встроенного счетчика...

ЗЫ: Коты! просто очень тяжело врубиться в "программинг МК", когда всю жизнь думал абстракциями WinAPI XD, изъясняясь на Delphi

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Ср июл 25, 2012 23:32:58
ploop
Вообще-то всё описано в даташите, и подробно :)

OC0A - просто название вывода.
Тактовый генератор тоже не при чём, таймер тактируется от собственного предделителя, и может работать либо напрямую от переферийной шины clkI/O (сичтай - тактового генератора, т.е. с частотой кварца), либо с предделителем clkI/O/8, clkI/O/64, clkI/O/256, или clkI/O/1024 (настраивается в регистрах TCCR(0/1)(A/B)).

У него есть регистры сравнения, по два на таймер. Называются они там OCR(0/1)(A/B). Если выбран один из режимов работы как ШИМ, то к модулю сравнения подключается нога. Работает тупо: пока в счётном регистре число меньше, чем в регистре сравнения, на ноге ноль, иначе - единица (или наоборот, настраивается). Счётный регистр постоянно увеличивается, доходит до максимума (255 или 65535 в 16-битном таймере) и сбрасывается (если режим Fast PWM) или начинает считать в обратную сторону (Phase correct PWM).
И всё. Делать ничего не надо, кроме как менять число в регистре сравнения. Всё это работает аппаратно, т.е. в железе. На тупой логике.

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Чт июл 26, 2012 05:59:09
BOB51
насчет кнопушек...

перебор светиков (+/-)
выбор конкретного (подтвердить/отменить)
смена содержимого выбранного канала (+/-)
подтвердить/отменить

похоже одну процедуру (выбор канала) пропустили, а это или еще кнопушка или усложнение программы отображения/ввода параметров.
Да и сами кнопушки... для 3-х штук потребна всего одна дополнительная линия (контроль состояния) - три уже есть - это линии управления позиционными ключами индикатора. :sleep:

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Чт июл 26, 2012 19:58:52
c2n
Допилил схему...
Возникает пара вопросов.

1) на GND индикаторов (отмечены красным на схеме) нужно вешать резисторы?
2) при такой разводке получится организовать ШИМ для каналов R/G/B ???
Да и сами кнопушки... для 3-х штук потребна всего одна дополнительная линия (контроль состояния) - три уже есть
Поясните, что имеется ввиду???
Кнопки я сажаю на выводы имеющие прерывание...

То что кнопок мало? не вижу затыка.... У семисегментника есть точка... вот какой цвет регулируется - и отображать этой точкой. если отображается цвет, то все точки - включить....

Логика управления такая:

Устройство ВКЛ...

Режим "ОТОБРАЖАТЬ ЦВЕТ" Пока не нажата SW1 в противном случае перейти в режим "Установка цвета"

Режим "установка цвета"
Ждать ввода и выводить текущее значение параметра цвета R, пока не нажата SW1
Ждать ввода и выводить текущее значение параметра цвета G, пока не нажата SW1
Ждать ввода и выводить текущее значение параметра цвета B, пока не нажата SW1 В противном случае "ОТОБРАЖАТЬ ЦВЕТ"


ввод значения осуществлять нажатиями и удержаниями SW2++ и SW3--

вроде хватает кнопочек!


3й вопрос! а хватит ли мне памяти Attiny на всю эту красоту??? Пишу студией на С++

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Чт июл 26, 2012 21:13:27
ploop
1) на GND индикаторов (отмечены красным на схеме) нужно вешать резисторы?
Нет, ни в коем случае.
2) при такой разводке получится организовать ШИМ для каналов R/G/B ???
Ну а как же? Три канала, все зацепили, всё получится.
3й вопрос! а хватит ли мне памяти Attiny на всю эту красоту??? Пишу студией на С++
На плюсах??? Да тут вообще никакой памяти не хватит, если только какой-нибудь ARM9 под линуксом :)

На Си хватит. На ассемблере - вы просто не представляете, что можно упихать в два килобайта.
Лично мне удавалось:
1. Программный декодер пульта ДУ
2. Режим обучения этого пульта
3. Часы с календарём (тоже программые)
4. Опрос датчиков 1-Wire (протокол разумеется программный)
5. Опрос 4х каналов АЦП (это была мега48) и вычисления
6. 4 канала ШИМ работали
7. 24 кнопки на пульте задействовано (24 режима роботы усройства)

Всё это ОДНОВРЕМЕННО работало и уместилось на 2Кб памяти. Еще килобайт позже потратил на всякие рюшечки. 4Кб, которые у меги, так и не использовал.

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Пт июл 27, 2012 00:39:43
c2n
возникла "Идея".
Есть ли смысл вместо резисторов повесить буфер(а) 74HC244 или 245....на семисегментную матрицу? чтоб не нагружать ноги МК

Так же смущает ISP разъем отладки висящий на кнопкках.... Исходя из ДШ так делать можно, но из практики "HelloWorld" я вывел на порты MOSI/MISO/SCK "Моргать диодами"
#include <avr/io.h>
#include <avr/delay.h>
int main(void)
{
DDRB=0b11111111;
DDRC=0b000000;
double DelayCount;
DelayCount=1000.00;

while(1)
{
if (PINC3 == 1)
{
DelayCount = DelayCount+1000.00;
} else {}

if (DelayCount == 3000.00) {DelayCount=1000.00;} else {}

//TODO:: Please write your application code
PORTB=0b11111111;
_delay_ms(DelayCount);
PORTB=0b00000000;
_delay_ms(DelayCount);
}
}
и у меня больше этот МК (Atmega8A DIP) не определяется программатором (фирменный ISP MK2)...хотя есть подозрения, что я начудил с фьюзом отключающим РЕСЕТ....

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Пт июл 27, 2012 07:05:48
ploop
Есть ли смысл вместо резисторов повесить буфер(а) 74HC244 или 245
Конечно можно. Надо будет всего три ноги. Но удобнее использовать 74HC595, у него есть буфер, и не надо гасить индикаторы при пропихивании данных.
Так же смущает ISP разъем отладки висящий на кнопкках.... Исходя из ДШ так делать можно, но из практики "HelloWorld" я вывел на порты MOSI/MISO/SCK "Моргать диодами"
Главное, чобы нагрузка на этих портах не мешала программатору. А кнопки не проблема, если не нажимать их во время прошивки.
хотя есть подозрения, что я начудил с фьюзом отключающим РЕСЕТ....
Зря вы фьюзы трогали. Не разобравшись, не стоит этого делать.

Ну и совет: если всё-таки трогаете фьюзы, то сначала прочтите их с нового контроллера, выставьте только те, которые нужно, и только потом запишите. Просто разный софт их по разному отображает - бывает в инверсном виде, бывает нет.

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Пт июл 27, 2012 07:23:06
GP1
c2n писал(а):Допилил схему...
Возникает пара вопросов.

1) на GND индикаторов (отмечены красным на схеме) нужно вешать резисторы?
...
без ложной скромности :)))
вот тут писал о проблемах подключения индикаторов к МК
http://radiokot.ru/articles/30

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Пт июл 27, 2012 07:40:30
ploop
Кстати да, отличный материал. Забыл про эту статью... :oops:

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Пт июл 27, 2012 08:02:40
GP1
спасибо :beer:

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Пт июл 27, 2012 09:31:15
c2n
Да! статейка - отличнейшая!

При использовании буфера 595, я так понимаю из ДШ у меня ног для индикации вместо 8 будет использоваться 4, но при этом скорость вывода падает в 8 раз???? а еще иметь геморой с тактированием?

Может есть смысл применить 8-8 параллельный регистр??? только я не знаю как звать этого зверька(мне для общего развития), и не является ли он мифическим? хотя.. ног уже наверно не хватит!!!! прийдется уже городить огород из сдвиговых, чтобы управлять записью в паралельные регисты.....

Помоему 74НС244 гораздо проще... в данном случае он будет использоваться как источник питания для семисегментников.... исходя из ДШ каждый выход тянет 20мА, сигналы "Земли" станут управляющими для буфера, а сами индикаторы жестко лягут на корпус!

Или я наивная чукотская девушка???? о_О

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Пт июл 27, 2012 09:37:41
ploop
ри использовании буфера 595, я так понимаю из ДШ у меня ног для индикации вместо 8 будет использоваться 4
Три. Данные, строб, и защёлка.
но при этом скорость вывода падает в 8 раз????
Да. Вместо 8 миллионов раз в секунду цифры будут мелькать миллион раз в секунду. Очень медленно, замучаешься ждать, пока индикатор обновится :)))
Помоему 74НС244 гораздо проще...
Наоборот. В случае с ним придётся гасить индикаторы во время продвижения данных, т.е. использовать еще ногу и транзисторный ключ (порт МК не потянет три индикатора по току). И жёстко посадить индикаторы на корпус не получится, ими надо будет управлять.
исходя из ДШ каждый выход тянет 20мА, сигналы "Земли" станут управляющими для буфера, а сами индикаторы жестко лягут на корпус!
В том то и дело - не лягут. А вот с 595ми - лягут.

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Пт июл 27, 2012 09:40:29
GP1
c2n писал(а):
Помоему 74НС244 гораздо проще... в данном случае он будет использоваться как источник питания для семисегментников.... исходя из ДШ каждый выход тянет 20мА, сигналы "Земли" станут управляющими для буфера, а сами индикаторы жестко лягут на корпус!

Или я наивная чукотская девушка???? о_О
там в ДШ есть еще такой параметр как максимальный ток через выводы питания,
Изображение
так что максимум можно получить 70/8=8.75мА на вывод

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Пт июл 27, 2012 09:44:10
ploop
И 20мА - это очень много. Такой ток гребут индикаторы с высотой цифр 5-7см. В даташитах на индикаторы, обычно, указывают максимальный допустимый ток. Если там написано 20мА, то это значит, что при 5мА, что при 20мА различия в яркости на глаз будут почти незаметны, но будет лишний расход тока. Так что не советую задирать ток очень сильно. В статике и так всё прекрасно видно.

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Пт июл 27, 2012 10:01:54
c2n
Данные, строб и защелка
Это я понимаю 595 нужно вешать на каждый индикатор?
или вешать общий строб , ДАТА0, ДАТА1, ДАТА2, ЗАЩЕЛКА0, ЗАЩЕЛКА1, ЗАЩЕЛКА2
Высвободил целую ногу.. гы гы гы :)

Тогда с какой ноги МК взять СТРОБ ???

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Пт июл 27, 2012 10:14:55
c2n
Защелка.. защелка.... еще одна бредовая идея :)
а поподробней про Q7" (для объединения регистров).... для облегчения разводки, было бы неплохо рулить всеми 3 одновременно!

загоняя непрерывную последовательность: КодСимвола1КодСимвода2КодСимвола3

По окончании дернуть все защелки одновременно.

Нашел:) Q7" соединяется с входом след. микросхемы.
Причем немного не понял, Защелку надо держать постоянно, чтоб буфер выдавал значения? или достаточно просто моргнуть ей в течении нескольких тактов????

Может быть есть уже готовые микросхемы? в которую двоично число загоняешь а она как надо выкидывает на семисегментный индикатор????

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Пт июл 27, 2012 10:53:33
ploop
Это я понимаю 595 нужно вешать на каждый индикатор?
На них можно и динамику сделать, но это сложнее.
Тогда с какой ноги МК взять СТРОБ ???
С любой.
загоняя непрерывную последовательность: КодСимвола1КодСимвода2КодСимвола3
Это называется каскадирование.
Первый регистр, вход DATA цепляем к МК, стробы и защёлки у всех трёх объединены. Их тоже на МК. Три ноги, всё.
Вход DATA второго регистра цепляем к выходу Q7' первого
Вход DATA третьего - к выходу Q7' второго.

Выставляем с МК бит на DATA. Дёргаем строб. Все три регистра сработают, внутренний буфер сдвинется, при этом у первого регистра во внутреннем буфере на выходе Q0' появится этот бит. А тот, что был на Q7' уедет во второй регистр, и так по цепочке.

После того, как передали 8*3 = 24 бита (24 раза дёрнули строб) у нас получается все три внутренних регистра заполнены нашими данными. При этом на выходе ничего не изменялось. Чтобы скопировать их на выход - дёргаем один раз защёлку, и на трёх регистрах одновременно на выходах появляются данные.

В случае с 244м данные на выходах менялись бы при каждом стробе, и на индикаторах в эти моменты была бы каша. Смотрится это просто как засветка всех сегментов во время обновления.

Re: аппаратный ШИМ в Attiny2313 (Вопросы новичка)

Добавлено: Пт июл 27, 2012 11:51:07
c2n
Нашел:) Q7" соединяется с входом след. микросхемы.
Причем немного не понял, Защелку надо держать постоянно, чтоб буфер выдавал значения? или достаточно просто моргнуть ей в течении нескольких тактов????

Может быть есть уже готовые микросхемы? в которую двоично число загоняешь а она как надо выкидывает на семисегментный индикатор????
Вопрос по схемотехнике еще... на выход с регистра перед индикатором на линии резисторы сажаются так-же, как и в случае использования порта микросхемы? или оно уже там нафиг не надо ??? и какой типовой номинал резистора обычно используется??? 100R ом хватит? или 1КR нужен?
по моим подсчетам 20мА - ток сегмента, 5вольт напряжение питания... по закону Ома 250 ом должно быть...

Я просто сомневаюсь... а то контроллеры палить не жалко, а сегментник - 75рублей стоит :( его жалко....