Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

CodeVisionAVR 1.25 and ds1992

Непрочитано 25.11.2009, 02:24  
Serj1987
Прохожий
 
Регистрация: 25.11.2009
Сообщений: 1
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Serj1987 на пути к лучшему
По умолчанию CodeVisionAVR 1.25 and ds1992

Добрый день!
Нужна ваша помощь в том чтоб разобраться в ридера к DS1992. среда разработки CodeVisionAVR 1.25. Опыт программирования AVR почти нет, сам программист на .NET. У меня вопрос, в модуле 1wire.h есть unsigned char w1_search(unsigned char cmd,void *p) метод, вопрос, можно ли получить доступ к страницам памяти DS1992?И как вообще получить доступ к SRAM? І как тогда записать в память??
Буду благодарен за любую помощь.
Реклама:
Serj1987 вне форума  
Непрочитано 25.11.2009, 14:11  
savarez
Частый гость
 
Регистрация: 09.11.2009
Сообщений: 26
Сказал спасибо: 10
Сказали Спасибо 9 раз(а) в 5 сообщении(ях)
savarez на пути к лучшему
По умолчанию Re: CodeVisionAVR 1.25 and ds1992

Действия с 1-wire устройствами всегда однотипно:
  1. Rest
  2. Команда выбора устройства
  3. Номер устройства
  4. Команда записи/чтения
  5. Отправка байтов на запись/получение байтов при чтении
  6. Reset

Но сначала надо найти устройства:

Код:
#define MAX_DEVICES     3 
#define FAMILY_CODE     0x08

char devices_codes[MAX_DEVICES][9];
char devices;

w1_init();
devices = w1_search(FAMILY_CODE, &devices_codes[0][0]);
Функция вернёт в devices количество найденных девайсов DS1992 по их Family Code 0x08 (см. даташит), а devices_codes - будет массив 64 битных кодов найденных устройств,

ну и далее можно с ними рабоать:
(комманды и последовательность действий подробно описаны в даташите)
Код:
#define	MATCH_ROM		0x55  
#define	WRITE_SCRATCHPAD 	0x0F

char i;
char data[2] = {'Х', 'У'};  // два байта, что будем записывать в память

for (i=0; i‹devices; i++)
{
	w1_init(); 		// отправка reset
	w1_write(MATCH_ROM);  	// команда выбора определённого девайса
	w1_write(&device_codes[i][0]);  // код девайса
	w1_write(WRITE_SCRATCHPAD); // команда записи
	w1_write(0x26);  	// передача этих двух байтов определят позицию записи 
	w1_writre(0x00); 	// снчала LSB, потом MSB. здесь мы пишем в позицию памяти 0026h
	w1_write(data[0]);   	// пишем первый байт наших данных
	w1_writre(data[1]); 	// пишем второй байт наших данных 
	w1_init(); 		// на всякий случай резетим, говорим спасибо и выходим
}
Чтение делается аналогично. Можно считывать память побайтово. Можно получить её всю. Если устройство на линии одно - с ним можно работать не используя его номер, и заменив MATCH_ROM на SKIP_ROM.
Всё написано в даташите с примером последовательностей и кодами команд.

Да, и ещё одно - Scratchpad сохранится в постоянной памяти устройства только после команды Copy Scratchpad. В противном случае после отключения питания эти данные пропадут.

Полная последовательность действий при записи:
  1. Записать
  2. Считать и проверить, что всё ок (для эстетов)
  3. Инициировать копирование в EEPROM устройства.

Последний раз редактировалось savarez; 25.11.2009 в 14:17.
savarez вне форума  
Сказали "Спасибо" savarez
Serj1987 (03.12.2009)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 04:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.