Заголовок сообщения: 1wire slave (эмулятор устройства на шине), Си (CVAVR)
Добавлено: Чт янв 31, 2013 18:21:55
Нашел транзистор. Понюхал.
Карма: 1
Рейтинг сообщений: 12
Зарегистрирован: Пн мар 22, 2010 20:00:55 Сообщений: 189 Откуда: Новосибирск
Рейтинг сообщения:3
Добрый мяу всем! Колебался на тему того, что куда выложить свои труды. Решил, что это больше похоже на программирование, а не на законченное цифровое устройство. Потому пишу здесь, не судите строго. К делу!
Ковырялся как то с очередной своей поделкой и пришел к выводу, что мне очень необходимо больше каналов ШИМ, чем это имеет АТмега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. Язык Си, компилятор CVAVR 1.25.9 Поправил кое что. 1wire_slave.zip [77.27 KiB]
Скачиваний: 1513
_________________ Продолжение ЗУ по мотивам уважаемого Слона этой ветки.
Заголовок сообщения: Re: 1wire slave (эмулятор устройства на шине), Си (CVAVR)
Добавлено: Вс мар 09, 2014 11:48:13
Встал на лапы
Зарегистрирован: Вс май 10, 2009 18:23:45 Сообщений: 110
Рейтинг сообщения:0
Спасибо за пример кода, больше работающих примеров под codevision не смог найти! Но у вас в примере что то не так, когда подключено несколько slave, atmega8(в которой 1-wire slave) вешает всю сеть и ни одно устройство не находит, как только убираешь MK вся сеть начинает работать и находит все подключенные DS18b20(подключаю их). Пробовал подключить 2 atmega8 соответственно с разными ROM но так же не получилось найти их, если подключено только одна atmega8(1-wire slave) то мастер находит ее хорошо и работает, в чем может быть ошибка? мне кажется ошибка в ответе на команду мастера 0xF0, может быть так?
Заголовок сообщения: Re: 1wire slave (эмулятор устройства на шине), Си (CVAVR)
Добавлено: Вс мар 09, 2014 12:15:52
Нашел транзистор. Понюхал.
Карма: 1
Рейтинг сообщений: 12
Зарегистрирован: Пн мар 22, 2010 20:00:55 Сообщений: 189 Откуда: Новосибирск
Рейтинг сообщения:0
Добрый день! Возможно, это не самая последняя версия кода. В процессе эволюции основного устройства, где этот 1wire-slave применялся совместно с датчиками DS18b20, ещё возникали некоторые проблемы, которые успешно решались. Но в конечном итоге конфигурация основного проекта изменилась и потребность в этом решении отпала. Сейчас я не дома, а по возвращении по стараюсь не забыть сравнить исходники и выложить последнюю версию.
Кстати, обсуждаемый пример работал по разному в Протеусе и реальном железе, если что.
_________________ Продолжение ЗУ по мотивам уважаемого Слона этой ветки.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения