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