Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Связь проводная и бесп-ная, интерфейсы, протоколы » Проекты Proteus для DS2405. Управление по 1-wire.


Проекты Proteus для DS2405. Управление по 1-wire.

Сообщений 1 страница 7 из 7

1

Начал заниматся 1-wire. Появляются наработки.(идея с каогото польского сайта, спасибо им) Решил поделится. Все на Баскоме. Один проект DS2405 в режиме ключа. Другой Ds2405 в режиме сухой контакт.
Реальные устройства лучше делать по схематике фирмы Эллин. Но для разработки устройств эти проекты должны помочь.

Код:
'Вывод серийника наоборот!
' Работает
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 32
$swstack = 8
$framesize = 50
' Для работы с двумя DS2405
Config 1wire = Portd.5 : Dim L As Byte
Config Portb.1 = Output
Config Portb.6 = Output
Dim G As Byte
Dim Adres(16) As Byte                                       'Выделяем 16 элементов для двух адресов
Adres(1) = 1wsearchfirst()                                  'первые 8 для первого ключа
Adres(9) = 1wsearchnext()                                   'остальные для второго
' начало цикла программы
1wreset
Adres(1) = 1wsearchfirst()

1wwrite &HCC
1wwrite &HEC
G = 1wread()
For L = 8 To 1 Step -1                                      'счетчик для первых восьми байтом
Print Hex(adres(l));
'For I = 1 To 1
Next
Print "   " ; G
                                           ' устанавливаем на ножке 0 порта В низкий логический уровень (светодиод не горит)
If G = 85 Then
  Portb.6 = 1
  Else
  Portb.6 = 0
  End If

1wreset
Adres(9) = 1wsearchnext()

1wwrite &HCC
1wwrite &HEC
G = 1wread()
For L = 16 To 9 Step -1
Print Hex(adres(l));

Next
Print "   " ; G
If G = 85 Then
  Portb.1 = 1
  Else
  Portb.1 = 0
  End If
Wait 1

И ещё

Код:
'Вывод серийника наоборот!
' Работает

$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 32
$swstack = 8
$framesize = 50

' Для работы с двумя DS2405
Config 1wire = Portd.5 : Dim L As Byte

Config Pinc.0 = Input
Config Portb.1 = Output

Config Pinc.4 = Input
Config Portb.6 = Output

Dim G As Byte
Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte

Dim Adres(16) As Byte                                       'Выделяем 16 элементов для двух адресов
   Adres(1) = 1wsearchfirst()                               'первые 8 для первого ключа
   Adres(9) = 1wsearchnext()                                'остальные для второго



   If Pinc.0 = 1 Then                                       ' УСЛОВИЕ - если на 2-й ножке порта С низкий логический уровень то...
      Portb.1 = 1
      A = 1                                                 ' устанавливаем на ножке 0 порта В высокий логический уровень (светодиод горит)
      Else                                                  ' в противном случае...
      Portb.1 = 0
      A = 0                                                 ' устанавливаем на ножке 0 порта В низкий логический уровень (светодиод не горит)
   End If                                                   'конец условия

   If Pinc.4 = 1 Then                                       ' УСЛОВИЕ - если на 2-й ножке порта С низкий логический уровень то...
      Portb.6 = 1
      C = 1                                                 ' устанавливаем на ножке 0 порта В высокий логический уровень (светодиод горит)
      Else                                                  ' в противном случае...
      Portb.6 = 0
      C = 0                                                 ' устанавливаем на ножке 0 порта В низкий логический уровень (светодиод не горит)
   End If                                                   'конец условия

   1wreset
   Adres(1) = 1wsearchfirst()

   1wwrite &HCC
   1wwrite &HEC
      G = 1wread()
      For L = 8 To 1 Step -1                                'счетчик для первых восьми байтом
   Print Hex(adres(l));
   Next
   Print "   " ; G
   If G = 85 Then
      B = 1
      Else
      B = 0
   End If


   1wreset
      Adres(9) = 1wsearchnext()

   1wwrite &HCC
   1wwrite &HEC
      G = 1wread()
      For L = 16 To 9 Step -1
   Print Hex(adres(l));
   Next
   Print "   " ; G
   If G = 85 Then
      D = 1
      Else
      D = 0
   End If

Wait 1

   1wreset
      If A <> B Then
      1wwrite &H55
      1wwrite Adres(1) , 8

   End If
   Wait 2


   1wreset
      If C <> D Then
      1wwrite &H55
      1wwrite Adres(9) , 8

   End If
   Wait 2

0

2

Странно, но прикрепить изображение я не смог.

0

3

Помогите. Бьюсь уже несколько часов.
Читаю ROM-память iButton все нормально, читается. Хочу прочитать весь ключ нифига не работает.
В чем ошибка

Код:
$regfile = "m8def.dat"                                      
$crystal = 8000000                                          
Config 1wire = Portb.7                                     

Dim Ar(16) As Byte , I As Byte

1wreset                                                 
1wwrite &HCC                                            
Ar(1) = 1wread(16)                                       
Print "Number";
For I = 1 To 16
    Print Hex(ar(i));
Next

0

4

Нет команды чтения типа H33
Поставьте после HCC и увидете серийник. Почему то без этого не работает.

Отредактировано nsl (2010-03-19 21:32:30)

0

5

Два варианте которые работают

Код:
1wreset
Waitms 500
1wwrite &H33   'Команда для чтения rom
Ar(1) = 1wread(8)
Print "Number";
For I = 1 To 8
    Print Hex(ar(i));
Next
Print

И второй

Код:
1wreset        'reset the device
   Print " V.1.2.2"
   Waitms 500  ' пауза что бы определялся серийник
    W = 1wirecount()
       Print W ; "  " ; "1-wire device"
           Reg_no(1) = 1wsearchfirst()       ' Ищем SN первого устройства,
            For I = 1 To 8       ' повтор 8 раз
       Print Hex(reg_no(i));       ' вывод серийного номера в терминал
            Next       ' команда повтора для счетчика
       Print "  " ; "SERIAL NUMBER"       'print the number

0

6

Нет команды чтения типа H33

0

7

Я уже разобрался. Спасибо.

0


Вы здесь » Программирование ATMEL в BASCOM. » Связь проводная и бесп-ная, интерфейсы, протоколы » Проекты Proteus для DS2405. Управление по 1-wire.