Forum: Mikrocontroller und Digitale Elektronik Fragen zum Modellbauservo


von Tim (Gast)


Lesenswert?

http://www.mikrocontroller.net/articles/Modellbauservo_Ansteuerung#Signalerzeugung_f.C3.BCr_mehrere_Servos_mittels_Timer_.28C.29

1
 OCR2 = MILLISEC_BASE + ServoValue[ServoId];

wie ist denn das zu verstehen?

OCR2 = 86(abgerundet) + 0      oder bin ich da falsch mit der 0



gruß

Tim

von Cyblord -. (cyblord)


Lesenswert?

Wieso sollte ServoValue[ServoId] 0 sein? Das ist der Wert auf den der 
Servo drehen soll.

gruß cyblord

von Tim (Gast)


Lesenswert?

paar zeilen drüber ist doch der ServoId=0 eingestellt

von Cyblord -. (cyblord)


Lesenswert?

Tim schrieb:
> paar zeilen drüber ist doch der ServoId=0 eingestellt

Aber da steht ServoValue[ServoId]. Was ein Array ist und was dort ein 
Index ist, ist dir bekannt? Falls nicht, lerne bitte erstmal die 
C-Grundlagen bevor du an Servos gehst.

gruß cyblord

von Tim (Gast)


Lesenswert?

kannst du mir das bitte erklären? ich weiß schon was ein Array ist. ich 
stehe auf'm schlauch. je länger ich mir das angucke, desto mehr bin ich 
durcheinander.


gruß

Tim

von Tim (Gast)


Lesenswert?

Ist das so schwer zu erklären was "ServoValue[ServoId]" bedeutet?


gruß
Tim

von Cyblord -. (cyblord)


Lesenswert?

Tim schrieb:
> Ist das so schwer zu erklären was "ServoValue[ServoId]" bedeutet?
>
>
> gruß
> Tim

Ich habs dir bereits erklärt. Es enthält den Wert auf den das Servo (mit 
der ID=ServoId) drehen soll. Es ist ein Array, für jedes Servo gibts 
einen Wert. Auf diesen Wert wird mithilfe des Index (ServoId) 
zugegriffen.
Sorry aber wenn du wüsstest was ein Array ist dann würdest du beim 
ersten hingucken wissen was das bedeutet.

Ich glaube nicht dass du mit dem Prinzip eines Array vertraut bist. Wie 
würdest DU denn z.B. die Werte von 10 Servos in deinem Programm 
speichern? Überleg dir das mal.

gruß cyblord

von Tim (Gast)


Lesenswert?

Also verläuft der Index [ServoId] von 0 bis 8.


gruß
Tim

von Cyblord -. (cyblord)


Lesenswert?

Tim schrieb:
> Also verläuft der Index [ServoId] von 0 bis 8.
>
>
> gruß
> Tim

Ja, wenn NR_SERVOS = 8 definiert wurde dann schon. Das hochzählen und 
rücksetzen des Index übernimmt diese Zeile
1
  if( ++ServoId >= NR_SERVOS )
2
    ServoId = 0;

von Stefan F. (sfrings)


Lesenswert?

Bei 8 Servos reicht die ID von 0-7. Da die Zählung beim 0 beginnt, ist 
der höchste Wert immer eins kleiner als die Größe des Array.

von Cyblord -. (cyblord)


Lesenswert?

Stefan Frings schrieb:
> Bei 8 Servos reicht die ID von 0-7. Da die Zählung beim 0 beginnt, ist
> der höchste Wert immer eins kleiner als die Größe des Array.

Das weiß er doch, er kennt sich doch mit Arrays aus.....

von Tim (Gast)


Lesenswert?

Verstanden. danke. Also es fängt bei index 0 an und endet bei index 7 
und fängt dann wieder bei 0 an.

das hat mich bisschen verwirrt, weil da
1
 static unit8_t ServoId = 0
steht und das bedeutet doch, ServoId wird eine Null zugewiesen.


