Четверг, 28.11.2024, 04:21
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | RC-switch на ATtiny13 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 8
  • 1
  • 2
  • 3
  • 7
  • 8
  • »
Модератор форума: ВитГо  
RC-switch на ATtiny13
uwrteyДата: Среда, 06.02.2013, 12:03 | Сообщение # 1
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline
Цитата
ну эту задачу ты быстро решишь :-)
это тот же приемник дискретки - только всего один импульс ловить нужно :-)

вход 1
по одному каналу если длительность импульса <1500 мкс - то выход выключен.
если > 1500 мкс то выход включен...

для входа 2
если длительность импульса меньше 1333 то оба выхода выключены
если >1250 но <1500 то включен выход 1
если >1500 но <1750 то включен выход 2 (выходы 1, 3 выключены)
если >1750 то включен выход 3 (выходы 1, 2 выключены)

для входа 3
если длительность импульса меньше 1250 то оба выхода выключены
если >1250 но <1500 то включен выход 1
если >1500 но <1750 то включены выходы 1, 2
если >1750 то включены выходы 1, 2, 3

вот тебе и три входа - три выхода для разных режимов работы..

в принципе приемник отправляет управляющий импульс каждые 20-25 мс
так что об этом можно не задумываться, и просто мерить длительность приходящего импульса... - это ты с приемника дискретки должен уметь


у нас всего три ножки свободные остались - тут только два выхода и один вход получится сделать.

Давай только два оставим?

Или ты предлагаешь совершенно новое устройство сделать - без индикатора заряда ?
Прикрепления: 8872141.jpg (155.6 Kb)


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Среда, 06.02.2013, 14:47
 
ВитГоДата: Среда, 06.02.2013, 19:39 | Сообщение # 2
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
в индикатор можно 1 канал выключателя воткнуть...

а я писал выше про отдельное устройство на тини13


Виталий (аka ВитГо)
 
uwrteyДата: Четверг, 07.02.2013, 17:20 | Сообщение # 3
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline
ну дак отдельно делать или вместе ?

а если отдельно делать, то как три канала организовать ? ног то не хватает! или ресет использовать ?


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Четверг, 07.02.2013, 17:31
 
ВитГоДата: Четверг, 07.02.2013, 18:09 | Сообщение # 4
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ааа, точно, там же резет.. ну делай 2 входа тогда...

резет лучше не трогай..

нужно бы найти параллельный высоковольтный программатор - чтобы иметь возможность если что перепрошивать с залоченными фюзами


Виталий (аka ВитГо)
 
uwrteyДата: Четверг, 07.02.2013, 18:12 | Сообщение # 5
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline
Цитата (ВитГо)
нужно бы найти параллельный высоковольтный программатор - чтобы иметь возможность если что перепрошивать с залоченными фюзами

это точно! biggrin
может собрать?

Цитата (ВитГо)
ааа, точно, там же резет.. ну делай 2 входа тогда...

все таки отдельно делать?


не успеваю за своими мыслями......
 
ВитГоДата: Четверг, 07.02.2013, 19:17 | Сообщение # 6
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
да, отдельно делать...

нужно посмотреть схему HV-программатора для AVR


Виталий (аka ВитГо)
 
uwrteyДата: Четверг, 07.02.2013, 20:41 | Сообщение # 7
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline
как организовать работу входов ?

вход1
если длительность импульса <1500 мкс - то выход выключен.
если > 1500 мкс то выход включен...

вход2
так-же ?


______________________________

хочу использовать

External Interrupt 0 - INT0 ( это я уже проходил ) // настраиваемое прерывание
External Interrupt Request 0 - PCI0 ( pcint0 ) ( а про это я еще ни чего не знаю.... ) // не настраиваемое прерывание

я уже приводил эту ссылку - вот еще раз пригодится http://habrahabr.ru/post/131908/

кстати, наверно удобнее будет использовать pcint0 и pcint1
______________________________

схему прицепил в формате JPG ( для тех у кого нет спец софта )
Прикрепления: 0493809.jpg (193.7 Kb)


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Пятница, 08.02.2013, 08:53
 
ВитГоДата: Пятница, 08.02.2013, 21:16 | Сообщение # 8
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
как хочешь... другой задачи нет, так что хоть вручную настрой прерывание каждые 2 мкс и проверяй состояние портов... :-)

лучше конечно отлавливать по изменению состояния входа прерывания....


Виталий (аka ВитГо)
 
uwrteyДата: Суббота, 09.02.2013, 00:14 | Сообщение # 9
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline
я решил попробовать на pcint0 и pcint1 сделать
вот даже немного код накидал ( прикрепил )

только вот я затупил - как выяснить по какой ножке было прерывание ?

