Lieber Besucher, herzlich willkommen bei: RCLine Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

Freitag, 18. Dezember 2009, 15:01

Atmega Kransteuerung mit Servos

Hi Leute,

ich habe meinen Kran an der Ranzow mit servos ausgestattet, statt mit Motoren.
Problem ist, dass wenn ich den Knüppel bewege, bewegen sich die Servos ruckartig.
Außerdem gehen die Servos gleich wieder zurück, wenn der Knüppel wider auf nullstellung geht.
ich möchte hiermit arbeiten: Servo Steuerung
Ich habe gehört, dass wenn der Knüppel auf Mitte steht, kommt alle 1,5ms ein Impuls. Ich möchte jetzt, dass wenn ich den knüppel nach Rechts bewege, dass der Kran langsam nach rechts fährt und dann da stehen bleibt wenn ich den Knüppel wider in Mittelstellung mache.
z.B.:

Quellcode

1
2
3
4
5
6
7
If (puls < 1,5) {
 servo fährt langsam nach links;
}elseif(puls>1,5) {
servo fährt langsm nach rechts;
}else{
servo bleibt stehen
}


Außerdem möchte ich jetzt noch eine Funktion einbauen, dass wenn der Atmega auf einem Port kein Signal mehr bekommt, dass die Servos alle wider in eine Einprogrammierte possition fahren.

Wie lässt sie das am besten realisieren?


Philipp

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »lord-maricek« (18. Dezember 2009, 17:31)


2

Sonntag, 20. Dezember 2009, 09:39

RE: Atmega Kransteuerung mit Servos

da mir noch niemand helfen konnte,

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Rc_read:
'Den Timer starten mit steigender Flanke
If Reading = 0 Then
   Start Timer1
   Reading = 1
   Toggle Portc.0
'Den Timer stoppen mit fallender Flanke
Else
   Stop Timer1
   Rc_value = Timer1
   Timer1 = 0
   Reading = 0
   Toggle Portc.1
End If
'Error-Bit rücksetzen
Error = 0
Retu


ich denke mal, dass ist der teil in dem der Kanal ausgelesen wird?
Wie kann ich dem Signal, einen Wert zuweisen? das ich zum beispiel, bei Knüppelmittelstellung 1,5 habe, wenn man nach rechts dreht, <1,5 und nach links > 1,5?

Philipp

3

Sonntag, 20. Dezember 2009, 11:45

RE: Atmega Kransteuerung mit Servos

Ich meine schon, das hier Leute sind, die dir helfen können.
Ich meine es fehlt ein wenig an der Information Deinerseits.
Wie soll die Kransteuerung realisiert werden ( Bauteile, Servos oder was ) ?
Wie viele Kanäle soll die Kransteuerung kriegen ?
Sind dort auch Bremsen nötig z.B. Seilbremsen bei abgeschaltetem Hebemotor ?

Das mit der mittleren Impulslänge genau bei 1500µs wird nicht funktionieren, Du musst da eine Totzone mit reinrechnen. Z.B. 1470...1530 = Kran bleibt stehen.

Wie willst Du die Drehung des Krans realisieren ?
Über einen CAR Regler - Dann brauchst Du gar keinen Controller.

Oder über ein 180° Servo ?
Meine Überlegung wäre dann jeden eintreffenden Servoimpuls auszuwerten und die Ausgabeimpulslänge entsprechend zu variieren.
Je mehr der eintreffende Impuls von der 1500µs mitte abweicht um so größer sollten dann die Inkremente / Dekremente der Ausgabe - Servoimpulslänge werden.
Dadurch wäre dann auch eine Geschwindigkeitsregelung möglich.

Teil doch hier mal mit, wo dein Problem konkret liegt und teil Deine Probleme in einzelne Problemgruppen auf, dann wird Dir hier auch geholfen.

4

Sonntag, 20. Dezember 2009, 12:15

RE: Atmega Kransteuerung mit Servos

Ok sorry hier kommen sie:
Ich habe einen Kran.
Er hat zum drehen einen Servo mit Zahnrad, zum heben und senken des Armes einen Servo mit Hebelarm.
Die Servos stehen wenn der Kran in Ausgangsposition ist alle in Mittelstellung.
Wenn ich jetzt den Knüppel nach rechts bewege soll sich der Kran langsam nach rechts bewegen und wenn ich den Knüppel wider in Mittelposition mache, soll er da stehen bleiben wo er gerade ist. Da andere mit den Bewegungen nach links ober und unten.
Ich habe alle Kanäle an der Fernsteuerung doppelt belegt und kann mit einem Relais zwischen Fahrbetrieb und Kranbetrieb umschalten. Wenn ich den Kran bewegt habe soll er, wenn ich wider auf Fahrbetrieb schalte, automatisch in die Ausgangposition zurückfahren.
Also:

Quellcode

1
2
3
4
if (incoming_signal=0)
{
 fahr_in_ausgangsposition
}


Ich habe einen Graupner standartservo für das Drehen verbaut (ich glaube 577).
Für hoch und runter habe ich eine mini Servo verbaut (dreht sich ca. 180°).

Ich habe auf dem Kran noch eine Seilwinde die auch noch gesteurt werden soll. Da soll der Atmega den Motor nur umpolen, wenn der Knüppel hoch bzw. runter bewegt wird.
Das heben/senken/links/rechts bewegen muss keine verschiedenen Geschwindigkeite haben, es reicht wenn er sich langsam bewget.

Problemzonen:
Ich kann zwar schon Port öffnen und schleißen aber noch nicht sehr viel mehr, außerdem behersche ich die Kontrollstrukturen in Bascom einigermaßen, aber:

-ich weiß nicht wie ich das Siganl auswerten kann, um sie dann in eine Langsame bewegnung umzusetzten bzw. in das Umpolen des Motors.

Ich brauche ein Programm, dass:
- das Signal erfasst und auswertet
- den Servo je nach Signal steuert
- wenn kein Signal da ist die Servos in Ausgangposition zurückfährt ( hab gelesen, dass man Servos mit Winkel ansteuern kann)
- ein Programm, dass jenach Knüppelstellung den Motor umpolt

ich hoffe ihr könnt mir helfen.


Philipp

p.s.: auf dem Beispiel für den Motor hab ich keine Atmega8 gefunden also nicht über die Ports wundern.

Die Zeichnung stimmt nicht ganz.
Es sind zeweils ein Kanal als 3 Kanäle insgesamt.
Also auch 3 Relais.
Und 3 Ports die eingelesen werden müssen.
»lord-maricek« hat folgendes Bild angehängt:
  • systematik.jpg

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »lord-maricek« (20. Dezember 2009, 13:12)


5

Sonntag, 20. Dezember 2009, 12:46

RE: Atmega Kransteuerung mit Servos

ich habe das zweite bild nicht in den ersten post reinbekommen:
»lord-maricek« hat folgendes Bild angehängt:
  • motor.jpg

6

Montag, 21. Dezember 2009, 08:23

RE: Atmega Kransteuerung mit Servos

Ja, dann sollte es so funktionieren wie ich es in meinem vorherigen Post beschrieben habe.

Also Eingangs- Servoimpulslänge auswerten und die Servoimpulsausgabe dementsprechend inkrementieren dekrementieren.

Du könntest z.B. deine 1500µs vom aktuellen Wert der Servoimpulslänge abziehen.
Also Servoimpulslänge-1500 dann dieses Erghebnis durch einen festen Faktor teilen und dieses Ergebnis zu deiner Ausgangsimpulslänge aufaddieren.
Wenn Du dafür signed Variablen verwendest müsste das auch für die Rückwärtsrichtung funktionieren und Du bekommst eine Ausschlagabhängige Geschwindigkeitssteuerung - was ja gewünscht sein dürfte.

Das Ganze muß natürlich auf die beiden Endausschläge bei ca. 1000µs und 2000µs beschränkt werden.

Routinen für die Erfassung und Ausgabe von Servoimpulsen solltest Du hier im BASCOM Tutorial finden.

Für den Seilzug würd ich einen einfachen CAR Regler mit Vorwärts Rückwärts Funktion verwenden und diesen unabhängig vom Microcontroller betreiben.
So wie in Deiner Schaltung wird das nicht funktionieren.

Programmcode kann ich Dir leider nicht liefern ich progge in "C".

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »wkrug« (21. Dezember 2009, 08:28)


7

Montag, 21. Dezember 2009, 16:53

hi, danke für die Antowort.
aber ein bisschen Hilfe bracuh ich nochmal, vielleicht kann mir jemand von den Bascom Leuten helfen.
Ichn habe das noch nicht so richtig verstanden, wie ich den Port auswerten kann, und wie soll ich das machen, weil die Servos brauchen 8Mhz und die Auswertung 4Mhz.
Ich hab mal ein bisschen angefangen provisorisch etwas zusammen zu basteln.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
'Definition für Mega 8
$regfile "m8def.dat"