gruß
Tim

von Cyblord -. (cyblord)


Lesenswert?

Tim schrieb:
> Verstanden. danke. Also es fängt bei index 0 an und endet bei index 7
> und fängt dann wieder bei 0 an.
>
> das hat mich bisschen verwirrt, weil da
1
 static unit8_t ServoId = 0
2
>
> steht und das bedeutet doch, ServoId wird eine Null zugewiesen.
>
>
> gruß
> Tim

Ja, es wird mit 0 INITIALISIERT. Heißt aber ja nicht dass die Variable 
für immer auf diesem Wert bleiben muss. Daher auch VARIABLE. Sonst wärs 
ja ne Konstante. Grundlagen und so gelle...

gruß cyblord

von Tim (Gast)


Lesenswert?

man kann sage alle Indexwerte von Arrays sind auf NR_SERVO bezogen.



gruß
Tim

von Daniel F. (df311)


Lesenswert?

nein, kann man nicht - ich kann beliebige arrays verwenden, die absolut 
nichts mit NR_SERVO zu zun haben.

in diesem konkreten fall läuft der index im bereich von 0 bis 
NR_SERVO-1. das funktioniert aber auch nur weil das array "zufällig" mir 
einer größe von NR_SERVO initialisiert wurde...

von Cyblord -. (cyblord)


Lesenswert?

Tim schrieb:
> man kann sage alle Indexwerte von Arrays sind auf NR_SERVO bezogen.
>
>

Soll das eine Frage sein? Macht absolut keinen Sinn, weder als Frage 
noch als Aussage.

gruß cyblord

von Tim (Gast)


Lesenswert?

ich meinte nur jetzt für diesen Fall, sind die Arrays auf NR_SERVO (0-7) 
bezogen.

von Tim (Gast)


Lesenswert?

weshalb wird bei der while-schleife
1
 ServoValue [0] +=1;
 bzw. bei den anderen genauso, um eins addiert?


gruß

Tim

von Tim (Gast)


Lesenswert?

ach nee. eine 2 statt eine 1. bzw. 3

von seltener Gast (Gast)


Lesenswert?

Tim schrieb:
> Verstanden. danke. Also es fängt bei index 0 an und endet bei index 7
> und fängt dann wieder bei 0 an.

Neeein, der fängt dann "nicht wieder" bei 0 an. Wenn NR_SERVOS mit 8 
belegt ist, sind die erlaubte Werte für den Index 0..7 - und fertig.

von C-Versteher (Gast)


Lesenswert?

Tim schrieb:
> weshalb wird bei der while-schleife ServoValue [0] +=1;
>  bzw. bei den anderen genauso, um eins addiert?

Damit sich beim Servo was tut, wenn das Programm läuft?

von Tim (Gast)


Lesenswert?

C-Versteher schrieb:
> Tim schrieb:
>> weshalb wird bei der while-schleife ServoValue [0] +=1;
>>  bzw. bei den anderen genauso, um eins addiert?
>
> Damit sich beim Servo was tut, wenn das Programm läuft?

wie was tut?
da wird doch nur addiert

von Mike J. (emjey)


Lesenswert?

@ cyblord
Erkläre nichts was andere schon erklärt und mit Bildern ausgeschmückt 
haben, es ist doch schade um die Zeit die man opfert.

@  Tim (Gast)
Setz dich mal hin und lies ein Buch.

http://openbook.galileocomputing.de/c_von_a_bis_z/011_c_arrays_002.htm

von Tim (Gast)


Lesenswert?

Mike J. schrieb:
> @ cyblord
> Erkläre nichts was andere schon erklärt und mit Bildern ausgeschmückt
> haben, es ist doch schade um die Zeit die man opfert.
>
> @  Tim (Gast)
> Setz dich mal hin und lies ein Buch.
>
> http://openbook.galileocomputing.de/c_von_a_bis_z/...

noch so einen tollen Ratschlag?

von C-Versteher (Gast)


