24 февраля 2022 года в 5 утра, без объявления войны, россия напала на Украину.

Они пришли "освобождать народ от нацистов и националистов".
С этого момента наша жизнь изменилась на "до" и "после".
Нас освобождают от наших домов, от наших любимых, от наших родителей и от наших детей....
Тут я не буду никого агитировать или переубеждать, разумный человек найдёт всю информацию
в интернете, а для зомби никакие доводы и факты не послужат аргументом.

Я не умею много писать, да и без мата тут сложно что-то написать.
Поэтому выражу все мои чувства одним фото.

«Спасибо дедушка путин за счастливое детство и мое освобождение». ©

Дополню словами уважаемого человека, широко известного в узких кругах:
тут путин не виноват, не он нажал на кнопку сброса,
- виноват пилот, который нажал на кнопку сброса, мог промахнуться. виноваты жена/мать/брат/друг пилота, которые не позвонили ему, и не сказали "нет войне",
- виноват тот, кто отдал приказ, и виноваты его жена/мать/брат/друг,
- виноват тот, кто цеплял бомбу, потому что он мог её обезвредить, "ну бывает, не сработала",
- виноват кладовщик, виноват водитель, который перевозил эту бомбу. виноваты жена...и т.д., потому что не позвонили и не сказали "нет войне, не вези бомбы",
- виноваты все журналисты оркостана, потому что они врут,
- виноваты недограждане, потому что не сказали журналистам "не врите",
- виноваты все... все 160 миллионов,
- а те 2, 3, 5 тысяч, которые вышли, и которых запаковали, это даже не десятая процента, это погрешность... случайно оказавшиеся в мордоре люди. ©

PS: За несколько часов до вторжения был атакован и взломан крупный интернет хостинг в Киеве, где и размещался мой сайт. Только 16 марта отважным админам удалось частично восстановить работу хостинга. Далеко не все сайты выжили, т.к. были повреждены даже бэкапы.
Нет, нет, я не жалуюсь, нет. В цифровом мире нет ничего ценного, материального...


Due to periodic DDoS attacks, the forum may not be available.

Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Здесь только проекты на ATtiny
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by hardlock »