'Angabe der Taktfrequenz (8Mhz)
$crystal = 8000000

Config Servos = 2 , Servo1 = Portd.0 , Servo2 = Portd.1, Reload = 10

Do

'Signal Ausweten
???

'Servo verstellen

while signal < 1500 Then
    'servo_wert verstellen
    waitms 100    

while signal > 1500 Then
    'Servo_wert_verstellen
    waitms 100

if signal == 0 Then
    'AusgangsPosition anfahren


Loop


WO ich noch hilfe brauch habe ich in Kommentar geschrieben.
ich hoffe ihr könnt mir helfen

Philipp

8

Dienstag, 22. Dezember 2009, 08:15

Da gibt es doch diese Pulsein und Pulseout Befehle bei BASCOM oder Irre ich mich da?

In C würde ich das alles Interuptgesteuert ablaufen lassen.

Der Timer 1 läuft frei mit einem Prescaler von 8.

Der INT0 und INT1 stehen auf steigende Flanke.

Kommt nun ein Servoimpuls wird das TCNT1 Register ausgelesen und das Sensing des entsprechenden Interupts auf fallende Flanke gesetzt.

Fällt diese Flanke nun, also ist der Servoimpuls zu Ende.
Nun liest man wieder das TCNT1 Register aus und zieht den vorher ermittelten Wert ab.
Der Rest ist die Impulslänge des Servoimpulses.
Bei 8MHz Taktfrequenz direkt in µS bei 4MHz in 2µS Werten.

Die Servoimpulsausgabe kann man über ein Comparematchregister geregelt kriegen.

Bei einem Comparematch Interrupt wird der Ausgang 1 aktiv geschaltet.
Das TCNT1 Register wird ausgelesen und die gewünschte Servoimpulslänge dazuaddiert. Diesen Wert schreibt man nun in das COMP1A Register.
Wird dann dieser Interrupt erreicht wird Ausgang1 abgeschaltet und Ausgang 2 aktiviert.
Wieder das TCNT1 Register ausgelesen und die Servoimpulslänge für Servo2 dazuaddiert und wiederum im COMP1A Register abgelegt.
Ist auch dieser Interrupt erreicht werden alle Ausgänge abgeschaltet, das TCNT1 Register ausgelesen und die gewünschte Pausenlänge zu diesem Wert dazuaddiert 18000µs dürften hier richtig sein.
Nachdem die Pausenzeit abgelaufen ist kann das Spielchen mit Kanal 1 wieder von vorne beginnen.

Der Vorteil dieser Methode ist, das man die Routine Problemlos auf bis zu 8 Kanäle erweitern kann. Dazu muß nur der Zykluszähler ( welcher Kanal ist dran ) und der Wert für die Pausenzeit verändert werden.
Nimmt man auch noch dem COMPAREMATCH 1B dazu sind sogar 2x8 Kanäle möglich.

Nach diesem Schema sollte sich das auch in BASCOM oder gar Inline Assembler realisieren lassen.
Man hat halt die volle Kontrolle über die Servoimpulsgenerierung.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »wkrug« (22. Dezember 2009, 08:34)


9

Dienstag, 22. Dezember 2009, 13:44

Hi,
danke für die Antwort
Ich habe zum Imupls auslesen hierwas gefunde mit Pulsein
http://www.rclineforum.de/forum/thread.php?postid=3311449 (8. Beitrag).

Wie viele Schritte hat ein Servo?
http://halvar.at/elektronik/servo_mit_bascom_avr/
Wenn ich jetzt schreibe

Quellcode

1
Servo(1) = Neue_position

Welchen max. bzw. min. Winkel kann ich angeben?

Das mit der Frequenz hab ich noch nicht verstanden.
Wie kann ich das Programm gleichzeit auf 8Mhz und 4Mhz laufen lassen?

Philipp

P.s. ich hab grad gefunden, dass man um den Servo zu STeuern auch 4Mhz verwenden kann.
http://http://avrhelp.mcselec.com/index.…nfig_servos.htm

Allerdings widerlegen das einpaar Leute im I-Net.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »lord-maricek« (22. Dezember 2009, 13:51)


10

Dienstag, 22. Dezember 2009, 14:54

Zitat

P.s. ich hab grad gefunden, dass man um den Servo zu Steuern auch 4Mhz verwenden kann.

