реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> DS18B20 вычисление CRC как это сделать?!, Почитал и даташит и апноты, там что то сказано, но не понял я.
m16
сообщение Jan 24 2006, 10:45
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 242
Регистрация: 27-01-05
Пользователь №: 2 225



рабочий пример на асме. до восьми датчиков ds1820. переименовать в zip архив.
Прикрепленные файлы
Прикрепленный файл  2313Temp8hard_zip.txt ( 15.11 килобайт ) Кол-во скачиваний: 155
 
Go to the top of the page
 
+Quote Post
GxOST
сообщение Jan 24 2006, 11:26
Сообщение #17


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 6-12-05
Из: Санкт-Петербург
Пользователь №: 11 878



Цитата(MicronSys @ Jan 24 2006, 12:18) *
Цитата(GxOST @ Jan 24 2006, 13:08) *

Цитата(eXeC001er @ Jan 24 2006, 10:58) *

Цитата(GxOST @ Jan 24 2006, 10:42) *

Цитата(eXeC001er @ Jan 24 2006, 10:02) *

Можно подробнее, а если еще и примерчик что вабще гуд.

Отличная штука для понимания идеи
А вообще понимать не обязательно, берешь исходники и вперед.

эт не то, я не разберусь в этих языках.

да чего ж там понимать! Всё как на це. Вот пример формирования crc в соответствии со сгенеренным верилогом (табличный)

Не таблица енто отстой ПАМЯТЬ НЕ РЕЗИНОВАЯ !!! blink.gif
Если делать в тинька то лишние байты ох как нужны !!!!! a14.gif

Таблица зато быстрей. Тут уж выбирай. К тому же можно табличную CRC, но обрабатывать по полбайта - таблица уменьшится с 256 до 16 байт (это для CRC8). В моем примере именно так и сделано для CRC16, правда там полубайты заранее разнесены по байтам, но кому надо - может переделать smile.gif

ЗЫ. Народ! вы про тэги [code] [/code] не в курсе что-ли?

Сообщение отредактировал GxOST - Jan 24 2006, 11:28


--------------------
cul8r!
* #ru_embedded - эмбеддерский чат
Go to the top of the page
 
+Quote Post
eXeC001er
сообщение Jan 24 2006, 11:52
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 23-02-05
Из: Краснодар
Пользователь №: 2 848



вот в айбатонах 8 байт и 8 это CRC! а в термометрах 9 байт. но в даташите тоже написано что то про 7 байт, никак не пойму.
по сайту поискал нашел, но файлы не скачиваются, говорит что их уже нет.
Go to the top of the page
 
+Quote Post
MicronSys
сообщение Jan 24 2006, 14:57
Сообщение #19


Частый гость
**

Группа: Участник
Сообщений: 106
Регистрация: 12-05-05
Пользователь №: 4 946



[quote name='eXeC001er' date='Jan 24 2006, 14:41' post='80832']
to MicronSys
а почему здесь 7 а не 8?! for (j = 0; j < 7; j++)
в сях 0 тоже ипользуется

типа 0,1,2..7 итого 8 байт cheers.gif
Go to the top of the page
 
+Quote Post
GxOST
сообщение Jan 24 2006, 15:12
Сообщение #20


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 6-12-05
Из: Санкт-Петербург
Пользователь №: 11 878



Цитата(MicronSys @ Jan 24 2006, 17:57) *
to MicronSys
а почему здесь 7 а не 8?! for (j = 0; j < 7; j++)
в сях 0 тоже ипользуется

типа 0,1,2..7 итого 8 байт cheers.gif

j<7, значит 7 не считается. cranky.gif


--------------------
cul8r!
* #ru_embedded - эмбеддерский чат
Go to the top of the page
 
+Quote Post
MicronSys
сообщение Jan 24 2006, 15:20
Сообщение #21


Частый гость
**

Группа: Участник
Сообщений: 106
Регистрация: 12-05-05
Пользователь №: 4 946



Бывает a14.gif
Go to the top of the page
 
