RC-switch на ATtiny13
|
|
uwrtey | Дата: Среда, 06.02.2013, 12:03 | Сообщение # 1 |
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Статус: 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 мс так что об этом можно не задумываться, и просто мерить длительность приходящего импульса... - это ты с приемника дискретки должен уметь
у нас всего три ножки свободные остались - тут только два выхода и один вход получится сделать.
Давай только два оставим?
Или ты предлагаешь совершенно новое устройство сделать - без индикатора заряда ?
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Среда, 06.02.2013, 14:47 |
|
| |
ВитГо | Дата: Среда, 06.02.2013, 19:39 | Сообщение # 2 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| в индикатор можно 1 канал выключателя воткнуть...
а я писал выше про отдельное устройство на тини13
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Четверг, 07.02.2013, 17:20 | Сообщение # 3 |
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Статус: Offline
| ну дак отдельно делать или вместе ?
а если отдельно делать, то как три канала организовать ? ног то не хватает! или ресет использовать ?
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Четверг, 07.02.2013, 17:31 |
|
| |
ВитГо | Дата: Четверг, 07.02.2013, 18:09 | Сообщение # 4 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ааа, точно, там же резет.. ну делай 2 входа тогда...
резет лучше не трогай..
нужно бы найти параллельный высоковольтный программатор - чтобы иметь возможность если что перепрошивать с залоченными фюзами
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Четверг, 07.02.2013, 18:12 | Сообщение # 5 |
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Статус: Offline
| Цитата (ВитГо) нужно бы найти параллельный высоковольтный программатор - чтобы иметь возможность если что перепрошивать с залоченными фюзами это точно! может собрать?
Цитата (ВитГо) ааа, точно, там же резет.. ну делай 2 входа тогда... все таки отдельно делать?
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Четверг, 07.02.2013, 19:17 | Сообщение # 6 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| да, отдельно делать...
нужно посмотреть схему HV-программатора для AVR
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Четверг, 07.02.2013, 20:41 | Сообщение # 7 |
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Статус: Offline
| как организовать работу входов ?
вход1 если длительность импульса <1500 мкс - то выход выключен. если > 1500 мкс то выход включен...
вход2 так-же ?
______________________________
хочу использовать
External Interrupt 0 - INT0 ( это я уже проходил ) // настраиваемое прерывание External Interrupt Request 0 - PCI0 ( pcint0 ) ( а про это я еще ни чего не знаю.... ) // не настраиваемое прерывание
я уже приводил эту ссылку - вот еще раз пригодится http://habrahabr.ru/post/131908/
кстати, наверно удобнее будет использовать pcint0 и pcint1 ______________________________
схему прицепил в формате JPG ( для тех у кого нет спец софта )
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Пятница, 08.02.2013, 08:53 |
|
| |
ВитГо | Дата: Пятница, 08.02.2013, 21:16 | Сообщение # 8 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| как хочешь... другой задачи нет, так что хоть вручную настрой прерывание каждые 2 мкс и проверяй состояние портов... :-)
лучше конечно отлавливать по изменению состояния входа прерывания....
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 09.02.2013, 00:14 | Сообщение # 9 |
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Статус: Offline
| я решил попробовать на pcint0 и pcint1 сделать вот даже немного код накидал ( прикрепил )
только вот я затупил - как выяснить по какой ножке было прерывание ?
по идее можно прочитать состояние порта и сравнивать значение с константой, но постольку, поскольку прерывание срабатывает по любому изменению уровня - то тут придется записывать предыдущее значение чтения порта... может есть какой нить другой способ ?
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Суббота, 09.02.2013, 06:36 | Сообщение # 10 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| а MCUCR почему оставил не настроенным ? -в нем же задается по какому событию генерить прерывание..
а дальше я думаю просто читаем все пины (которые на чтение) - и если бит =1 - то значит запоминаем значение таймера (общего), когда у соответствующего пина, после прочтения "1" считываем "0" - снова считываем значение таймера и из этого значения вычитаем предыдущее.. - получаем длинную импульса...
соответственно если после считанного "0" считали по прерыванию снова "0" то ничего делать не нужно и если после считанного "1" прочитали снова "1" то тоже делать ничего не нужно..
судя по регистрам управления внешними прерываниями - разбирать откуда прилетело прерывание придется руками :-(
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 09.02.2013, 08:56 | Сообщение # 11 |
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Статус: Offline
| Цитата (ВитГо) а MCUCR почему оставил не настроенным ? - в нем же задается по какому событию генерить прерывание.. Ага, задается... Но только не в нашем случае. В нем события задаются для настраиваемых прерываний ( INT0 например ) В микроконтроллере ATtiny13 всего одно настраиваемое прерывание - это INT0. А вот ненастраиваемых прерываний 6 штук - PCINT0-5 В нашем случае прерываание ненастраиваемое - и работает оно всегда по принципу Any logical change ( любое логическое изменение ) вот по этому я и не настроил MCUCR // если я не прав, то пожалуйста ткни меня носом....
Вот собственно по этому у меня и возник вопрос. Если я буду попадать в прерывание по любому логическому изменению, да еще и на любой ножке... , как же мне определить, что счетчик посчитает длительность импульса на одной ножке.... Просто может получиться так, что программа попадает в прерывание по событию на одной ножке и счетчик обнуляется, а потом программа попадает в прерывание по событию на другой ножке и в TCNT** получаем не то ни сё...
Добавлено (09.02.2013, 08:56) --------------------------------------------- О-о, я кажется придумал, как можно определить на какой ножке произошло событие можно веть оперировать с помощью регистра PCMSK сначала одну ногу опросить, потом другую...
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Суббота, 09.02.2013, 09:21 | Сообщение # 12 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| вряд ли получиться при помощи PCMSK
скорее всего придется просто читать все ноги, и потом смотреть что у какой поменялось....
p.s. а я тут цветной дисплейчик подключил Драйвер SPI дисплея ST7735
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 09.02.2013, 17:18 | Сообщение # 13 |
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Статус: Offline
| мда, тут же таймер то восьмибитный . переписал код...
внутреняя частота этого МК = 9,6 Мгц внутренний делитель 8 делитель таймера 8 итого 150000Герц ( частота таймера ) 1 тик таймера длится 6,66 микросекунд максимальное число которое можно получить с данными настройками 1704 микросекунд должно подойти // с работы вернусь доделаю...
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Суббота, 09.02.2013, 17:19 |
|
| |
ВитГо | Дата: Суббота, 09.02.2013, 19:48 | Сообщение # 14 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ну в принципе с точностью до 7 мкс - нормально..
тебе нужно определить длительность короче 1500 мкс, все что длиннее - включить выход, все что меньше - выключить выход...
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 09.02.2013, 22:17 | Сообщение # 15 |
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Статус: Offline
| а максимальная длина импульса больше 1704 микросекунд ? подозреваю, что да... значит не подойдет предыдущий расчет. если счетчик перевалит за это число, то он ведь начнет счет сначала ? а это не годится .
может так: 9,6МГц / 8 ( внутренний делитель МК ) = 1,2 МГц 1,2МГц / 64 ( делитель таймера ) = 18750 Гц ( частота таймера) 1 / 18750 = 0,0000533 сек ~ 53 микросекунды Устроит ?
Вот кстати накидал немного кода
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Суббота, 09.02.2013, 23:15 |
|
| |