Im Prinzip kann man auch 1MHz verwenden.
Allerdings hat der Controller bei niedrigeren Taktfrequenzen auch weniger Perfomance.
Da es bei Deiner Anwendung nicht gerade auf minimalsten Stromverbrauch ankommt, würd ich den Controller mit 8MHz laufen lassen.

Willst Du das System mal auf 3,3V laufen lassen, kannst Du einfach die ATMEGAxx L8 Variante verwenden, ohne am Rest der Schaltung was zu ändern.

Das ginge z.B. bei 12 oder 16MHz nicht mehr!

Zitat

Welchen max. bzw. min. Winkel kann ich angeben?

Du gibst ja keine Winkel an, sondern Servoimpulslängen.

Übliche Servoimpulslängen liegen zwischen 1000 und 2000µs, also 1 und 2 Millisekunden.
Viele Servos kommen auch noch mit impulsen vonn 800 und 2200µs zurecht.
Das wäre dann so, als ob Du im Sender einen Sevoausschlag von mehr als 100% einstellst.
Wie so ein Servo angesteuert wird, ist Dir aber schon klar ???

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »wkrug« (22. Dezember 2009, 14:58)


11

Dienstag, 22. Dezember 2009, 16:19

ich danke eigentlich, dass das über winkel läuft.
Aber anscheint nicht.
ich habe aber auch nichts konkretes gefunden. Kann mir das bite ma jemand erklären?

Ich habe grad ma versucht http://halvar.at/elektronik/servo_mit_bascom_avr/ dieses Tutorial umzusetzten
Wenn ich keine Spannung auf den Servo gebe kann ich ihn um 360 Grad grehen und dann kommt ein Anschlag.
Ich habe Plus und Masse mit den Kontakten des Empfängers Verbunden.
Wenn ich jetzt das Programm übertrage, springt der Servo in Schritten bis zum Anschlag und dann versucht er in diese Richtung weiter zu drehen. Er wechselt nicht die Drehrichtung oder irgentwas anderes.
Was kann ich machen?

Philipp

-Ralf-

RCLine Team

Wohnort: Remscheid

Beruf: Prediger

  • Nachricht senden

12

Mittwoch, 23. Dezember 2009, 18:56

Vielleicht hilft dir das ja ... da steuer ich einen Bahnübergang ....
über den Timer1 und Servos.

http://www.boote-wassersport-forum.de/sh…12227#post12227
Gruß Ralf (das Grantele)

Funcopter mit Alu-TS
Raptor E550

Laß dir von keinem Fachmann imponieren, der dir erzählt:
Lieber Freund, das mache ich schon zwanzig Jahre so. - Man
kann eine Sache auch zwanzig Jahre falsch machen.
Tucholsky

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Rawa« (23. Dezember 2009, 18:56)


13

Mittwoch, 23. Dezember 2009, 20:38

Zitat

Original von Rawa
Vielleicht hilft dir das ja ... da steuer ich einen Bahnübergang ....
über den Timer1 und Servos.

http://www.boote-wassersport-forum.de/sh…12227#post12227


Ich probiers ma aus.
Da ich aber einen Atmega8 verwende weiß ich grad nicht welche Werte ich verstellen muss, da ich ja nur 8Mhz benutzte. Gibts da irgentwie ne möglichkeit die zu errechnen?

Quellcode

1
2
3
4
$hwstack = 60               
$swstack = 60                 
$framesize = 100             
$baud = 9600


Die muss ich glaub ich verändern.

-Ralf-

RCLine Team

Wohnort: Remscheid

Beruf: Prediger

  • Nachricht senden

14

Mittwoch, 23. Dezember 2009, 21:45

Zitat

Original von lord-maricek

Zitat

Original von Rawa
Vielleicht hilft dir das ja ... da steuer ich einen Bahnübergang ....
über den Timer1 und Servos.

http://www.boote-wassersport-forum.de/sh…12227#post12227


Ich probiers ma aus.
Da ich aber einen Atmega8 verwende weiß ich grad nicht welche Werte ich verstellen muss, da ich ja nur 8Mhz benutzte. Gibts da irgentwie ne möglichkeit die zu errechnen?

Quellcode

1
2
3
4
$hwstack = 60               
$swstack = 60                 
$framesize = 100             
$baud = 9600


Die muss ich glaub ich verändern.


Nee, das geht auch mit dem Mega8 .... aber die PCInt (Pin-Change-Interrupts)
kennt der Mega8 nicht
Gruß Ralf (das Grantele)