+Quote Post
BVU
сообщение Jan 24 2006, 15:49
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(eXeC001er @ Jan 24 2006, 13:41) *
to MicronSys
а почему здесь 7 а не 8?! for (j = 0; j < 7; j++)
байтов то 9, последний CRC, которое считается по оставшимся 8 байтам.

Почитайте на этом сайте:
http://www.zinetz.info/article.php?id=home_temp2
Человек с этим разобрался и все подробно изложил, даже с примерами. smile.gif


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
Kovrov
сообщение Jan 24 2006, 15:55
Сообщение #23


Мастер-фломастер
****

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



на, мил человек, пользуйся и не мучейся :-)
Код
;*******************************************************************************
****
; Вычисление CRC (Х8+X5+X4+1) блока памяти
; в XH:XL надо загрузить начальный адрес блока памяти
; в count количество байт
;.def HiCRC = temp6
;.def LoCRC = temp5  здесь будет CRC8 блока памяти по окончании подпрограммы
;.def BitCount = temp2
;.def temp = r16
;.def count = temp3
;*******************************************************************************
****
CHECK_CRC:
    ldi        temp3,8        ; всего 8 байт
    LDX        (bufer_ds1820)
GetCRC_8:
      ldi     temp,0x18     ; загрузка полинома
      mov     temp6,temp     ; в регистр HiCRC
      clr     temp5         ; обнуление CRC регистра

CRC_Loop:
      ldi        temp2,8         ; указываем 8 бит для подсчета ;
      ld         temp,X+        ; берем байт из буфера

Bit_Loop:
      push     temp         ; сохранение байта в стеке
      eor     temp,temp5     ; xor байта и регистра CRC
      lsr     temp         ; сдвигаем младший бит получившегося байта в перенос
      brcc     Zero_0         ; проверяем младший разряд байта
      eor     temp5,temp6 ; если там 1, то CRC xor полином
Zero_0:
      ror     temp5          ; если там 0, то просто сдвиг CRC регистра
      pop     temp         ; возвращаем байт на место
      lsr     temp         ; и сдвигаем его
      dec     temp2       ;
      brne     Bit_Loop       ; переход на цикл проверки слеующего бита

      dec     temp3         ;
      brne     CRC_Loop     ; переход на следующий байт буфера
      ret


расчитана на вычисление группы байт
под темпы подставишь свои регистры
без труда переделаешь на апдейт CRC каждым новым байтом - что эффективней
типа как тока прочитал байт от 1820 сразу суешь его в эту процедуру


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
afe
сообщение Jan 25 2006, 22:57
Сообщение #24


Частый гость
**

Группа: Свой
Сообщений: 94
Регистрация: 4-05-05
Из: Харьков
Пользователь №: 4 740



Я уже давал эту ссылку и на этот вопрос там есть сорцы и для DS16b20:

http://electronix.ru/forum/index.php?showtopic=10934&st=15

http://hubbard.engr.scu.edu/avr/avrlib/


--------------------
SY AfE
Go to the top of the page
 
+Quote Post
Pyku_He_oTTyda
сообщение Feb 1 2006, 05:57
Сообщение #25


Профессионал
*****

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



Kovrov
Не обьясните, как начинающему на пальцах, как правильно определить буфер, например в 90S2313, и смоделировать программу в AVRstudio.
Особенно интересует, откуда берет значение строка

ld temp,X+ ; берем байт из буфера


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
m16
сообщение Feb 1 2006, 06:52
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 242
Регистрация: 27-01-05
Пользователь №: 2 225



Цитата(Pyku_He_oTTyda @ Feb 1 2006, 08:57) *
Особенно интересует, откуда берет значение строка
ld temp,X+ ; берем байт из буфера


система команд авр. http://www.gaw.ru/html.cgi/txt/doc/micros/avr/asm/start.htm
Go to the top of the page
 
+Quote Post
Atashi
сообщение Feb 1 2006, 08:27
Сообщение #27


Участник
*

Группа: Новичок
Сообщений: 66
Регистрация: 30-04-05
Пользователь №: 4 630



... давненько не был здесь; похоже, сомнения насчет 7/8/9 байтов где-то застряли.
Придется объясниться.

