i-button - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » i-button (работа с таблетками i-button)
i-button
sever Дата: Чт, 24.07.2008, 19:30  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 35
Репутация: 0   ±
Замечания:   ±
На сайте с 15.04.2008

Статус: Offline

Ребят, кто работал с этими таблетками?
интересует программная реализация на бесике, есть такие команды owin и оwout.
т.е. примерная реализация делать высокий уровень на канале данных для подзарядки внутреннего конденсатора а потом считать данные.
интересны ваши мысли на эту тему?
ЯНДЕКС Дата: 24.07.2008
ADMIN Дата: Пт, 25.07.2008, 17:37  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Ну делал я на PicBasicPro. Там тоже самое, что и с DS18B20, только идентификатор ключей = 1, а термометра = 28. У меня все проекты на работе, а я уволился оттуда.
holyuser Дата: Сб, 26.07.2008, 02:53  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 240
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

Может, будет полезно.
У меня, в режиме "parasite power", с кварцевым резонатором на 4.000 MHz, из десяти DS18B20 нормально работали шесть. На 3.579 и на 4.096 MHz работали все.
При нормальном питании все 1-wire работали нормально на всех частотах.
petser888 Дата: Вт, 29.07.2008, 13:51  |                                                                                                                Сообщение # 4
Группа: Пользователи
Ранг:  Новенький
Сообщений: 17
Репутация: 0   ±
Замечания:   ±
На сайте с 04.01.2008

Статус: Offline

Вот на протоне LCD показывает:
[/code]
[Device = 16F873A
XTAL = 20

Symbol DQ = PORTA.1 'пин для таблетки
Symbol LED1 = PORTC.5 'светодиод цикла
ALL_DIGITAL = TRUE
LCD_DTPIN = PORTB.4
LCD_RSPIN = PORTB.3
LCD_ENPIN = PORTB.0
LCD_INTERFACE = 4 ' 4-bit интерфейс
LCD_LINES = 2
LCD_TYPE = 0
TRISA.1 = 1

Dim Y[10] As Byte 'переменная ID номера но использовать будем первые 8 значений
Dim X[10] As Byte 'повторная переменная ID номера но использовать будем первые 8 значений
Dim a As Byte
Dim c As Byte
Cls


Loop: High LED1
DelayMS 1000
Low LED1
DelayMS 1000

Print At 1,1,"Button ID "
GoSub Idnum
Print At 2,1,HEX2 Y[7],HEX2 Y[6],HEX2 Y[5],_
HEX2 Y[4],HEX2 Y[3],HEX2 Y[2],HEX2 Y[1],HEX2 Y[0]
DelayMS 13
GoTo Loop

Idnum: OWrite DQ, 1,NoBut, [$33] 'посылаем на button команду чтения памяти $33 и получим ID номер
DelayMS 25 'пауза
ORead DQ, 2,[Str X\8] 'читаем ID номер и помещаем в переменную X
DelayMS 25 'еще пауза
OWrite DQ, 1,NoBut, [$33] 'сейчас повторим команду чтения ID номера
DelayMS 25 'опять пауза
ORead DQ, 2,[Str Y\8] 'и поместим впеременную Y
c=1 'для точности считывания сравним результаты X и Y
For a = 0 To 7
If X[a]<>Y[a]Then c=0
Next a
If c=0 Then GoTo NoBut ' если результат разный то перейдем к NoBut
DelayMS 1000 'не нужная задержка
Return

NoBut: Print At 2,1,"No Button " 'вывести на диплей нет ключа
DelayMS 25
GoTo Loop]
Конечно можно верность результата и по CRC проверять, но так еще нормальней работает (вдруг CRC c ошибкой).


сваять можно все - была бы цель
ADMIN Дата: Вт, 29.07.2008, 18:02  |                                                                                                                Сообщение # 5
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Завтра пришлю проект, на работе замок с ключами I-Button. В качестве исполнителя - заводской Э/М замок. На 20 ключей. Режим записи/стирания. На 628, внутренний генератор, но по-моему на протоне. Завтра посмотрю.
sever Дата: Вт, 29.07.2008, 18:41  |                                                                                                                Сообщение # 6
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 35
Репутация: 0   ±
Замечания:   ±
На сайте с 15.04.2008

Статус: Offline

спасибо, разобрался, ключик легко считывается.
Щас хочу сделать эмулятор ключей от cyfral ( называется убить время и деньги в образовательных целях), посчитывал код с помощью осцилографа. Уже написал код эмуляции протокола цыфрал для 12f675, вот только надо выделить время и спаять для проверки на железе.