Lesenswert?

Tim schrieb:
> wie was tut?
> da wird doch nur addiert
Stimmt, aus Programmsicht schon. Hast du den Sinn des Programms schon 
verstanden? Es geht darum, Steuerimpulse für mehrere Servos zu erzeugen.

von Tim (Gast)


Lesenswert?

C-Versteher schrieb:
> Tim schrieb:
>> wie was tut?
>> da wird doch nur addiert
> Stimmt, aus Programmsicht schon. Hast du den Sinn des Programms schon
> verstanden? Es geht darum, Steuerimpulse für mehrere Servos zu erzeugen.

das habe ich verstanden. mich irritiert es bisschen, dass manchmal die 
1, 2 oder 3 durcheinander kommt.

von C-Versteher (Gast)


Lesenswert?

Tim schrieb:
> das habe ich verstanden. mich irritiert es bisschen, dass manchmal die
> 1, 2 oder 3 durcheinander kommt.

Da kommt nichts durcheinander. Die Servos werden verschieden 
gesteuert. Sonst wäre es ja langweilig und man könnte sie einfacher 
parallel schalten.

von spontan (Gast)


Lesenswert?

Frage an Tim:
Was willst Du eigentlich wissen?

Wie man ein Programm schreibt?
Wie dieses Programm aufgebaut ist?
Wie einzelne Befehle in C aussehen und was sie bewirken?


Der Tip ein Buch zu lesen war nicht so weit entfernt, wenn man Deine 
Beiträge liest. Sie trotzen von grundlegendem Unverständnis der Materie. 
Da ist lernen der Grundlagen der einzige Lösungsansatz.

von Tim (Gast)


Lesenswert?

spontan schrieb:
> Frage an Tim:
> Was willst Du eigentlich wissen?
>
> Wie man ein Programm schreibt?
> Wie dieses Programm aufgebaut ist?
> Wie einzelne Befehle in C aussehen und was sie bewirken?

Die ersten 2 Fragen interessieren mich . Wie geht man vor, wenn ich ein 
Programm schreiben möchte? Entwirft ihr eine Zeichnung oder tippt ihr 
einfach drauf los.

> Der Tip ein Buch zu lesen war nicht so weit entfernt, wenn man Deine
> Beiträge liest. Sie trotzen von grundlegendem Unverständnis der Materie.
> Da ist lernen der Grundlagen der einzige Lösungsansatz.

Ich bin fleißig dabei zu lernen, aber manchmal verstehe ich den 
Zusammenhang nicht.



Gruß

Tim

von Mike J. (emjey)


Lesenswert?

ServoValue ist ein Array

Beispiel:

uint8_t myArray[3]; // deklariere ein Array mit 3 Feldern

myArray[0] = 128; // den ersten Feld eine Variable / Wert geben

myArray[1]=64; // das zweite Feld besitzt jetzt einen Wert

myArray[2]=32; // jetzt auch das dritte Feld

myArray[3]=255; // Fehler: es existiert kein drittes Feld im Array


Bild:

myArray zeigt auf das erste Feld ... zeiger weiter schieben um auf das 
nächst höhere Feld zu kommen
  ||
  \/
| 128 | 64  | 32  |
|_____|_____|_____|

1.Feld,2.Feld,3.Feld

von michael_h45 (Gast)


Lesenswert?

Mike J. schrieb:
> Beispiel:
...
hättest du mal lieber deinen eigenen ratschlag befolgt, anstatt jetzt 
auch noch mit zeigern anzufangen...

Mike J. schrieb:
> @ cyblord
> Erkläre nichts was andere schon erklärt und mit Bildern ausgeschmückt
> haben, es ist doch schade um die Zeit die man opfert.
>
> @  Tim (Gast)
> Setz dich mal hin und lies ein Buch.
>
> http://openbook.galileocomputing.de/c_von_a_bis_z/...

von Stefan F. (sfrings)


Lesenswert?

