Hier die aktuelle Ansteuersoftware für RN-Control, wobei diese mit dem neusten Bascom Compiler compiliert werden kann (mit Vollversion getestet):

Code:
'###################################################
'Schrittmotoransteuerung mit RN-Control und
'Ansteuerungsboard RN-MOTOR über I2C
'
' Achtung:
' Diese Demo ist mit Bascom Compiler 1.11.7.7 getestet
' Nur ältere Bascom Versionen benötigen eine neue Libary
' https://www.roboternetz.de/phpBB2/vi...t=694&start=22
'
' Die Firmware von I2C-RN-Motor sollte 1.6c oder 1.6 oder darüber lauten,
' Haben Sie noch ältere Firmware im Board, dann eine Mail mit Kundennummer
' und Anschrift an support@robotikhardware.de senden. Man erhält
' dann gratis ein Firmwareupdate als HEX File. Ist ein ISP-Kabel
' vorhanden, kann dieses einfach in RN-Motor eingespielt werden
' Dir Firmware Versionsnummer der RS232 Version sind unabhängig und können anders lauten
'
'
'Aufgabe:
' Dieses Testprogramm beschreibt die Motorboard I2C-Funktionen
' und legt einige der Befehle auf die 5 Tasten

' Den verschiedenen Tasten sind bestimmte Funktionen zugeordnet
' Taste 1: Stellt für den linken Motor den Motorstrom auf 200mA ein und schaltet Motor danach ein
' Taste 2: Lässt den linken Motor endlos drehen
' Taste 3: Fragt der bereits ausgeführten Motorschritte des linken Motors vom Board ab und
'          berechnet daraus Umdrehungen und Fahrtstrecke
'          Daten werden über RS232 angezeigt
' Taste 4: Ändert die Geschwindigkeit des linken Motors mit jedem Tastendruck
''Taste 5: Schaltet den linken Motor wieder aus

'

'Autor: Frank
'Weitere Beispiele und Beschreibung der Hardware
'in der Anleitung zu RN-Motor
'Anleitung findet man unter http://www.Roboternetz.de im Download Bereich
'oder www.robotikhardware.de
'Weitere Beispiele sind im Roboternetz gerne willkommen!
'##############################################################



Declare Function Tastenabfrage() As Byte
Declare Sub Aendereslaveid()

'$regfile = "m16def.dat"
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32

'Befehle im Schrittmotorbetrieb
'K ist eine Kennungsnummer die bei RN-Motor immer 10 ist, danach folgt Befehlscode und notwendige Parameter
'Es müssen immer 5 Bytes übertragen werden, auch wenn weniger Parameter ausreichen

'k 1 x y     Motor maximaler Strom x=0 Linker Motor  x=1 Rechte Motor x2= Beide Motoren Y = (Milliampere / 10)
'            Beispiel : Y = 150 Bedeutet 1,5A Oder Y = 20 Bedeutet 200ma
'k 2 y       Referenzspannung des Controllers (normal 2.5 und muss nicht geändert werden)
'            Beispiel:  y=241 bedeutet 2,41 V
'k 3 x       Motor stopp (Haltespannung bleibt ein) x=0 Linker Motor  x=1 Rechte Motor  x2= Beide Motoren Stopp
'k 4 x y     Motor Drehrichtung x=0 Linker Motor  x=1 Rechte Motor x2= Beide Motoren y=0=Links rum  y=1 rechts rum
'k 5 x yl yh Motor genau y Schritte bewegen x=0 Linker Motor  x=1 Rechte Motor  x2= Beide Motoren
                'y wird in High und Low Byte übertragen
'k 6 x       Motor endlose Schritte bewegen bis Stop Befehl kommt x=0 Linker Motor  x=1 Rechte Motor  x2= Beide Motoren

