Перейти к содержанию
    

I-button ключи от домофона.

Таблетка не содержит внутри себя никаких батареек

Спешу Вас разочаровать :-)

Некоторые содержат! (например связанные с хронометрией и термоконтролем.. cо встроенной памятью)(например DS1995) но не суть дела.

Да, в домофонных таблетках нет, это факт!

 

для нее получается как бы длительный RESET

этим я попытался обьяснить общий принцип. Внутри таблетки есть буферный кондер от которого она питается во время работы, и есть внутренний "потребитель тока" который просаживает кондер в отключенном состоянии. Получая питание таблетка "считает" что произошел RESET.

Изменено пользователем add

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

этим я попытался обьяснить общий принцип. Внутри таблетки есть буферный кондер от которого она питается во время работы, и есть внутренний "потребитель тока" который просаживает кондер в отключенном состоянии. Получая питание таблетка "считает" что произошел RESET.

 

Reset - Это когда после подачи питания происходит отключение питания на некоторый промежуток времени

post-3960-1146917571_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Reset - Это когда после подачи питания происходит отключение питания на некоторый промежуток времени

:-( ну хорошо если Вам так понятнее, пожалуста!

Хочу только обратить ваше внимание что : "все устройства начинают работу с шиной 1-wire после RESET"(из доков).

ГЛАВНОЕ: После прикосновения таблеткой к контакту домофона (контроллера), она (таблетка) выдает сигнал присутствия! иначе контроллер неопределит факт ПОДКЛЮЧЕНИЯ. Дальше с таблеткой работаем как с обычным 1-wire устройством. Можно подать (от коетроллера RESET) а можно начать передачу команды.

Заметьте для этого при первой передачи команды RESET не нужен , т.к. для таблетки это пройденный этап (см. посты выше) и она перешла на "командный уровень".

На рисунке (из datasheeta) показана инициализация уже ПОДКЛЮЧЕННОГО к шине 1-WIRE устройства!!! А мы говорим про момент первого касания и определения момента подключения!

Советую почитать про первую инициализациию.(Сейчас ссылку немогу найти, выложу потом).

зы (off top): Может я несовсем понятно обьясняю. Но сам сабирал устройства и работал с протоколом. Проверенно на хомячках. :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

The 1 Wire Functions are:

unsigned char w1_init(void)


this function initializes the 1 Wire devices on the bus.

It returns 1 if there were devices present or 0 if not.

unsigned char w1_read(void)

this function reads a byte from the 1 Wire bus.

unsigned char w1_write(unsigned char data)

this function writes the byte data to the 1 Wire bus.

It returns 1 if the write process completed normally or 0 if not.

unsigned char w1_search(unsigned char cmd,void *p)

this function returns the number of devices connected to the 1 Wire bus.
If no devices were detected then it returns 0.

 

 

Вот такие функции есть в CVAVR для работы с 1 wire. Как я понимаю, считать данные из таблетки с помощью них можно, но как ее симулировать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.4 Standard
Automatic Program Generator
© Copyright 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mail:[email protected]

Project : 
Version : 
Date    : 07.05.2002
Author  : ps1x                            
Company : sas                             
Comments: 


Chip type           : ATtiny26L
Clock frequency     : 4,000000 MHz
Memory model        : Tiny
External SRAM size  : 0
Data Stack size     : 32
*****************************************************/

#include <tiny26.h>

// 1 Wire Bus functions
#asm
   .equ __w1_port=0x18;PORTB
   .equ __w1_bit=6
#endasm
#include <1wire.h>
#include <delay.h>
eeprom char *temp;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here

}

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here

}

// Declare your global variables here

void main(void)
{
unsigned char devices,rom[9];


// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTA=0xFF;
DDRA=0xFF;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTB=0x00;
DDRB=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFh
// OC1A output: Disconnected
// OC1B output: Disconnected
PLLCSR=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1=0x00;
OCR1A=0x00;
OCR1B=0x00;
OCR1C=0x00;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// Interrupt on any change on pins PA3, PA6, PA7 and PB4-7: Off
// Interrupt on any change on pins PB0-3: Off
GIMSK=0x00;
MCUCR=0x00;
GIFR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;

// 1 Wire Bus initialization
w1_init();

// Global enable interrupts
#asm("sei")

while (1)                                               
      {                           
      devices=w1_search(0x33,rom);
      if (devices){PORTA=0x00;delay_ms(1000);PORTA=0xFF;*temp=rom;}
      // Place your code here

      };
}

 

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