Lerne erstmal die Grundlagen von C. Dann lerne, einen Mikrocontroller in 
C zu programmieren. Du könntest diverse Dinge mit einem Taster und einer 
LED anstellen. Fang mit etwas einfachem an.

Und wenn Du Dich da dann sicher fühlst, erst dann ist der Zeitpunkt 
gekommen, mit komplexerer Hardware zu experimentieren und Programme mit 
mehr als 20 Zeilen zu bearbeiten.

Viele Anfänger wollen mit ganz coolen Sachen anfangen, die sie aber 
nichtmal ansatzweise verstehe. Man lernt in kleinen Schritten, und man 
beginnt da, wo man sich auskennt.

Bäcker fangen mit Brot und Brötchen (Hefeteig) an, nicht mit 
Schwarzwälder Kirschtorten.

von spess53 (Gast)


Lesenswert?

Hi

>Bäcker fangen mit Brot und Brötchen (Hefeteig) an, nicht mit
>Schwarzwälder Kirschtorten.

Das ist ja auch etwas für Konditoren nicht für Bäcker.

MfG Spess

von Mike J. (emjey)


Lesenswert?

spess53 schrieb:
>
> Das ist ja auch etwas für Konditoren nicht für Bäcker.


Damals in der DDR ... als das Brot und die Brötchen noch geschmeckt 
haben, da hat der Bächer sowohl Brot als auch Kuchen gebacken.

Die haben für das Brot damals eine Art Holzgefeuerten Wasserdampf-Ofen 
verwendet, für den Kuchen einen anderen speziellen Herd. (besser gedämmt 
und größer als das was man im Markt bekommt)

Das war noch ein alter Familienbetrieb, den gibt es zwar immer noch, 
aber jetzt verkaufen die den gleichen Sche*ß wie alle ... das Gelumpe 
schmeckt nicht und ist teuer wie sau.
(sorry, aber ich verstehe nicht weshalb dieses Handwerk so vor die Hunde 
gehen konnte)

Ein frische Brötchen hat man damals für 5 Pfannige bekommen, das sind 
2.5 Westpfennige und 1.25 cent.

Ein "gesundes" (eigentlich viel dunkler Farbstoff, wenig Roggen) 
Brötchen kostet 50 cent, ein ganz billiges Brötchen kostet heutzutage 25 
cent.

Ich glaube es gibt nich billigeres eingeschweißtes Zeug, aber das kann 
man nicht mehr genießen ... das ist nur noch ein Energielieferant.

von Werner (Gast)


Lesenswert?

Mike J. schrieb:
> Ein "gesundes" (eigentlich viel dunkler Farbstoff, wenig Roggen)
> Brötchen kostet 50 cent, ein ganz billiges Brötchen kostet heutzutage 25
> cent.

Das täuscht. Kosten tut es immer noch ein paar Cent.
Für 25..50 ct wird es verkauft und offensichtlich gibt es genug Leute, 
die das dafür bezahlen.

von Hannes L. (hannes)


Lesenswert?

Mike J. schrieb:
> Ein frische Brötchen hat man damals für 5 Pfannige bekommen, das sind
> 2.5 Westpfennige und 1.25 cent.

Das ist das Problem, denn bei Servos ist das umgekehrt. Früher (TM) 
waren sie fast unbezahlbar, heute sind sie fast billiger als ein Brot.

Für den letzten Zehnerpack Mini-Servos aus Hongkong habe ich 16 Euro 
bezahlt.

Servos sind so billig erhältlich, dass sich viele Möchtegern-Bastler 
draufstürzen, obwohl ihnen das nötige Wissen fehlt und sie auch nicht 
bereit sind, sich dieses (selbst) anzueignen. Leute, kauft lieber Brot 
als Servos, der Umgang damit ist einfacher...

...

Wer Ironie findet, darf sie behalten...

von Uwe R. (aisnmann)


Lesenswert?

Mike J. schrieb:

