короч вот я нокодил проэкт на CVAVR с питанием от домофона. Знатоки СИ! Помогите разобраться с тем, что накодил Не работает чет. Питание и от батарейки пробовал. всеравно. Тайминги ставил согласно документу
for (i=0; i<7>>x2)&1;
//Вычисляем бит шоб не терять потом время
y=0;
if (PIND.0==1) {
do { y++; } while ((y<30000)&&(PIND.0==1));
} //дождалить нуля, если не дождалисть пошли дальше по таймауту
if (nxt==0) { DDRD.0=1;delay_us(45);DDRD.0=0;}
else {if(PIND.0==0) { do { y++; } while ((y<60000)&&(PIND.0==0));}};
//Если выводим ноль то роняем шину на 45 мкс, если единицу то дожидаемся когда шина вернется в 1
При вставке сишного кода в сообщение он почему-то претерпевает необратимые изменения. Посему мой ответ в приложенном файле!
Вложения:
Комментарий к файлу: ответ в текстовом файле. Text.txt [664 байт]
Скачиваний: 599
Комментарий к файлу: Полный исходник моего емулятора. Код запутанный, но помочь ничем не могу... emul.c [5.9 KiB]
Скачиваний: 863
dx40, спасибо за помощь! Вчера целый вечер сидел врубал А что в вас имеется ввиду под 30000 и 60000? Сколько мкс? Вот мой переделанный вариант. Считывание кода я пока не делал, т. к. у мну нету Tiny15L. Как куплю, займусь. Это будет ближе к 15 августа.
Очень интересует питание МК от домофона. Если при 3V ток у него 3 mA, то какой кондюк надо? А этот 47 мкФ от домофона до пенсии будет заряжаться. Думаю, 5 мкФ.
Это я вычисляю нужный бит. i - номер байта x2 - номер бита &1 - наложение маски, т.к. интересует только первый бит. Далее - 30000 и 60000 - это от балды, единицы мс, просто если не дождались импульсов от мастера, надо что-то делать, не ждать же их вечно...
Код:
for (i=0;i<=7;i++) {delay_us(46);read+=((2^i)*W1BUS_R); delay_us(15);}; //читаем 8 байт
Это мне не очень нравится. Читать надо не так. Алгоритм такой
Дожидаемся когда шина уйдет в 0
Ждем 15 мкс
Читаем бит
Ждем когда шина вернется в 1.
В документации указаны минимальные тайминги - на практике они могут быть и больше - например после записи бита мастер может подождать пару сотен мкс перед передачей следующего.
Опять же, смотри мой исходник. Он не очень красивый (не люблю си), но точно рабочий!
хлопцы, что-то я не понял, как вы реализуете чтение 1-wire... 15 мкс ожидания а потом чтение? по-моему, это на грани... почитайте статью, возможно что-то станет более понятно... а вот тутеще и исходники на ассемблере есть - чтоб вообще вопросов не осталось
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Речь идет о чтении устройством(слейвом) команды от мастера. И читать надо именно через 15 мкс (+ время выполнения программы - еще несколько, а может и десяток мкс) после среза сигнала. Если промотать выше, то там тоже есть исходник (проверенно рабочий), в котором все это реализовано.
Действительно. Я до сих пор не могу понять почему надо читать не позднее 15 мкс? Ведь если читать посередине, между длительностью сигнала 1 и сигнала 0, то получится точнее. Ведь переходные процессы в шине из-за паразитной емкости могут не закончится через 15 мкс. Т.е. я имею ввиду если мастер бросает шину и сразу читает, то это не есть правильно. Сколько в среднем "обычно" мастер держит шину при чтении бита?
_________________ 2kb of eeprom should be enought for everybody (C) Bill Gates` cat
Извините, я не сразу вник, что речь об эмуляции ведомого (slave) - он действительно должен считывать шину как можно позже от начала тайм-слота - не грех и через 30-40 микросекунд, и даже позже...
А я по привычке все про ведущего думал...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Я думаю, можно сделать. Кондюк побольше поставить - должно хватить.
Ан нет! В домофоне то подтяга 4.7 к минимум! Если кондюк 100 мкф поставить, то сколько он заряжаться то будет? Думаю достаточно 4.7 мкФ, т. к. кондюк без подзарядки остается максимум 650 мкс, пока в линии 0,а МК при 1.5 МГц много и не кушает, т. к. только линию на землю закорачивает. Завтра померию, сколько домофон напруги дает.
Питание от домофона не прокатит, т.к. сабж всё-таки является "мультиключом". Как в таком случае предполагается производить считывание "донора" и выбор нужного ключа из памяти?
В качестве варианта лишь максимальное снижение энергопотребления через соответствующие режимы контроллера, выход из которых лишь по прерываниям от вывода эмуляции и кнопки, и питания от литиевого 3V элемента типа того что на материнках ставится.
ЗЫ:В инете где-то встречал готовое решение на PIC, представляющее собой эмулятор тупой таблетки и именно с "паразитным" питанием, там PIC в SOIC-8, SMD кондёр, еще какая-то мелочь( не помню что именно) и всё, заделывается в конструкцию подобную "оригиналу" и как там описано от оригинала ничем не отличается.
Зарегистрирован: Вс сен 30, 2007 10:29:20 Сообщений: 6 Откуда: Красноярск
Рейтинг сообщения:0
dx40 писал(а):
...работает только один индикатор, который показывает код текущего действия (или ошибки). A - ждем сброса b - пережидаем сбррос C - читаем комманду d - выдаем ответ E - эмуляция закончена Если все правильно, то буквы мигают так быстро что их не заметно. Если какая-то буква отображается заметное время, значит произошла ошибка (например из-за плохого контакта со считывателем).
Собрал. Прошил. Включил. Считал ключ. Прочитал EEPROM – номер совпадает.
Для проверки режима имитации использую компьютер с переходником DS9097E и программу iBViev32 (чтобы каждый раз к домофону не бегать). Компьютер читает номера ключей на ура, а отмычку не видит. При подключении индикатор выдаёт последовательно Е, А, С, Е, А, С... Каждый символ светится меньше секунды, но прочитать можно. Контакт со считывателем – хороший. Что ещё может быть?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения