Dorotka i Michał
Strona główna Aktualności Galeria Czytelnia Materiały różne Kontakt
1wire - odczyt identyfikatorów urządzeń



Autor: Michał Bieliński


   
Projekt wykonany na AT89C2051. Umożliwia sprawdzenie ilości urządzeń na lini 1wire oraz wyświtlenie identyfikatorów 3 urządzeń. Zastosowano standardowe procedury 1wire bascom- więc projekt nie jest trudny. Utrudnieniem jest całkowicie własne sterowanie wyświetlaczem (poprzez odpowiednie sygnały na port P1, a nie przy pomocy biblioptek bascom). Zastosowano zwkyły wyświtlacz 1x16 znaków.


Kod BASCOM:


'Deklaracja procesora:
$crystal = 12000000
'baud rate
$baud = 4800
Config 1wire = P3.7
'Troszke zmiennych
Dim A As Byte
Dim Ar(8) As Byte
Dim I As Byte , W As Byte , R As Byte

'Tryb Programowania wyświtlacza LCD
Reset P3.0

P1 = &B00111000
Gosub Zapis

P1 = &H0F
Gosub Zapis

P1 = &H06
Gosub Zapis

P1 = &H80
Gosub Zapis

'Tryb wyświetlania na wyświtlaczu LCD

Set P3.0
P1 = &H31
Gosub Zapis

P1 = &H57
Gosub Zapis

P1 = &H69
Gosub Zapis

P1 = &H72
Gosub Zapis

P1 = &H65
Gosub Zapis

Wait 1

Odczyt:

Reset P3.0
P1 = &H01
Gosub Zapis
P1 = &H02
Gosub Zapis
Set P3.0
P1 = &H49
Gosub Zapis
P1 = &H4C
Gosub Zapis

Set P3.0
P1 = &H4F
Gosub Zapis
P1 = &H53
Gosub Zapis
P1 = &H43
Gosub Zapis
P1 = &H3A
Gosub Zapis
P1 = &H20
Gosub Zapis

'Liczenie urządzeń na 1wire
1wreset
W = 1wirecount(ar(1))

If W = 0 Then
P1 = &H30
Gosub Zapis
End If

If W = 1 Then
P1 = &H31
Gosub Zapis
End If

If W = 2 Then
P1 = &H32
Gosub Zapis
End If

If W = 3 Then
P1 = &H33
Gosub Zapis
End If

Waitms 500

If W > 0 Then
Reset P3.0
P1 = &H01
Gosub Zapis
P1 = &H02
Gosub Zapis

Set P3.0
P1 = &H49
Gosub Zapis
P1 = &H44
Gosub Zapis
P1 = &H31
Gosub Zapis
P1 = &H3A
Gosub Zapis

Wait 1

Reset P3.0
P1 = &H01
Gosub Zapis
P1 = &H02
Gosub Zapis

Set P3.0
Ar(1) = 1wsearchfirst()
For I = 1 To 8
P1 = &H26
Gosub Wysw
Next
Wait 3





End If


' 2 urzadzenie

If W > 1 Then

Reset P3.0
P1 = &H01
Gosub Zapis
P1 = &H02
Gosub Zapis


Set P3.0
P1 = &H49
Gosub Zapis
P1 = &H44
Gosub Zapis
Set P3.0
P1 = &H32
Gosub Zapis
Set P3.0
P1 = &H3A
Gosub Zapis
Wait 1

Reset P3.0

P1 = &H01
Gosub Zapis

P1 = &H02
Gosub Zapis

Set P3.0
Ar(1) = 1wsearchnext()
For I = 1 To 8
Gosub Wysw
Next
Wait 3

End If

' 3 urzadzenie

If W > 2 Then

Reset P3.0
P1 = &H01
Gosub Zapis
P1 = &H02
Gosub Zapis


Set P3.0
P1 = &H49
Gosub Zapis
P1 = &H44
Gosub Zapis
Set P3.0
P1 = &H33
Gosub Zapis
Set P3.0
P1 = &H3A
Gosub Zapis
Wait 1

Reset P3.0

P1 = &H01
Gosub Zapis

P1 = &H02
Gosub Zapis

Set P3.0
Ar(1) = 1wsearchnext()
For I = 1 To 8
Gosub Wysw
Next
Wait 3

End If



Goto Odczyt

Zapis:
Reset P3.1
Set P3.1
Waitms 1
Reset P3.1
Waitms 1
Return



Wysw:
If I = 5 Then
For A = 1 To 32
P1 = &H58
Gosub Zapis
Next
End If
If Ar(i) > &HE0 Then P1 = &H46 End If
If Ar(i) < &HF0 Then P1 = &H45 End If
If Ar(i) < &HE0 Then P1 = &H44 End If
If Ar(i) < &HD0 Then P1 = &H43 End If
If Ar(i) < &HC0 Then P1 = &H42 End If
If Ar(i) < &HB0 Then P1 = &H41 End If
If Ar(i) < &HA0 Then P1 = &H39 End If
If Ar(i) < &H90 Then P1 = &H38 End If
If Ar(i) < &H80 Then P1 = &H37 End If
If Ar(i) < &H70 Then P1 = &H36 End If
If Ar(i) < &H60 Then P1 = &H35 End If
If Ar(i) < &H50 Then P1 = &H34 End If
If Ar(i) < &H40 Then P1 = &H33 End If
If Ar(i) < &H30 Then P1 = &H32 End If
If Ar(i) < &H20 Then P1 = &H31 End If
If Ar(i) < &H10 Then P1 = &H30 End If
Gosub Zapis
R = &HF0
For A = 1 To 15
R = R - &H10
If Ar(i) > R Then
Ar(i) = Ar(i) - R
End If
Next
If Ar(i) > &H10 Then
Ar(i) = Ar(i) - &H10
End If
P1 = &H21
If Ar(i) = &H10 Then P1 = &H30 End If
If Ar(i) = &H00 Then P1 = &H30 End If
If Ar(i) = &H01 Then P1 = &H31 End If
If Ar(i) = &H02 Then P1 = &H32 End If
If Ar(i) = &H03 Then P1 = &H33 End If
If Ar(i) = &H04 Then P1 = &H34 End If
If Ar(i) = &H05 Then P1 = &H35 End If
If Ar(i) = &H06 Then P1 = &H36 End If
If Ar(i) = &H07 Then P1 = &H37 End If
If Ar(i) = &H08 Then P1 = &H38 End If
If Ar(i) = &H09 Then P1 = &H39 End If
If Ar(i) = &H0A Then P1 = &H41 End If
If Ar(i) = &H0B Then P1 = &H42 End If
If Ar(i) = &H0C Then P1 = &H43 End If
If Ar(i) = &H0D Then P1 = &H44 End If
If Ar(i) = &H0E Then P1 = &H45 End If
If Ar(i) = &H0F Then P1 = &H46 End If
Gosub Zapis
Return

End


(Bascom)

    
© Dorotka i Michał Bielińscy