Здравствуйте. Столкнулся с такой проблемой. Передо мной стоит задача научить AVR-ку читать температуру с термодатчика и, хотя бы, выкидывать полученные данные в терминал по USART. Термодатчик смонтирован на плате и подключен к 6 pin PORTA, питание не паразитное. Мега работает на 8 MHz и тактиурется от внутреннего RC-генератора. Код написан на ассемблере в AVR studio. Теперь суть самой проблемы - термодатчик выдает presence импульс(то есть он всётаки работает), но все остальные действия безрезультатны - вместо температуры приходит всякая дребедень, но только не температура. Свой код перепроверял много раз, но не могу понять в чем ошибка. Знающие люди, поглядите на код пожалуйста, может я не вижу ошибки? Или подскажите возможные проблемы.. Заранее благодарен.
ds18b20_test.rar ( 1.76 килобайт )
Кол-во скачиваний: 417Целиком код в прикреплении, а вот участки с "функциями" записи и чтения:
Код
_ds_wr_byte:
sbi DDRA, 6 ;шестой пин PORTA на выход
ldi wr_counter, 8
_start_wr:
sbrc ds_cmd, 0
rjmp _wr_one
rjmp _wr_zero
_wr_one:
cbi PORTA, PA6
rcall _delay_1us
rcall _delay_1us
rcall _delay_1us
rcall _delay_1us
rcall _delay_1us
rcall _delay_1us
rcall _delay_1us
rcall _delay_1us
sbi PORTA, PA6
ldi box, 8
rcall _ds_s_delay ; 10us * box
rjmp _end_wr
_wr_zero:
cbi PORTA, PA6
ldi box, 8
rcall _ds_s_delay
sbi PORTA, PA6
rjmp _end_wr
_end_wr:
lsr ds_cmd
ldi box, 1
rcall _ds_s_delay
dec wr_counter
brne _start_wr
ret
_ds_rx_t_bytes: ; функция принимает 2 байта содержащих температуру
ldi wr_counter, 8
ldi lbyte, 0x00
ldi hbyte, 0x00
_read_l_b:
sbi DDRA, 6
;----------------------------
cbi PORTA, PA6
rcall _delay_1us ; 3 мкс
rcall _delay_1us
;sbi PORTA, PA6
;----------------------------
cbi DDRA, 6
ldi box, 1 ; 10 мкс
rcall _ds_s_delay
;----------------------------
sbic PINA, PA6
ori lbyte, (1 << 7)
lsr lbyte
;ldi box, 7
;rcall _ds_s_delay
rcall _delay_1us
rcall _delay_1us
dec wr_counter
breq _read_l_b
ldi wr_counter, 8
_read_h_b:
sbi DDRA, 6
;----------------------------
cbi PORTA, PA6
rcall _delay_1us ; 3 мкс
rcall _delay_1us
;sbi PORTA, PA6
;----------------------------
cbi DDRA, 6
ldi box, 1 ; 10 мкс
rcall _ds_s_delay
;----------------------------
sbic PINA, PA6
ori hbyte, (1 << 7)
lsr hbyte
rcall _delay_1us
dec wr_counter
breq _read_h_b
ret
З.Ы. Может быть проблема в нестабильном RC генераторе в меге?
ds18b20_test.rar ( 1.76 килобайт )
Кол-во скачиваний: 417