|
DS18B20 вычисление CRC как это сделать?!, Почитал и даташит и апноты, там что то сказано, но не понял я. |
|
|
|
 |
Ответов
(30 - 44)
|
Feb 2 2006, 17:22
|

Мастер-фломастер
   
Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700

|
Цитата(Pyku_He_oTTyda @ Feb 1 2006, 08:57)  Kovrov Не обьясните, как начинающему на пальцах, как правильно определить буфер, например в 90S2313, и смоделировать программу в AVRstudio. Особенно интересует, откуда берет значение строка
ld temp,X+ ; берем байт из буфера да ни каких особо ухищрений не нужно просто определяешь область озу в тиньке если 2313 то там 128 байт всего для 1820 нужно (процесс чтения после конвертации - в смысле когда температуа измерилась) в такой последовательности ты их (байты)будешь получать от 1820 первым идет: (1 байт температура младший байт) 2- температура старший байт 3- юзерский байт 1 4- юзерский байт 2 5 байт конфигурации 6- не используется 7- не используется 8 - не используется 9 - контрольная сумма (ради чего весь сыр бор) - 9й можешь не писать в буфер тогда буфер будет 8 байт всего но по началу лучше пиши ;--------- вообщем берешь каждый считанный байт и кидаешь его в буфер буфер определяешь нну например от начала памяти (начало у тиньки есть адрес $60) поэтому буфер будет от $60... $68 - всего 9 байт (вместе с контр суммой) все это хозяйство а имеено начало буфера LDI XL,low($0060) LDI XH,high($0060) ; определяешь начало буфера и 8 байт всего кстати для тини старший байт не используется(т.к 128 байт всего) поэтому LDI r16,high(xxxx) можно неписать после прогона процедуры в темп 5 получается контр сумма она должна быть равна 9 байту буфера если равна то все ок можно сказать что чтение с 1820 произошло успешно если не ровна то извините....
--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
|
|
|
|
|
Feb 3 2006, 05:54
|

Профессионал
    
Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360

|
Kovrov Разве неправильно я расписал для 1990? При правильности считывания в LoCRC разве не должны быть нули? ;******************************************************************************* ; Вычисление CRC (Х8+X5+X4+1) блока памяти ; в XH:XL надо загрузить начальный адрес блока памяти ; в count количество байт ; ; Данныее должны находится в блоке памяти в следующем порядке: ; начальный адрес памяти - Family Code ; следующие шесть - HEX чисела в обратном порядке, написанному на ключе ; последний адрес - СRС ; ; В результате успешных действий в регистре LoCRC должны находится нули ;*******************************************************************************
--------------------
Андрей Смирнов
|
|
|
|
|
Feb 3 2006, 10:38
|

Мастер-фломастер
   
Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700

|
Цитата(Pyku_He_oTTyda @ Feb 3 2006, 08:54)  Kovrov Разве неправильно я расписал для 1990? При правильности считывания в LoCRC разве не должны быть нули?  че уже считаем для 1990? недавно тока температуру читали ;-) нет нулей быть не должно за исключением если сумма равна нулю... кстати мне попадался экземпляр 1990 у которого реально крк = 00! можешь выложить суда содержимое буфера кстати для 1990 ( а если точнее результат команды "read rom"$33 - это 7байт +crc
Сообщение отредактировал Kovrov - Feb 3 2006, 10:43
--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
|
|
|
|
|
Feb 7 2006, 13:21
|
Участник

Группа: Новичок
Сообщений: 27
Регистрация: 29-11-05
Пользователь №: 11 546

|
Цитата(Pyku_He_oTTyda @ Feb 3 2006, 14:38)  01 1E 06 CA 0C 00 00 70
Это конкретный ключ, проверил еще пяток, нули в LoCRC
01 код семейства, лежит в $60, остальное по порядку. 70 - CRC А как вручную посчитать crc для этого ключа?
|
|
|
|
|
Feb 8 2006, 07:12
|

Местный
  
Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459

|
Цитата(Pyku_He_oTTyda @ Feb 8 2006, 08:53)  Вот как раз момент "чтение шины" не очень понятен, если не измерять длительность ответа, разве помехоустойчивость на высоте будет? Можно "читать шину" несколько раз(как в UARTе) в интервале ответа (60-240мкс) набирая статистику, обеспечивая тем самым высокий процент достоверности. Окно (имп.сбр+ожид60мкс+240мкс ответ)правда всеравно придется выдерживать.
--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
|
|
|
|
|
Feb 8 2006, 07:34
|

Мастер-фломастер
   
Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700

|
Цитата(Pyku_He_oTTyda @ Feb 8 2006, 08:53)  И вопрос в догонку: Если на шине присутствует подчиненный, то он должен в течение 60 мкс после освобождения ведущим шины установить низкий уровень длительностью не менее 60 мкс.
Как правильнее поступить: 1. Отследить наличие установки низкого уровня, по истечении 60мкс после освобождения линии ведущим? 2.Отследить не только наличие низкого уровня, но и измерить его длительнось? конечно! берешь таймер с тиком например мкс и зекаешь когда мастер сброс даст сразу онулируешь тимер и следишь пока не кончиться ресет мастера как кончился - смотришь че тамер на мерил если укладываешься в рамки то ок... а вообще очень красиво и экономно засунуть его под EXT int и работать с его прерыванием я так и делал очень приличная экономия!! на счет 60 мкс - я не понял - речь идет о presence pulse?
--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
|
|
|
|
|
Feb 8 2006, 09:27
|

Профессионал
    
Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360

|
Цитата на счет 60 мкс - я не понял - речь идет о presence pulse? да, подчиненный должен ответить, что он на линии, низким уровнем не менее 60мкс Цитата а вообще очень красиво и экономно засунуть его под EXT int и работать с его прерыванием я так и делал очень приличная экономия!! можно принцип немного подробнее?
--------------------
Андрей Смирнов
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|