Page 1 of 2
Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 01 Feb 2009 00:07
by hardlock
Внимание!!! Есть новая версия дистанционки для Olympus`а.
На этот раз на ATtiny13.
Хоть это и старая версия, но тоже рабочая, поэтому оставлю на сайте, но повторять рекомендую
на ATtiny13.
Собственно схема
- Схема на ATtiny2313
- shem_attiny2313.gif (6.17 KiB) Viewed 24638 times
- Схема на AT90S2313
- shem_AT90S2313.gif (6.63 KiB) Viewed 24638 times
Как видите схемы одинаковы, за исключением наличия кварца для AT90S2313.
Транзистор любой N-канальный или кремниевый n-p-n на ток около 100mA. Поэтому подойдёт любой, хоть КТ3102. Правда оговорюсь: с полевиками получалась дальность больше.
Или вот так. У меня прекрасно работает, и дальность больше чем у родного пульта....
- Схема на ATtiny2313 без транзистора
- shem_attiny2313_easy.gif (5.56 KiB) Viewed 24638 times
- Схема на AT90S2313 без транзистора
- shem_AT90S2313_easy.gif (6.13 KiB) Viewed 24638 times
И опять схемы одинаковы. Можно даже резистор выкинуть, без него ограничение по току 40mA.
Как видите - кварц отсутствует, работает от внутреннего генератора (для tiny).
Обратите внимание: в схеме с транзистором вывод PD5 соединён с землёй - это сделано для упрощения прошивки. Т.ё. одна прошивка - две схемы.
Если PD5 соединён с землёй - на Выходе будет "0" в состоянии покоя. Если висит в воздухе или соединён с "1" - на Выходе будет "1" в состоянии покоя.
Варианты печатных плат (только для tiny):
- Печатная плата 1
- pcb.gif (5.52 KiB) Viewed 24638 times
- Печатная плата 2
- pcb-2.gif (7.49 KiB) Viewed 24638 times
- второй вариант - рабочая версия с корпусом. Фотки вот (кликнуть для увеличения):
Ну и самое главное - прошивка....
для
ATtiny2313,
AT90S2313 10MHz
Или
проект для CodeVisionAVR. Проект написан под ATtiny2313.
В проекте выставлены FUSES, но прошивайте их отдельно....
- Биты конфигурации (FUSE)
- fuses.gif (13.26 KiB) Viewed 24638 times
Далее изображена осцилограмма команды "СПУСК" (кликабельно)
- Осцоллограма
- shut.gif (14.08 KiB) Viewed 24638 times
Просто для сведения:
Code: Select all
61DC – 0110000111011100 - Адрес
807F – 1000000001111111 - capture
40BF – 0100000010111111 - Wide
C03F - 1100000000111111 - Tele
20DF - 0010000011011111 - "-"
A05F - 1010000001011111 - "+"
Инструкции по прошивке "5-ю проводками" для ATtiny2313 лежит
тут.
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 11 Feb 2009 20:38
by Telek
Морально готовлюсь повторить сей девайс. Возник вопрос по фьюзам. Что-то смотрел описалово на tiny2313 и не нашел комбинации 11 для SUT1 и SUT0 - в инструкции обозначено как "зарезервировано", а также для BODLEVEL2-0 комбинация 010 описана как "зарезервированная".
Между тем в описании к проекту указаны именно эти комбинации. Они принципиальны? если принципиально, то что они обозначают? Можно ли оставить фьюзы в положении по-дефолу?
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 11 Feb 2009 20:43
by hardlock
SUT = 11. Страница 27, Таблица 5: Crystal Oscillator, slowly rising power
BODLEVEL = 010 - моя ошибка
. Вы первый, кто заметил. Надо 101, т.е. 2,7 Вольта. Страница 38. Таблица 16.
Исправлю на сайте, но даже с такой конфигурацией работает.
Зы: а зачем зарегали 2 ника?
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 11 Feb 2009 20:56
by Telek
По поводу второго ника - для поднятия массовости(Шутка)... Письмо не пришло с подтверждением. Думал борцы со спамом на майл.ру похитили письмо. Пришлось второй раз региться. В итоге первое письмо все же пришло, за-то для второго пока нет
SUT = 11. Страница 27, Таблица 5: Crystal Oscillator, slowly rising power
Это на сколько я понял для внешнего кварца. А для внутреннего генератора - стр 28 таблица 7.(там всего 3 варианта и 1 зарезервированный).
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 11 Feb 2009 21:00
by hardlock
Изначально дэвайс работал с кварцем, вот и забыл поменять
. Надо SUT=10.
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 11 Feb 2009 21:08
by Telek
Огромное спасибо за ответы и оперативность. И еще вопросы:
1. В схеме на tiny13 написано, что она более стабильна. А в чем проявляется нестабильность этой прошивки и к чему готовиться?
2. На фотке видно что между землей и 2N7002 лежит резистор 100к(на схеме нет), он там принципиален или нет? Платку переделываю под другой корпус, вот и думаю нужен он там или нет?
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 11 Feb 2009 21:12
by hardlock
Telek wrote:в чем проявляется нестабильность этой прошивки
да как сказать - ту прошивку писал на заре занятия контроллерами - там много мего неоптимально... Да и включение кнопок тоже хитрое...
Telek wrote:между землей и 2N7002 лежит резистор 100к
На всякий случай, когда контроллер спит и выводы в 3-м состоянии, чтобы транзистор не открылся.
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 16 Feb 2009 18:21
by Telek
Собрал - работает. ...но как-то не уверенно. Решил порыться в инете. Нарыл, что передача идет по протоколу Extended NEC.
http://www.sbprojects.com/knowledge/ir/nec.htm
Вроде бы твоя диаграмма не сильно противоречит, за исключением того, что паузы должны быть после сигнала... т.е. у тебя на диаграмме 1 передается как пауза 1.7мс + серия(22импульса) 0.56мс... в инете же пишут наоборот: т.е. 1 это серия(22импульса) 0.56мс + пауза 1.7мс...
А откуда вообще взялась эта диаграмма? И еще не понятно откуда берется первый импульс перед адресом...
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 16 Feb 2009 23:22
by hardlock
Telek wrote:А откуда вообще взялась эта диаграмма? И еще не понятно откуда берется первый импульс перед адресом...
Диаграмма взялась с пульта ДУ Olympus RM-2 (с одной кнопкой). Снимал сигнал со светодиода самодельным регистратором с частотой дискретизации 1 МГц и записью на HDD. На том пульте первый и следующие посылки идентичны - т.е. "синхроимпульсы", адрес, данные. Остальные кнопки сделал по аналогии, когда нашёл в инете информацию об адресе и данных этих кнопок.
Рекомендую попробовать на Тини13 - вроде стебильней работает. Мне больше нравится.
ЗЫ: кодировка RC-5
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 17 Feb 2009 02:01
by Telek
Пытался скомпилировать проект, который приложен к пульту... Вроде все компилится, ошибок нет. Прошиваю - нифига не работает. Вроде моргает, но фотик не реагирует. Между тем прошиваю хексом, который на странице с пультом- работает... Где засада? Проект компилировал без каких -либо изменений.
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 17 Feb 2009 09:16
by hardlock
Telek wrote:компилировал без каких -либо изменений
Посмотрите в проекте, совпадают ли Выводы действительности, а то може я проект приложил другой
?
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 17 Feb 2009 14:03
by Telek
hardlock wrote:Telek wrote:компилировал без каких -либо изменений
Посмотрите в проекте, совпадают ли Выводы действительности, а то може я проект приложил другой
?
Вроде все совпадает. В протеусе обе(прошивка с сайта и откомпилированный проект) прошивки работают... вывод весь совпадает, сигнал по форме и времени совпадает. Но на железе прошивка с сайта работает с фотоаппаратом, а скомпилированная - нет. Причем, если смотреть на светодиод визуально(через камеру мобилы) - обе мыргают светодиодом(визуально одинаково)... шаманство какое-то... Буду разбираться...
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 17 Feb 2009 14:08
by hardlock
Telek wrote:если смотреть на светодиод визуально(через камеру мобилы)
не мучайтесь - поставьте обычный красный светодиод - лучше "диагностировать" и камера от него работает, правда расстояние должно быть маленькое.
Посмотрите FUSES в проекте. Может там что-то...
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 18 Feb 2009 18:31
by brocker
привет
собираюсь повторить эту схему .. attiny13 купить у нас нереально, зато есть attiny2313, так что буду повторять на ней. К Вам вопрос, какие функции будут выполнять клавиши? У меня Е-420, зум, например руками накручивается. Стоит ли мне остальные 4ре клавиши ставить?
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 18 Feb 2009 18:38
by hardlock
brocker wrote:какие функции будут выполнять клавиши
посмотрите в
таблице совместимости, поддерживает ли Ваш фотик этот пульт....
Обычно зум в режиме просмотра фоток - приближение/удаление.
ЗЫ: я б нашёл тиньку 13-ю, т.к. мне больше понравился алгоритм, который я сделал в ней. А этот проект вряд ли буду переделывать - лень. Можете сравнить проекты и сделать для 2313 так, как в 13-й. Буду благодарен, если возьмётесь за это...
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 18 Feb 2009 19:11
by brocker
hardlock wrote:brocker wrote:какие функции будут выполнять клавиши
посмотрите в
таблице совместимости, поддерживает ли Ваш фотик этот пульт....
Обычно зум в режиме просмотра фоток - приближение/удаление.
RM-1 поддерживает... ммм... а листать фотки получится? Ибо когда фот к телеку подключен, листать напряжно на нём
hardlock wrote:
ЗЫ: я б нашёл тиньку 13-ю, т.к. мне больше понравился алгоритм, который я сделал в ней. А этот проект вряд ли буду переделывать - лень. Можете сравнить проекты и сделать для 2313 так, как в 13-й. Буду благодарен, если возьмётесь за это...[
я живу в Днерподзержинске, у нас в городе их вообще нет. Заказывал почтой в Днепропетровске, у меня сейчас в наличии 2313 аж 2.. и я бы взялся за переделку, но в програмировании микроконтроллеров не силён, да и просто в програмировании не силён..
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 18 Feb 2009 19:13
by hardlock
brocker wrote:листать фотки получится?
получиться! кнопки "+/-"
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 18 Feb 2009 19:16
by brocker
hardlock wrote:brocker wrote:листать фотки получится?
получиться! кнопки "+/-"
Спасибо, завтра приступлю к собиранию
.
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 19 Feb 2009 13:41
by Telek
hardlock wrote:Telek wrote:если смотреть на светодиод визуально(через камеру мобилы)
не мучайтесь - поставьте обычный красный светодиод - лучше "диагностировать" и камера от него работает, правда расстояние должно быть маленькое.
Посмотрите FUSES в проекте. Может там что-то...
Просто жесть какая-то... Все перерыл, решения не нашел. Присмотрелся к морганию светодиода: если компилировать самому вроде моргает раза в 4 реже(примерно... может больше, а может меньше). Причем еще заметил: если менять оптимизацию, например с по размеру на по скорости, то светодиод начинает светиться(моргать) тускло... т.е. от оптимизации меняется результат работы программы... я в тупике, такого быть не должно(тем более код вроде простой)... с другой стороны - протеусу пофиг... в протеусе в любых комбинациях все работает правильно. Фьюзы правильно прошиты... собственно прошивка с сайта работает правильно... Не могу понять, что так влияет на откомпилированную прошивку.
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 24 Feb 2009 11:56
by Telek
Все выходные убил на разгадку. Вставил в основной цикл код, который мыргает раз в секунду. Все пучком - мыргает раз в секунду. Нажимаешь любую кнопку - начинает мыргать раз в 2 секунды. Понял что, что-то в прерывании меняет частоту в 2 раза. Причем, незначительно меняя код прерывания можно добится как нормальной частоты так и в 2 раза меньшей... Дизасемблировав такие варианты так и не нашел ничего стремного... Позже, залил код в чип через другой программатор(т.н. 5 проводов)... и все заработало ок... Пришел к выводу, что первый программатор на 74hc244 как-то меняет код... причем в обе стороны, т.е. записав прошивку в контроллер, и считав его назад - получаем нормальный код(тот который и заливал)... Нужно поэкспериментировать с записью через 1 программатор и чтение через другой... может вылезет трабла, но времени уже на эксперименты не было.
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 24 Feb 2009 13:47
by hardlock
Telek wrote:Пришел к выводу, что первый программатор на 74hc244 как-то меняет код
нифигасебе! я такого не видел ниразу!
Вспомнил! А случаем не AVReal программируете? У меня с ним были очень похожие траблы.
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 26 Feb 2009 19:30
by Telek
еще покрутил... не в программаторе дело... одинаково они пишут и читают.
Начал гонять прошивку в эмуляторе АВР Студии. В общем пришел к выводу:
ошибка в запрете/разрешении прерывания в теле прерывания. Если дизасемблировать прошивку и посмотреть на ассемблере, код прерывания выглядит примерно так:
1. сохранения всех регистров которые заюзоет прерывание в стеке
2. тело прерывания
2.а. запрет прерывания #asm("cli")
2.б. обработка кнопок и подсветка светодиода
2.с.разрешение прерываний #asm("sei")
3. восстановление регистров из стека
В эмуляторе АВР Студии происходило следующее(считаем что кнопка осталась нажатой... т.е. не успел отпустить):
выполнялись пункты 1-2.с. и ...случалось новое прерывание, т.к. прерывания вновь разрешены... т.е. восстановление из стека(пункт 3) не происходило. На втором прерывании стек благополучно переполнялся, и забивал конец памяти(т.е. он рос до начала памяти и переходил через условно(0) в конец) где забивал последнии байты "оперативы" в которой стек возвратов из процедур и т.д.(аппаратный стек)... после этого начинался фарш.
ЗЫ. Я в микропроцессорах профан(осваиваю как хобби), но в программировании разбираюсь, поэтому сужу о правильности работы только по эмулятору. Причем АВР Стидии доверяю больше чем Протеусу, так как результат более похож на поведение пульта. Да кстати, почему при некоторых изменениях в коде работа пульта адекватна, а при некоторых нет хотя смысл программы не менялся(только длина прошивки), думаю зависит от того, что убило стеком: если стек затер "аппаратный стек" нулями, то после ближайшего RET из аппаратного стека тупо читались нули, происходил переход в начало программы - т.е. как бы сброс происходил.
Почитаю еще что реально происходит при "sei"... т.е. разрешает ли оно вложенные прерывания. Если разрешает - то использовать его получается нельзя.
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 26 Feb 2009 19:51
by hardlock
Ничего себе профан! Такое исследование провести!
Вспомнил, кое-что.... Давно это было.... Попробуйте менять размер стека в КодВижене. Вроде помогало.
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 26 Feb 2009 20:54
by Telek
Это я пробовал в эмуляторе. Изменение размера стека приводит лишь к тому, что стек затрет аппаратный стек не на второй заход, а на третий или четвертый
. Время выполнения прерывания около 100мс. Т.к. фотоаппарат реагирует с задержкой, то кнопку непроизвольно держишь дольше... поэтому запросто выполнить прерывание несколько раз. На самом деле вынос из кода запрет/восстановление прерываний в прерывании решает проблемму... по крайней мере в эмуляторе.
Тем более, что на сколько я понял в АВР нет возможности во время прерывания выполнить другое прерывание(если только самому не сбросить флаги...). Да, еще кстати нужно вынести sleep из прерывания... т.к. слип есть в основном цикле и после выхода из прерывания проц по-любому заснет... иначе проц засыпает до выхода из прерывания(т.е. до восстановления регистров из стека и судя по всему никогда не проснется(возможно... это тоже нужно изучить) т.к. до RETI(выхода из прерывания) не возможны прерывания... а RETI не произойдет, т.к. до него стоит слип ).
Добавка:
Сейчас почил книжки на предмет порядка выполнения прерываний. На самом деле получается, что в прерывании не нужны запрет/разрешение прерываний, т.к. при вызове прерывания автоматом выставляется флаг запрета прерываний, а при вызове RETI он снимается... вызов же разрешения прерываний в коде прерывания, разрешает прерывания раньше окончания выполнения прерывания... Т.к. Си генерит еще кучу кода после казалось бы конца процедуры, то мы получаем вызов нового прерывания до окончания старого... в итоге получаем вложенное прерывание. Если бы это была Мега с "кучей" оперативы - стек бы скорее всего не вышел бы за границу, а с тиной такой фокус не проходит
Еще заметил: посмотрел в инете примеры и нашел достаточно много исходников, где народ лепит в обработчике прерывания запрет/разрешение... в части из них они закомментированы. Но в большинстве случаев, это делают в прерываниях по
таймеру - а там это не опасно, т.к.редко бывает(да и не гуманно это), когда прерывание выполняется дольше чем период между прерываниями таймера.
Еще добавка: Понаблюдал за Протеусом. Ему пофиг на эти запреты/разрешения потому что он пока не выполнит RETI не смотрит на флаги прерываний. т.е. то что прерывания уже разрешены и то что событие начала нового прерывания уже произошло(флаги стоят) и нужно выполнять новое прерывание ему пофиг. Поэтому он код выполнял "правильно".
Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)
Posted: 28 Feb 2009 00:53
by Telek
Сегодня еще поэкспериментировал. При компиляции с оптимизацией по скорости - не работает. Начал разбираться. Оказывается все дело вот с таких конструкциях:
т.е. когда выставляется значение одного порта и читается пин.
Если смотреть скомпиленный код, то при оптимизации по размеру это будет выглядеть так:
Code: Select all
// PORTB = 0;
RCALL SUBOPT_0x3
// if (PIND.2==0)
SBIC 0x10,2
RJMP _0xD
а по скорости так:
Code: Select all
// PORTB = 0;
LDI R30,LOW(0)
OUT 0x18,R30
// if (PIND.2==0)
SBIC 0x10,2
RJMP _0xD
т.е. видно, что при оптимизации по скорости, проверка пина идет следующим тактом за выставление данных в порт(т.е. без задержки), а при оптимизации по размеру, через вызов процедуры(т.е. таких мест несколько, компилятор выноси одинаковый код в процедуру сокращая размер). При этом между выставлением данных в порт и проверкой пина стоит как минимум RET который выполняется за 4 такта... Т.е. за эту задержку порт B меняет состояние и пин из порта D получает его.
В итоге, т.к. при оптимизации по скорости задержки не было, то описанные выше конструкции не срабатывали, т.к. пин получал смену сигнала после проверки.
ЗЫ. У меня этот пульт по сути первое устройство которое я собрал на микропроцессорах и с которым были исходники. Поэтому я решил поиграться и тут же нарвался на неработу... т.е. делал казалось бы правильно изменяя код, но устройство переставало работать. Это меня очень озадачило, так как хотел в скором времени самостоятельно разработать простенький таймер... Озадачило то, что вроде все отлично эмулируется, но на железе не работает, при том, что код программы не сложный, понятный и действий микропроцессор выполняет минимум. Поэтому, я начал сомниваться, в том что я свой таймер отладив в эмуляторе заставлю работать на железе... Поэтому решил покопаться до выяснения обстоятельств неработы пульта. Оказалось все достаточно просто с одной стороны и сложно с другой(прикол с оптимизацией эмуляторы не давали выловить, т.к. они не отслеживают задержку выставления сигнала.). Почитал литературу заодно, но пока не нашел описания того, сколько по времени меняется сигнал на портах ввода вывода... а хотелось бы понять, т.к. это получается очень критично.
ЗЫ. Кстати еще дополнение к коду: В процедуре Pulse желательно добавить время задержки до 11-12мкс(а при оптимизации по скорости и до 13-14). Увеличивая время даем нормально разгореться светодиоду(а может открыться транзистору... тут я к сожалению не разбираюсь... в электронике я полный профан) - это увеличивает дальность(причем существенно). Хотя возможно это критично к конкретной моей модели светодиода.