...пробовал на МК эмулировать любое 1wire устройство...
берёте пошустрее мк(минимальный строб по чтению около 1 мкс), протокол в зубы и вперёд.
Проблемы с чтением даташита, или в выборе мк?
(круглый)
Я ищу кто ещё, кроме меня занимался подобной разработкой. Есть ли аналоги? У меня уже реализовано. 1 мкс нужна лишь в одном месте 1wire протокола, но там хорошо справляется аппаратный подавитель дребезга. Там, где действительно нужна программная обработка потребуется Cortex m0 (минимальный строб по чтению от 2,5 до 5 мкс )
В каком-то смысле я пробовал. На AVR. На Си. Но на практике как следует протестировать не вышло: в протеусе оно вроде бы работало, если прошить в реальный МК - тоже как бы работало, но через раз, нестабильно. Честно говоря, не разбирался, в чем причина, хотя одно время очень сильно темой slave-девайсов 1-wire интересовался.
Вы реализовали на чем и каким образом, можете подробности сообщить?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Я ищу кто ещё, кроме меня занимался подобной разработкой. Есть ли аналоги? У меня уже реализовано. 1 мкс нужна лишь в одном месте 1wire протокола, но там хорошо справляется аппаратный подавитель дребезга. Там, где действительно нужна программная обработка потребуется Cortex m0 (минимальный строб по чтению от 2,5 до 5 мкс )
Интересуетесь есть ли конкуренты??? Подобной разработкой не занимался... не нужно было просто... а так... да ничего там сложного нет... Не знаю как у вас там сделано... Мегу отметаю сразу... но копеечного STM8L051 вполне хватит... Может даже и STM8S003 хватит... это уже думать надо...
_________________ "Я не даю готовых решений, я заставляю думать!"(С)
...кто ещё, кроме меня занимался подобной разработкой....
делал в 2007 где-то эмулятор для термодатчиков. Для тестировщиков. Прогнать просто во всех режимах бывает трудно установку(теплотехника). МК-авэрка, азм, всё программно, все 6 каналов одновременно. Так-же обслуга клавы и жк. Маленький такой пультик - подключаешь все датчики с боевой платы и вперёд. Но если по уму - тема гораздо глубже....
нареканий вроде-бы не было. тема вообще очень и очень глубокая. но она обычно требуется заводам, где есть конвеер, экспериментальное производство, сроки. И тестирование - одна из многих фаз в таком производстве. Но думаю в нынешних реалях - это не востребовано.
удачи вам (круглый) ЗЫ Из спортивного интереса можно даже и на 51 серии. Но ценности это ноль с копейками
Здравствуйте)написал в код вижоне программу под дс18б20 на семисегментниках. Пытаюсь разобраться с crc . Пока не очень получается , пытаюсь использовать таблицу [*]
}; inline uint8_t onewire_crc_update(uint8_t crc, uint8_t b) { return pgm_read_byte(&onewire_crc_table[crc ^ b]); } for ( i = 0; i < 8; i++) { uint8_t b = onewire_read(); data[i] = b; crc = onewire_crc_update(crc, b); }
if (onewire_read()!= crc) { PORTD.3=1; } else { PORTD.3=0;//просто включаю и выключаю порт по совпадению контрольной суммы.Порт в протеусе показывает что она не совпадает) }
написал в код вижоне программу под дс18б20 на семисегментниках. Пытаюсь разобраться с crc . Пока не очень получается , пытаюсь использовать таблицу [*]
pgm_read_byte не нужно, CVAVR поддерживает размещение констант во flash и считывание их оттуда, как обычные переменные/массивы.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Нет, с чего бы? Там у товарища цикл в пределах одной строчки кода, Reset_DS18B20 дальше уже не к for относится.
По поводу расчёта контрольной суммы - лично я на avr-libc использую встроенную функцию_crc_ibutton_update из <util/crc16.h>. Этот вариант получился даже компактнее чем самописные функции.
for( a=0; a<8; a++ ) bufDS18B20[a] = Read_DS18B20(); // читаем данные Reset_DS18B20(); // сброс DS1820 a = calc_crc( bufDS18B20, 7 ); // подсчет CRC if( bufDS18B20[7] != a ){ bufDS18B20[8] = a; // буфер не менее 10 байт! DS18B20_RET = DS18B20_ERROR_CRC_GET_ID; }
А что значит if( bufDS18B20[7] != a ){ bufDS18B20[8] = a; Если 8 элемент массива не равен контрольной сумме , присвоить контрольную сумму сумму 8 элементу?? Зачем это?Простите не могу понять.
Вообщем решил использовать функцию из стандартной библиотеки Codevision-а <1wire.h> , которая представляет собой : unsigned char w1_dow_crc8(void *p, unsigned char n) this function checks the 8 bit DOW CRC for a block of bytes with the length n, pointed by p. It returns 0 if the DOW CRC of the first n-1 bytes from the block equals the value of the n-th byte, or 1 if it doesn’t.
Код:
for(i=0;i<9;i++) { unsigned char b ; b = onewire_read(); data[i]=b; }
if ( w1_dow_crc8(data,9)==1) // вот таким образом проверяю crc
привет скажите, какой величины должна быть задержка между командами 1. пропуск ROM и конвертирование 2. пропуск ROM и считывание 3. и между считыванием и следующей инициализацией, сбросом, минимальная
МК передает датчику команду пропуск ROM, и следом команду конвентировать. вот меня интересует какая должна быть задержка между этими командами. должен же быть некий интервал между передачей двух байтов аналогично и в случае пропуск ROM и считывание
Никакой не должно. Вернее, задержка может быть любой. Неужели по диаграмме этого не видно? Там нарисовано: сброс - адрес - команда - сброс - адрес - команда. Ну в случае конвертирования - надо дождаться окончания корвертирования: или задержкой, или опрашивая статус датчика.
Цитата:
На верхнем логическом уровне, чтобы узнать температуру датчику посылаются следующие команды:
•Сброс •0xCC (skip_rom) •0x44 (convert_T) •теперь надо ждать окончания конвертации или опрашивая статус датчика, или просто отмеряя временной интервал. •Сброс •0xCC (skip_rom) •0xBE (read scratch pad)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения