|
1-wire slawe на МК, у кого такое получилось? |
|
|
|
Nov 27 2008, 15:05
|
Участник

Группа: Участник
Сообщений: 52
Регистрация: 11-01-07
Пользователь №: 24 303

|
Всем доброе время суток! Пытаюсь сделать подобие 1-wire сети на МК. С реализацией Ведущего проблем не возникло, он успешно генерит ресет импульс, и таймслоты тоже, и считывать всё тоже умеет. Но проблема возникла с Ведомым. В интернете всего полно по реализации ведущего, и "кот наплакал" про Ведомого. за то есть много документации о том, как должны себя вести ведомые устройства в сети. Решил придельно упростить интерфейс до такого: 1) Мастер:отправляет ресет импульс 2) Ведомый: отправляет импульс присутствия 3) Мастер: Проверяет, отправил ли кто то импульс присутствия?, если нет, к п.1 4) Мастер: генерит начало таймслота, переменная BIT_COUNT_M=0; 5) Ведомый: после начала слота опускает линию, или оставляет в лог "1" 6) Мастер: ждет малость и считывает значение с шины, записывая его. BIT_COUNT_M=BIT_COUNT_M+1 7) Ведомый: ждет и отпускает линию 8) Мастер: Если BIT_COUNT_M<8 переход к см. п 4, иначе, отпускаем линию и возвращаем значение Т.е. как видим, мастер просто оправшивет устройство. Но ведомый иногда не распознаёт начала тайм слота, а ресет импульс - один из трёх раз. Частота ошибок при передаче данных, примерно 1 бит на 10 байт. Почему так? как устранить это? Вся программа ведомого работает в обработчике таймера, который работает с периодом 10 мкс, Связываю две ATmega-16, использую АВР студию 4.14 билд 589, GCC компилятор 20080610. Для опускания шины в ведомом использую _delay_us(). На графиках видно, о чем я говорю... Может, кто то сталкивался с подобным? Помогите, плиз)
Эскизы прикрепленных изображений
--------------------
Роботы делают роботов - предел автоматизации
|
|
|
|
|
 |
Ответов
|
Nov 28 2008, 08:44
|
Участник

Группа: Участник
Сообщений: 52
Регистрация: 11-01-07
Пользователь №: 24 303

|
Цитата(aaarrr @ Nov 27 2008, 17:17)  Для реализации 1W slave у МК должна быть быстрая реакция на прерывание от вывода, т.к. успеть выставить данные нужно в течение 10мкс после начала слота. А уж чем у Вас слейв так занят - Вам виднее. Ноги МК под прерывания заняты. Снимаем значения с ног по таймеру, с интервалом 10 мкс при частоте 8 МГц, в таймере проверяем несколько условий, и записываем несколько переменных типа char
--------------------
Роботы делают роботов - предел автоматизации
|
|
|
|
|
Nov 28 2008, 10:28
|
Участник

Группа: Участник
Сообщений: 52
Регистрация: 11-01-07
Пользователь №: 24 303

|
Цитата(aaarrr @ Nov 28 2008, 10:50)  Увеличивайте времянки - это будет уже не 1W, зато будет работать. Временные интервалы увеличил приверно в 10 раз... и на графиках с увеличенными временными интервалами Цитата(MrYuran @ Nov 28 2008, 11:52)  Кстати, если подумать, можно это всё и по одной линии сделать. Получится 1-Wire-UART Уже думал над этим.. понял, что лучше сделать эдакий 1-wire софтверный.. Аппаратный UART уже занят, к сожалению на нем есть устройство, с которым контроллер постоянно обменивается информацией... А если ещё к ним включить другие устройства, то боюсь, что они не подружаться при наличии в шине двух мастеров, которые могут одновременно что то передавать в линию, и тем самым себя заглушат вовсе, один будет тянуть вверх, другой вниз... Если бы его можно было применить, я бы так и сделал.
Причина редактирования: Излишнее цитирование.
--------------------
Роботы делают роботов - предел автоматизации
|
|
|
|
|
Nov 28 2008, 11:30
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Шалапут:-) @ Nov 28 2008, 13:28)  Уже думал над этим.. понял, что лучше сделать эдакий 1-wire софтверный.. А ванварь Вам точно нужна? У Вас в системе уже есть ванварный мастер, который обслуживает "железные" ванварные девайсы, и Вы решили для единообразия изобразить ванварного слейва? Тогда Вам потребуется 1 нога контроллера, способная генерить прерывание по перепаду 1/0, и один таймер с разрешением 1-2 мкс. Тактовая частота контроллера, чтобы в фоне обслуживать ванварь со стандартными временами, должна быть не менее: мастер на PIC - 4 МГц, на AVR - 2 МГц; слейвы - раза в 3-4 выше. Если реализовывать функции SearchROM/MatchROM, то тактовую слейвов нужно увеличить еще раза в 1.5. Если же Вы бьетесь с ванварным слейвом искусства ради, то ... Строить "софтверную" ванварь (если правильно понял Вашу мысль, нечто похожее на ванварь с масштабом по времени "уж как получится"), имхо, вообще бессмысленно: с "железной" ванварью совместимости не будет, а сама по себе ванварь - ну не очень интересный протокол, что по скорострельности, что по затратам на реализацию.
|
|
|
|
|
Nov 28 2008, 14:51
|
Участник