Хочу перевести свой проект на 2.5 вольт, поставить кварц на 32768 kHz, а как это указать в Define oSC surprised
посидел поигрался с эмулятором, действительно скорости 32кГц не хватает для написания проги с таблицами, через lookup, так как в проге присутсвуют переходы которые занимают 2 цикла машинного времени.
так что придется переписать топорным методом c помощью (bsf.bcf.nop)

Сообщение отредактировал sever - Ср, 30.07.2008, 22:21
petser888 Дата: Пт, 01.08.2008, 11:47  |                                                                                                                Сообщение # 7
Группа: Пользователи
Ранг:  Новенький
Сообщений: 17
Репутация: 0   ±
Замечания:   ±
На сайте с 04.01.2008

Статус: Offline

вот еще нашел где-то в нете как раз на РВР:
id var byte
id0 var byte
Id1 var byte
Id2 var byte
Id3 var byte
Id4 var byte
Addr var byte
Addr1 var byte
Addr2 var byte
Addr3 var byte
Addr4 var byte
pause 100
Cont con %10100000
id0=$0000000
id1=$0000000
id2=$0000000
id3=$0000000
id4=$0000000
Addr = 0
i2cread porta.0, porta.1,cont,addr2,id1[1]
Addr = 1
i2cread porta.0, porta.1,cont,addr2,id1[2]
Addr = 2
i2cread porta.0, porta.1,cont,addr2,id1[3]
Addr = 3
i2cread porta.0, porta.1,cont,addr2,id1[4]
Addr = 4
i2cread porta.0, porta.1,cont,addr2,id1[5]
Addr = 5
i2cread porta.0, porta.1,cont,addr2,id1[6]

Addr = 6
i2cread porta.0, porta.1,cont,addr2,id2[1]
Addr = 7
i2cread porta.0, porta.1,cont,addr2,id2[2]
Addr = 8
i2cread porta.0, porta.1,cont,addr2,id2[3]
Addr = 9
i2cread porta.0, porta.1,cont,addr2,id2[4]
Addr = 10
i2cread porta.0, porta.1,cont,addr2,id2[5]
Addr = 11
i2cread porta.0, porta.1,cont,addr2,id2[6]

Addr = 12
i2cread porta.0, porta.1,cont,addr2,id3[1]
Addr = 13
i2cread porta.0, porta.1,cont,addr2,id3[2]
Addr = 14
i2cread porta.0, porta.1,cont,addr2,id3[3]
Addr = 15
i2cread porta.0, porta.1,cont,addr2,id3[4]
Addr = 16
i2cread porta.0, porta.1,cont,addr2,id3[5]
Addr = 17
i2cread porta.0, porta.1,cont,addr2,id3[6]

Addr = 18
i2cread porta.0, porta.1,cont,addr2,id4[1]
Addr = 19
i2cread porta.0, porta.1,cont,addr2,id4[2]
Addr = 20
i2cread porta.0, porta.1,cont,addr2,id4[3]
Addr = 21
i2cread porta.0, porta.1,cont,addr2,id4[4]
Addr = 22
i2cread porta.0, porta.1,cont,addr2,id4[5]
Addr = 23
i2cread porta.0, porta.1,cont,addr2,id4[6]

Pause 500 ********************************************************************************
*********
DQ VAR PortB.1 'Переменная для удобства
Offsig: ' Посли включения сигнализация выключена , объект не на охране , если хочешь наоборот - поменяй подпрограммы offsig и onsig местами в коде бесика
Start_Convert
OWOUT DQ, 1, [$33] ' Issue Read ROM command
D_Loop:
OWIN DQ, 0, [STR ID\8] **************************Вот здесь проверь плиз******************************
If id = id1 then onaccept ' проверки ключа
If id = id2 then onaccept
If id = id3 then onaccept
If id = id4 then onaccept
If porta.2=0 then firealarm1 ' проверка пожарного шлейфа
Goto offsig ' если ключи не подходят - зацикливаемся

onsig: ' подпрограмма сигналки на охране
OWIN DQ, 0, [STR ID\8]
If id = id1 then offaccept ' приоверки ключей
If id = id2 then offaccept
If id = id3 then offaccept
If id = id4 then offaccept
If porta.2=0 then firealarm ' см. выше
If porta.3=0 then alarm ' проверка охранного шлейфа
Goto onsig ' зацикливаем

Firealarm1: ' п.п. пожарной тревоги
Dtmfout portb.0,[13,14,15]
Sound PORTB.7,[100,10,50,10]
'Орем короткое время примерно 1 секунду , допиши саунд на порт б 1
Pause 300
'Sound (хз как . дописать)
'Орем короткое время примерно 1 секунду
Pause 300
Sound PORTB.7,[100,10,50,10]
'Орем короткое время примерно 1 секунду
Goto offsig

Firealarm: ' вторая прога пож тревоги (надо так )
Dtmfout portb.0 ,[10,9,8]
'Sound (хз как . дописать)
' Орем короткое время примерно 1 секунду
Pause 300
' Sound (хз как . дописать)
'Орем короткое время примерно 1 секунду
Pause 300
'Sound (хз как . дописать)
'Орем короткое время примерно 1 секунду
Goto onsig

Alarm:
Dtmfout portb.0 ,[12,11,10]
'Sound (хз как . дописать)
' Орем долгое время примерно 3 секунды
Goto onsig

Onaccept:
Dtmfout portb.0 ,[1]
Goto onsig

Offaccept:
Dtmfout portb.0 ,[2]
Goto offsig

led:
high portb.7
pause 1000
low portb.7
pause 100
high portb.7
pause 1000
low portb.7
goto led

Большая просьба к BASICPIC найти и выложить замок на IBUTON , уж очень интересно.


сваять можно все - была бы цель
ADMIN Дата: Пт, 01.08.2008, 17:48  |                                                                                                                Сообщение # 8
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

да, вижу интересно вам. тут проблема в том, что я уволился, а файлы на старой работе. Может, в воскресенье получится туда съездить. сфотаю замок сам и файлы скину. Ну вот так, в общем. Дела, знаете ли... Устроился на новую работу, создал мастерскую,(кстати, если интересно, ссылка на прогу - здесь). Там программу выложил свою. На Visual Basic 2008 писал для себя. Для установки требуется NET Framework 3.5 и WindowsInstaller 3.1. Если кому интересно, пишите отзывы.
ADMIN Дата: Вс, 03.08.2008, 08:22  |                                                                                                                Сообщение # 9
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Здесь лежит проект, который обещал. На PicBasicPro.
petser888 Дата: Пн, 04.08.2008, 10:15  |                                                                                                                Сообщение # 10
Группа: Пользователи
Ранг:  Новенький
Сообщений: 17
Репутация: 0   ±
Замечания:   ±
На сайте с 04.01.2008

Статус: Offline

Огромное спасибо, очень хорошая помощь в рутине, попробую перевести на протон . А с работой главное не отчаиваться , все идет только к лучшему и люди сами не знают чего хотят от нее.

сваять можно все - была бы цель
ADMIN Дата: Пн, 04.08.2008, 14:01  |                                                                                                                Сообщение # 11
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

У меня на протоне есть программа. wink
Code

Device 16F628A
OPTIMISER_LEVEL=5
Dim addr1    As Byte
Dim addr    As Byte
Dim edat    As Byte             
Dim date    As Byte             
Dim num     As Byte             
Dim id[8]   As Byte         
Dim s1      As Byte
Dim s2      As Byte
Dim dq      As PORTB.1          
Dim butzap  As PORTB.3          
Dim butop   As PORTB.0           
Dim leden   As PORTA.0           
Dim leddis  As PORTA.1           
Dim out     As PORTA.2           
Dim d1      As Byte              
Dim d2      As Byte              
Dim d3      As Byte              
Dim d4      As Byte              
Dim d5      As Byte              
Dim d6      As Byte   
Dim Flag As Byte
Symbol Op=Flag.0
Symbol Clea=Flag.1
Symbol Wr=Flag.2             
Symbol intf =INTCON.1
      CMCON = 7
      OPTION_REG = %00001111
      On Interrupt GoTo prov      
      INTCON = %10010000      
CONV:                 
      TRISA = 0
      PORTA = %00000000       
      num = ERead 127         
      OWrite dq, 1, [$33]       
      ORead dq, 0, [Str id\8]
      If Clea=1 Then   
      GoTo CLEAR_
      EndIf
      If Op=1 Then   
      GoTo open
      EndIf
      If Wr=1 Then   
      GoTo WW
      EndIf
      If id[0] = $1 Then GoTo READD1    
      GoTo CONV          
open:
      Op=0
      PORTA = %00000101        
      DelayMS 250         
      GoTo CONV       