'k 7 x       Motor einen einzigen Schritt bewegen x=0 Linker Motor  x=1 Rechte Motor  x2= Beide Motoren
'k 8 x y     Motor Schrittgeschwindigkeit x=0 Linker Motor  x=1 Rechte Motor x2= Beide Motoren Y = 1 bis 255
'k 9 x       Motor ganz ausschalten  x=0 Linker Motor  x=1 Rechte Motor  x2= Alle Motoren Stopp

'k 10 x      Motor ein und init  x=0 Linker Motor  x=1 Rechte Motor

'k 11        Konfiguration und Testwerte werden über RS232 ausgegeben

'k 12        Sleep Mode

'k 13 x      Motor selektieren

'k 14 x      x=0 Vollschrittmodus  x=1 Halbschrittmodus
'k 15 99 99 x  Slave ID zwischen Hex 50 und Hex 70 ändern (erst ab RN-Motor Firmware 1.1 möglich)


Const Befehl_maxstrom = 1
Const Befehl_referenzspannung = 2
Const Befehl_stop = 3
Const Befehl_drehrichtung = 4
Const Befehl_schrittanzahl_drehen = 5
Const Befehl_endlos_drehen = 6
Const Befehl_einzigen_schritt = 7
Const Befehl_geschwindigkeit = 8
Const Befehl_ausschalten = 9
Const Befehl_einschalten = 10
Const Befehl_konfiguration_zeigen = 11
Const Befehl_sleep_modus = 12
Const Befehl_motor_selektieren = 13
Const Befehl_schrittmotormodus = 14

Const Motor_links = 0
 Const Motor_rechts = 1

Const I2crnmotorslaveadr = &H56                             'I2C SlaveAdresse von RN-Motor Erweiterung
Const I2crnmotorsreadlaveadr = &H57                         'I2C SlaveAdresse von RN-Motor Erweiterung
'Achtung, wenn das Motor-Board überhaupt nicht reagiert, dann könnte dieses eine andere Slave
'Adresse besitzen. Im Zweifel schließen Sie das Motorboard an die RS232 vom PC an und
'drücken Sie die RESET-Taste am Motorboard.Dann kann die Slave ID über ein
'Terminalprogramm angezeigt werden

Dim I2cdaten(6) As Byte                                     'Array um Befehlsfolge auszunehmen
Dim Lowbyte As Byte
Dim Highbyte As Byte
Dim Schritte As Long
Dim Temp As Byte
Dim Ltemp As Long
Dim Umdrehungen As Single
Dim Fahrstrecke As Word

Dim Geschwindigkeit As Byte

Dim I As Integer
Dim N As Integer
Dim Ton As Integer

$crystal = 16000000                                         'Quarzfrequenz
$baud = 9600

Config Scl = Portc.0                                        'Ports fuer IIC-Bus
Config Sda = Portc.1

Geschwindigkeit = 250
I2cinit



Config Adc = Single , Prescaler = Auto                      'Für Tastenabfrage und Spannungsmessung
Config Pina.7 = Input                                       'Für Tastenabfrage
Porta.7 = 1                                                 'Pullup Widerstand ein
Dim Taste As Byte





I = 0
Sound Portd.7 , 400 , 450                                   'BEEP
Sound Portd.7 , 400 , 250                                   'BEEP
Sound Portd.7 , 400 , 450                                   'BEEP
Print
Print "**** RN-Control  V1.4 *****"
Print "Demoprogramm um Zusatzkarte RN-Motor im Schrittmotormodus zu testen"
Print
Do
   Taste = Tastenabfrage()
   If Taste <> 0 Then

      Select Case Taste
         Case 1
            'Motorstrom auf 200mA begrenzen
            I2cdaten(1) = 10                                'Kennung muss bei RN-Motor immer 10 sein
            I2cdaten(2) = Befehl_maxstrom                   'Befehlscode
            I2cdaten(3) = Motor_links                       '1 Parameter
            I2cdaten(4) = 200 / 10                          '2 Parameter (hier Milliampere /10 in diesem Fall wird 200mA eingestellt)
            I2csend I2crnmotorslaveadr , I2cdaten(1) , 5    'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)
            I2cstop

            'Halbschrittmodus
