mhm... du hattest den timer1 glaub auf pwm=10 ? ... dann hat der ne auflösung bis 1024.
dann ist er also die meiste zeit über den angegebenen 255...
entweder das anpassen oder einfach auf 8bit stellen.
nur um missverständnisse auszumärzen
mhm... du hattest den timer1 glaub auf pwm=10 ? ... dann hat der ne auflösung bis 1024.
dann ist er also die meiste zeit über den angegebenen 255...
entweder das anpassen oder einfach auf 8bit stellen.
nur um missverständnisse auszumärzen
JAAAA... Microchips kann man essen... aber der Geschmack ist furchtbar.
Hallo ,hab jetzt noch mal das Programm geladen von dir geladen :
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 ???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
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 ?????
dann würd ich mal sagen... wenn der Ausgangswert (also Geschwindigkeit) sich kaum von den 130 wegbewegt....
zurückrechnen... (130/2)+85=150
und 150 wäre genau der wert, der für die mittelstellung der Funke zu erwarten wäre...
Was für ne fernsteuerung hast du ? Funktioniert die richtig ??
Ich würde mal behaupten, das deine Funke oder der Empfänger nicht korrekt arbeiten...
Kann man evtl die Wege der Servos einstellen oder sogar anzeigen lassen ?
Nachtrag:
Wenn ich direkt den Wert abfrage, der von PulseIn geliefert wird....
Meine Funke bringt bei Einstellung > "100% Servoweg" Ergebnisse von : 110<>150<>190
und bei Einstellung > " "150% Servoweg" Ergebnisse von : 90<>150<>210
Geändert von JoeM1978 (13.01.2013 um 14:06 Uhr)
JAAAA... Microchips kann man essen... aber der Geschmack ist furchtbar.
Ja, funktioniert richtig ,da ich ja sonst keine sinnvollen Ergebnisse herausbekommen würde.Was für ne fernsteuerung hast du ? Funktioniert die richtig ??
Nein.Kann man evtl die Wege der Servos einstellen oder sogar anzeigen lassen ?
Meine auch in etwa.Meine Funke bringt bei Einstellung > "100% Servoweg" Ergebnisse von : 110<>150<>190
Ich habe jetzt mal den Ausprobiert :
Und bekomme keine Fehlermeldung ,doch es läuft nix.Selbst das Summen hat aufgehört. Ich bekomme nur Werte von der Geschwindigkeit je nach Knüppelstellungen angezeigt.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) Select Case Geschwindigkeit Case 90 To 140 Geschwindigkeit = 600 Drehrichtung = 1 Case 160 To 200 Geschwindigkeit = 500 Drehrichtung = 2 Case Else Geschwindigkeit = 0 Drehrichtung = 0 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 Print "Geschwindigkeit1:_" ; 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 Print "Geschwindigkeit2:_" ; Geschwindigkeit ' Geschwindigkeit Motor 2 regeln Case Else Print "Fehler-Motor" ' bei ungültigen Werten fehler anzeigen End Select Print "Geschwindigkeit:_" ; End Sub
Es funktioniert einfach nicht zusammen. Denn getrennt funktioniert alles.
hat der M32 wirklich PWM-Kanäle auf D.4 und D.5 ?
Also das Signal vom Timer1=PWM kommt nur auf den Pins raus, die auch mit OC1A und OC1B angegeben sind...
was bei mir am Atmega8 PortB.1 und PortB.2 sind.
Das macht es leider oft sehr schwer, wenn man PWM und Interrupt nur begrenzt zur verfügung hat, weil die nicht an jedem Beliebigen Pin/Port funtionieren.
JAAAA... Microchips kann man essen... aber der Geschmack ist furchtbar.
Ja.hat der M32 wirklich PWM-Kanäle auf D.4 und D.5 ?
So ,nach langem Probieren klappt es endlich.
Hier mein Code.Mit Kanal 1 fahre ich vor und zurück und mit dazugeschaltetem Kanal 2 drehe ich links und rechts.
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 Drehrichtung As Word Dim Geschwindigkeit As Word Dim Schub As Word Dim Gerade As Word Dim Lala As Word Declare Sub Motorsteuerung Sound Portd.7 , 400 , 450 Sound Portd.7 , 400 , 250 Sound Portd.7 , 400 , 450 Wait 2 Do Pulsein Geschwindigkeit , Pind , 2 , 1 'vor / zurück Pulsein Drehrichtung , Pind , 3 , 1 'links / rechts Call Motorsteuerung Loop End Sub Motorsteuerung Select Case Geschwindigkeit Case 90 To 140 Schub = 650 Gerade = 8 Print "Vorwärts" Case 160 To 200 Schub = 650 Gerade = 2 Print "Rückwärts" Case Else Schub = 0 Print "Stop" End Select Select Case Drehrichtung Case 90 To 140 Portc.6 = 1 Portc.7 = 0 Portb.0 = 1 Portb.1 = 0 Lala = Schub + 100 Pwm1a = Lala Pwm1b = Lala Case 160 To 200 Portc.6 = 0 Portc.7 = 1 Portb.0 = 0 Portb.1 = 1 Lala = Schub + 100 Pwm1a = Lala Pwm1b = Lala Case Else Select Case Gerade Case 8 Portc.6 = 0 Portc.7 = 1 Portb.0 = 1 Portb.1 = 0 Pwm1a = Schub Pwm1b = Schub Case 2 Portc.6 = 1 Portc.7 = 0 Portb.0 = 0 Portb.1 = 1 Pwm1a = Schub Pwm1b = Schub Case Else Portc.6 = 0 Portc.7 = 0 Portb.0 = 0 Portb.1 = 0 Pwm1a = Schub Pwm1b = Schub End Select End Select End Sub
schön wenns klappt.
hast du denn auch Ausfindig machen können, was genau jetzt der Haken daran war ?
JAAAA... Microchips kann man essen... aber der Geschmack ist furchtbar.
Lesezeichen