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

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

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

 
Опции темы

Замок на iButton DS1990

Непрочитано 22.09.2009, 18:49  
IOPA4
Почётный гражданин KAZUS.RUN
 
Аватар для IOPA4
 
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,290
Сказал спасибо: 452
Сказали Спасибо 501 раз(а) в 267 сообщении(ях)
IOPA4 на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

Сообщение от Developer_ Посмотреть сообщение
....Могу дать исходники. Вам для IAR или для CodeVision?
Если Вам не жалко - то для CodeVision
Реклама:
IOPA4 вне форума  
Непрочитано 23.09.2009, 10:23  
Developer_
Прописка
 
Регистрация: 21.12.2005
Сообщений: 247
Сказал спасибо: 10
Сказали Спасибо 18 раз(а) в 12 сообщении(ях)
Developer_ на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

Вот код. Вырезал его из старого проекта(с CodeVision давно не работаю) и повставлял рыбы что бы код приобрёл целостность, поэтому может выглядеть неказисто, но основной принцип работы передаёт и его легко прикрутить к своему проекту. Если есть вопросы - задавайте.
Цитата:
#include ‹delay.h› //Паузы

// 1 Wire Bus functions-----------------------------------
#asm
.equ __w1_port=0x15 ;PORTC
.equ __w1_bit=7
#endasm
#include ‹1wire.h› //Работа с Tuoch memory

unsigned char g_rom_codes[8]; //глобальный масив для хранения принятых ключей
bit in_try_key; //бит приём аключа

bit in_key_for_work; // бит для обработки ключа




// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void) //Каждые 0,333c
{
unsigned char i,k,z;
TCNT1H=0xf6; // Reinitialize Timer 1 value
TCNT1L=0xa1;

//*****ЗАДАЧА1 ************************************************** ***********************

//**********ЗАДАЧА2 приём ключа ibutton*******************************************
t_m=0; //Отпускаем линию
delay_us(60); //ждём
if(t_m_pin==0)
{
imput_ibutton(); //получаем номер ключа
if(in_try_key==1) //проверяем правильность приёма ключа(crc)
{
in_try_key=0; //сбрасываем бит приёма ключа
in_key_for_work = 1;

//ЧТО ТО ДЕЛАЕМ.....



//Светоэфект
vd=~vd;
delay_ms(1000);
vd=~vd;
delay_ms(1000);
vd=~vd;
delay_ms(1000);
vd=~vd;
delay_ms(1000);
vd=~vd;
delay_ms(1000);
}
}
t_m=1; //Зануляем линию линию

//*******ЗАДАЧА3****************************** **************************************
}

void init_timer(void)
{
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7,200 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0xf6;
TCNT1L=0xa3;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
}

void imput_ibutton(void)
{
unsigned char i,crc;
in_try_key=0;
delay_us(500); //pause for pass a puls presents
w1_write(0x0f); //0f-comand read EEPRPM
for(i=0;i‹8;i++)
{
g_rom_codes[i]= w1_read(); //giving 8 bite from 1wire bus
crc=w1_dow_crc8(g_rom_codes,i); //calculation CRC
}
if(crc==g_rom_codes[7]) if(g_rom_codes[0]==1) in_try_key=1;
}



void main(void)
{
init_timer();
while(1)
{
if(in_key_for_work ) //что то делаем....



}

}
__________________
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей, по этому чёртовому гвоздю!
Developer_ вне форума  
Непрочитано 23.09.2009, 10:32  
Developer_
Прописка
 
Регистрация: 21.12.2005
Сообщений: 247
Сказал спасибо: 10
Сказали Спасибо 18 раз(а) в 12 сообщении(ях)
Developer_ на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

Вот ещё:
#define t_m DDRC.7 //Адрес tuoch memory
#define t_m_pin PINC.7 //Адрес tuoch memory
__________________
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей, по этому чёртовому гвоздю!
Developer_ вне форума  
Сказали "Спасибо" Developer_
IOPA4 (23.09.2009)
Непрочитано 04.10.2009, 13:20  
IOPA4
Почётный гражданин KAZUS.RUN
 
Аватар для IOPA4
 
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,290
Сказал спасибо: 452
Сказали Спасибо 501 раз(а) в 267 сообщении(ях)
IOPA4 на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

Уважаемые коллеги! Может кто подскажет:
в Протеусе работает - в железе нет.
Это несколько переделанный пример из CodeVisionAVR. Попробовал убрать FAMILY_CODE, проверку CRC - все-равно никакого результата. Может частота процессора в примере другая, у меня 4 мГц? Что-то в настройках 1ware?
Вложения:
Тип файла: rar DS1990A.rar (108.2 Кб, 344 просмотров)
IOPA4 вне форума  
Непрочитано 04.10.2009, 14:40  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

