Scheint soweit alles zu passen....
hast du mal versucht deinen Motortreiber abzuklemmen und die Signale einfach mit dem Multimeter zu messen ?
Meinst du die Pwm Eingänge vom Motortreiber?
Ich habe jetzt mal den Summer wieder eingebaut.Wenn ich jetzt das Programm starte beginnen die Motoren zu summen. Dann hören die Motoren aber wieder nicht auf und von dem Summer ist auch nichts zu hören.
Aber es ist, wie in deinem Ursprungsprogramm, ein Unterschied zwischen Mittelstellung und Seitenstellung des Knüppels zu hören.
Zu bedenken ist aber ,dass ich nicht den Summer für die Geschwindigkeit ,sondern für die Case Else Fälle eingesetzt habe.
Jetzt probiere ich noch mal wie du das wolltest.
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 = 255 ' 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
Sound Portd.7 , 400 , 450 ' 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
Sound Portd.7 , 400 , 250 ' bei ungültigen Werten fehler anzeigen
End Select
Pwm1b = Geschwindigkeit ' Geschwindigkeit Motor 2 regeln
Case Else
Sound Portd.7 , 400 , 600 ' bei ungültigen Werten fehler anzeigen
End Select
Print "->Motor=" ; Motor ; " ->Richtung=" ; Drehrichtung ; " ->Geschwindigkeit=" ; Geschwindigkeit 'Werte anzeigen als Kontrolle
End Sub
Lesezeichen