'            I2cdaten(1) = 10                                'Kennung muss bei RN-Motor immer 10 sein
'            I2cdaten(2) = Befehl_schrittmotormodus          'Befehlscode
'            I2cdaten(3) = 1                                 'Beide Motoren Halbschrittmodus
'            I2csend I2crnmotorslaveadr , I2cdaten(1) , 5    'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)


            'Motor einschalten
            I2cdaten(1) = 10                                'Kennung muss bei RN-Motor immer 10 sein
            I2cdaten(2) = Befehl_einschalten                'Befehlscode
            I2cdaten(3) = Motor_links                       '1 Parameter
            I2csend I2crnmotorslaveadr , I2cdaten(1) , 5    'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)



         Case 2
            'Motor endlos drehen
            I2cdaten(1) = 10                                'Kennung muss bei RN-Motor immer 10 sein
            I2cdaten(2) = Befehl_endlos_drehen              'Befehlscode
            I2cdaten(3) = Motor_links                       '1 Parameter
            I2csend I2crnmotorslaveadr , I2cdaten(1) , 5    'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)


         Case 3
           'Motor für Datenabruf anwählen
            I2cdaten(1) = 10                                'Kennung muss bei RN-Motor immer 10 sein
            I2cdaten(2) = Befehl_motor_selektieren          'Befehlscode
            I2cdaten(3) = 0                                 '1 Parameter
            I2csend I2crnmotorslaveadr , I2cdaten(1) , 5    'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)
            I2cstop
            Waitms 1
            'Schritte abrufen und Umdrehungen und Fahrtstrecke berechnen und über RS232 anzeigen
            I2cstart
            I2cwbyte I2crnmotorsreadlaveadr
            I2crbyte Temp , Ack
            Schritte = Temp
            I2crbyte Temp , Ack
            Ltemp = Temp * 256
            Schritte = Schritte + Ltemp
            I2crbyte Temp , Ack
            Ltemp = Temp * 65536
            Schritte = Schritte + Ltemp
            I2crbyte Temp , Nack
            Ltemp = Temp * 16777216
            Schritte = Schritte + Ltemp
            I2cstop
            Print "Schrittanzahl:" ; Schritte
            Umdrehungen = Schritte / 200                    'Wenn Schrittwinkel 1,8 Grad beträgt dann durch 200 teilen
            Print "Umdrehungen: " ; Umdrehungen
            'Umfang des rades mal Umdrehungen ergibt Fahrtstrecke
            'Umfang berechnet sich auch U=3.14 * Druchmesser
            'In dem Beispiel nehmen wir ein 10 cm Rad am Roboter an
            Fahrstrecke = Umdrehungen * 31.4
            Print "Der Roboter ist " ; Fahrstrecke ; " cm gefahren "

         Case 4
            'Geschwindigkeit ändern
            If Geschwindigkeit > 40 Then
              Geschwindigkeit = Geschwindigkeit - 20
            Else
              Geschwindigkeit = Geschwindigkeit - 1
            End If
            Print "Geschwindigkeitsstufe: " ; Geschwindigkeit
            I2cdaten(1) = 10                                'Kennung muss bei RN-Motor immer 10 sein
            I2cdaten(2) = Befehl_geschwindigkeit            'Befehlscode
            I2cdaten(3) = Motor_links                       '1 Parameter
            I2cdaten(4) = Geschwindigkeit                   '2 Parameter (hier Milliampere /10 in diesem Fall wird 200mA eingestellt)
            I2csend I2crnmotorslaveadr , I2cdaten(1) , 5    'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)
            I2cstop

          Case 5
            'Motor ausschalten
            I2cdaten(1) = 10                                'Kennung muss bei RN-Motor immer 10 sein
            I2cdaten(2) = Befehl_ausschalten                'Befehlscode
            I2cdaten(3) = Motor_links                       '1 Parameter
            I2csend I2crnmotorslaveadr , I2cdaten(1) , 5    'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)
            I2cstop


      End Select
      Sound Portd.7 , 400 , 500                             'BEEP
   End If

   Waitms 100
