Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Реализация 1-Wire на ассемблере
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
zelvans
Предлагаю свой вариант реализации опроса DS18s20 с помощью Atmega8.
Сделано на ассемблере в AVR Studio. Кварц 14.745 . Для синхронизации
1-Wire использую Timer2, если использовать другой кварц используемые
значения надо пересчитывать. задействованы две ножки PIND,3 (кнопка)
и PINC,4(шина 1-Wire). PINC,4 подтянута к питанию резистором 5к1 и
подключена к DS18s20. Если PIND,3 занулить и подать питание на схему,
то в EEPROM начиная с адрес 0x0000 можно увидеть адрес DS18s20
(7 байтов) плюс байт CRC. Записав эти 8 байтов в адрес 0x0010,
подав логическую 1 на PIND,3, после в EEPROM начиная с адреса
0x0070 можно увидеть содержимое Scratchpad-а (8 байтов+1 байт CRC
и ASCII десятки и единицы температуры)
Есть некоторая диагностика: в ячейке памяти ONE_WIRE_STAT
код завершения операции на шине 1Wire успешно 0xf0
0xe1 - превышено время ожидания импульса присутствия
0xe2 - импульс присутствия пришел слишком рано
0xe3 - импульс присутствия длиннее требуемого
0xe4 - импульс присутствия короче требуемого
0xe5 - при чтении нуля слишком долго удерживалась в нуле шина
0xe6 - не совпала CRC
На столе работают 4 датчика их адреса в EEPROM
0x0010, 0x0020, 0x0030, 0x0040 ,буду измерять температуру в 4
точках помещения. Знак температуры не анализирую. Есть косяк,
при включении выдается 85, так как у меня такого быть не может,
то значение 85(десятичное) игнорируется.

Нажмите для просмотра прикрепленного файла
ILYAUL
Цитата(zelvans @ Apr 30 2010, 07:19) *
Есть косяк,
при включении выдается 85, так как у меня такого быть не может,
то значение 85(десятичное) игнорируется.

Для DS18B20 - это значение default , о чём сообщено в DS

И так-то зачем? У Вас в прерывании разве меняются все регистры процессора?

Код
timer1:
push r0
push r1
push r2
push r3
push r4
push r5
push r6
push r7
push r8
push r9
push r10
push r11
push r12
push r13
push r14
push r15
push r16
push r17
push r18
push r19
push r20
push r21
push r22
push r23
push r24
push r25
push r26
push r27
push r28
push r29
push r30
push r31
in r16,$3f
push r16
R2X PAUSE1,r24,r25  
.........................................................
out $3f,r16
pop r31
pop r30
pop r29
pop r28
pop r27
pop r26
pop r25
pop r24
pop r23
pop r22
pop r21
pop r20
pop r19
pop r18
pop r17
pop r16
pop r15
pop r14
pop r13
pop r12
pop r11
pop r10
pop r9
pop r8
pop r7
pop r6
pop r5
pop r4
pop r3
pop r2
pop r1
pop r0
reti
zelvans
[quote name='ILYAUL' date='Apr 30 2010, 08:27' post='752466']
Для DS18B20 - это значение default , о чём сообщено в DS

И так-то зачем? У Вас в прерывании разве меняются все регистры процессора?

Это осталось с первых шагов с AVR, тогда я еще не представлял какие
регистры будут задействованы, это делу не мешает
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.