по идее можно прочитать состояние порта и сравнивать значение с константой, но постольку, поскольку прерывание срабатывает по любому изменению уровня - то тут придется записывать предыдущее значение чтения порта...
может есть какой нить другой способ ?
Прикрепления: 5071963.jpg (194.3 Kb) · RC-SWITCH.asm (2.7 Kb)


не успеваю за своими мыслями......
 
ВитГоДата: Суббота, 09.02.2013, 06:36 | Сообщение # 10
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
а MCUCR почему оставил не настроенным ? -в нем же задается по какому событию генерить прерывание..

а дальше я думаю просто читаем все пины (которые на чтение) - и если бит =1 - то значит запоминаем значение таймера (общего),
когда у соответствующего пина, после прочтения "1" считываем "0" - снова считываем значение таймера и из этого значения вычитаем предыдущее.. - получаем длинную импульса...

соответственно если после считанного "0" считали по прерыванию снова "0" то ничего делать не нужно
и если после считанного "1" прочитали снова "1" то тоже делать ничего не нужно..

судя по регистрам управления внешними прерываниями - разбирать откуда прилетело прерывание придется руками :-(


Виталий (аka ВитГо)
 
uwrteyДата: Суббота, 09.02.2013, 08:56 | Сообщение # 11
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline
Цитата (ВитГо)
а MCUCR почему оставил не настроенным ? - в нем же задается по какому событию генерить прерывание..

Ага, задается... Но только не в нашем случае. В нем события задаются для настраиваемых прерываний ( INT0 например )
В микроконтроллере ATtiny13 всего одно настраиваемое прерывание - это INT0.
А вот ненастраиваемых прерываний 6 штук - PCINT0-5
В нашем случае прерываание ненастраиваемое - и работает оно всегда по принципу Any logical change ( любое логическое изменение )
вот по этому я и не настроил MCUCR // если я не прав, то пожалуйста ткни меня носом....

Вот собственно по этому у меня и возник вопрос. Если я буду попадать в прерывание по любому логическому изменению, да еще и на любой ножке... ,
как же мне определить, что счетчик посчитает длительность импульса на одной ножке....
Просто может получиться так, что программа попадает в прерывание по событию на одной ножке и счетчик обнуляется, а потом программа попадает в прерывание по событию на другой ножке и в TCNT** получаем не то ни сё...

Добавлено (09.02.2013, 08:56)
---------------------------------------------
О-о, я кажется придумал, как можно определить на какой ножке произошло событие biggrin
можно веть оперировать с помощью регистра PCMSK
сначала одну ногу опросить, потом другую... biggrin


не успеваю за своими мыслями......
 
ВитГоДата: Суббота, 09.02.2013, 09:21 | Сообщение # 12
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
вряд ли получиться при помощи PCMSK

скорее всего придется просто читать все ноги, и потом смотреть что у какой поменялось....

p.s. а я тут цветной дисплейчик подключил Драйвер SPI дисплея ST7735


Виталий (аka ВитГо)
 
uwrteyДата: Суббота, 09.02.2013, 17:18 | Сообщение # 13
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline
мда, тут же таймер то восьмибитный dry .
переписал код...

внутреняя частота этого МК = 9,6 Мгц
внутренний делитель 8
делитель таймера 8
итого 150000Герц ( частота таймера )
1 тик таймера длится 6,66 микросекунд
максимальное число которое можно получить с данными настройками 1704 микросекунд
должно подойти // с работы вернусь доделаю... smile
Прикрепления: 3854189.asm (2.6 Kb)


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Суббота, 09.02.2013, 17:19
 
ВитГоДата: Суббота, 09.02.2013, 19:48 | Сообщение # 14
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ну в принципе с точностью до 7 мкс - нормально..

тебе нужно определить длительность короче 1500 мкс, все что длиннее - включить выход, все что меньше - выключить выход...


Виталий (аka ВитГо)
 
uwrteyДата: Суббота, 09.02.2013, 22:17 | Сообщение # 15
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline
а максимальная длина импульса больше 1704 микросекунд ? подозреваю, что да...
значит не подойдет предыдущий расчет.
если счетчик перевалит за это число, то он ведь начнет счет сначала ? а это не годится dry .

может так:
9,6МГц / 8 ( внутренний делитель МК ) = 1,2 МГц
1,2МГц / 64 ( делитель таймера ) = 18750 Гц ( частота таймера)
1 / 18750 = 0,0000533 сек ~ 53 микросекунды
Устроит ?

Вот кстати накидал немного кода
Прикрепления: 3404957.asm (4.4 Kb)


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Суббота, 09.02.2013, 23:15
 
  • Страница 1 из 8
  • 1
  • 2
  • 3
  • 7
  • 8
  • »
Поиск:


Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz