Fallout

Эмулятор DS1990A

Рекомендуемые сообщения

Опять таки возвращаясь к этой теме.... никак понять не могу.... :( вот в эмуляторе Proteus (среда эмуляции такая для разработки эмулирует многие элементы включая ПИКи АВР АРМ и тд )я загружаю прошивку запускаю и смотрю что на 4Мгц ПИК не успевает при передачи ловить синхро спады от замка (просто прозваниваю в цикле ножку пока не будет 0 ... )(замок пока тоже на ПИКе сделал) если делать все чисто на прерываниях то удаеться поймать спад но выставить бит удаеться только на 25 микросекунде после спада... а надо почти сразу (10 микросекунд после спада судя по даласовскому даташиту ) вот и вопрос.... к автору с которым уже имел честь общаться...... как так... может просто эмулятор у меня не правильно все эмулирует ...... или ещё чего но неудаеться вовремя выставить бит на шину... получаеться что мастер устройство читает бит раньше чем выставляю и получаються одни 1 соотсвено....

 

если интересно привожу свой код на HI-TECH C ( 9.50 PL2 последний вообщем ) под PIC12F629 ..... компилятор генерирует очень хороший код .... так что его жучить думаю не надо ибо проверка той же ножки такая же как если писать на ассме.... генератор внутренний.... сброс тоже внутренний... все остальнео отключено.... (сабака, сброс по упадку питания ...и тд)

 

~

 

 

импульс сброса ловлю в прерывании потом просыпаюсь и смотрю если умпульс был от сброса делаю... своё дело.... если поставить внешний генератор 20Мгц.... то бишь одна инструкция будет выпонятся за 200нано секунд против 1 микросекунды при 4Мгц внутреннем... то тогда да все рбаотает все успевает.... (в эмуляторе) .... да да да понимаю счас будут ответы типа а ты собери что на сайте все естьи п рошивка и тд и тп.... ну это понятно но все же мне инетресно почему же не хочет рбаотать....

вот я и думаю блин как же таблетка так быстро на все реагирует..... при чтении мой эмулятор замка.... выдает синхро спад... длительностью в 1-3 микросекундуы... хм... вот хотя должен минимум 6.... Ж) но опять таки с обычной таблеткой работает .... B) или прсотом не нечего бояться собирать реальное устрйоство и оно будет пахать как надо? если надо в асм коде выложу те куски которые интересуют людей..... для тех кто сомниваеться в качестве комплиятора =) может у кого естьр еальные интервалы для с замка... ибо если 6 микросекунд будет синхро спад импульс то все будет пахать устойчиво и на 4Мгц а то при 1-3 то ловит то не ловит =(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Бр... :wacko:

Когда люди хотели построить Вавилонскую башню, чтобы забраться на небеса к богу, он сделал несколько языков и "строители" перестали понимать друг друга... признаюсь, что я ламер в HI-TECH и С, и лишь отдалённо понимаю что там в коде написано, сам пишу всё на ассемблерере..

вообщем начну с описания как это происходит у меня, с временными задержками, посмотри, и разъясни, в каком месте у тебя камень предкновения:

для экономии энергии WDT отключён !!!

Итак, спим

При изменении состояния просыпаемся, смотрим линию, если проснулись и на линии лог 1 то ждём 25 мкс, при этом успеваем загрузить все байты ключа в озу.. (датшит= 15-60) и выдаём 0 - импульс присутствия. держим его 130 мкс (датшит= 60-240)

(если, проснувшись обнаруживаем на линии 0, то считаем, что это "глюк" и идём снова спать.)

итак, отпустив шину от импульса присутствия мы через 8-10 мкс проверяем её на наличие 1. эта единица будет означать окончание передачи первого байта мастером (домофоном) команды 33H. Скорее всего, эта единица появится только спустя 30 или больше мкс, но в любом случае она появится, когда закончится передача. при этом проверка шины у меня идёт с периодичностью 6 мкс (тратится 3 мкс на защиту от зависона, если связь с мастером прервётся, ведь WDT-то отключен).

После появления 1(конец передачи), ждём появления нуля, уже через 6 мкс. (в датшите сказано 1-15 держится 0, после чего выставляется бит).

Так как мы ещё не все биты от команды 33H приняли, поймав 0 (его ловим с периодичностью 2 мкс, так как тут защита не нужна, на линии же 1 держится, пропадёт ведь когда нибудь!), ждём 20 мкс и снова ждём появление "1"-конца передачи. так делаем 8 раз, тупо пропустив команду 33H... :rolleyes:

Итак, после появления последней "1", мы переходим к передаче кода, при этом уже готовы выставить бит, ожидая появление "0", строчкой

ask0
btfsc GPIO,0
goto ask0;

То есть, сканируя шину каждые 2 мкс.

после появления 0 мы выставляем бит уже через 6 мкс ( то есть выводим 0)

если нужо выставить 1 то ничего не делаем, сама появится, тупо ждём 20 мкс и опять идём в ожидание 0. (Этот 0 выставит мастер, когда прочтёт с шины 1.)

Если же мы выставили 0, то ждём 20 мкс (по датшиту нужно держать 15-60 мкс) и отпускаем шину. после чего, ждём 20 мкс и идём в ожидание "0".(вот особый момент - если не подождать, и перейти в ожидание 0 сразу, то шина из за ёмкости, не успеет перейти в 1, и возможен ложный приём стартового "0", коим является лишь "эхо" выставленного вами 0 - помню, я долго с этим глюком "парился").

Вот так вот мы и передаём весь код. Всё успеваем, на 4 мгц ;)

 

Почему у тебя выставить код получается только спустя 25 мкс? действительно поздновато! максимум 15. :blink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Угу понятненько я правдо все по честному делаю принимаю 33h а потом и передаю.... 20 - 25 микросекунд это когда я ловлю 0 прерыванием по спаду.... когда так же как и ты звоню ножку.... то нормально ..... устанавливаю бит быстро.... есдивено вопрос...... когда мастер ожидая бита выводит ноль на линию сколько этот 0 держиться?.... если 4-5 и более микросекунд сооственно то на 4Мгц думаю успею...... прсото даташит дата шитом а настоящая таблетка у меня и 2 микросекунды ловила..... а на пичке иногда можно "проскочить"

 

А так спасибо за ответ.... ассемблер хорошо конечно знать ... но Си более портабельный не думаешь потом когда чип меняешь особо долго.... Сабака отключена у меня =) ладно значит будем проверять в реальности.... надеюсь домофон не подкачает.... вот поглядел на схему у тебя ножка подтянута GPIO0(5) подтянута к 0 через 22к резистор ... как я понимаю ты таким образом хочешь быть уверен в появлении 1 на линии... и 0 если устройство не подсоединено?.... но при этом у тебя уже на нуле сидит через 100пик ножка GPIO1(4) а это зачем?,.. и зачем все оставшиеся ножки ( 3,8) заведены на питание?

 

У меня алгоритм такой:

 

после конфигурации прирывания GPIO2 только по спаду.... засыпаю..... когда происходит прерыания жду 300 микросекунд, читаю порт если на линии все ещё 0... значит был резет устанавливаю переменную OWSF в 1.... после слипа проверяю.... ага единичка стоит значит был резет после чего

while( OWDATA == 0 ); циклюсь .... тежи две микросекунды... как у тебя только жду единички.... конец имульса сброса..... жду 30 микросекунд конфигурирую порт на выход и устанавливаю 0 на нем.... в течении 120микросекунд.... после этого конфигурирую ИО как вход и жду пока не будет 1 ... тоже чтоб не попасть на якобы ноль при чтении битов с мастера.... шина поднялась значит 1 на линии..... попадаем в цикл в котором жду 0 после нуля жду 30 микросекунд чтоб уж точно мастер установил бит и читаю его... после чего сдвигаю бит вправо и так 8 раз потом провреяю если это 33h то идем дальше ,а если нет то засыпаем..... после в цикле тоже ловлю 0 и выставляю биты на линию... после чего выхожу из функции и засыпаю... опять таки ожидая нового резета....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сколько 0 держится точно не знаю, наверно у разных контроллёров по разному будет, но даже если импульс контроллёр выдаст по датшиту, то стоит как минимум пару микросекунд прибавить - время, пока шина переёдёт в 1 больше, веть 0 формируется открытым каналом транзистора а 1 лишь подтягивающим резистором (обычно 4,7к к +5В.) Так что в реальности поймать 0 успеешь запросто.