Но не работает.

PORTA=0x00;delay_ms(1000);PORTA=0xFF; --- вот этот кусочек, для дебага ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот такие функции есть в CVAVR для работы с 1 wire. Как я понимаю, считать данные из таблетки с помощью них можно, но как ее симулировать?

 

на первой странице курса http://electronix.ru/redirect.php?http://[banned]

 

есть ссылка на проекты на русском - там есть эмулятор таблетки.

КАКОЙ МНЕ СМЫСЛ ОТ ЭТОГО ПРОЕКТА ЕСЛИ Я ПИШУ НА С????????

 

простите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на первой странице курса http://electronix.ru/redirect.php?http://[banned]

 

есть ссылка на проекты на русском - там есть эмулятор таблетки.

КАКОЙ МНЕ СМЫСЛ ОТ ЭТОГО ПРОЕКТА ЕСЛИ Я ПИШУ НА С????????

 

простите.

 

вы свой то пост почитайте - вы спросили

 

КАК СИМУЛИРОВАТЬ ТАБЛЕТКУ !

 

я вам указал где есть проект где рассказано ПОДРОБНО КАК !

 

т.е. то что вы спрашивали.

 

А алгоритм хоть на бэйсике реализуйте, мне то что ?

Вы не читали ветку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема все еще актуальна: кто делал такие вещи на С, идеальный вариант на CVAVR???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в 128 раз-куда *temp смотрит? Вы его обьявили как указатель на область епром,но не инициализировали.да и зачем вам в вашем контексте указатель- не проще обьявить переменную в епром- eeprom char kod и грузить в нее код таблетки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в 128 раз-куда *temp смотрит? Вы его обьявили как указатель на область епром,но не инициализировали.да и зачем вам в вашем контексте указатель- не проще обьявить переменную в епром- eeprom char kod и грузить в нее код таблетки?

 

Дык надо 9 байт из таблетки брать.... а kod - 1 байт, но прежде всего при нахождении таблетки должны загораться светодиоды, чего не происходит... :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в 128 раз-куда *temp смотрит? Вы его обьявили как указатель на область епром,но не инициализировали.да и зачем вам в вашем контексте указатель- не проще обьявить переменную в епром- eeprom char kod и грузить в нее код таблетки?

 

Дык надо 9 байт из таблетки брать.... а kod - 1 байт, но прежде всего при нахождении таблетки должны загораться светодиоды, чего не происходит... :(

 

Ну неужели никто не делал на С? не верю.

 

Почему может не работать код приведенный выше? (железную часть проверял)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну неужели никто не делал на С? не верю.

 

Почему может не работать код приведенный выше? (железную часть проверял)

 

...... да ... наверно долго еще придется ждать ответа ...

 

А за это время можно было бы прочитать в кусре в какой папке на вашем ПК есть все что вам нужно чтоб работало.

 

В курсе рассказано как отлаживать программу чтоб узнать конкретно что не правильно происходит при работе программы !

 

... а не ждать когда явится телепат и дистанционно найдет баг в вашей проге...

 

1) наверное.....

 

2) в папке C:\cvavr\inc ?

 

3) я добавил мигание светодиодов для отладки, JTAGa у меня нет, денег на него тоже. Основной цикл выполняется, об этом можно судить по миганию светодиодов, я проверял. Не выполняется поиск устройств 1-wire, почему, я не знаю, команда для получения кода таблеток 0х33 правильная, но не работает. Электрика тоже в порядке, вот и спрашиваю у тех, кто этим занимался.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2) в папке C:\cvavr\inc ?

 

тепло!

 

3) я добавил мигание светодиодов для отладки,

 

правильно.

 

JTAGa у меня нет, денег на него тоже.

 

у меня тоже его нет, он и не нужен. Можно другое использовать - написано там где выше советовал.

 

1)Тепло но не горячо? Где же еще? В мануале?

 

2)Спасибо.

 

3)Другое это rs232?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Недавно сам юзал эти таблетки....именно на си и именно в Кодевижне....

За основу взял пример из папки Examples...там все подробно расписано, как получить код таблетки и вывести его в терминал, кстати и программу лучше (на мй взгляд) отлаживать именно через RS232.

А по какому принципу работает таблетка написано и разжевано в даташите....поищи в сети, он есть и на русском....

А если воспользоваться поиском, то в ентом форуме уже не однократно поднимался етот вопрос....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...