Wie gewünscht der Vollständige code alles funkt nur wie oben schon gesagt nicht die 500 Schritt funktion
Code:Declare Function Tastenabfrage() As Byte Declare Sub Aendereslaveid() $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 Const Befehl_maxstrom = 1 Const Befehl_endlos_drehen = 6 Const Befehl_ausschalten = 9 Const Befehl_einschalten = 10 Const Motor_links = 0 Const Motor_rechts = 1 Const Motor_beide = 2 Const Motor_links_schritt = 0 Const I2crnmotorslaveadr = &H56 'I2C SlaveAdresse von RN-Motor Erweiterung Const I2crnmotorsreadlaveadr = &H57 'I2C SlaveAdresse von RN-Motor Erweiterung Dim I2cdaten(6) As Byte 'Array um Befehlsfolge auszunehmen Dim I2cdaten_rechts(6) As Byte Dim Ton As Integer Dim Schritt As Integer Schritt = 0 $crystal = 16000000 'Quarzfrequenz $baud = 9600 Config Scl = Portc.0 'Ports fuer IIC-Bus Config Sda = Portc.1 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 Print Print "**** RN-Motor Test" Print "Schrittmotorn Test Simple" 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) = 500 / 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) Print "Links Rennt" I2cstop I2cdaten_rechts(1) = 10 'Kennung muss bei RN-Motor immer 10 sein I2cdaten_rechts(2) = Befehl_maxstrom 'Befehlscode I2cdaten_rechts(3) = Motor_rechts '1 Parameter I2cdaten_rechts(4) = 500 / 10 '2 Parameter (hier Milliampere /10 in diesem Fall wird 200mA eingestellt) I2csend I2crnmotorslaveadr , I2cdaten_rechts(1) , 5 'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind) Print "Rechts Rennt" I2cstop I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein I2cdaten(2) = Befehl_einschalten 'Befehlscode I2cdaten(3) = Motor_beide '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 I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein I2cdaten(2) = Befehl_endlos_drehen 'Befehlscode I2cdaten(3) = Motor_beide '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 I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein I2cdaten(2) = Befehl_endlos_drehen 'Befehlscode I2cdaten(3) = Motor_rechts '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 4 Do I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein I2cdaten(2) = 7 'Befehlscode I2cdaten(3) = 0 '1 Parameter I2csend &H56 , I2cdaten(1) , 5 'Befehl wird gesendet Incr Schritt Loop Until Schritt = 5 Wait 1 Case 5 I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein I2cdaten(2) = Befehl_ausschalten 'Befehlscode I2cdaten(3) = Motor_beide '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 Print "Motoren aus....." End Select End If Waitms 100 Loop Function Tastenabfrage() As Byte Local Ws As Word Tastenabfrage = 0 Start Adc Ws = Getadc(7) If Ws < 1010 Then Select Case Ws Case 400 To 455 Tastenabfrage = 1 Case 335 To 380 Tastenabfrage = 2 Case 250 To 305 Tastenabfrage = 3 Case 180 To 220 Tastenabfrage = 4 Case 100 To 130 Tastenabfrage = 5 End Select End If End Function End







Zitieren

Lesezeichen