> Ein frische Brötchen hat man damals für 5 Pfannige bekommen, das sind
> 2.5 Westpfennige und 1.25 cent.

Ohrr neee, ich kanns nichmehr hoeren.
Die Verkaeuferin hat damals auch nur 700 Mark verdient. Und jetzt komm 
nicht mit ner neuen Verhaeltnissrechnung, oder willst du die Broetchen 
wieder Subventionieren?

bye uwe

von Hannes L. (hannes)


Lesenswert?

Uwe R. schrieb:
> Die Verkaeuferin hat damals auch nur 700 Mark verdient.

Die hat heute auch nicht viel mehr, verkauft aber auch keine Servos...

...

von Duck&Wech (Gast)


Lesenswert?

Uwe R. schrieb:
> Die Verkaeuferin hat damals auch nur 700 Mark verdient.

Wenn man die Sachkompetenz von manchem "Fach"-Verkäufer oder 
Servicemitarbeiter an der Hotline kennt, scheint das auch heute noch 
eine angemessene Bezahlung für die Leistung zu sein.

von Mike J. (emjey)


Lesenswert?

Uwe R. schrieb:
>
> Ohrr neee, ich kanns nichmehr hoeren.
Sorry, war etwas weit Offtopic.

> Die Verkaeuferin hat damals auch nur 700 Mark verdient.
Und ein Ingenieur hat nur 650 Mark verdient ...

Die Miete für eine 2.5 Zimmer Wohnung lag bei 25 Mark (= 12.50 Westmark 
= 6.25 Euro)
Wasser und Strom gabe es fast umsonst.

Es ist nur doof dass ich selbst Brot/Brötchen backen muss um mal an ein 
frisches und noch duftendes zu gelangen.

Es gibt schon seit einiger Zeit Duftstoffe die wie frische Brötchen 
richten, das Zeug wird 100% auch schon seit einiger Zeit an diese 
Aufbackläden verteilt damit sie mit dem Geruch Kunden anlocken können.

von Cyblord -. (cyblord)


Lesenswert?

Ach Gottchen, Ostalgie, wie widerlich. Muss man sich jetzt schon an den 
vermeintlich besseren Brötchen in der Zone hochziehen? Wie armselig. Da 
hätte man die ganzen Flüchtlinge doch einfach mal mit einem Hinweis auf 
die geilen Brötchen wieder heimgeschickt. Manche ewig gestrigen 
kapierens es wohl nie.

gruß cyblord

von Cyblord -. (cyblord)


Lesenswert?

Und ja, wir leben in einem hochentwickelten Industrieland. Das bedeutet 
dass auch Nahrumgsmittel zu einem großen Teil industriell hergestellt 
werden. Das ist der Preis. Der Preis dafür dass niemand verhungert, dass 
die Nahrungsmittel trotzdem von hoher Qualität und weitgehend unbelastet 
sind. Dass die Preise so niedrig sind dass auch ärmere Menschen neben 
Nahrungsmitteln noch andere Dinge kaufen können. Ihr wollt 
Naturbelassenheit? Geht in Sahel-Zone. Oder in anderen Drittweltländer. 
Dort findet ihr sowas. Naturbelassen verhungern. Oder ganz natürlich an 
Krankheiten krepieren über man hier nur müde lächelt. Alles ganz 
natürlich.  Entscheidet euch.

Nirgendwo lebt man anscheinend derart ungesund, wie hier (westliche 
Welt): Industrielle (jaja Schimpfwort gelle, nur ich finde das nicht.) 
Nahrungsmittel, Chemie, Umweltbelastung, zu wenig Bewegung, zu fettes 
Essen, zu viel Essen, das falsche Essen, Feinstaub, Lärm und und und. 
Und komischerweise werden die Leute nirgendwo älter. Und nirgendwo so 
gesund älter. Lebenserwartung jenseits der 70, bald>80 im Durchschnitt, 
werdet ihr in euren Bilderbuch Naturbelassenen Paradiesen nicht finden.

gruß cyblord

von google (Gast)


Lesenswert?

cyblord, Du verkennst den angeborenen(?) Egoismus dahinter: Der Mensch 
will immer mehr als er hat. Was schlechter ist als das, was er hat, 
interessiert ihn nicht.

von Tim (Gast)


Lesenswert?

hätte man nicht statt:
1
if( ServoValue[0] > 2*CENTER )
2
      ServoValue[0] -= 2*CENTER;

auch
1
if( ServoValue[0] > MILLISEC_BASE )
2
      ServoValue[0] -= MILLISEC_BASE;

schreiben können?

gruß

von Karl H. (kbuchegg)


Lesenswert?

Hätte man.

Will man aber nicht.
Denn an dieser Stelle interessieren mich Millisekunden nicht mehr.
Die Servoposition wird festgelegt durch

  0            ganz links
  CENTER       in der Mitte
  2 * CENTER   ganz rechts

egal, wie sich das in Millisekunden ausdrückt.

von Tim (Gast)


Lesenswert?

hier steht doch
1
  //
2
  // Alle Servos in Mittelstellung
3
  //
4
  for( i = 0; i < NR_SERVOS; ++i )
5
    ServoValue[i] = CENTER;

aber wie kann das sein?

MILLISEC_BASE + CENTER wären doch eigentlich die Mittelstellung.

von Karl H. (kbuchegg)


Lesenswert?

Tim schrieb:
> hier steht doch
>
1
>   //
2
>   // Alle Servos in Mittelstellung
3
>   //
4
>   for( i = 0; i < NR_SERVOS; ++i )
5
>     ServoValue[i] = CENTER;
6
>
>
> aber wie kann das sein?
>
> MILLISEC_BASE + CENTER wären doch eigentlich die Mittelstellung.

MILLISEC_BASE wird in der ISR addiert. Soviel Zeit muss dort schon sein.

Für denjenigen, der die Ansteuerung benutzt sind ausschliesslich Zahlen 
von 0 bis 2*CENTER interessant. Mit Zeiten und Millisekunden will ich 
mich in main oder sonstigen Routinen nicht mehr rumschlagen müssen.

von Tim (Gast)


Lesenswert?

Ich habe es mir hunderte male noch mal angeguckt, aber verstehen tut ich 
es wirklich noch nicht, warum CENTER die Mittelstellung ist.

Nach meiner Berechnung wäre CENTER 0,5ms. Aber ein Servo braucht doch 
ein Puls zwischen 1ms und 2ms, damit er sich bewegt.

Kann sein, dass der OCR0-Register, der Höchstwert ist, also 86 und sich 
alles zwischen 0 und 86 abspielt? dann wäre es für mich logisch warum 
CENTER CENTER ist.


gruß

Tim

von Hannes L. (hannes)


Lesenswert?

Tim schrieb:
> Nach meiner Berechnung wäre CENTER 0,5ms. Aber ein Servo braucht doch
> ein Puls zwischen 1ms und 2ms, damit er sich bewegt.

Richtig! Aber da addiert die ISR noch die Basisimpulslänge von 1,0 ms 
dazu.

Dies hat den Vorteil, dass man sich nicht mehr um den festen Anteil der 
Impulsdauer kümmern muss, sondern nur noch um den variablen Anteil:

Karl Heinz Buchegger schrieb:
> Hätte man.
>
> Will man aber nicht.
> Denn an dieser Stelle interessieren mich Millisekunden nicht mehr.
> Die Servoposition wird festgelegt durch
>
>   0            ganz links
>   CENTER       in der Mitte
>   2 * CENTER   ganz rechts
>
> egal, wie sich das in Millisekunden ausdrückt.

...

von UA_Schmitt (Gast)


Lesenswert?

Tim, der beste aller Tipps die du hier bekommen hast war der, erst mal 
ein C Buch durchzuarbeiten.
Und damit meine ich wirklich "arbeiten" also auch die Aufgaben und 
Beispeiele selbst! programmieren.
Man lernt C programmieren nicht mal nebenbei in 5 Tagen a 3 Stunden.