READD1:   
      Disable            
      addr=0  : GoSub READD    
      addr=6  : GoSub READD      
      addr=12 : GoSub READD      
      addr=18 : GoSub READD      
      addr=24 : GoSub READD
      addr=30 : GoSub READD
      addr=36 : GoSub READD
      addr=42 : GoSub READD
      addr=48 : GoSub READD
      addr=54 : GoSub READD
      addr=60 : GoSub READD
      addr=66 : GoSub READD
      addr=72 : GoSub READD
      addr=78 : GoSub READD
      addr=84 : GoSub READD
      addr=90 : GoSub READD
      addr=96 : GoSub READD
      addr=102: GoSub READD
      addr=108: GoSub READD
      addr=114: GoSub READD
            
      GoTo CONV          

READD:         
d1 = ERead addr        
d2 = ERead addr+1         
d3 = ERead addr+2
d4 = ERead addr+3
d5 = ERead addr+4   
d6 = ERead addr+5
GoSub COMPARISE         
Return          
WW:       
      Disable   
      Wr=0
      If num = 19 Then CARDFULL   
      For s1 = 1 To 40   
      DelayMS 50      
@   btfsc butzap
@   goto conv
      Next
      If num =255 Then edat=0  : addr = 0    
      If num = 0  Then addr=6  : edat = 1
      If num = 1  Then addr=12 : edat = 2
      If num = 2  Then addr=18 : edat = 3
      If num = 3  Then addr=24 : edat = 4
      If num = 4  Then addr=30 : edat = 5
      If num = 5  Then addr=36 : edat = 6
      If num = 6  Then addr=42 : edat = 7
      If num = 7  Then addr=48 : edat = 8
      If num = 8  Then addr=54 : edat = 9
      If num = 9  Then addr=60 : edat = 10
      If num = 10 Then addr=66 : edat = 11
      If num = 11 Then addr=72 : edat = 12
      If num = 12 Then addr=78 : edat = 13
      If num = 13 Then addr=84 : edat = 14
      If num = 14 Then addr=90 : edat = 15
      If num = 15 Then addr=96 : edat = 16
      If num = 16 Then addr=102: edat = 17
      If num = 17 Then addr=108: edat = 18
      If num = 18 Then addr=114: edat = 19
                     
        
      addr1=addr: date = id[1]     
      GoSub writte
      addr1=addr+1:date=id[2]
      GoSub writte
      addr1=addr+2: date=id[3]
      GoSub writte
      addr1=addr+3: date=id[4]
      GoSub writte
      addr1=addr+4: date=id[5]
      GoSub writte
      addr1=addr+5: date=id[6]
      GoSub writte
      addr1=127:date=edat
      GoSub writte
      PORTA.0=1      
      GoTo CONV
               
COMPARISE:     
      If  d1=id[1] And d2=id[2] And d3=id[3] And d4=id[4] And d5=id[5] And d6=id[6] Then  Op=1    
     
      Return   
CARDFULL:   
      PORTA = %00000011
      DelayMS 500
      PORTA = %00000000
      GoTo CONV       
CLEAR_:   
      Disable        
      Clea=0
      For s1 = 1 To 40    '???? 2 ???,   
      DelayMS 50   
@   btfsc butzap
@   goto conv   
      Next    
      PORTA.1 = 1    
      For addr = 0 To 127      
      EWrite addr, [255]
      Next
      PORTA.1 = 0   
        
      GoTo CONV
writte:
      EWrite addr1,[ date]  '??????
      Return   '???????
prov:           
      Disable        
      If id[0] <> $1 And PORTB.3=0 Then Clea=1    
      If id[0] =  $1 And PORTB.3 = 0 Then Wr=1     
      Op=1   
      INTCON=%10010000               
      Resume
      Enable
      End

petser888 Дата: Пн, 04.08.2008, 14:55  |                                                                                                                Сообщение # 12
Группа: Пользователи
Ранг:  Новенький
Сообщений: 17
Репутация: 0   ±
Замечания:   ±
На сайте с 04.01.2008

Статус: Offline

Ну воообще, не знаю как блогадорить. Спасибо!!!
Буду прикручивать ее к сигналке.


сваять можно все - была бы цель
ip-sec Дата: Вт, 05.08.2008, 01:42  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Новенький
Сообщений: 4
Репутация: 0   ±
Замечания:   ±
На сайте с 04.08.2008

Статус: Offline

подскажите пожалуйста программку эмитации таблетки или датчика температуры для микроконтроллера на pic basic pro.т.е. чтобы один МК при запросе по линии 1Wire определял МК в котором записана эта программка
Форум Picbasic.ru » Программирование МК » PicBasicPro » i-button (работа с таблетками i-button)
Страница 1 из 11
Поиск: