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
Lesezeichen