Главная arrow Форум  
16.09.2019 г.
Главная
Проекты
Статьи
Начинающим
Архив новостей
Ссылки
Контакты
Поиск
Файлы
Форум
Карта сайта
Авторизация





Забыли пароль?
Ещё не зарегистрированы? Регистрация
Поддержи наш сайт!
Через WebMoney

 R785211844650
 Z210696637574
 E368177590409

Форум ARV Research
Добро пожаловать, Гость
Пожалуйста Вход или Регистрация.
Забыли пароль?
программная реализация OW slave (1 просматривает)
_GEN_GOTOBOTTOM Ответить

TOPIC: программная реализация OW slave

#7055
nkrk (Пользователь)
Новичок
Постов: 1
graphgraph
программная реализация OW slave 19.01.2012 17:14 Репутация: 0  
Имеется в наличии датчик влажности sht21
также есть функционирующая 1Wire сеть с 3мя датчиками DS1820
поэтому хочу сделать 1wire slave устройство на основе atmega8

нашел код эмулирующий 1wire slave https://github.com/smurfix/owslave
но никак не могу запустить его на mega8. Хотя в Proteus работает, хотя и не без 'привета'
Заливаю эту прогу в МК и он либо вообще всю сеть вешает (т.е. ни одно устройство на ней не определяется, либо никак не определяется и не мешает )

опишу глюк в протеусе:
сейчас в схеме моя mega8 c тестовой прошивкой, устройство мастер на основе AT90S8515 и прошивкой из примеров эмулирующая мастера 1wire и осциллограф подключенный к сети
В такой конфигурации все работает, но стоит мне выкинуть !!! осциллограф как сразу мое 1wire slave устройство более не определяется

прикладываю исходники может кто поможет разобраться
File Attachment:
File name: src_light.zip
File size:9092 bytes


Содержимое поста отредактировано: nkrk, в: 19.01.2012 17:22
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#7056
ARV (Администратор)
Администратор
Постов: 2384
graph
В ответ на: программная реализация OW slave 20.01.2012 10:16 Репутация: 175  
посмотрел бегло код - очень он мне не понравился. чисто субъективно не понравился, не могу сказать, плохой он или хороший. сам я делал реализацию ведомого 1-wire, в протеусе работало и в реале с компьютером через СОМ-портовый адаптер связывалось/определялось. Мой код в самом простом варианте влезает и в attiny13, но в нем невозможно реализовать режим экономии энергии, т.е. МК должен постоянно молотить на максимальной рабочей частоте (не менее 8 МГц).
Код не до конца испытан, потому пока и не публикую. Если гарантируете всестороннюю проверку (тестирование) моего кода и помощь в его "вылизывании" - могу предоставить, пишите через меню КОНТАКТЫ. да, я работаю ТОЛЬКО с WinAVR.
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#7142
stiff (Пользователь)
Новичок
Постов: 7
graphgraph
В ответ на: программная реализация OW slave 25.02.2012 07:54 Репутация: 0  
сам я делал реализацию ведомого 1-wire, в протеусе работало и в реале с компьютером
Нашел код на радиокоте. Собрался на авр студии и даже отдает свой адрес.

Возник вопрос. А не могли бы Вы в двух словах (строчках кода) написать как обрабатывать команды мастера?

