Нужна помощь с ds1620

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
MKsoft
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт мар 30, 2007 05:06:11
Откуда: Углич
Контактная информация:

Нужна помощь с ds1620

Сообщение MKsoft »

Всем доброго времени суток.

Суть проблемы вот в чем. Подцепил к контроллеру tiny2313 термодатчик ds1620 и хочу выводить значение температуры на индикатор.

Набросал схемку в proteus написал программу(пишу на assembler). Программу отладил, на модели работает(одно "но" модель ds1620 в протеусе походу немного кривая, т.к. если выставить температуру с .5гр, присымает на градус больше).А на реальной схеме трабл, вывод на индикатор нормально, а вот с опросом и приемом данных с ds1620 проблема. Немогу понять в чем дело кто сталкивался с данным термодатчиком помогите.

Прилагаю модель и текст процедуры обмера с датчиком.

Код: Выделить всё


//ds1620
zapros_temp:	sbi LCD_TEMP, TEMP_RESET 
		ldi temp, 0x0C
		rcall send_byte

		rcall sleeps

		ldi temp, 10
		rcall send_byte

		cbi LCD_TEMP, TEMP_RESET 
		rcall sleeps
		sbi LCD_TEMP, TEMP_RESET				

		ldi temp, 0xEE
		rcall send_byte

		cbi LCD_TEMP, TEMP_RESET
		rcall sleeps
		sbi LCD_TEMP, TEMP_RESET								

		ldi temp, 0xAA
		rcall send_byte
				 				
		rcall sleeps			

		rcall read_byte

		cbi LCD_TEMP, TEMP_RESET 

		ret

send_byte:	ldi temp_2_10, 8
send_loop:		ror temp
		brcs send_1
		cbi LCD_TEMP, TEMP_CLK
		cbi LCD_TEMP, TEMP_DATA
		rcall sleeps
		sbi LCD_TEMP, TEMP_CLK
		rcall sleeps
		rjmp end_send

send_1:		cbi LCD_TEMP, TEMP_CLK
		sbi LCD_TEMP, TEMP_DATA
		rcall sleeps
		sbi LCD_TEMP, TEMP_CLK
		rcall sleeps

end_send:		dec temp_2_10
		brne send_loop
		ret


read_byte:		ldi R16,0b11111110  	;настройка портов
         		out DDR_LCD_TEMP,R16

		clr byte_1
		clr byte_2
		clr R29

		cbi LCD_TEMP, 6//отметка для теста в proteus

                                //первый бит .5гр
		sbi LCD_TEMP, TEMP_CLK
		rcall sleeps
		in temp, IN_LCD_TEMP
		cbi LCD_TEMP, TEMP_CLK

		andi temp, 0b00000001
		mov byte_2, temp
				
		ldi temp_2_10, 7
				
read_loop:		//непосредственно значение температуры
                                sbi LCD_TEMP, TEMP_CLK
		rcall sleeps
		in temp, IN_LCD_TEMP
		cbi LCD_TEMP, TEMP_CLK				
				
		andi temp, 0b00000001
		lsr temp
		ror byte_1
				
		dec temp_2_10				
		brne read_loop

		ror byte_1 //нормализую значение температуры
								
		//последний 9-й бит мне не нужен измеряемые значения температуры только "+"
                                sbi LCD_TEMP, TEMP_CLK
		rcall sleeps
		//in temp, IN_LCD_TEMP
		cbi LCD_TEMP, TEMP_CLK

		//andi temp, 0b00000001
		//mov R29, temp
									
		sbi LCD_TEMP, 6//отметка для теста в proteus
								
		ldi R16,0b11111111  	;настройка портов
         		out DDR_LCD_TEMP,R16

		ret
Реклама
Аватара пользователя
MKsoft
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт мар 30, 2007 05:06:11
Откуда: Углич
Контактная информация:

Re: Нужна помощь с ds1620

Сообщение MKsoft »

Пробовал подгрузить файлы не вышло, грешил на интернет, но сегодня тоже самое, что с вложениями?
Реклама
Аватара пользователя
MKsoft
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт мар 30, 2007 05:06:11
Откуда: Углич
Контактная информация:

Re: Нужна помощь с ds1620

Сообщение MKsoft »

Все проблему решил сам дело было не в программе. Контакт rst датчика развел не на ту ногу контроллера, ну а кому может пригодится обмен с датчиком абсолютно рабочий, вот последний вариант.

Код: Выделить всё

//ds1620
zapros_temp:	sbi LCD_TEMP, TEMP_RESET 
				ldi temp, 0x0C
				rcall send_byte

				rcall sleeps

				ldi temp, 10
				rcall send_byte

				cbi LCD_TEMP, TEMP_RESET 
				rcall sleeps
				sbi LCD_TEMP, TEMP_RESET				

				ldi temp, 0xEE
				rcall send_byte

				cbi LCD_TEMP, TEMP_RESET
				rcall sleeps
				sbi LCD_TEMP, TEMP_RESET								

				ldi temp, 0xAA
				rcall send_byte	
				rcall read_byte

				cbi LCD_TEMP, TEMP_RESET 

				ret

send_byte:		ldi temp_2_10, 8
send_loop:		ror temp
				brcs send_1
				cbi LCD_TEMP, TEMP_CLK
				cbi LCD_TEMP, TEMP_DATA
				rcall sleeps
				sbi LCD_TEMP, TEMP_CLK
				rjmp end_send

send_1:			cbi LCD_TEMP, TEMP_CLK
				sbi LCD_TEMP, TEMP_DATA
				rcall sleeps
				sbi LCD_TEMP, TEMP_CLK

end_send:		dec temp_2_10
				brne send_loop
				
				cbi LCD_TEMP, TEMP_DATA

				ret


read_byte:		ldi R16,0b11111110  	;настройка портов
         		out DDR_LCD_TEMP,R16

				clr byte_1
				clr byte_2
				clr R29

				cbi LCD_TEMP, 6

				cbi LCD_TEMP, TEMP_CLK
				rcall sleeps
				in temp, IN_LCD_TEMP
				sbi LCD_TEMP, TEMP_CLK

				andi temp, 0b00000001
				mov byte_2, temp
				
				ldi temp_2_10, 7
				
read_loop:		cbi LCD_TEMP, TEMP_CLK
				rcall sleeps
				in temp, IN_LCD_TEMP
				sbi LCD_TEMP, TEMP_CLK				
				
				andi temp, 0b00000001
				lsr temp
				ror byte_1
				
				dec temp_2_10				
				brne read_loop

				ror byte_1 //
								
				cbi LCD_TEMP, TEMP_CLK
				//rcall sleeps
				//in temp, IN_LCD_TEMP
				sbi LCD_TEMP, TEMP_CLK
									
				sbi LCD_TEMP, 6
								
				ldi R16,0b11111111  	;настройка портов
         		out DDR_LCD_TEMP,R16

				ret
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»