на таблетке ds1991 etс такая инфа набита: 01 - код семейства, потома 6 байтов кода, ище байт CRC:
итого выходить осемь байта.
Отчего и происходят мозоли, по авторитетному мнению г-на Пруткова. angry.gif
Go to the top of the page
 
+Quote Post
Pyku_He_oTTyda
сообщение Feb 1 2006, 10:21
Сообщение #28


Профессионал
*****

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



m16
Торнутая в морду лица ссылка помоглаsmile.gif, мозги запудренные просветлились. На обеде разобрался, откуда берет данные.

Вопрос вдогонку - 01(код семейства) участвуеn в подсчете CRC?


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
m16
сообщение Feb 1 2006, 11:47
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 242
Регистрация: 27-01-05
Пользователь №: 2 225



Цитата(Pyku_He_oTTyda @ Feb 1 2006, 13:21) *
m16
Торнутая в морду лица ссылка помоглаsmile.gif, мозги запудренные просветлились.

зачем так грубо. имхо если сам разобрался с карандашом то глубже оседает в извилинах.
http://www.gaw.ru/html.cgi/txt/app/micros/avr/avr318.htm
Go to the top of the page
 
+Quote Post
Pyku_He_oTTyda
сообщение Feb 2 2006, 06:14
Сообщение #30


Профессионал
*****

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



С СRС разобрался вчера на базе примера от Kovrov. Немного расписал поподробнее, что бы начинающим было понятнее.

.include "2313def.inc"

.cseg
.org 0

.def temp = R16
.def count = R17
.def BitCount = R18
.def HiCRC = R19
.def LoCRC = R20 ;здесь будет СRC8 блока памяти по окончании подпрограмы


;блок ссылок на обработчики прерываний
;=====================================

rjmp RESET ;reset handler
nop ;rjmp EXT_INT0 ;IRQ0 handler
nop ;rjmp EXT_INT1 ;IRQ1 handler
nop ;rjmp TIM_CAPT1 ;timer1 capture handler
nop ;rjmp TIM_COMP1 ;timrt1 compare handler
nop ;rjmp TIM_OVF1 ;timer1 overflov handler
nop ;rjmp TIM_OVF0 ;timer0 overflov handler
nop ;rjmp UART_RXC ;UART RX complete handler
nop ;rjmp UART_DRE ;UDR empty handler
nop ;rjmp UART_TXC ;UART TX complete handler
nop ;rjmp ANA_COMP ;analog comparator handler


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

CHECK_CRC:
ldi count,8 ; всего 8 байт

GetCRC_8:
ldi temp,0x18 ; загрузка полинома
mov HiCRC,temp ; в регистр HiCRC
clr LoCRC ; обнуление CRC регистра

CRC_Loop:
ldi BitCount,8 ; указываем 8 бит для подсчета
ld temp,X+ ; берем байт из буфера

Bit_Loop:
push temp ; сохранение байта в стеке
eor temp,LoCRC ; xor байта и регистра CRC
lsr temp ; сдвигаем младший бит получившегося байта в перенос
brcc Zero_0 ; проверяем младший разряд байта (перейти, если перенос очищен)
eor LoCRC,HiCRC ; если там 1, то CRC xor полином

Zero_0:
ror LoCRC ; если там 0, то просто сдвиг CRC регистра
pop temp ; возвращаем байт на место
lsr temp ; и сдвигаем его
dec BitCount ; декременируем значение регистра
brne Bit_Loop ; переход на цикл проверки слеующего бита

dec count ; декременируем значение счетчика байт
brne CRC_Loop ; переход на следующий байт буфера

tst LoCRC ;проверяем на ноль CRC
breq good ;если равно нулю, переходим на метку "good"

ret ;если результат не равен нулю,
;возвращаемся из подпрограммы подсчета CRC

;*******************************************************************************

good:
rjmp good

;====
;MAIN
;====

RESET:

ldi temp,low(RAMEND) ;определение начала
out SPL,temp ;стека и ОЗУ

clr r27
ldi r26,0x60 ;загрузка начального адреса блока памяти


rjmp CHECK_CRC


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016