1wire slave (эмулятор устройства на шине), Си (CVAVR)

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Аватара пользователя
alex08cb
Нашел транзистор. Понюхал.
Сообщения: 189
Зарегистрирован: Пн мар 22, 2010 20:00:55
Откуда: Новосибирск
Контактная информация:

1wire slave (эмулятор устройства на шине), Си (CVAVR)

Сообщение alex08cb »

Добрый мяу всем! Колебался на тему того, что куда выложить свои труды. Решил, что это больше похоже на программирование, а не на законченное цифровое устройство. Потому пишу здесь, не судите строго. К делу!

Ковырялся как то с очередной своей поделкой и пришел к выводу, что мне очень необходимо больше каналов ШИМ, чем это имеет АТмега16. Попытался сваять программный ШИМ - получилось, но для беззвучной работы куллера нужна высокая частота, но тогда ни на что другое МК уже не хватает (еле ползёт).

Самое простое решение, которое пришло в голову - воткнуть в качестве управляемого генератора АТТини45, благо она стоит не дорого (47р у нас), и управлять ей по уже имеющейся на головном МК шине 1wire. Возникла идея создания 1wire_slave устройства, но сколько бы я не гуглил, но так и не нашел на Си (CVAVR) более-менее доходчивого примера. Пришлось брать даташит, скудное описалово на русском, осцилл и весь свой небольшой опыт в программировании.

Что у меня получилось, судить Вам. Профи могут указать на мои ошибки, а новички могут что то подчерпнуть из кода (он излишне прокомментирован).

Что умеет код?

Давать находить себя по команде SEARCH ROM 0xF0 - поможет, если устройств на шине больше, чем 1.
Отдавать свой ROM по команде READ ROM 0x33 - можно сделать эмулятор iBUTTON 1990а
Умеет MATCH ROM (0x55) - нужно, если устройство на шине не одно - позволяет обратиться к себе лично по ROM
Позволяет Мастеру записывать 8 байт по аналогии команды WRITE SCRATCHPAD 0x4E. От Мастера принимается 7-байтный буфер (+байт crc), в котором (при организации связи между МК) могут содержаться или команды Слейву, или какой то ответ.
Позволяет Мастеру считывать 8 байт по аналогии команды READ SCRATCHPAD 0xBE. Мастеру передается 7-байтный буфер(+байт crc), в которых (при организации связи между МК) может содержаться или ответ мастеру, или команда.
Умеет подтверждать Мастеру вопрос "Правильно ли ты принял последний буфер, совпало ли crc"?

Выкладываю код прежде всего потому, что несколько дней назад тщетно искал его, но не нашел. Или я плохо искал, или это первое явление 1wire slave под Си и компилятор CVAVR. Профессионалы, не судите строго код! Я только учусь.

Да, и пару слов о железе. Код писался и проверялся на ATmega8A, работающий на частоте 8мГц своего внутреннего тактового генератора. Шина 1Wire заведена на PD2, активирован INT0 по низкому уровню. Исполняющий код, который должен располагаться в основном цикле, я не писал, ибо тут уж каждый сам решает как быть дальше с полученным от Мастера буффером.
Вложения
1wire_slave.zip
Пробная реализация 1wire-slave. Язык Си, компилятор CVAVR 1.25.9 Поправил кое что.
(77.27 КБ) 1538 скачиваний
Продолжение ЗУ по мотивам уважаемого Слона этой ветки.
Реклама
Belerafon
Встал на лапы
Сообщения: 110
Зарегистрирован: Вс май 10, 2009 18:23:45

Re: 1wire slave (эмулятор устройства на шине), Си (CVAVR)

Сообщение Belerafon »

Спасибо за пример кода, больше работающих примеров под codevision не смог найти! Но у вас в примере что то не так, когда подключено несколько slave, atmega8(в которой 1-wire slave) вешает всю сеть и ни одно устройство не находит, как только убираешь MK вся сеть начинает работать и находит все подключенные DS18b20(подключаю их). Пробовал подключить 2 atmega8 соответственно с разными ROM но так же не получилось найти их, если подключено только одна atmega8(1-wire slave) то мастер находит ее хорошо и работает, в чем может быть ошибка? мне кажется ошибка в ответе на команду мастера 0xF0, может быть так?
Реклама
Аватара пользователя
alex08cb
Нашел транзистор. Понюхал.
Сообщения: 189
Зарегистрирован: Пн мар 22, 2010 20:00:55
Откуда: Новосибирск
Контактная информация:

Re: 1wire slave (эмулятор устройства на шине), Си (CVAVR)

Сообщение alex08cb »

Добрый день! Возможно, это не самая последняя версия кода. В процессе эволюции основного устройства, где этот 1wire-slave применялся совместно с датчиками DS18b20, ещё возникали некоторые проблемы, которые успешно решались. Но в конечном итоге конфигурация основного проекта изменилась и потребность в этом решении отпала. Сейчас я не дома, а по возвращении по стараюсь не забыть сравнить исходники и выложить последнюю версию.

Кстати, обсуждаемый пример работал по разному в Протеусе и реальном железе, если что.
Продолжение ЗУ по мотивам уважаемого Слона этой ветки.
Belerafon
Встал на лапы
Сообщения: 110
Зарегистрирован: Вс май 10, 2009 18:23:45

Re: 1wire slave (эмулятор устройства на шине), Си (CVAVR)

Сообщение Belerafon »

Буду очень благодарен! Я пробовал пока только в протеусе!
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «Периферия»