Собирай, и всё "пойдёт".. ;)

У меня резюк подтягивает ножку к минусу, как ты и сказал, чтобы держался 0, иначе напруга будет "гулять", а это плохо сказывается на потреблении, будешь нести в кармане, и статическое напряжение будет накапливаться. А все остальные выводы у меня подтянуты к +, там кондёр на 0,1 мкф это по питанию. У 200-го пика 2-й вывод это масса, а 5-й вывод это +пит. ( а откуда ты 8-ю ногу взял? там их всего 6! ЭТУ ли ты схему смотришь?) Можно подтянуть и к 0, без разницы, но подтянуть нужно обязательно, а то будет как я описал, нестабильный логический уровень, который будет приводить в переключению входных триггеров, и пик будет зря жрать ток.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сколько 0 держится точно не знаю, наверно у разных контроллёров по разному будет, но даже если импульс контроллёр выдаст по датшиту, то стоит как минимум пару микросекунд прибавить - время, пока шина переёдёт в 1 больше, веть 0 формируется открытым каналом транзистора а 1 лишь подтягивающим резистором (обычно 4,7к к +5В.) Так что в реальности поймать 0 успеешь запросто.

Собирай, и всё "пойдёт".. ;)

У меня резюк подтягивает ножку к минусу, как ты и сказал, чтобы держался 0, иначе напруга будет "гулять", а это плохо сказывается на потреблении, будешь нести в кармане, и статическое напряжение будет накапливаться. А все остальные выводы у меня подтянуты к +, там кондёр на 0,1 мкф это по питанию. У 200-го пика 2-й вывод это масса, а 5-й вывод это +пит. ( а откуда ты 8-ю ногу взял? там их всего 6! ЭТУ ли ты схему смотришь?) Можно подтянуть и к 0, без разницы, но подтянуть нужно обязательно, а то будет как я описал, нестабильный логический уровень, который будет приводить в переключению входных триггеров, и пик будет зря жрать ток.

 

 

Спасибо ... а по поводу 8 ног ну смотря какой корпус =) если SOT23-6 то да 6 ног Ж) сегодня именно и отпишусь .... если все будет удачно схемку кину.... и фото устройства кину...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не поленился собрал ридер этих таблеток..... вроде все в связки читалка таблеток / эмулятор пашет сегодня проверю на домашнем домофне в "живую" так сказать... едивенно что заметел.... что таблетка реальная нормально работает если в ноль уход при приеме/передаче мастером 1-2 микросекунды.... забавно ... видемо дейсвительно жесткая логика.... но все ровно удивлен..... эмулятор спад в 1 микросекунду часто пропускает..... а если по даташиту то все ОК.... ну ладно завтро постараюсь отписать.... как прошли испытания :rolleyes:

 

 

Проверил вчера работает все как часы.... спасибо за помощь..... выложу позже исходный код последний благо Си портабелен очень и можно с небольшими переделками использовать везде..... ну и схему и фотку....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не поленился собрал ридер этих таблеток..... вроде все в связки читалка таблеток / эмулятор пашет сегодня проверю на домашнем домофне в "живую" так сказать... едивенно что заметел.... что таблетка реальная нормально работает если в ноль уход при приеме/передаче мастером 1-2 микросекунды.... забавно ... видемо дейсвительно жесткая логика.... но все ровно удивлен..... эмулятор спад в 1 микросекунду часто пропускает..... а если по даташиту то все ОК.... ну ладно завтро постараюсь отписать.... как прошли испытания :rolleyes:

