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....
Taste 2, funktioniert. Taste 3 ebenfalls. Bei Taste 1, also der ansteuerung des Motorboards ist im Hyperterminal folgendes zu lesen: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
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.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
Hoffe ich hab alles erklärt,
danke für die Aufmerksamkeit.
Nimrott







Zitieren

Lesezeichen