-
- Мне надо сделать эмулятор ключей DS1990. При этом контроллер помимо эмуляции слейва будет заниматься ещё обмен данными по RS-485. Поэтому боюсь, что просто не успею обрабатывать команды мастера. - FDA(23.09.2013 22:43)
- 1-Wire прекрасно работает по USART , можете просто разделять потоки Wire - 485 - ilyaul(24.09.2013 13:42)
- и даже слейв получится? - Argon(24.09.2013 13:44)
- А почему нет? - ilyaul(24.09.2013 13:59)
- Как именно? Мастер-то понятно, там стандартная реализация, а вот слэйв-то как? - FDA(24.09.2013 14:02)
- Никак. - fk0(24.09.2013 14:39)
- Это потому что библиотек С нет? - ilyaul(24.09.2013 16:28)
- Потому, что UART не начнёт сам передачу через ~15мкс после часа X. - fk0(24.09.2013 16:30)
- Это потому что библиотек С нет? - ilyaul(24.09.2013 16:28)
- Никак. - fk0(24.09.2013 14:39)
- Как именно? Мастер-то понятно, там стандартная реализация, а вот слэйв-то как? - FDA(24.09.2013 14:02)
- А почему нет? - ilyaul(24.09.2013 13:59)
- и даже слейв получится? - Argon(24.09.2013 13:44)
- Не так уж много задач, чтобы ставить ещё одну микросхему, как мне кажется. - KLIM83(23.09.2013 23:14)
- +1. если слэйв делать не "в лоб" с циклами ожидания, а с использованием прерываний по таймеру и перепаду уровня, тогда ресурсов должно хватить. - Argon(24.09.2013 07:52)
- Блин, вся проблема в реализации слейва на прерываниях только в одном моменте. При передаче ведомым нуля он должен опустить линию не более, чем через 1 мкс после окончания тактового импульса ведущего. Вход в процедуру обработки прерываний может FDA(76 знак., 24.09.2013 08:21 - 08:37)
- Где 1мкс? 15 мкс (ссылка) как минимум. - fk0(24.09.2013 09:34, ссылка)
- По ссылке более подробно расписано. Обратите внимание на параметр tLOWR. - FDA(24.09.2013 09:37, ссылка)
- Не читайте до обеда советских сайтов. Можно пойти на сайт maxim и ознакомиться с оригиналом, который, странно, не имеет ничего общего с перепечатками из десятых рук, из журнала "Коневодство". Импульс от мастера _минимум_ 5мкс для некоторых fk0(155 знак., 24.09.2013 10:13)
- На счёт 5мкс наврал тоже, может быть и 1 мкс :-) Но сэмплинг мастером делается всё равно через 15 мкс - Shura(24.09.2013 10:25)
- tLOWR от 1 до 15 мкс. Мастер не должен сэмплить ранее чем через 15 мкс. - Argon(24.09.2013 09:54)
- Что значит "не должен". Он имеет право сэмплить как через 1 мкс, так и через 15. - FDA(24.09.2013 09:59)
- нет, не имеет! если сэмплит внутри этого интервала и все работает, то значит, слэйв шустрый. tLOWR - это, кстати, времянка мастера, а не слэйва. Argon(136 знак., 24.09.2013 10:02 - 10:05)
- Блин, да откуда Вы это взяли-то??? Посмотрите на эпюры по ссылке, которую я давал, параметр tLOWR. - FDA(24.09.2013 10:13)
- Ещё раз -- fk0(27 знак., 24.09.2013 10:43)
- А почитать там же? В целях компенсации ёмкости линии интерфейса 1-Wire, master должен делать выборку сигнала как можно точнее через 15 мкс после начала синхронизирующего среза сигнала. - Shura(24.09.2013 10:22)
- Должен, но ведь не обязан. - FDA(24.09.2013 10:24)
- а? :-) - Shura(24.09.2013 10:26)
- обязан сделать выборку в интервале 15...60 мкс - Argon(24.09.2013 10:25)
- Должен, но ведь не обязан. - FDA(24.09.2013 10:24)
- ну... ориентируюсь по даташитам на ds1820. да и эпюры по ссылке не противоречат. Окно выборки сигнала находится сразу после tLOWR, к-рое может быть от 1 до 15 мкс и это время задается мастером. Argon(181 знак., 24.09.2013 10:21)
- Блин, действительно, я сам себя запутал. Сама-то выборка бита идет через 15 мкс после среза сигнала. Ладно, буду пробовать сейчас всё реализовать в железе. Мне ещё нужно упихнуть в PIC обмен по RS-485. Даже не представляю пока как он всё будет FDA(12 знак., 24.09.2013 10:26)
- Может, стоит попробовать на каком- нибудь кортексе это смакетировать? Хотя опасения в том, что не успеет кажутся надуманными. - KLIM83(24.09.2013 10:33)
- У пиков есть серьёзное преимущество. Возможно, более быстрый старт после подачи питания (если питание от домофона). Хотя это даташит изучать. Просто у любительского уровня контроллеров (AVR) есть неисключаемая задержка при старте на много тактов fk0(66 знак., 24.09.2013 10:50)
- И что это даст? - FDA(24.09.2013 10:33)
- Как минимум, более высокую тактовую частоту. - KLIM83(24.09.2013 10:34)
- На сколько? Вместо 64 МГц 75 МГц? Или Вы предлагаете ставить для этой задачи монстра STM32F407 со 168 МГц? - FDA(24.09.2013 10:38)
- Cortex-M0, если подходят по прочим характеристикам. AVR. PIC24. Но не PIC16/18 где без ассемблера (см. листинги выше) это нормально не сделать. Я уже делал: в мастере пришлось сделать более медленное тактирование (паузы между битами) иначе просто fk0(120 знак., 24.09.2013 10:50)
- Вообще, первична- идеология алгоритма. Если у вас есть опасения, что одновременная работа 1-wire и uart будет возможна, почему бы не разнести эти задачи, игнорируя uart при работе с 1-wire. Имитатор ключа, я считаю, вполне это допускает. - KLIM83(24.09.2013 10:47)
- На сколько? Вместо 64 МГц 75 МГц? Или Вы предлагаете ставить для этой задачи монстра STM32F407 со 168 МГц? - FDA(24.09.2013 10:38)
- Как минимум, более высокую тактовую частоту. - KLIM83(24.09.2013 10:34)
- а разве RS485 не на базе UART? - Argon(24.09.2013 10:31)
- Конечно на базе UART, от которого также прерывания нужно будет обрабатывать. - FDA(24.09.2013 10:34)
- Может, стоит попробовать на каком- нибудь кортексе это смакетировать? Хотя опасения в том, что не успеет кажутся надуманными. - KLIM83(24.09.2013 10:33)
- Блин, действительно, я сам себя запутал. Сама-то выборка бита идет через 15 мкс после среза сигнала. Ладно, буду пробовать сейчас всё реализовать в железе. Мне ещё нужно упихнуть в PIC обмен по RS-485. Даже не представляю пока как он всё будет FDA(12 знак., 24.09.2013 10:26)
- Блин, да откуда Вы это взяли-то??? Посмотрите на эпюры по ссылке, которую я давал, параметр tLOWR. - FDA(24.09.2013 10:13)
- нет, не имеет! если сэмплит внутри этого интервала и все работает, то значит, слэйв шустрый. tLOWR - это, кстати, времянка мастера, а не слэйва. Argon(136 знак., 24.09.2013 10:02 - 10:05)
- Что значит "не должен". Он имеет право сэмплить как через 1 мкс, так и через 15. - FDA(24.09.2013 09:59)
- Для того, чтобы войти в прерывание, этого предостаточно - Shura(24.09.2013 09:55)
- ХЗ. У меня будет PIC18F46K22 на частоте 64 МГц. Время такта соответственно 62,5 нс. Если вход в прерывание будет осуществлён даже за 20 тактов, то времянки уже на грани. - FDA(24.09.2013 10:01)
- Выкиньте контроллер проф. уровня и возьмите PIC24 или AVR, например. И всё сразу начнёт успевать. Потому, что в контроллерах проф. уровня прерывания сделаны через ()() -- на всех общий вектор это раз, компилятор вынужден сохранить огромное fk0(2632 знак., 24.09.2013 10:43)
- Вот так всегда. Вместо того, чтобы дать дельный совет начинается болтовня про говёные контроллеры и т.д. - FDA(24.09.2013 10:52)
- Они таки говённые, по крайней мере там, где нужны быстрые прерывания. 1-wire slave на pic18 я делал, i2c slave тоже делал. И больше бы не связывался. Нельзя на них ничего нормально сделать из-за дурной архитектуры. - fk0(24.09.2013 11:01)
- i2c slave делается элементарно, т.к. там есть аппаратный модуль. Спокойно работает на стандартной частоте 100 кГц. 1-wire slave сейчас накидал, буду испытывать. Пока получилось всего около 100 строк кода. - FDA(24.09.2013 11:08)
- Аппаратный модуль было нельзя использовать. - fk0(24.09.2013 11:24)
- нешта эта однопроводная тема стала активной. мне вот скоро придётся писать мастера 1-wire. только хвала Кришне - на верилоге. - Mahagam(24.09.2013 11:15)
- Покажешь функцию поиска слейвов на верилоге? ;) - Звероящер(24.09.2013 13:26)
- а вот этот КА можно уже переложить на МК. мне главное - избавить МК от ногодрыга. Mahagam(131 знак., 24.09.2013 14:09)
- Использовать для такого дела матрицу - мажорство :) Если только как неосновной алгоритм работы матрицы - Звероящер(25.09.2013 05:23)
- конечно неосновной. ради однодрота никто бы не заморачивался. но приняли решение перейти с TMP04 на DS18B20, вот придётся написать новый модуль - Mahagam(25.09.2013 11:08)
- Чем вызван переход? - amusin(25.09.2013 11:38)
- решили сократить количество проводки, да место в разъёме как-то дорого обходится. датчиков нужно с десяток. - Mahagam(25.09.2013 11:44)
- Чем вызван переход? - amusin(25.09.2013 11:38)
- конечно неосновной. ради однодрота никто бы не заморачивался. но приняли решение перейти с TMP04 на DS18B20, вот придётся написать новый модуль - Mahagam(25.09.2013 11:08)
- Использовать для такого дела матрицу - мажорство :) Если только как неосновной алгоритм работы матрицы - Звероящер(25.09.2013 05:23)
- а вот этот КА можно уже переложить на МК. мне главное - избавить МК от ногодрыга. Mahagam(131 знак., 24.09.2013 14:09)
- Покажешь функцию поиска слейвов на верилоге? ;) - Звероящер(24.09.2013 13:26)
- i2c slave делается элементарно, т.к. там есть аппаратный модуль. Спокойно работает на стандартной частоте 100 кГц. 1-wire slave сейчас накидал, буду испытывать. Пока получилось всего около 100 строк кода. - FDA(24.09.2013 11:08)
- Они таки говённые, по крайней мере там, где нужны быстрые прерывания. 1-wire slave на pic18 я делал, i2c slave тоже делал. И больше бы не связывался. Нельзя на них ничего нормально сделать из-за дурной архитектуры. - fk0(24.09.2013 11:01)
- А кто сказал, что нужно сохранять все регистры при входе в прерывание? - Shura(24.09.2013 10:45)
- А это не все. Это используемые. После долгой оптимизации программы. tablat понятно для чего. prod и btemp используются самим компилятором активно как временный регистр. fsr0 и 1 совершенно точно нужны в операциях x=y. fsr2 тоже где-то... это fk0(73 знак., 24.09.2013 10:55)
- Ну хз, хз. На авре да на асме вообще можно только регистр состояния сохранять. На сях также. Правда там компилятор что-то сам сохраняет. - Звероящер(24.09.2013 13:25)
- На MSP обходился двумя-тремя :-) - Shura(24.09.2013 10:59)
- А в PIC18 12 шт. или 6 шт. 16-битных пар. На MSP430 оно же 16-битное. Потом на MSP430 они, вроде, все ж равнозначные. Нет регистра специально для возврата 16-битного результата из функции, например, отличного от регистра аккумулятора (btemp и fk0(341 знак., 24.09.2013 11:06)
- 4 регистра в MSP не совсем равнозначные (из всех 16-ти адресуемых в командах) - Mahagam(24.09.2013 11:11)
- А в PIC18 12 шт. или 6 шт. 16-битных пар. На MSP430 оно же 16-битное. Потом на MSP430 они, вроде, все ж равнозначные. Нет регистра специально для возврата 16-битного результата из функции, например, отличного от регистра аккумулятора (btemp и fk0(341 знак., 24.09.2013 11:06)
- А это не все. Это используемые. После долгой оптимизации программы. tablat понятно для чего. prod и btemp используются самим компилятором активно как временный регистр. fsr0 и 1 совершенно точно нужны в операциях x=y. fsr2 тоже где-то... это fk0(73 знак., 24.09.2013 10:55)
- Вот так всегда. Вместо того, чтобы дать дельный совет начинается болтовня про говёные контроллеры и т.д. - FDA(24.09.2013 10:52)
- ловите прерыванием задний фронт от мастера и сразу выдаете слэйвом нужный бит, на 99.999% уверен, что это уложится в нужные 15 мкс :) Argon(197 знак., 24.09.2013 10:10 - 10:14)
- Выкиньте контроллер проф. уровня и возьмите PIC24 или AVR, например. И всё сразу начнёт успевать. Потому, что в контроллерах проф. уровня прерывания сделаны через ()() -- на всех общий вектор это раз, компилятор вынужден сохранить огромное fk0(2632 знак., 24.09.2013 10:43)
- а вот и не всегда - у 16х пиков если не путаю, наблюдал вход в прерывание то ли 5 то ли 8 мкс при FOSC = 4 МГц, а ведь надо еще успеть бит сдвинуть, к-рый выдать :) - Argon(24.09.2013 10:00)
- Так это вход. А для срабатывания - достаточно. Дальше есть пауза в 15 мкс, как уже написали - Shura(24.09.2013 10:04)
- ХЗ. У меня будет PIC18F46K22 на частоте 64 МГц. Время такта соответственно 62,5 нс. Если вход в прерывание будет осуществлён даже за 20 тактов, то времянки уже на грани. - FDA(24.09.2013 10:01)
- Не читайте до обеда советских сайтов. Можно пойти на сайт maxim и ознакомиться с оригиналом, который, странно, не имеет ничего общего с перепечатками из десятых рук, из журнала "Коневодство". Импульс от мастера _минимум_ 5мкс для некоторых fk0(155 знак., 24.09.2013 10:13)
- По ссылке более подробно расписано. Обратите внимание на параметр tLOWR. - FDA(24.09.2013 09:37, ссылка)
- Хреновый у вас контроллер :) Видел такую шляпу: девайс на классическом 51 контроллере, а вот обработку 1-wire сделали на тиньке. И она потом неспешно данные в 51-й передаёт. - Звероящер(24.09.2013 09:29)
- Так тинька-то контроллер любительского уровня. Там любой любитель за полчаса всё напишет. Ты поди на пике сделай... - fk0(24.09.2013 10:45)
- На асме - да, на сях - нет :) - Звероящер(24.09.2013 13:23)
- Так тинька-то контроллер любительского уровня. Там любой любитель за полчаса всё напишет. Ты поди на пике сделай... - fk0(24.09.2013 10:45)
- Где 1мкс? 15 мкс (ссылка) как минимум. - fk0(24.09.2013 09:34, ссылка)
- Блин, вся проблема в реализации слейва на прерываниях только в одном моменте. При передаче ведомым нуля он должен опустить линию не более, чем через 1 мкс после окончания тактового импульса ведущего. Вход в процедуру обработки прерываний может FDA(76 знак., 24.09.2013 08:21 - 08:37)
- Свой датчик забубенить к примеру. I2C неплох, адресуем.. вопчем нас ограничили жиды... адназначна. - POV(23.09.2013 23:19)
- +1. если слэйв делать не "в лоб" с циклами ожидания, а с использованием прерываний по таймеру и перепаду уровня, тогда ресурсов должно хватить. - Argon(24.09.2013 07:52)
- 1-Wire прекрасно работает по USART , можете просто разделять потоки Wire - 485 - ilyaul(24.09.2013 13:42)
- Мне надо сделать эмулятор ключей DS1990. При этом контроллер помимо эмуляции слейва будет заниматься ещё обмен данными по RS-485. Поэтому боюсь, что просто не успею обрабатывать команды мастера. - FDA(23.09.2013 22:43)