Группа: Участник
Сообщений: 52
Регистрация: 11-01-07
Пользователь №: 24 303

|
Цитата(xemul @ Nov 28 2008, 13:30)  А ванварь Вам точно нужна? Строю ванварь от безисходности... У меня нет готовой сети, она воплощаеться, скорости достаточно 1-4 кбит в сек, решил увеличить тайминги. Сегодня написал прогу на асме, которая умеет отвечать на ресет пульс и отправлять данные в тайм слоте. завтра выложу мастера в Си, сегодя не успею, домой пора.
Причина редактирования: Излишнее цитирование.
--------------------
Роботы делают роботов - предел автоматизации
|
|
|
|
|
Mar 18 2009, 14:26
|
Группа: Новичок
Сообщений: 3
Регистрация: 12-02-09
Пользователь №: 44 727

|
У меня та же самая проблема. Пытаюсь строить 1-wire slave, пишу на Code Vision, контроллер ATMega88P (раскочегаренный до 10 МГЦ 0_о, медленнее он просто промаргивает стартовый сигнал). Навесил это дело на прерывание, у меня reset вызывает прерывание, потом программа ждет сколько он там постоит, если больше 100мкс значит это ресет, ждет пока он пройдет, и отправляет preserve. Чтение, он ждет пока линия уйдет на ноль, когда ушло он ждет 9 мкс, считывает состояние линии, потом ждет пока уйдет на высокий уровень. Запись, он ждет пока линия уйдет на ноль, если надо передать 0 то ставит линию на ноль, и ждет 12 мкс, если 1 то просто ждет 12 мкс. На симуляторе(Proteus) всё работает на ура, вот в реале, один мусор какой то читаецо, вас никогда этот симулятор не подводил?
Сообщение отредактировал Denis R. Akimov - Mar 18 2009, 14:29
|
|
|
|
Сообщений в этой теме
Шалапут:-) 1-wire slawe на МК Nov 27 2008, 15:05 MrYuran Основная фича 1-wire это питание слэйва через сигн... Nov 28 2008, 09:52 QuickWitted Цитата(Шалапут:-) @ Nov 27 2008,... Mar 28 2009, 17:08 asket господа! Подскажите есть ли готовые решения мо... Oct 3 2009, 11:23  SasaVitebsk Цитата(asket @ Oct 3 2009, 14:23) ... sla... Oct 3 2009, 21:48   asket Цитата(SasaVitebsk @ Oct 4 2009, 01:48) Д... Oct 4 2009, 19:40    rezident Цитата(asket @ Oct 5 2009, 01:40) Мне это... Oct 4 2009, 19:48     SasaVitebsk Цитата(rezident @ Oct 4 2009, 22:48) Для ... Oct 5 2009, 16:32      asket У нас CAN используется в качестве магистральной ши... Oct 6 2009, 08:54 Rst7 Цитатаи мало того на 1 wire висят исполнительные у... Oct 6 2009, 10:14 asket Цитата(Rst7 @ Oct 6 2009, 14:14) И много ... Oct 6 2009, 17:25 e-serg Цитата(Rst7 @ Oct 6 2009, 19:14) И много ... Nov 5 2009, 11:38
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|