Frank (Diskussion | Beiträge) K (→Anschluss über I2C Kabel) |
Frank (Diskussion | Beiträge) K (→Anschluss über I2C Kabel) |
||
| Zeile 6: | Zeile 6: | ||
==Anschluss über I2C Kabel== | ==Anschluss über I2C Kabel== | ||
| − | [[Bild:srf10anrncontrol.gif|center]] | + | [[Bild:srf10anrncontrol.gif|framed|center|Anschluß ist recht einfach]] |
| − | [[Bild: | + | [[Bild:srf10stecker.gif|framed|center|Eine Stiftleiste erleichtert den Anschluss]] |
Version vom 24. Februar 2006, 17:02 Uhr
Dieses Beispielprogramm demonstriert wie man das beliebte Ultraschallmodul SRF10 an einem Board wie RN-Control nutzt. Die Bilder veranschaulichen zudem wie man ein solches Modul an den I2C-Bus anschließt. Das Programm funktioniert natürlich auch auf ähnlichen Boards mit ATMega32 (z.B. RNBFRA-Board)
Die Funktionen sind übersichtlich in Unterroutinen gekapselt, so das die Einbindung in eigene Programme bequem möglich ist.
Anschluss über I2C Kabel
'###################################################
'srf10_ultraschallbeispiel2.bas
'für
'RoboterNetz Board RN-CONTROL (ab Version 1.1)
'und das SRF10 Ultraschallmodul für Entfernungsmessung
'Datenblatt zu SRF10:
'http://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=310
'Bezug: Robotikhardware.de
'Aufgabe:
' Gibt die Entfernung von Objekten in Zentimetern aus
' Die Messungen werden mit fest vorgegebenen Verstärkungsfaktor
' ermittelt
'Autor: Frank (Roboternetz)
'Weitere Beispiele und Beschreibung der Hardware
'unter http://www.Roboternetz.de oder robotikhardware.de
'#######################################################
Declare Function Srf10_entfernung(byval Srf10_slaveid As Byte) As Integer
Declare Sub Srf10_reichweite(byval Srf10_slaveid As Byte , Byval Reichweite As Word)
Declare Sub Srf10_verstaerkung(byval Srf10_slaveid As Byte , Byval Srf10_verstaerkung As Byte)
Declare Function Srf10_firmware(byval Srf10_slaveid As Byte) As Byte
$regfile = "m32def.dat"
$framesize = 42
$swstack = 42
$hwstack = 42
$crystal = 16000000 'Quarzfrequenz
$baud = 9600
Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1
Dim Entfernung As Integer
Wait 3 'Warte 3 Sekunden
I2cinit
Print "SRF10 Testprogramm "
Print "SRF 10 Firmware Version:" ; Srf10_firmware(&He0)
Srf10_reichweite &HE0 , 1000 'Reichweite in Zentimetern festlegen
Srf10_verstaerkung &HE0 , 10 'Verstärkungsfaktor
Do
Entfernung = Srf10_entfernung(&He0)
Print "Entfernung:" ; Entfernung ; "cm"
Wait 1
Loop
End
Function Srf10_entfernung(byval Srf10_slaveid As Byte) As Integer
Local LoB As Byte
Local Hib As Byte
Local Firmware As Byte
Local Temp As Byte
Local Srf10_slaveid_read As Byte
Srf10_slaveid_read = Srf10_slaveid + 1
'Messvorgang in starten
I2cstart
I2cwbyte Srf10_slaveid
I2cwbyte 0
I2cwbyte 81 in Zentimetern messen
I2cstop
Warteaufmessung:
Waitms 1
Firmware = Srf10_firmware(&He0)
If Firmware = 255 Then Goto Warteaufmessung
I2cstart
I2cwbyte Srf10_slaveid
I2cwbyte 2 'Leseregister festlegen
I2cstop
I2cstart
I2cwbyte Srf10_slaveid_read
I2crbyte Hib , Ack
I2crbyte Lob , Nack
I2cstop
Srf10_entfernung = Makeint(lob , Hib)
End Function
'Messreichweite in cm festlegen
Sub Srf10_reichweite(byval Srf10_slaveid As Byte , Byval Reichweite As Word)
Local Wert As Word
Local Temp As Byte
Wert = Reichweite / 4 'Ungefähre Registerberechnung
Temp = Low(wert)
I2cstart
I2cwbyte Srf10_slaveid
I2cwbyte 2 'Register
I2cwbyte Temp
I2cstop
End Sub
'Verstärung festlegen
Sub Srf10_verstaerkung(byval Srf10_slaveid As Byte , Byval Srf10_verstaerkung As Byte)
I2cstart
I2cwbyte Srf10_slaveid
I2cwbyte 1 'Register
I2cwbyte Srf10_verstaerkung
I2cstop
End Sub
Function Srf10_firmware(byval Srf10_slaveid As Byte) As Byte
Local Firmware As Byte
Local Srf10_slaveid_read As Byte
Srf10_slaveid_read = Srf10_slaveid + 1
I2cstart
I2cwbyte Srf10_slaveid
I2cwbyte 0 'Leseregister festlegen
I2cstop
I2cstart
I2cwbyte Srf10_slaveid_read
I2crbyte Firmware , Nack
I2cstop
Srf10_firmware = Firmware
End Function
Siehe auch

