Hallo ,hab jetzt noch mal das Programm geladen von dir geladen :
Code:
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
$hwstack = 32
$swstack = 32
$framesize = 32
Config Portd.7 = Output
Config Pind.2 = Input ' Signal 1(a) vom RC-Empfänger
Config Pind.3 = Input ' Signal 2(b) vom RC-Empfänger
Config Portc.6 = Output 'Motor links
Config Portc.7 = Output 'Motor links
Config Portb.0 = Output 'Motor rechts
Config Portb.1 = Output 'Motor rechts
Config Portd.4 = Output 'PWM links
Config Portd.5 = Output 'PWM rechts
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
Dim Rckanal_a As Word
Dim Rckanal_b As Word
Dim Motor As Byte ' 1=Motor1 / 2=Motor2 /...
Dim Drehrichtung As Byte ' 0= Bremsen / 1=links / 2=rechts
Drehrichtung = 1 ' Drehrichtung >>>jetzt manuell auf Links gestellt <<<
Dim Geschwindigkeit As Word ' Motorgeschwindigkeit
Geschwindigkeit = 0 ' Motorgeschwindigkeit anfangs auf 0
Declare Sub Motorsteuerung(byval Motor As Byte , Byval Drehrichtung As Byte , Byval Geschwindigkeit As Word)
Sound Portd.7 , 400 , 450
Sound Portd.7 , 400 , 250
Sound Portd.7 , 400 , 450
Wait 2
Do
' Wert vom RC-Empfänger abfragen und weitergeben
Pulsein Rckanal_a , Pind , 2 , 1 ' Wert vom Kanal 1...Motor 1.
Motor = 1
Geschwindigkeit = Rckanal_a
Call Motorsteuerung(motor , Drehrichtung , Geschwindigkeit) 'Daten an Subroutine/Motorsteuerung übergeben
' Subroutine hat Motor bearbeitet... weiter zum nächsten
' Wert vom RC-Empfänger abfragen und weitergeben
Pulsein Rckanal_b , Pind , 3 , 1 ' Wert vom Kanal 2...Motor 2.
Motor = 2
Geschwindigkeit = Rckanal_b
Call Motorsteuerung(motor , Drehrichtung , Geschwindigkeit) 'Daten an Subroutine/Motorsteuerung übergeben
' Subroutine hat Motor bearbeitet... weiter zum nächsten
Loop
End
Sub Motorsteuerung(byval Motor As Byte , Byval Drehrichtung As Byte , Byval Geschwindigkeit As Word)
Geschwindigkeit = Geschwindigkeit - 85 'Wenn der Wert vom RC-Kanal etwa 90 bis 210 beträgt ...
Geschwindigkeit = Geschwindigkeit * 2 ' ... grob umrechnen um innerhalb 0 bis 255 zu sein fürs PWM-Signal
Select Case Geschwindigkeit ' sicherstellen, das keine Falschen Werte durchkommen
Case Is >= 255 : Geschwindigkeit = 600 ' maximalwert 255
Case Is <= 15 : Geschwindigkeit = 0 ' Untere Schwelle, das der Motor auch wirklich still stehen kann
End Select
Select Case Motor ' Welcher Motor soll gesteuert werden ?
Case 1 : Select Case Drehrichtung ' wenn Motor1, in welche richtung soll er drehen ?
Case 0 : Portc.6 = 0 ' Ports für Drehrichtung setzen
Portc.7 = 0
Case 1 : Portc.6 = 1
Portc.7 = 0
Case 2 : Portc.6 = 0
Portc.7 = 1
Case Else
Print "Fehler1-Drehrichtung" ' bei ungültigen Werten fehler anzeigen
End Select
Pwm1a = Geschwindigkeit ' Geschwindigkeit Motor 1 regeln
Case 2 : Select Case Drehrichtung ' wenn Motor2, in welche richtung soll er drehen ?
Case 0 : Portb.0 = 0 ' Ports für Drehrichtung setzen
Portb.1 = 0
Case 1 : Portb.0 = 1
Portb.1 = 0
Case 2 : Portb.0 = 0
Portb.1 = 1
Case Else
Print "Fehler2-Drehrichtung" ' bei ungültigen Werten fehler anzeigen
End Select
Pwm1b = Geschwindigkeit ' Geschwindigkeit Motor 2 regeln
Case Else
Print "Fehler-Motor" ' bei ungültigen Werten fehler anzeigen
End Select
Print "->Motor=" ; Motor ; " ->Richtung=" ; Drehrichtung ; " ->Geschwindigkeit=" ; Geschwindigkeit 'Werte anzeigen als Kontrolle
End Sub
Und habe bei beiden Motoren nacheinander mal beim Ausgang des L293D ein Multimeter angeschlossen. Bei Mittelstellung zeigt es 1,6V ,bei dem einen Ausschlag 2,2V und beim anderen Ausschlag 0,97 V an . Ist das nicht ganz Falsch ??Sollte nicht bei beiden Endausschlägen ein höherer Wert herauskommen ???
Die Serielle Auswertung hat nur ganz oft :Motor 1 Richtung 1 Geschwindigkeit ca.130
und Motor 2 Richtung 1 Geschwindigkeit 138 angezeigt.
Kannst du damit was anfangen ?????
Lesezeichen