Loop

End




' Diese Unterfunktion fragt die Tastatur am analogen Port ab
' Sollte beim betätigen einer Taste kein Quittungston kommen, dann
' muss die die Tastenabfrage (Select Case Anweisung in Funktion )
' an ihr Board angepaßt werden. Widerstandstoleranzen sorgen in
' Einzelfällen manchmal dafür das die Werte etwas anders ausfallen
' Am besten dann den WS wert mit Print für jede Taste ausgeben lassen

Function Tastenabfrage() As Byte
Local Ws As Word


   Tastenabfrage = 0
   Ton = 600
   Start Adc
   Ws = Getadc(7)
'   Print "ws= " ; Ws
   If Ws < 1010 Then
      Select Case Ws
         Case 400 To 455
            Tastenabfrage = 1
            Ton = 550
         Case 335 To 380
            Tastenabfrage = 2
            Ton = 500
         Case 250 To 305
            Tastenabfrage = 3
            Ton = 450
         Case 180 To 220
            Tastenabfrage = 4
            Ton = 400
         Case 100 To 130
            Tastenabfrage = 5
            Ton = 350
      End Select
      Sound Portd.7 , 400 , Ton                             'BEEP
   End If

End Function



'Diese Funktion kann genutzt werden um die SlaveID von RN-Motor
'zu aendern. Dies ist allerdings erst in der neusten Firmware
'von RN-Motor möglich. Bei älteren Versionen müsste Controller gewechselt
'werden. Die Aktuelle Version und Slave ID wird über
'RS232 von RN-Motor bei RESET ausgegeben
Sub Aendereslaveid()
   I2cdaten(1) = 10                                         'Kennung muss bei RN-Motor immer 10 sein
   I2cdaten(2) = 15
   I2cdaten(3) = 99                                         '1 Parameter Sicherheitskennung
   I2cdaten(4) = 99                                         '2 Parameter Sicherheitskennung
   I2cdaten(5) = &H58                                       'Hier neue Slave ID Eintragen
   I2csend I2crnmotorslaveadr , I2cdaten(1) , 5             'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)
End Sub
Da auch nach C-Control Beispiel öfters gefragt wird. Hier eines für die RS232-Schnittstelle. Ähnlich gehts natürlich mit RN-Control oder allen anderen Boards mit RS232 auch:

Code:
'DEMO das aufzeigt
'wie einfach RN-Motor über RS232
'auch mit einer C-Control angesteuert werden kann



'Motorstrom festlegen
  
  Print "#rmi" ; : Put 2 : Put 58
  pause 20
 
 'beide Motoren ein
  Print "#rmo" ; : Put 2
  pause 20

 'beide motoren rechts
  Print "#rmd" ; : Put 2 : Put 0

  pause 20
  'geschwindigkeit
  Print "#rmg" ; : Put 2 : Put 25
  pause 20

  'endlos drehen
  Print "#rme" ; : Put 2




#hinundher
  pause 1000

 'Linker motor nach links
  Print "#rmd" ; : Put 0 : Put 0

 'rechter motor nach rechts
  Print "#rmd" ; : Put 1 : Put 1

  pause 1000

 'Linker motor nach rechts
  Print "#rmd" ; : Put 0 : Put 1

 'rechter motor nach links
 'Print "#rmd" ; : Put 1 : Put 0


GoTo hinundher
Ein Demo für C-Control und RN-Motor I2C findet man hier:
https://www.roboternetz.de/phpBB2/dl...le&file_id=251