Code:

 int main () {     uint8_t resp[] = {0x000x010x020x030x040xFF0xFE0xFD0xFB};     while (1) {         uint8_t result wait_command();                  if (result != 0) {             //send_block_P(9,resp);             //send_byte(0xac);             send_byte(0xac);         }     } }



Мастер спрашивает температуру, а в ответ приходят странные вещи.
Если я отправляю только один 0xac, то приходит
0xAC 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

Но если я отправляю три раза 0xac, то приходит
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

При этом DS18B20, висящие на этом же проводе, о своей температуре исправно рапортуют и железка свой адрес отдает.

ЧЯДНТ?

Содержимое поста отредактировано: stiff, в: 25.02.2012 10:12
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#7143
ARV (Администратор)
Администратор
Постов: 2384
graph
В ответ на: программная реализация OW slave 25.02.2012 10:35 Репутация: 175  
вы имитируете DS1820, который на запрос температуры выдает 9 байт. вы отвечаете одним байтом - он приходит, а еще 8 байтов мастер ЗАПРАШИВАЕТ, но вы на это не реагируете, и поэтому мастер считывает единички из шины. выдавать несколько байт надо функцией выдачи блока, чтобы гарантированно избежать затрат времени.
т.к. мой код еще сыроват (официально я его не публиковал именно по этой причине), в нем могут быть косяки. времени довести до ума пока нет, к сожалению...
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#7147
stiff (Пользователь)
Новичок
Постов: 7
graphgraph
В ответ на: программная реализация OW slave 25.02.2012 19:50 Репутация: 0  
Меня просто немного удивило, что если отсылать три байта, то первые два перестают приходить.
Сделал через отправку блока
Code:

 send_block(9,resp);


все работает.

т.к. мой код еще сыроват
Ваш код — единственное из доступного в сети, что заработало с минимальным допиливанием.
Премногоблагодарствую за это.
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#7150
ARV (Администратор)
Администратор
Постов: 2384
graph
В ответ на: программная реализация OW slave 25.02.2012 21:14 Репутация: 175  
было бы хорошо узнать о допиливании, которое потребовалось. у самого меня времени на допилы нет, а тема, как я понимаю, интересна многим. поможете мне с доработками - я опубликую код. Можете вписать себя в тексте исходников с указанием, что именно вы там доделали - будет типа GNU проекта
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#7151
stiff (Пользователь)
Новичок
Постов: 7
graphgraph
В ответ на: программная реализация OW slave 25.02.2012 22:01 Репутация: 0  
Я ошибся. Сейчас попробовал оригинальный файл — работает без изменений.
Возможно, не хватает расчета CRC.

Если в процессе вылезет какие-нибудь траблы — отпишусь.
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#7153
ARV (Администратор)
Администратор
Постов: 2384
graph
В ответ на: программная реализация OW slave 26.02.2012 00:02 Репутация: 175  
не понял, в чем вы ошиблись? в том, что мой код работает? или в чем-то еще? как-то из сказанного я в потерях...
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#7154
stiff (Пользователь)
Новичок
Постов: 7
graphgraph
В ответ на: программная реализация OW slave 26.02.2012 01:11 Репутация: 0  
не понял, в чем вы ошиблись? в том, что мой код работает? или в чем-то еще? как-то из сказанного я в потерях...
когда я полез разбираться с кодом — в одном месте поставил отладочный вывод в uart и соответственно порушил тайминги. Потом убрал и чуть код поменял. Заработало.
А потом вернул все в исходное состояние — продолжает работать.

Так что код работает. Ошибся я в том, что в код нужно было вносить изменения для его работоспособности.
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#7155
stiff (Пользователь)
Новичок
Постов: 7
graphgraph
В ответ на: программная реализация OW slave 26.02.2012 04:10 Репутация: 0  
Ошибся два раза =)
Протеус не обновил прошивку. В общем доработка состоит в изменении
Code:

 if(get_byte(&cmd)) goto m1;


на
Code:

 if(== get_byte(&cmd)) goto m1;



Также предлагаю ввести ф-цию расчета crc

Code:

 // // Compute a Dallas Semiconductor 8 bit CRC directly. // uint8_t calc_crc8(uint8_t lenuint8_t *addr) {     uint8_t crc 0;          while (len--) {         uint8_t inbyte = *addr++;         for (uint8_t i 8ii--) {             uint8_t mix = (crc inbyte) & 0x01;             crc >>= 1;             if (mixcrc ^= 0x8C;             inbyte >>= 1;         }     }     return crc; }



И что-нибудь в виде

Code:

 uint8_t send_block_crc(uint8_t countuint8_t *buf){     uint8_t crc calc_crc8(countbuf);     for(; countcount--){         if(!send_byte(*buf++)) return 0;     }     if(!send_byte(crc)) return 0;     return 1; }

  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
_GEN_GOTOTOP Ответить
© Copyright 2007 Best of Joomla, Работает на FireBoardполучить последние сообщения прямо на Ваш рабочий стол