Also ich werde nochmal kurz auf alles eingehen was wir aufgebaut haben...und das Problem das sich ergiebt.
Das RN-Control ist per I2C mit dem RN-Motor verbunden. RS232 hängt am RN-Motor. Und ich programmier per ISP, das Steuerboard. Soweit funktioniert alles. Ich kann programmieren, ich kann das Programm uploaden und einige Befehle schon ausprobieren, mithilfe der taster. Hier das Programm welches ich benutze....
Code:
Declare Sub Motortest()
Declare Sub Lauflicht()
Declare Sub Aendereslaveid()
Declare Sub Motoran()
Declare Function Tastenabfrage() As Byte
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
Dim I As Integer
Dim N As Integer
Dim Ton As Integer
$crystal = 16000000 'Quarzfrequenz
$baud = 9600
Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1 'Pullup Widerstand ein
Const Ref = 5 / 1023 'Für Batteriespannungsberechnung
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
Dim Taste As Byte
Dim Volt As Single
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
' Für Motorentest
'Ports für linken Motor
Config Pinc.6 = Output 'Linker Motor Kanal 1
Config Pinc.7 = Output 'Linker Motor Kanal 2
Config Pind.4 = Output 'Linker Motor PWM
'Ports für rechten Motor
Config Pinb.0 = Output 'Rechter Motor Kanal 1
Config Pinb.1 = Output 'Rechter Motor Kanal 2
Config Pind.5 = Output 'Rechter Motor PWM
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Pwm1a = 0
Pwm1b = 0
Tccr1b = Tccr1b Or &H02 'Prescaler = 8
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
I = 0
Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP
Print
Print "**** RN-Control 1.4 *****"
Print "Das neue Experimentier- und Roboterboard"
Print "Weitere passende Zusatzboards bei www.robotikhardware.de"
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) = 900 / 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)
'Taste 1 Zeigt Bateriespannung über RS232 an
Case 2
Call Motortest 'Taste 2 Motoren beschleunigen und abbremsen
Case 3
Call Lauflicht 'Einige male Lauflicht über LED´s anzeigen. Am I2C-Port darf in diesem Moment nichts angeschlossen sein
End Select
Sound Portd.7 , 400 , 500 'BEEP
End If
Waitms 100
Loop
End
'Diese Unterfunktion fragt die Tastatur am analogen Port ab
Function Tastenabfrage() As Byte
Local Ws As Word
Tastenabfrage = 0
Ton = 600
Start Adc
Ws = Getadc(7)
' Print "Tastenabfrage anpassen!ADC Wert ws=" ; Ws
If Ws < 500 Then
Select Case Ws
Case 400 To 450
Tastenabfrage = 1
Ton = 550
Case 330 To 380
Tastenabfrage = 2
Ton = 500
Case 260 To 305
Tastenabfrage = 3
Ton = 450
Case 180 To 220
Tastenabfrage = 4
Ton = 400
Case 90 To 130
Tastenabfrage = 5
Ton = 350
' Case Else
' Print "Tastenabfrage anpassen!ADC Wert ws=" ; Ws
End Select
Sound Portd.7 , 400 , Ton 'BEEP
End If
' If Ws < 1023 Then
' Select Case Ws
' Case 895 To 910
' Tastenabfrage = 1
' Ton = 550
' Case 870 To 894
' Tastenabfrage = 2
' Ton = 500
' Case 650 To 690
' Tastenabfrage = 3
' Ton = 450
' Case 450 To 480
' Tastenabfrage = 4
' Ton = 400
' Case 220 To 280
' Tastenabfrage = 5
' Ton = 350
' End Select
' Sound Portd.7 , 400 , Ton 'BEEP
' End If
End Function
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
'Testet Motoren und Geschwindigkeitsreglung
Sub Motortest()
'Linker Motor ein
Portc.6 = 1 'bestimmt Richtung
Portc.7 = 0 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN
'Rechter Motor ein
Portb.0 = 1 'bestimmt Richtung rechter Motor
Portb.1 = 0 'bestimmt Richtung rechter Motor
Portd.5 = 1 'rechter Motor EIN
Pwm1a = 1000
Pwm1b = 1000
Waitms 5000
Pwm1a = 0 'Linker Motor aus
Pwm1b = 0 'rechter Motor aus
End Sub
'Einige male Lauflicht über LED´s anzeigen. Am I2C-Port darf in diesem Moment nichts angeschlossen sein
Sub Lauflicht()
Config Portc = Output
Portd = 0
For N = 1 To 10
For I = 0 To 7
Portc.i = 0
Waitms 100
Portc.i = 1
Next I
Next N
Config Portc = Input
End Sub
Taste 2, funktioniert. Taste 3 ebenfalls. Bei Taste 1, also der ansteuerung des Motorboards ist im Hyperterminal folgendes zu lesen:
Code:
RN-Motor ST I2C- Firmware 1.6c (c) robotikhardware.de
Referenzspannung = 2.5
SlaveId = Hex 56
Linker Motor Drehrichtung: 0
Linker Motor maximaler Strom : 0.09999996
Linker Motor Geschwindigkeit:5
Linker Motor PWM-Vorgabe im Stillstand:0
Linker Motor aktueller PWM-Wert :0
Rechter Motor Drehrichtung: 0
Rechter Motor maximaler Strom : 0.09999996
Rechter Motor Geschwindigkeit:5
Rechter Motor PWM-Vorgabe im Stillstand:0
Rechter Motor aktueller PWM-Wert :0
Motor:0 Max. Strom:0.899999973 Max-ADC=188
OK
Motor:0 ein
OK
RN-Motor liefert also ein OK zurück. Der Strom mit 900mA müsste ja passen. Was mir sorgen macht ist die Spannung. Heisst "Max-ADC=188" das die Spannung bei 1,88 Volt liegt? Wie kann ich die den ändern? Mit meinem Programm? Jedes Board ist mit einem Akkupack mit 7,3 Volt und 3300mA versehen. Ich will meine Motoren mit mindestens 6 Volt ansteuern. Wo geht das jetzt.
Hoffe ich hab alles erklärt,
danke für die Aufmerksamkeit.
Nimrott
Lesezeichen