Funcopter mit Alu-TS
Raptor E550

Laß dir von keinem Fachmann imponieren, der dir erzählt:
Lieber Freund, das mache ich schon zwanzig Jahre so. - Man
kann eine Sache auch zwanzig Jahre falsch machen.
Tucholsky

15

Samstag, 26. Dezember 2009, 13:11

Hi,

ich hab es jetzt geschafft. Ich hatte den Atmega immer nur mit ca. 3,7 V betrieben und das hat nicht greicht.
Jetzt habe ich ein neues Programm geschrieben, dass den Puls einließt und ihn in Servo bewegungen umsetzt:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$regfile = "m8def.dat"

$crystal = 8000000

Config Servos = 1 , Servo1 = Portb.0 , Reload = 10 , Timer = Timer1

Config Portb = Output
Config Portd = Output


Enable Interrupts

Dim Kanal(1) As Word
Dim Zaehler As Integer
Servo(1) = 100

Do

Pulsein Kanal(1) , Pind , 0 , 1

While Kanal(1) > 110
   If Kanal(1) >= 150 Then
      Return
   Else
      Zaehler = Zaehler + 1
      Servo(1) = Zaehler
      Waitms 150
   End If
Wend

While Kanal(1) < 90
   If Kanal(1) <= 50 Then
      Return
   Else
      Zaehler = Zaehler - 1
      Servo(1) = Zaehler
      Waitms 150
   End If
Wend


Loop



End

Ich habe das Signalkabel vom Eimpfänger an den Portd.0 gehängt und das SignalaKabel vom Servo an Portb.0 gehängt. Als ich den Servo nur über den Atmega laufen hab lassen hat alles funktioniert. Die Strom Versorgung hab ich an einem Empfänger Port abgegriffen. Mit dem neuen Programm und dem SignalKabel an den Portd.0 schaltet sich der Fahrtregler (über den der Strom kommt) immer ab. Dann hab ich ma ein Labornetzteil mit 5V probiert und das Amperemeter hat mir angezeigt, dass das Netzteil versucht mit mühe 1200 mA durch die Schaltung du pressen.
Das kann natürlich nicht passen.
Ich hoffe irh könnt mir helfen.

Philipp

16

Sonntag, 27. Dezember 2009, 09:43

Du musst rausfinden, welche Komponente den Stromverbrauch verursacht.

Die ATMEGA Schaltung ? , Das Servo ? oder ein zusammenspiel aus beidem ?

Es wäre möglich das das Servo vom Controller immer voll vor und zuück gesteuert wird.
Das würde aber ein hörbares Geräusch erzeugen.

Oder ein Bauteil Deiner Schaltung ist defekt, bzw. verpolt ( Elkos, Dioden ?? ).

Du bist immer sehr sparsam mit deinen Informationen und meine Glaskugel hab ich gerade verlegt ;-)

17

Sonntag, 27. Dezember 2009, 11:08

Zitat

Original von wkrug
Du musst rausfinden, welche Komponente den Stromverbrauch verursacht.

Die ATMEGA Schaltung ? , Das Servo ? oder ein zusammenspiel aus beidem ?

Es wäre möglich das das Servo vom Controller immer voll vor und zuück gesteuert wird.
Das würde aber ein hörbares Geräusch erzeugen.

Oder ein Bauteil Deiner Schaltung ist defekt, bzw. verpolt ( Elkos, Dioden ?? ).

Du bist immer sehr sparsam mit deinen Informationen und meine Glaskugel hab ich gerade verlegt ;-)


Sorry,
das einzige Bauteil, das ich in der Schaltung hab ist ein 10kOhm Widerstand aus Reset.
Ich hatte den Servo glaub ich einmal Verpolt.
Ich habe an den Portd.0 das SignalKabel vom Empfänger gelegt, und an Portb.0 hab ich das SignalKabel zum Servo gelegt. Ich habs grad nochma ausprobiert. Kurzschluss ist keiner mehr drinn, aber das Programm läuft noch nicht.
Der Servo bleibt einfach wo er grad war und auf Signale von dem Sender reagiert er auch nicht.
Könnt ihr vielleicht mal bitte mein Script durchlesen?
Da muss irgentwo noch ein Fehler sein.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
$regfile = "m8def.dat"

$crystal = 8000000


'Servo wird festgelegt
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10 , Timer = Timer1

'Ports werden difiniert
Config Portb = Output   
Config Portd = Output


Enable Interrupts