von Tim (Gast)


Lesenswert?

Nur noch eine Sache.
1
OCR0 = MILLISEC_BASE + ServoValue[0];

d.h doch 86 + 43.

denn
1
for(i = 0; i < NR_SERVO; ++i)
2
ServoValue[i] = CENTER;


gruß
Tim


p.s. Bin ja dabei C zu lernen, wie schon paar mal gesagt. Fragen kann 
man doch trotzdem :)

von Cyblord -. (cyblord)


Lesenswert?

Du checkst es einfach nicht....

von Tim (Gast)


Lesenswert?

cyblord ---- schrieb:
> Du checkst es einfach nicht....

nee

von Karl H. (kbuchegg)


Lesenswert?

Tim schrieb:
> Nur noch eine Sache.
>
>
1
> OCR0 = MILLISEC_BASE + ServoValue[0];
2
>
>
> d.h doch 86 + 43.

Ja, und?

Jetzt gehst du her, rechnest das aus und rechnest das mit der bekannten 
taktfrequenz und dem Vorteiler in eine Zeit um. Und du wirst sehen, dass 
mit diesem Ergebnis (86+43) 1.5ms rauskommen. Und wenn ServoValue[0] den 
Wert 0 hat, dann steht da 86 + 0 und wenn man das in eine Zeit umrechnet 
dann kommen da ca. 1ms raus. Und wenn ServoValue[0] den Wert 86 hat, 
dann ergibt 86+86 welchen Wert in Zeit ausgedrückt? Ungefähr 2ms

Also genügt es einen Wert von 0 bis (in diesem Fall 86) nach ServoValue 
zuzuweisen und das Servo fährt alle Positionen von links nach rechts an. 
Und der in der Mitte, der heißt eben CENTER.

Was'n da jetzt so schlimm daran?

0 Äpfel kosten 0 Euro
43 Äpfel kosten 0.5 Euro
86 Äpfel kosten 1 Euro
Und für die Kiste will der Bauer auf jeden Fall auch 1 Euro haben.

Und anstelle von 0, 43 und 86, nennen wir das ganze einfach 0, CENTER 
und 2*CENTER.

Das ist einfach nur eine konstante Zahl, die auf jeden Fall zum 
Gesamtpreis mit draufgeschlagen wird. Und hier ist es eben eine 
konstante Zeit (eben die 1ms oder eben der Zahlenwert 86), der zur 
Pulszeit auf jeden Fall draufgeschlagen wird, weil ich ihn sowieso immer 
brauche.

Dann kann ich mir zb den Wert vom ADC holen und so umrechnen
1
  ServoValue[0] = adc_read(0) * 2 * CENTER / 1024;
und mit einem Poti ein Servo von ganz links nach ganz rechts verfahren. 
Und zwar ohne dass ich auch nur 1 Gedanken an irgendwelche Millisekunden 
verschwenden muss. Ich muss nur Wissen, dass 2*CENTER die Position ganz 
rechts ist. Wenn mich der 2-er stört, dann definiere ich eben

#define RIGHT   2*CENTER

und schreibe

  ServoValue[0] = adc_read(0) * RIGHT / 1024;

und wenn ich eben mit meinen Sevowerten anders hochkomme und die anders 
berechne, dann berechne ich die eben anders. Alles was ich wissen muss:
0 ist ganz links
CENTER ist in der Mitte
2*CENTER ist ganz rechts

und es ist mir völlig egal
a) welches da die genauen Zahlen sind
b) ob ich da noch irgendwelche Werte dazu addieren muss.

von Tim (Gast)


Lesenswert?

vielen dank für die Antworten und an den Leuten, die gedult mit mir 
hatten. Für die anderen, die blöde Kommentare abgeben haben... Dies war 
auch, denk ich mal, die letzte Frage.


gruß Tim

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.