Ассемблер (ASM) для AVR в вопросах и ответах
У меня нету. 
Docendo discimus
- Реклама
- Сообщения: 209
- Зарегистрирован: Ср ноя 03, 2010 14:46:17
очень жаль
может еще у кого найдется 
Лень - двигатель прогресса!
Исходник чего? 1-wire - обмена? Есть. Если сумеешь разобраться 
1-wire сложноват для новичков. Даже я его с горем пополам осилил.
Исходников у меня не осталось, так как делалось только для нескольких устройств и потом были удалены по случайности.
Исходников у меня не осталось, так как делалось только для нескольких устройств и потом были удалены по случайности.
I am DX168B and this is my favourite forum on internet!
Ищите статьи ARV на этом сайте. Там и 1-wire раскурен, в проектах есть очень грамотная и раскомментированная библиотека на асме, можно просто подцепить к проекту и пользоваться. Материала - куча. Было бы желание.
- Реклама
DX168B писал(а):... Даже я его с горем пополам осилил.
...
это показатель ...
Да мне пока оно не надо. Протокол я уже знаю. Сам писал программу. Только значения периодов и задержек позабывал.
Но ничего не помешает вспомнить, если это потребуется. Последний раз я имел дело с аналоговым термодатчиком, встроенным в IGBT модуль. Никаких one-wire не потребовалось.
Только один инструментальный операционник и внешний АЦП, связанный с МК по I2C.
Но ничего не помешает вспомнить, если это потребуется. Последний раз я имел дело с аналоговым термодатчиком, встроенным в IGBT модуль. Никаких one-wire не потребовалось.
Только один инструментальный операционник и внешний АЦП, связанный с МК по I2C.
I am DX168B and this is my favourite forum on internet!
По мне так ничего сложного.DX168B писал(а):1-wire сложноват для новичков.
Если, конечно, по-минимому: без проверки контрольной суммы и без реализации нескольких устройств на одной шине
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
А я вычислял контрольную сумму табличным методом.
Быстро, но ест память и менее надёжно.
Хотя, в каком-то аппноуте видел и математический тип вычисления. Этот способ ест меньше памяти, более надёжен, но ест процессорное время.
Хотя, в каком-то аппноуте видел и математический тип вычисления. Этот способ ест меньше памяти, более надёжен, но ест процессорное время.
I am DX168B and this is my favourite forum on internet!
а в чем ненадежность табличного метода?!DX168B писал(а):А я вычислял контрольную сумму табличным методом.Быстро, но ест память и менее надёжно.
битва с дураками проиграна, победители торжествуют. слава победителям!
Вот это жестоко!DX168B писал(а):А я вычислял контрольную сумму табличным методом.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Что сложного-то в этом CRC?
(тоже умыкнул у ARV 
Код: Выделить всё
;-------------------------------------------------------------------------------
; выполняет подсчет CRC по алгоритму 1-Wire
; вход: r0 - считанный байт
; выход: CRC - содержит подсчитанную сумму
; портит: регистр Z
; примечание: перед первым вызовом CRC необходимо обнулить
;-------------------------------------------------------------------------------
crc8:
push r0
ldi wiretemp,8
mov wireres,wiretemp
r1w_loop_crc:
lds wiretemp,CRC
eor r0,wiretemp
ror r0
mov r0,wiretemp
brcc zero
ldi wiretemp,0x18
eor r0,wiretemp
zero:
ror r0
sts CRC,r0
pop r0
; 4 следующие команды делают циклический сдвиг r0
push r0
ror r0
pop r0
ror r0
push r0
dec wireres
brne r1w_loop_crc
pop r0
lds r0,CRC
retЗато быстроGudd-Head писал(а):Вот это жестоко!DX168B писал(а):А я вычислял контрольную сумму табличным методом.
Ненадёжность была именно в моём походе к этому виду вычисления на тот момент. Методом частичного перебора.Мастер Ломастер писал(а):а в чем ненадежность табличного метода?!
Был риск того, что кривые данные могли пройти проверку на целостность.
Потом нарвался на статьи ARV и сделал вычисление по его методикам.
I am DX168B and this is my favourite forum on internet!
ну, тогда ладноDX168B писал(а):Ненадёжность была именно в моём походе к этому виду вычисления на тот момент.
битва с дураками проиграна, победители торжествуют. слава победителям!
Так это недостаток не метода, а его кривой реализации. Если позволяет память, он наиболее эффективен в смысле быстродействия.DX168B писал(а):Ненадёжность была именно в моём походе к этому виду вычисления на тот момент. Методом частичного перебора.Мастер Ломастер писал(а):а в чем ненадежность табличного метода?!
Что касается надежности - независимо от метода, 100%-й гарантии от возможного пропуска ошибки нет.
Действительно, как-то сложновато, я применяю вот такую подпрограмму и таблица не требуется:ploop писал(а):Что сложного-то в этом CRC?
Код: Выделить всё
;-------------------------------------------------------------------------------
; вход: outByte
; выход: CRC
; дополнительно: регистры temp и temp1
;-------------------------------------------------------------------------------
do_crc: ; Программа обновления CRC8
ldi temp, 0x0C
ldi temp1, 8
CRC8_l2:
ror outByte
ror CRC
brcc CRC8_l3
subi CRC, 0x80 ; Инверсия старшего бита накопителя
CRC8_l3:
brpl CRC8_l4
eor CRC, temp
CRC8_l4:
dec temp1
brne CRC8_l2
ret
;-------------------------------------------------------------------------------
Или так:
Код: Выделить всё
CRC8:
mov r16, r17
lds r16, CRC
eor r17, r16
ldi ZH, high(CRCarray)
ldi ZL, low(CRCarray)
clc
rol ZL
rol ZH
add ZL, r17
ldi r16,0
adc ZH, r16
lpm r17, Z
sts CRC, r17
ret
;------------------------------------------------------------------
CRCarray:
.db 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65
.db 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220
.db 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98
.db 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255
.db 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7
.db 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154
.db 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36
.db 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185
.db 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147,205
.db 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80
.db 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238
.db 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115
.db 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139
.db 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22
.db 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168
.db 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53
I am DX168B and this is my favourite forum on internet!
Жестко, ну это если ресурсы девать некуда...DX168B писал(а):Или так:
У меня 11 строк программы, у Вас 14 плюс 256 байт памяти, в чем профит?
Если в скорости, то тоже непонятно, тот же DS18B20 почти секунду температуру замеряет.
А если за эту секунду надо ещё много чего успеть сделать?
У меня никогда не получалось полностью забить ПЗУ МК, как бы я не старался. Максимум мне удалось забить 70% из 2хкилобайтной тиньки(26). Программа и так была нафарширована. Так что памяти в МК достаточно, а вот потеря быстродействия - это другое.
PS: Заметил, что многие борются за каждый байт ПЗУ. Лично я ищу компромисс между объёмом и быстродействием с перевесом в сторону быстродействия. Если есть лишняя память, так почему же её не использовать, для получения быстродействия.
У меня никогда не получалось полностью забить ПЗУ МК, как бы я не старался. Максимум мне удалось забить 70% из 2хкилобайтной тиньки(26). Программа и так была нафарширована. Так что памяти в МК достаточно, а вот потеря быстродействия - это другое.
PS: Заметил, что многие борются за каждый байт ПЗУ. Лично я ищу компромисс между объёмом и быстродействием с перевесом в сторону быстродействия. Если есть лишняя память, так почему же её не использовать, для получения быстродействия.
I am DX168B and this is my favourite forum on internet!