Dim Kanal(1) As Word    'Der Puls
Dim Zaehler As Integer   'Der Zaehler für die Schritte
Servo(1) = 100  'Startposition

Do

Pulsein Kanal(1) , Pind , 0 , 1    'Puls einlesen. An Portd.0

While Kanal(1) > 110                  'Währedn Knüppel Rechts, fahre langsam nach Rechts
   If Kanal(1) >= 150 Then           'Falls Position schon ganz Rechts, bleibe da
      Return
   Else
      Zaehler = Zaehler + 1           'Falls Position nicht ganz Rechts, fahre nach Rechts
      Servo(1) = Zaehler                
      Waitms 150
   End If
Wend

While Kanal(1) < 90                  'Während Knüppel links
   If Kanal(1) <= 50 Then           'Falls Servo schon ganz links, bleibe da
      Return                          
   Else
      Zaehler = Zaehler - 1           'Falls nicht ganz links, fahre nach links
      Servo(1) = Zaehler
      Waitms 150
   End If
Wend


Loop



End


Philipp

-Ralf-

RCLine Team

Wohnort: Remscheid

Beruf: Prediger

  • Nachricht senden

18

Sonntag, 27. Dezember 2009, 15:55

Ich hatte das gleiche Problem beim ATMega88 ... und hättest du mein
Tutorial gelesen, wüßtest du auch den Fehler :evil:

Config Servos geht nur mit Timer0 ....
da bin ich auch drauf reingefallen und hab
mich dumm und dämlich gesucht

Lies mal in meinem Tutorial, ich machs jetzt mit Timer1 und Pulseout
Gruß Ralf (das Grantele)

Funcopter mit Alu-TS
Raptor E550

Laß dir von keinem Fachmann imponieren, der dir erzählt:
Lieber Freund, das mache ich schon zwanzig Jahre so. - Man
kann eine Sache auch zwanzig Jahre falsch machen.
Tucholsky

19

Sonntag, 27. Dezember 2009, 20:04

Hi,

ich steig durch dein Tuto irgentwie nicht so richtig durch.
Ich hab nochmal ein neues Script geschrieben, aber der Servo zuckt nur ein bisschen hin und her.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
$regfile = "m8def.dat"



$crystal = 8000000



Config Servos = 1 , Servo1 = Portb.0 , Reload = 10



Config Portb = Output



Dim Kanal(1) As Word

Dim Zaehler As Integer

Zaehler = 100



Enable Interrupts



Servo(1) = 100



Do



Pulsein Kanal(1) , Pind , 0 , 1



If Kanal(1) > 120 Then

   If Zaehler >= 150 Then

      Return

   Elseif Zaehler < 150 Then

      Zaehler = Zaehler + 1

      Servo(1) = Zaehler

   End If

Elseif Kanal(1) < 100 Then

   If Zaehler <= 50 Then

      Return

   Elseif Zaehler > 50 Then

      Zaehler = Zaehler - 1

      Servo(1) = Zaehler

   End If

End If





Loop





End

Irgentwo muss da nach ein Fehler sein.
Und wo kann ich ein wait einsetzten, dass der Servo langsamer läuft?



Philipp

-Ralf-

RCLine Team

Wohnort: Remscheid

Beruf: Prediger

  • Nachricht senden

20

Montag, 28. Dezember 2009, 10:30

Zitat

Original von lord-maricek

Quellcode

1
2
3
4
5
6
7
   If Zaehler >= 150 Then
      Return
  
............

   If Zaehler <= 50 Then
      Return



Was machen die "Return" denn da? Ist doch keine ISR oder Sub.



Quellcode

1
2
3
4
5
6
If Kanal(1) > 120 Then
    If Zaehler < 150 Then     'Zaehler kann nie größer als 150 werden
        Incr Zaehler
        Servo(1) = Zaehler
     End If
.........


reicht doch.

Ich würde zudem einen Timer nehmen, und den Incr-Befehl in den
Timer-Overflow-Interrupt stecken. Dann kannste die Zeit selbst bestimmen,
wie schnell oder langsam gezählt wird. Der Servo-Befehl bleibt in der
Main-Schleife.
Gruß Ralf (das Grantele)

Funcopter mit Alu-TS
Raptor E550

Laß dir von keinem Fachmann imponieren, der dir erzählt:
Lieber Freund, das mache ich schon zwanzig Jahre so. - Man
kann eine Sache auch zwanzig Jahre falsch machen.
Tucholsky