Внимание!!! Есть новая версия дистанционки для Olympus`а. На этот раз на ATtiny13.

Хоть это и старая версия, но тоже рабочая, поэтому оставлю на сайте, но повторять рекомендую на ATtiny13.

Собственно схема
Схема на ATtiny2313
Схема на ATtiny2313
shem_attiny2313.gif (6.17 KiB) Viewed 24466 times
Схема на AT90S2313
Схема на AT90S2313
shem_AT90S2313.gif (6.63 KiB) Viewed 24466 times
Как видите схемы одинаковы, за исключением наличия кварца для AT90S2313.

Транзистор любой N-канальный или кремниевый n-p-n на ток около 100mA. Поэтому подойдёт любой, хоть КТ3102. Правда оговорюсь: с полевиками получалась дальность больше.

Или вот так. У меня прекрасно работает, и дальность больше чем у родного пульта....
Схема на ATtiny2313 без транзистора
Схема на ATtiny2313 без транзистора
shem_attiny2313_easy.gif (5.56 KiB) Viewed 24466 times
Схема на AT90S2313 без транзистора
Схема на AT90S2313 без транзистора
shem_AT90S2313_easy.gif (6.13 KiB) Viewed 24466 times
И опять схемы одинаковы. Можно даже резистор выкинуть, без него ограничение по току 40mA.

Как видите - кварц отсутствует, работает от внутреннего генератора (для tiny).

Обратите внимание: в схеме с транзистором вывод PD5 соединён с землёй - это сделано для упрощения прошивки. Т.ё. одна прошивка - две схемы.

Если PD5 соединён с землёй - на Выходе будет "0" в состоянии покоя. Если висит в воздухе или соединён с "1" - на Выходе будет "1" в состоянии покоя.

Варианты печатных плат (только для tiny):
Печатная плата 1
Печатная плата 1
pcb.gif (5.52 KiB) Viewed 24466 times
Печатная плата 2
Печатная плата 2
pcb-2.gif (7.49 KiB) Viewed 24466 times
- второй вариант - рабочая версия с корпусом. Фотки вот (кликнуть для увеличения):
foto1.jpg
foto2.jpg
foto3.jpg
Ну и самое главное - прошивка....
для ATtiny2313, AT90S2313 10MHz
Или проект для CodeVisionAVR. Проект написан под ATtiny2313.

В проекте выставлены FUSES, но прошивайте их отдельно....
Биты конфигурации (FUSE)
Биты конфигурации (FUSE)
fuses.gif (13.26 KiB) Viewed 24466 times
Далее изображена осцилограмма команды "СПУСК" (кликабельно)
Осцоллограма
Осцоллограма
shut.gif (14.08 KiB) Viewed 24466 times
Просто для сведения:

Code: Select all

61DC – 0110000111011100 - Адрес 
 
807F – 1000000001111111 - capture 
40BF – 0100000010111111 - Wide 
C03F - 1100000000111111 - Tele 
20DF - 0010000011011111 - "-" 
A05F - 1010000001011111 - "+"
Инструкции по прошивке "5-ю проводками" для ATtiny2313 лежит тут.
Attachments
rm-1_ATtiny2313.rar
Прошивка для ATtiny2313
(1.04 KiB) Downloaded 954 times
rm-1_AT90S2313_10MHz.rar
Прошивка для AT90S2313 с кварцем 10MHz
(1.04 KiB) Downloaded 968 times
firmware_ATtiny2313.rar
Исходник для ATtiny2313
(2.82 KiB) Downloaded 989 times
Telek
Пробегал мимо
Posts: 24
Joined: 11 Feb 2009 20:06
Location: Москва

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by Telek »

Морально готовлюсь повторить сей девайс. Возник вопрос по фьюзам. Что-то смотрел описалово на tiny2313 и не нашел комбинации 11 для SUT1 и SUT0 - в инструкции обозначено как "зарезервировано", а также для BODLEVEL2-0 комбинация 010 описана как "зарезервированная".
Между тем в описании к проекту указаны именно эти комбинации. Они принципиальны? если принципиально, то что они обозначают? Можно ли оставить фьюзы в положении по-дефолу?
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by hardlock »

SUT = 11. Страница 27, Таблица 5: Crystal Oscillator, slowly rising power
BODLEVEL = 010 - моя ошибка :oops: . Вы первый, кто заметил. Надо 101, т.е. 2,7 Вольта. Страница 38. Таблица 16.

Исправлю на сайте, но даже с такой конфигурацией работает.

Зы: а зачем зарегали 2 ника?
Telek
Пробегал мимо
Posts: 24
Joined: 11 Feb 2009 20:06
Location: Москва

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by Telek »

По поводу второго ника - для поднятия массовости(Шутка)... Письмо не пришло с подтверждением. Думал борцы со спамом на майл.ру похитили письмо. Пришлось второй раз региться. В итоге первое письмо все же пришло, за-то для второго пока нет :-)
SUT = 11. Страница 27, Таблица 5: Crystal Oscillator, slowly rising power
Это на сколько я понял для внешнего кварца. А для внутреннего генератора - стр 28 таблица 7.(там всего 3 варианта и 1 зарезервированный).
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by hardlock »

Изначально дэвайс работал с кварцем, вот и забыл поменять :oops: . Надо SUT=10.
Telek
Пробегал мимо
Posts: 24
Joined: 11 Feb 2009 20:06
Location: Москва

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by Telek »

Огромное спасибо за ответы и оперативность. И еще вопросы:
1. В схеме на tiny13 написано, что она более стабильна. А в чем проявляется нестабильность этой прошивки и к чему готовиться?
2. На фотке видно что между землей и 2N7002 лежит резистор 100к(на схеме нет), он там принципиален или нет? Платку переделываю под другой корпус, вот и думаю нужен он там или нет?
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by hardlock »

Telek wrote:в чем проявляется нестабильность этой прошивки
да как сказать - ту прошивку писал на заре занятия контроллерами - там много мего неоптимально... Да и включение кнопок тоже хитрое...
Telek wrote:между землей и 2N7002 лежит резистор 100к
На всякий случай, когда контроллер спит и выводы в 3-м состоянии, чтобы транзистор не открылся.
Telek
Пробегал мимо
Posts: 24
Joined: 11 Feb 2009 20:06
Location: Москва

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by Telek »

Собрал - работает. ...но как-то не уверенно. Решил порыться в инете. Нарыл, что передача идет по протоколу Extended NEC.
http://www.sbprojects.com/knowledge/ir/nec.htm
Вроде бы твоя диаграмма не сильно противоречит, за исключением того, что паузы должны быть после сигнала... т.е. у тебя на диаграмме 1 передается как пауза 1.7мс + серия(22импульса) 0.56мс... в инете же пишут наоборот: т.е. 1 это серия(22импульса) 0.56мс + пауза 1.7мс...
А откуда вообще взялась эта диаграмма? И еще не понятно откуда берется первый импульс перед адресом...
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by hardlock »

Telek wrote:А откуда вообще взялась эта диаграмма? И еще не понятно откуда берется первый импульс перед адресом...
Диаграмма взялась с пульта ДУ Olympus RM-2 (с одной кнопкой). Снимал сигнал со светодиода самодельным регистратором с частотой дискретизации 1 МГц и записью на HDD. На том пульте первый и следующие посылки идентичны - т.е. "синхроимпульсы", адрес, данные. Остальные кнопки сделал по аналогии, когда нашёл в инете информацию об адресе и данных этих кнопок.

Рекомендую попробовать на Тини13 - вроде стебильней работает. Мне больше нравится.

ЗЫ: кодировка RC-5
Telek
Пробегал мимо
Posts: 24
Joined: 11 Feb 2009 20:06
Location: Москва

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by Telek »

Пытался скомпилировать проект, который приложен к пульту... Вроде все компилится, ошибок нет. Прошиваю - нифига не работает. Вроде моргает, но фотик не реагирует. Между тем прошиваю хексом, который на странице с пультом- работает... Где засада? Проект компилировал без каких -либо изменений.
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by hardlock »

Telek wrote:компилировал без каких -либо изменений
Посмотрите в проекте, совпадают ли Выводы действительности, а то може я проект приложил другой :oops: ?
Telek
Пробегал мимо
Posts: 24
Joined: 11 Feb 2009 20:06
Location: Москва

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by Telek »

hardlock wrote:
Telek wrote:компилировал без каких -либо изменений
Посмотрите в проекте, совпадают ли Выводы действительности, а то може я проект приложил другой :oops: ?
Вроде все совпадает. В протеусе обе(прошивка с сайта и откомпилированный проект) прошивки работают... вывод весь совпадает, сигнал по форме и времени совпадает. Но на железе прошивка с сайта работает с фотоаппаратом, а скомпилированная - нет. Причем, если смотреть на светодиод визуально(через камеру мобилы) - обе мыргают светодиодом(визуально одинаково)... шаманство какое-то... Буду разбираться...
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by hardlock »

Telek wrote:если смотреть на светодиод визуально(через камеру мобилы)
не мучайтесь - поставьте обычный красный светодиод - лучше "диагностировать" и камера от него работает, правда расстояние должно быть маленькое.

Посмотрите FUSES в проекте. Может там что-то...
brocker
Пробегал мимо
Posts: 3
Joined: 18 Feb 2009 18:22
Location: Dndz city
Contact:

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by brocker »

привет :) собираюсь повторить эту схему .. attiny13 купить у нас нереально, зато есть attiny2313, так что буду повторять на ней. К Вам вопрос, какие функции будут выполнять клавиши? У меня Е-420, зум, например руками накручивается. Стоит ли мне остальные 4ре клавиши ставить?
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by hardlock »

brocker wrote:какие функции будут выполнять клавиши
посмотрите в таблице совместимости, поддерживает ли Ваш фотик этот пульт....
Обычно зум в режиме просмотра фоток - приближение/удаление.

ЗЫ: я б нашёл тиньку 13-ю, т.к. мне больше понравился алгоритм, который я сделал в ней. А этот проект вряд ли буду переделывать - лень. Можете сравнить проекты и сделать для 2313 так, как в 13-й. Буду благодарен, если возьмётесь за это...
brocker
Пробегал мимо
Posts: 3
Joined: 18 Feb 2009 18:22
Location: Dndz city
Contact:

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by brocker »

hardlock wrote:
brocker wrote:какие функции будут выполнять клавиши
посмотрите в таблице совместимости, поддерживает ли Ваш фотик этот пульт....
Обычно зум в режиме просмотра фоток - приближение/удаление.
RM-1 поддерживает... ммм... а листать фотки получится? Ибо когда фот к телеку подключен, листать напряжно на нём :)
hardlock wrote: ЗЫ: я б нашёл тиньку 13-ю, т.к. мне больше понравился алгоритм, который я сделал в ней. А этот проект вряд ли буду переделывать - лень. Можете сравнить проекты и сделать для 2313 так, как в 13-й. Буду благодарен, если возьмётесь за это...[

я живу в Днерподзержинске, у нас в городе их вообще нет. Заказывал почтой в Днепропетровске, у меня сейчас в наличии 2313 аж 2.. и я бы взялся за переделку, но в програмировании микроконтроллеров не силён, да и просто в програмировании не силён.. :(
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by hardlock »

brocker wrote:листать фотки получится?
получиться! кнопки "+/-"
brocker
Пробегал мимо
Posts: 3
Joined: 18 Feb 2009 18:22
Location: Dndz city
Contact:

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by brocker »

hardlock wrote:
brocker wrote:листать фотки получится?
получиться! кнопки "+/-"
Спасибо, завтра приступлю к собиранию :).
Telek
Пробегал мимо
Posts: 24
Joined: 11 Feb 2009 20:06
Location: Москва

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by Telek »

hardlock wrote:
Telek wrote:если смотреть на светодиод визуально(через камеру мобилы)
не мучайтесь - поставьте обычный красный светодиод - лучше "диагностировать" и камера от него работает, правда расстояние должно быть маленькое.

Посмотрите FUSES в проекте. Может там что-то...
Просто жесть какая-то... Все перерыл, решения не нашел. Присмотрелся к морганию светодиода: если компилировать самому вроде моргает раза в 4 реже(примерно... может больше, а может меньше). Причем еще заметил: если менять оптимизацию, например с по размеру на по скорости, то светодиод начинает светиться(моргать) тускло... т.е. от оптимизации меняется результат работы программы... я в тупике, такого быть не должно(тем более код вроде простой)... с другой стороны - протеусу пофиг... в протеусе в любых комбинациях все работает правильно. Фьюзы правильно прошиты... собственно прошивка с сайта работает правильно... Не могу понять, что так влияет на откомпилированную прошивку.
Telek
Пробегал мимо
Posts: 24
Joined: 11 Feb 2009 20:06
Location: Москва

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by Telek »

Все выходные убил на разгадку. Вставил в основной цикл код, который мыргает раз в секунду. Все пучком - мыргает раз в секунду. Нажимаешь любую кнопку - начинает мыргать раз в 2 секунды. Понял что, что-то в прерывании меняет частоту в 2 раза. Причем, незначительно меняя код прерывания можно добится как нормальной частоты так и в 2 раза меньшей... Дизасемблировав такие варианты так и не нашел ничего стремного... Позже, залил код в чип через другой программатор(т.н. 5 проводов)... и все заработало ок... Пришел к выводу, что первый программатор на 74hc244 как-то меняет код... причем в обе стороны, т.е. записав прошивку в контроллер, и считав его назад - получаем нормальный код(тот который и заливал)... Нужно поэкспериментировать с записью через 1 программатор и чтение через другой... может вылезет трабла, но времени уже на эксперименты не было.
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by hardlock »

Telek wrote:Пришел к выводу, что первый программатор на 74hc244 как-то меняет код
нифигасебе! я такого не видел ниразу!

Вспомнил! А случаем не AVReal программируете? У меня с ним были очень похожие траблы.
Telek
Пробегал мимо
Posts: 24
Joined: 11 Feb 2009 20:06
Location: Москва

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by Telek »

еще покрутил... не в программаторе дело... одинаково они пишут и читают.
Начал гонять прошивку в эмуляторе АВР Студии. В общем пришел к выводу:
ошибка в запрете/разрешении прерывания в теле прерывания. Если дизасемблировать прошивку и посмотреть на ассемблере, код прерывания выглядит примерно так:

1. сохранения всех регистров которые заюзоет прерывание в стеке
2. тело прерывания
2.а. запрет прерывания #asm("cli")
2.б. обработка кнопок и подсветка светодиода
2.с.разрешение прерываний #asm("sei")
3. восстановление регистров из стека

В эмуляторе АВР Студии происходило следующее(считаем что кнопка осталась нажатой... т.е. не успел отпустить):
выполнялись пункты 1-2.с. и ...случалось новое прерывание, т.к. прерывания вновь разрешены... т.е. восстановление из стека(пункт 3) не происходило. На втором прерывании стек благополучно переполнялся, и забивал конец памяти(т.е. он рос до начала памяти и переходил через условно(0) в конец) где забивал последнии байты "оперативы" в которой стек возвратов из процедур и т.д.(аппаратный стек)... после этого начинался фарш.

ЗЫ. Я в микропроцессорах профан(осваиваю как хобби), но в программировании разбираюсь, поэтому сужу о правильности работы только по эмулятору. Причем АВР Стидии доверяю больше чем Протеусу, так как результат более похож на поведение пульта. Да кстати, почему при некоторых изменениях в коде работа пульта адекватна, а при некоторых нет хотя смысл программы не менялся(только длина прошивки), думаю зависит от того, что убило стеком: если стек затер "аппаратный стек" нулями, то после ближайшего RET из аппаратного стека тупо читались нули, происходил переход в начало программы - т.е. как бы сброс происходил.

Почитаю еще что реально происходит при "sei"... т.е. разрешает ли оно вложенные прерывания. Если разрешает - то использовать его получается нельзя.
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by hardlock »

Ничего себе профан! Такое исследование провести!

Вспомнил, кое-что.... Давно это было.... Попробуйте менять размер стека в КодВижене. Вроде помогало.
Telek
Пробегал мимо
Posts: 24
Joined: 11 Feb 2009 20:06
Location: Москва

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by Telek »

Это я пробовал в эмуляторе. Изменение размера стека приводит лишь к тому, что стек затрет аппаратный стек не на второй заход, а на третий или четвертый :-). Время выполнения прерывания около 100мс. Т.к. фотоаппарат реагирует с задержкой, то кнопку непроизвольно держишь дольше... поэтому запросто выполнить прерывание несколько раз. На самом деле вынос из кода запрет/восстановление прерываний в прерывании решает проблемму... по крайней мере в эмуляторе.
Тем более, что на сколько я понял в АВР нет возможности во время прерывания выполнить другое прерывание(если только самому не сбросить флаги...). Да, еще кстати нужно вынести sleep из прерывания... т.к. слип есть в основном цикле и после выхода из прерывания проц по-любому заснет... иначе проц засыпает до выхода из прерывания(т.е. до восстановления регистров из стека и судя по всему никогда не проснется(возможно... это тоже нужно изучить) т.к. до RETI(выхода из прерывания) не возможны прерывания... а RETI не произойдет, т.к. до него стоит слип ).

Добавка:
Сейчас почил книжки на предмет порядка выполнения прерываний. На самом деле получается, что в прерывании не нужны запрет/разрешение прерываний, т.к. при вызове прерывания автоматом выставляется флаг запрета прерываний, а при вызове RETI он снимается... вызов же разрешения прерываний в коде прерывания, разрешает прерывания раньше окончания выполнения прерывания... Т.к. Си генерит еще кучу кода после казалось бы конца процедуры, то мы получаем вызов нового прерывания до окончания старого... в итоге получаем вложенное прерывание. Если бы это была Мега с "кучей" оперативы - стек бы скорее всего не вышел бы за границу, а с тиной такой фокус не проходит :-) Еще заметил: посмотрел в инете примеры и нашел достаточно много исходников, где народ лепит в обработчике прерывания запрет/разрешение... в части из них они закомментированы. Но в большинстве случаев, это делают в прерываниях по
таймеру - а там это не опасно, т.к.редко бывает(да и не гуманно это), когда прерывание выполняется дольше чем период между прерываниями таймера.

Еще добавка: Понаблюдал за Протеусом. Ему пофиг на эти запреты/разрешения потому что он пока не выполнит RETI не смотрит на флаги прерываний. т.е. то что прерывания уже разрешены и то что событие начала нового прерывания уже произошло(флаги стоят) и нужно выполнять новое прерывание ему пофиг. Поэтому он код выполнял "правильно".
Telek
Пробегал мимо
Posts: 24
Joined: 11 Feb 2009 20:06
Location: Москва

Re: Пульт дистанционного управления Olympus RM-1 (на ATtiny2313)

Post by Telek »

Сегодня еще поэкспериментировал. При компиляции с оптимизацией по скорости - не работает. Начал разбираться. Оказывается все дело вот с таких конструкциях:

Code: Select all

    PORTB = 0;
    if (PIND.2==0)
т.е. когда выставляется значение одного порта и читается пин.
Если смотреть скомпиленный код, то при оптимизации по размеру это будет выглядеть так:

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). Увеличивая время даем нормально разгореться светодиоду(а может открыться транзистору... тут я к сожалению не разбираюсь... в электронике я полный профан) - это увеличивает дальность(причем существенно). Хотя возможно это критично к конкретной моей модели светодиода.
Post Reply