Сообщение от IOPA4 Посмотреть сообщение
Уважаемые коллеги! Может кто подскажет:
в Протеусе работает - в железе нет.
Это несколько переделанный пример из CodeVisionAVR. Попробовал убрать FAMILY_CODE, проверку CRC - все-равно никакого результата. Может частота процессора в примере другая, у меня 4 мГц? Что-то в настройках 1ware?
А что именно у вас не работает?... где спотыкается?...
импульс отклика 1990 формирует?... или спотыкается уже на ответе?

Я столкнуля с тем, что в Протеусе 1990 не формирует отклик если длительность RESET немного менее 500 микросек. хотя реальные 1990 отвечают... немного увеличил импульс - уменьшил частоту в Протеусе и всё поехало.....
или ошибка в модели.. или реальные устройства имеют больший разброс по длитеьлности RESET.

В реале проверьте длительности.. проверьте уровни..
picavr вне форума  
Непрочитано 04.10.2009, 16:21  
IOPA4
Почётный гражданин KAZUS.RUN
 
Аватар для IOPA4
 
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,290
Сказал спасибо: 452
Сказали Спасибо 501 раз(а) в 267 сообщении(ях)
IOPA4 на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

to: picavr
Вы меня не поняли - в Протеусе все Ок, а вот в железе - ни какой реакции. Может бегло проглядите листинг, что нужно изменять в листинге чтобы откликнулось в железе?
IOPA4 вне форума  
Непрочитано 04.10.2009, 17:53  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

Сообщение от IOPA4 Посмотреть сообщение
to: picavr
Вы меня не поняли - в Протеусе все Ок, а вот в железе - ни какой реакции. Может бегло проглядите листинг, что нужно изменять в листинге чтобы откликнулось в железе?
Да я понял что в железе проблема, это я просто пример привёл что Протеус не показатель работоспособности.
И написал что бы в реале проверили длительности и уровни...

Вы представляетет как работает 1wire или тупо подключили библиотеку и всё?

Я бы проверял осцилографом в железе, сначала формирование импульса сборос, его длительность и уровни, потом наличие отклика от устройства, потом запись в шину байта комманды итд... а потом анализировать что не так и рыть программу...
а смотреть код.. не зная что именно не работает... смысел есть?

Я в Си написал и отладил код работающий в IAR AVR и HITECH PICC16. Никаких неожиданойстей, длительности по даташиту и всё работает в железе...
picavr вне форума  
Непрочитано 04.10.2009, 20:47  
you_go
Гражданин KAZUS.RUN
 
Аватар для you_go
 
Регистрация: 30.05.2008
Адрес: Нижний Новгород
Сообщений: 901
Сказал спасибо: 90
Сказали Спасибо 1,274 раз(а) в 412 сообщении(ях)
you_go на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

Я занимался лет 9 назад - разрабатывал тогда программу для работы с DS1990 на ассемблере под AT90S2313. Там все достаточно понятно, просто нужно очень точно выдерживать временные слоты. В моей программе ключи хранились в EEPROM в 3-х копиях (из опыта эксплуатации - редко, но возможны искажения данных EEPROM). Поэтому был введен контроль и восстановлением данных в случаех их повреждения. По этой причине в EEPROM ключей помещается немного - зато потом не было случая, чтобы ключи "терялись". Потом была версия под Attiny 2313, где ключи записывались в программную память c использованием selfprogram mode. Если что-то из этого может Вам помочь, могу поделиться исходниками.
you_go вне форума  
Непрочитано 05.10.2009, 00:57  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

Сообщение от you_go Посмотреть сообщение
Там все достаточно понятно, просто нужно очень точно выдерживать временные слоты.
Да там всё просто как дверь... повнимательнее написать, и заработает.
picavr вне форума  
Непрочитано 05.10.2009, 09:25  
microsin
Временная регистрация
 
Аватар для microsin
 
Регистрация: 29.03.2005
Сообщений: 86
Сказал спасибо: 6
Сказали Спасибо 45 раз(а) в 21 сообщении(ях)
microsin на пути к лучшему
По умолчанию Re: Замок на iButton DS1990

Статья публиковалась в "Радио", #3, 2001, здесь неурезанная версия - "iButton: описание протокола, электронный замок на ключах-таблетках" http://microsin.ru/content/view/508/1/

Исходники замка: http://microsin.ru/Download.cnt/touc...ck2/iblock.zip

Последний раз редактировалось microsin; 05.10.2009 в 09:29.
microsin вне форума  
 
Опции темы

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

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

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


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


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