Проверил вчера работает все как часы.... спасибо за помощь..... выложу позже исходный код последний благо Си портабелен очень и можно с небольшими переделками использовать везде..... ну и схему и фотку....

Ну вот, а ты болялся... ;)

Схемка и код будет очень кстати, выкладывай. ( Если что, то сюда можно не только рисунки но и .ZIP архивы прикреплять.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:P

 

Итак контроллер применял PIC16F629 ну ибо такой только был.... в схеме по мимо него батарейка CR2032 .... один резистор на 15 - 100Ком для поддтяжке ножки данных что бы в воздухе не весела.... ножка сброса так как я использую внутрений сброс.... она свободна но по даташиту сказано она не может быть как выход поэтому можно её через резистор к чему нибудь подтянуть либо вообще напрямую к + или - соотсвенно..... остальные ножки у меня как выход сконфигурированы и на них логический 0.... хоят их можно тоже на вход сконфигурировать и притянуть к чему нибудь.....

 

Исходный Си код под HI-TECH C

 

На базе этого сделаю законченный вариант где свободные 4 ножки будут управлять чип светодиаодами... а ножка сброса которая только как вход работает будет собстно кнопка.... таким образом будет устройства размером 2на2см.... на 16 ключей....

 

фотографии этого и следующего устройства позже...

 

 

Схема все ноги неиспользуемые на землю post-10-1159869605_thumb.gif

Схема под текущий код когда только сброс как вход post-10-1159869613_thumb.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот и обещаная фотка .. сверху все залито эпоксидной смолой ибо собрано проводами на мантажке...

 

post-10-1160044161_thumb.jpg

 

:rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу прощения, что не совсем по теме....

Есть перепрограммируемый контролер (от "умного замка") PIC12F629. Вроде должен перепрошиваться, но ничего не получается. Бит защиты естестественно стоял, но я думаю, что он защищает только прошивку, а затереть программу и перепрошить кристал даст без проблем. Или я неправ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу прощения, что не совсем по теме....

Есть перепрограммируемый контролер (от "умного замка") PIC12F629. Вроде должен перепрошиваться, но ничего не получается. Бит защиты естестественно стоял, но я думаю, что он защищает только прошивку, а затереть программу и перепрошить кристал даст без проблем. Или я неправ?

Если стёр, то можешь записать новую прошивку.

А что не получается? Стереть, записать или не работает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во первых как то странно - стереть то стёр, а писать не хочет. Ну а что касается программатора - микросхемы флешпамяти (24с64) то программирует без проблем, а значить можно предположить что железо в программаторе исправно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во первых как то странно - стереть то стёр, а писать не хочет. Ну а что касается программатора - микросхемы флешпамяти (24с64) то программирует без проблем, а значить можно предположить что железо в программаторе исправно.

для флешь памяти не используется +13 вольт. возможно оно занижено или выдаётся не тогда когда нужно. пробуй на других пиках, если с ними всё нормально, значит умер. Такое у меня пару раз случалось.

Причём посмотри, у меня было так, что без пика +13 выходило, а пик как вставлю-нагрузка на ногу такая, что падало сильно. значит пик неисправен

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:P

 

Итак контроллер применял PIC16F629 ну ибо такой только был.... в схеме по мимо него батарейка CR2032 .... один резистор на 15 - 100Ком для поддтяжке ножки данных что бы в воздухе не весела.... ножка сброса так как я использую внутрений сброс.... она свободна но по даташиту сказано она не может быть как выход поэтому можно её через резистор к чему нибудь подтянуть либо вообще напрямую к + или - соотсвенно..... остальные ножки у меня как выход сконфигурированы и на них логический 0.... хоят их можно тоже на вход сконфигурировать и притянуть к чему нибудь.....

 

Исходный Си код под HI-TECH C

 

На базе этого сделаю законченный вариант где свободные 4 ножки будут управлять чип светодиаодами... а ножка сброса которая только как вход работает будет собстно кнопка.... таким образом будет устройства размером 2на2см.... на 16 ключей....

 

фотографии этого и следующего устройства позже...

 

 

Схема все ноги неиспользуемые на землю post-10-1159869605_thumb.gif

Схема под текущий код когда только сброс как вход post-10-1159869613_thumb.gif

 

А куда прописывать код моего DS19990 ?

unsigned char IBKEY[] = { 0xDC, 0x00, 0x00, 0x0D, 0xA4, 0x1D, 0xC3, 0x01 };

в эту строку в исходнике ?

Пожалуста объясните непонятливому

И вообще с нетерпением жду законченный вариант

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А куда прописывать код моего DS19990 ?

unsigned char IBKEY[] = { 0xDC, 0x00, 0x00, 0x0D, 0xA4, 0x1D, 0xC3, 0x01 };

в эту строку в исходнике ?

Пожалуста объясните непонятливому

И вообще с нетерпением жду законченный вариант

Именно, сюда!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А куда прописывать код моего DS19990 ?

unsigned char IBKEY[] = { 0xDC, 0x00, 0x00, 0x0D, 0xA4, 0x1D, 0xC3, 0x01 };

в эту строку в исходнике ?

Пожалуста объясните непонятливому

И вообще с нетерпением жду законченный вариант

Именно, сюда!

 

У меня код

00000B7E9BA9

как должна выглядеть тогда эта строка?

А то я не программист, а эмулятор очень хочется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А куда прописывать код моего DS19990 ?

unsigned char IBKEY[] = { 0xDC, 0x00, 0x00, 0x0D, 0xA4, 0x1D, 0xC3, 0x01 };

в эту строку в исходнике ?

Пожалуста объясните непонятливому

И вообще с нетерпением жду законченный вариант

Именно, сюда!

 

У меня код

00000B7E9BA9

как должна выглядеть тогда эта строка?

А то я не программист, а эмулятор очень хочется.

{ 0xХХ, 0x00, 0x00, 0x0B, 0x7E, 0x9B, 0xA9, 0x01 };

ХХ-написано слева над кодом

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость Гость

:P

 

Итак контроллер применял PIC16F629 ну ибо такой только был.... в схеме по мимо него батарейка CR2032 .... один резистор на 15 - 100Ком для поддтяжке ножки данных что бы в воздухе не весела.... ножка сброса так как я использую внутрений сброс.... она свободна но по даташиту сказано она не может быть как выход поэтому можно её через резистор к чему нибудь подтянуть либо вообще напрямую к + или - соотсвенно..... остальные ножки у меня как выход сконфигурированы и на них логический 0.... хоят их можно тоже на вход сконфигурировать и притянуть к чему нибудь.....

 

Исходный Си код под HI-TECH C

 

 

Ребята, если не трудно, скомпилируйте мне этот исходник. А то с моей скоростью инета я еще неделю буду компилятор тянуть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость keer
А куда прописывать код моего DS19990 ?

unsigned char IBKEY[] = { 0xDC, 0x00, 0x00, 0x0D, 0xA4, 0x1D, 0xC3, 0x01 };

в эту строку в исходнике ?

Пожалуста объясните непонятливому

И вообще с нетерпением жду законченный вариант

Именно, сюда!

 

У меня код

00000B7E9BA9

как должна выглядеть тогда эта строка?

А то я не программист, а эмулятор очень хочется.

{ 0xХХ, 0x00, 0x00, 0x0B, 0x7E, 0x9B, 0xA9, 0x01 };

ХХ-написано слева над кодом

Простите а чем копилили сорц mplab'e

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А где взять файлы htc.h , delay.h (в программе #include <htc.h>,#include "delay.h" , для PIC12F629 ?). Без них не компилится :ero5: .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эмулятор таблетки домофона DS1990A на Pic12F629

 

Вот прошивка с возможностью подтстановки своего номера таблетки без перекомпиляции.

 

http://vrtp.ru/index.php?showtopic=8479

 

7975aeba63a5.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вступить в беседу

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...